聊聊 TCP/IP 协议处理流程

网络 无线技术
本文总结了数据包的生命周期,从用户发出命令或发送消息到接收主机上的相应应用程序接收到数据包。

​当用户使用 TCP/IP 应用层协议的命令时,会启动一系列事件。用户的命令或消息通过本地机器上的 TCP/IP 协议栈,然后通过网络介质到达接收者的协议。发送主机上每一层的协议将信息添加到原始数据中。

当用户的命令通过协议栈时,发送主机每一层的协议也与接收主机上的对等方交互。

数据封装和 TCP/IP 协议栈

数据包是通过网络传输的信息的基本单元,至少由包含发送和接收主机地址的标头和包含要传输的数据的主体组成。当数据包通过 TCP/IP 协议栈时,每一层的协议在基本报头中添加或删除字段。当发送主机上的协议将数据添加到数据包头时,该过程称为数据封装。此外,每一层对修改后的数据包都有不同的术语,如下图所示。

图片

本文总结了数据包的生命周期,从用户发出命令或发送消息到接收主机上的相应应用程序接收到数据包。

应用层——用户发起通信

当一个主机上的用户发送消息或发出必须访问远程主机的命令时,数据包的历史就开始了。与命令或消息相关的应用协议对数据包进行格式化,以便它可以由适当的传输层协议 TCP 或 UDP 处理。

假设用户发出rlogin命令登录远程主机,该rlogin命令使用 TCP 传输层协议。TCP 期望以包含命令中信息的字节流的形式接收数据。因此,rlogin将此数据作为 TCP 流发送。

然而,并非所有应用层协议都使用 TCP。假设用户想在远程主机上挂载一个文件系统,从而启动 NIS+ 应用层协议。NIS+ 使用 UDP 传输层协议。因此,包含命令的数据包必须以 UDP 期望的方式格式化。这种类型的数据包称为消息。

传输层——数据封装开始

当数据到达传输层时,该层的协议启动数据封装过程。最终结果取决于 TCP 或 UDP 是否处理了信息。

(1) TCP 分段

TCP 通常被称为“面向连接”的协议,因为它确保将数据成功传送到接收主机。上图显示了 TCP 协议如何接收来自rlogin命令的流。TCP 将从应用层接收到的数据分成多个段,并在每个段上附加一个标头。

段标头包含发送方和接收方端口、段排序信息和称为校验和的数据字段。两台主机上的 TCP 协议使用校验和数据来确定数据是否已正确传输。

(2) 建立 TCP 连接

TCP 使用段来确定接收主机是否准备好接收数据。当发送 TCP 想要建立连接时,它会向运行在接收主机上的对等 TCP 协议发送一个称为 SYN 的段。接收 TCP 返回一个称为 ACK 的段,以确认该段的成功接收。发送 TCP 发送另一个 ACK 段,然后继续发送数据。这种控制信息的交换被称为三次握手。

(3) UDP 数据包

UDP 是一种“无连接”协议。与 TCP 不同,它不检查以确保数据到达接收主机。相反,UDP 接收从应用层接收到的消息并将其格式化为UDP 数据包。UDP 为每个数据包附加一个标头,其中包含发送和接收主机端口、包含数据包长度的字段和校验和。

发送 UDP 进程尝试将数据包发送到接收主机上的对等 UDP 进程。应用层确定接收 UDP 进程是否确认接收到数据包。UDP 不需要接收通知。UDP 不使用三次握手。

互联网层

TCP 和 UDP 都将它们的段和数据包向下传递到 Internet 层,由 IP 协议处理它们。IP 通过将它们格式化为称为 IP 数据报的单元来为交付做好准备。然后 IP 确定数据报的 IP 地址,以便将它们有效地传递给接收主机。

(1) IP数据报

除了 TCP 或 UDP 添加的信息之外,IP 还会将 IP 标头附加到段或数据包的标头。IP 头中的信息包括发送和接收主机的 IP 地址、数据报长度和数据报序列顺序。如果数据报超过网络数据包允许的字节大小并且必须分段,则提供此信息。

数据链路层——成帧

数据链路层协议(如 PPP)将 IP 数据报格式化为帧。他们附加第三个页眉和一个页脚来“框定”数据报。帧头包括一个循环冗余校验(CRC) 字段,用于在帧通过网络介质传输时检查错误。然后数据链路层将帧传递给物理层。

物理网络层——为传输准备帧

发送主机上的物理网络层接收帧并将 IP 地址转换为适合网络介质的硬件地址。然后物理网络层通过网络介质将帧发送出去。

接收主机如何处理数据包

当数据包到达接收主机时,它会按照与发送方相反的顺序通过 TCP/IP 协议栈。上图说明了这条路径。此外,接收主机上的每个协议都会剥离发送主机上的对等方附加到数据包的标头信息。这是发生的事情:

  • 物理网络层以帧的形式接收数据包。它计算数据包的 CRC,然后将帧发送到数据链路层。
  • 数据链路层验证帧的 CRC 是否正确,并去除帧头和 CRC。最后,数据链路协议将帧发送到 Internet 层。
  • Internet 层读取标头中的信息以识别传输并确定它是否是片段。如果传输是分段的,IP 将这些分段重新组合成原始数据报。然后它剥离 IP 报头并将数据报传递给传输层协议。
  • 传输层(TCP 和 UDP)读取标头以确定哪个应用层协议必须接收数据。然后 TCP 或 UDP 剥离其相关的标头并将消息或流发送到接收应用程序。
  • 应用层接收消息并执行发送主机请求的操作。​
责任编辑:赵宁宁 来源: 弱电文档
相关推荐

2014-10-15 09:14:24

IP

2019-09-30 09:28:26

LinuxTCPIP

2014-11-21 09:16:23

TCPIP

2020-12-03 08:37:38

TCPIPARP协议

2010-06-08 13:32:19

TCP IP协议基础

2010-09-08 15:11:36

TCP IP协议栈

2010-06-08 14:23:47

TCP IP协议概念

2019-06-12 14:18:31

TCPIP协议DNS

2010-06-12 15:54:09

TCP IP协议

2010-06-18 14:37:20

TCP IP协议

2019-09-18 20:07:06

AndroidTCP协议

2017-08-16 11:00:38

TCPIP协议

2010-09-27 13:35:43

TCP IP故障

2010-06-13 14:49:40

TCP IP协议优化

2010-09-17 16:38:41

TCP IP协议

2010-06-09 16:28:50

TCP IP传输协议

2010-06-08 15:10:08

2010-06-13 15:37:24

TCP协议

2010-06-08 13:50:40

TCP IP协议族

2010-09-08 15:34:27

TCP IP协议栈
点赞
收藏

51CTO技术栈公众号