系统管理指南:IP 服务

数据封装和 TCP/IP 协议栈

包是指通过网络传输的基本信息单元。基本的包由头(包含发送系统和接收系统的地址)和正文或有效负荷(包含要传送的数据)组成。当包经由 TCP/IP 协议栈时,每一层上的协议都会在基本头中添加或删除字段。当发送系统上的协议向包头中添加数据时,此过程即被称为数据封装。此外,每一层对于已更改的包都有不同的称呼,如下图中所示。

图 1–1 包如何经由 TCP/IP 栈

图中显示了包如何经由 TCP/IP 栈从发送主机到达接收主机。

本节概述了包的生命周期。发出命令或发送消息时,生命周期即会开始。接收系统上的相应应用程序收到包时,生命周期即会完成。

应用层:通信的起源

当一个系统上的用户发送消息或发出必须访问远程系统的命令时,即会开始包的历史记录。应用协议会设置包的格式,以便相应的传输层协议(TCP 或 UDP)可以对包进行处理。

假定用户发出 rlogin 命令以登录到远程系统,如图 1–1 中所示。rlogin 命令会使用 TCP 传输层协议。TCP 希望以包含命令信息的字节流的形式接收数据。因此,rlogin 可将此数据作为 TCP 流进行发送。

传输层:数据封装开始的位置

当数据到达传输层时,该层上的协议即会开始数据封装过程。传输层会将应用程序数据封装到传输协议数据单元中。

传输层协议可在发送应用程序和接收应用程序(以传输端口号区分)之间创建虚拟数据流。端口号可标识端口,端口是内存中接收或发送数据的专用位置。此外,传输协议层可能还会提供其他服务,如可靠的、按顺序的数据传送。最终结果取决于是 TCP、SCTP 还是 UDP 处理信息。

TCP 段

TCP 通常称为“面向连接的”协议,这是因为 TCP 可确保将数据成功传送到接收主机。图 1–1 说明了 TCP 协议如何接收来自 rlogin 命令的流。然后,TCP 将从应用层收到的数据分成多个段,再向每个段中附加一个头。

段头包含发送端口和接收端口、段排序信息以及称为校验和的一个数据字段。两台主机上的 TCP 协议都会使用校验和数据来确定数据传送是否出现错误。

建立 TCP 连接

TCP 使用段来确定接收系统是否准备好接收数据。当用于发送的 TCP 需要建立连接时,TCP 会将一个称为 SYN 的段发送到接收主机上的 TCP 协议。用于接收的 TCP 将返回一个称为 ACK 的段以确认是否成功收到段。用于发送的 TCP 会发送另一个 ACK 段,然后继续发送数据。这种控制信息的交换称为三次握手

UDP 包

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

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

Internet 层:准备传送包的位置

传输协议 TCP、UDP 和 SCTP 会将其段和包向下传递到 Internet 层,IP 协议将在该位置处理这些段和包。IP 通过将这些段和包的格式设置为多个称为 IP 数据报的单元,准备对其进行传送。然后,IP 会确定数据报的 IP 地址,以便将其高效地传送到接收主机。

IP 数据报

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

数据链路层:成帧位置

数据链路层协议(如 PPP)会将 IP 数据报的格式设置为。这些协议将附加第三个头和一个脚注,以便对数据报执行“成帧”操作。帧标题包括循环冗余码校验 (cyclic redundancy check, CRC) 字段,用于检查帧经由网络介质时是否出现错误。然后,数据链路层会将帧传递到物理层。

物理网络层:帧的发送和接收位置

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

接收主机如何处理包

当包到达接收主机时,包便会按照其发送顺序的相反顺序经由 TCP/IP 协议栈。图 1–1 说明了此路径。此外,接收主机上的每种协议还会删除头信息,该信息通过发送主机上的对等协议附加到包中。将会发生以下过程:

  1. 物理网络层接收帧格式的包。物理网络层会计算包的 CRC,然后将帧发送到数据链路层。

  2. 数据链路层检验帧的 CRC 是否正确,然后删除帧标题和 CRC。最后,数据链路层将帧发送到 Internet 层。

  3. Internet 层读取头中的信息以识别传输。然后,Internet 层将确定包是否为分段包。如果分段进行传输,则 IP 会将分段重新汇编成原始数据报。然后,IP 将删除 IP 数据包头并将数据报传递到传输层协议。

  4. 传输层(TCP、SCTP 和 UDP)读取头以确定必须接收数据的应用层协议。然后,TCP、SCTP 或 UDP 将删除其相关的头。TCP、SCTP 或 UDP 将消息或流发送到接收应用程序。

  5. 应用层接收消息。然后,应用层将执行发送主机所请求的操作。