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 的数据收发进行验证。

相关推荐
Neolnfra2 小时前
渗透测试标准化流程
开发语言·安全·web安全·http·网络安全·https·系统安全
fiveym3 小时前
Apache HTTP 服务搭建全攻略
网络协议·http·apache
2501_915106325 小时前
HTTP 协议详解,HTTP 协议在真实运行环境中的表现差异
网络·网络协议·http·ios·小程序·uni-app·iphone
GanGuaGua8 小时前
计算机网络:HTTP报文
网络·网络协议·计算机网络·http
YY&DS9 小时前
《Qt 手写 HTTP 登录服务实战》
开发语言·qt·http
默凉9 小时前
c++使用http发送图像
开发语言·c++·http
Sleepy MargulisItG21 小时前
【Linux网络编程】应用层协议:HTTP协议
linux·服务器·网络·http
小豪GO!1 天前
HTTPS原理
网络协议·http·https
Neolnfra1 天前
RCE(远程命令执行)漏洞全解析:从原理到实战
安全·web安全·http·网络安全·https·系统安全·可信计算技术
周杰伦_Jay1 天前
【GRPC 和 HTTP】设计目标和底层实现
网络·网络协议·http