大锤python日记(数据在socket中的传输过程(TCP/IP协议的理解))

71 阅读3分钟

数据在网络中的传输过程

在Socket通信中,数据在每一层间的传递和解析大致经历以下步骤:

  1. 应用层:应用程序将数据打包成报文,报文中包含了应用层协议头和数据部分。例如,在HTTP协议中,请求报文中包含了请求行、请求头和请求体等信息。

  2. 传输层:传输层主要负责数据的分段和重组,同时还提供了可靠的数据传输机制。在TCP协议中,数据被分成一个个数据段,并加上TCP协议头和数据部分。

  3. 网络层:网络层主要负责数据的路由选择和转发,保证数据能够从源地址到达目的地址。在IP协议中,数据被封装成IP数据包,并加上IP协议头和数据部分。

  4. 数据链路层:数据链路层主要负责数据的传输和接收,同时实现了数据的流控和差错校验等功能。在以太网中,数据被封装成帧,并加上以太网协议头和数据部分。

  5. 物理层:物理层主要负责数据的传输和接收,实现了数据与电子信号之间的转换。在以太网中,物理层主要指的是网卡和传输介质等硬件设备。

在接收端,数据的解析过程与发送端相反,即从物理层开始逐层解析,将数据还原成应用程序可识别的格式。

以一个简单的 HTTP 请求为例

  1. 应用层:应用程序通过调用系统 API 将 HTTP 请求打包成二进制数据,并加上 HTTP 协议头和请求体等信息。

举例说明,假设我们要访问一个网站 ,则该 HTTP 请求可能长这样:

GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: keep-alive
  1. 传输层:操作系统通过调用 TCP 协议栈将 HTTP 请求分成一个或多个 TCP 数据段,并加上 TCP 协议头、序号等控制信息。TCP 协议会保证数据可靠传输。

  2. 网络层:TCP 数据段被封装到 IP 数据报中,并加上 IP 协议头、源地址、目的地址等信息。IP 协议会负责数据的路由选择和转发。

  3. 数据链路层:IP 数据报被封装成帧,加上 MAC 地址等信息,并通过网络硬件设备(如网卡)传输到目标设备。数据链路层还会实现数据的流控和差错校验等功能。

  4. 物理层:数据被转换为电子信号,通过物理介质(如网线或无线电波)传输到目标设备。

当目标设备接收到数据时,将按照以上步骤进行解析。例如,操作系统会先从网卡获取数据帧,再依次解析出 IP 数据报、TCP 数据段、HTTP 请求并交给应用程序处理。应用程序则根据 HTTP 协议头中的信息对请求进行响应,然后通过相同的方式将响应发送回客户端。