iOS 开发之 HTTP、TCP/IP、Socket

概述

  1. 网络层次:网络由下往上依次为, 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

  2. IP 协议对应网络层、TCP 协议对应传输层、而 HTTP 协议对应应用层。

  3. Socket 则是对 TCP/IP 协议的封装,针对程序员层面上的应用。

  4. TCP/IP 协议是传输层协议,主要解决数据如何在网络中传输。

  5. HTTP 是应用层协议,主要解决如何包装数据。

  1. 在进行网络传输数据时,如果只使用传输层(TCP/IP)的协议,而没用应用层,便无法识别数据内容。

  2. Socket是针对传输层的封装,严格上并不是一种协议,而是一个 API。其实为了方便使用 TCP/IP 协议而做出的抽象封装,从而形成了诸如 create、listen、connect、accept、send、read、write 这样的外用接口。

  3. 具体的说。TCP/IP 是一个协议栈。就像操作系统的运行机制一样,必须要具体实现,同时还要对外提供系统级的操作接口。但为了供开发人员做网络开发,还需要提供所开发的使用接口,为此对此封装,出现了 Socket 的编程接口。

HTTP

HTTP 是一个应用层面向对象的协议,即可称"超文本传输协议",是基于请求与响应,且无响应的协议。常基于 TCP 的连接方式。大部分 Web 开发都是构建在 http 协议上的 web 应用。

HTTP 有以下特点:

  • 支持客户端和服务器模式;
  • 简单快递:客户端向服务器请求数据时,只需要提供请求方法及请求路径,简单快速。常用的请求方式有PUT,DELETE,POST,GET,HEAD,因为 GET 和 POST 可以实现所有操作,所以使用更为广泛;
  • 使用灵活:允许传输任何类型的数据对象,数据类型由 Content-Type 加以标记,使用灵活;
  • 无连接:限制每次连接只处理一个请求,当服务器处理客户端请求后,并返回结果后,就断开连接,可实现无连接的功能;
  • 无状态:http 协议对处理过的请求无记忆功能,如果请求先前的数据,则需要重传,有可能导致每次传输的数据量较大,但在服务器不需要先前的请求时,反映速度很快。

常用请求方式描述:

  1. GET 请求:从服务器得到数据,效率高,数据可以被自动缓存起来。但有一定限制,对长度有所限制,一般在2~8k 之间。

  2. POST 请求:向服务器发送数据,也可以获得服务器处理之后的数据结果,效率不如 GET 请求,POST 请求的数据不能被缓存,每次刷新后都需要重新提交表单。常用于用户隐私数据的传递。

  3. HEAD 请求:通常用在下载文件之前,获取远程服务器的文件信息,相比较于 GET 请求,则不会下载文件数据,只获得响应头信息。一般使用HEAD请求的目的是提前告诉用户下载文件的信息,由用户确认是否需要下载此文件,最好发送同步请求。

TCP 连接过程

TCP 连接工程的三次握手:

第一次握手:客户端发送 syn 包(syn=j)到服务器,进入 syn_send 状态,等待服务器确认;

第二次握手:服务器收到 syn 包(syn=j+1),需确认客户的 syn,同时自己的一个 ack 包(ack=k),即 SYN+ACK 包,此时服务器进入 syn_recv 状态;

第三次握手:客户端收到 syn+ack 包,向服务器发送确认包 ack(ack=k+1),此时发送完毕,客户端和服务器都进入 established 状态,完成三次握手。

  1. 在传送包的过程中,包里并不包含数据,三次握手完毕后,才会开始正式传送数据。

  2. 理想状态下,双方中只要一方不主动断开 TCP 连接的请求,那么 TCP 连接状态一直保持。

  3. 如想断开 TCP 连接,双方都可以主动发起断开请求,断开的过程则需要经历四次握手的经历,直到确认断开 TCP 连接。

Socket 建立网络连接的步骤

建立 Socket 连接,只要需要一对套接字,其中一个运行于客户端,称为 ClientSocket,另一个运行于服务端,称为 ServerSocket。

Socket 的网络连接其实就是这一对对套接字的连接。

套接字的连接工程:

1、服务器监听:服务器处于等待连接的状态,其套接字并不定位具体的客户端的套接字,这个等待状态下,去实时监测网络状态,等待客户端的连接请求。

2、客户端请求:客户端的套接字提出连接请求(必须提供连接服务器的套接字的描述,指出服务端套接字的地址和端口号),要连接服务器端的套接字。

3、连接确认:当服务器端套接字监听到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器套接字的描述发送给客户端,一旦客户端确认了此描述,双方就正式建立连接关系。而服务端套接字继续处于监听状态,继续接受其他客户端套接字的连接请求。

TCP 和 UDP 的区别

TCP 中文名为传输控制协议,UDP 中文名为用户数据报协议。两者的区别为:

  1. TCP 是面向连接的服务。提供一对一的可靠通信,对传输过程中流失的数据包会恢复。虽由于网络的原因可能出现多少次握手不可靠的连接,但 TCP 的三次握手则在最大程度上保证了可靠的连接。类似打电话的过程。

  2. UDP 是面向无连接的服务。提供一对一或对多的无连接不可靠服务。UDP 传输数据前并不和对方建立连接,十分高傲,对接收到的数据也不发送确认信号,导致发送端并不知道数据是否接收成功,并不用重发,所以说 UDP 是一种无连接,不可靠的数据传输协议。虽然相比 TCP 不是很可靠,但正因为这样,在传送小数据的时候速率更高,实时性更好,类似发短信。

MSN 采用的是 TCP 传输协议,而 QQ 传输则采用 DUP 传输协议,体会到 MSN 在传输文件上明显比 QQ 慢。但也不是说 QQ 的这种 DUP 传输数据没有安全保障,程序员可以对 UDP 的数据收发进行验证。

相关推荐
野生技术架构师16 小时前
原来可以搭建一个HTTP服务
网络·网络协议·http
TOPGUS20 小时前
谷歌Chrome浏览器即将对HTTP网站设卡:突出展示“始终使用安全连接”功能
前端·网络·chrome·http·搜索引擎·seo·数字营销
Wadli20 小时前
项目5 |HTTP服务框架
网络·网络协议·http
CCPC不拿奖不改名20 小时前
网络与API:HTTP基础+面试习题
网络·python·网络协议·学习·http·面试·职场和发展
心之伊始1 天前
HTTP 与 HTTPS 协议深度剖析:从基础原理到现代演进与实践
网络协议·http·https
哟哟耶耶1 天前
随笔小计-前端经常接触的http响应头(跨域CORS,性能-缓存-安全,token)
前端·网络协议·http
Jinuss1 天前
HTML页面http-equiv=“refresh“自动刷新原理详解
http·html
Yan-英杰1 天前
BoostKit OmniAdaptor 源码深度解析
网络·人工智能·网络协议·tcp/ip·http
青果网络_xz2 天前
海外HTTP代理适合哪些业务?与Socks/隧道的区别
网络·网络协议·http
VekiSon2 天前
综合项目实战——电子商城信息查询系统
linux·c语言·网络·http·html·tcp·sqlite3