传输层如何构造 TCP 校验和的 Pseudo-Header?

网络工程 通讯协议 协议理论 第4层 传输协议 校验和
2021-07-21 22:19:20

TCP Psuedo Header 需要发送方和目标 IP 地址以及协议类型。所有这些信息都存在于网络层/IP 报头中。既然传输层无法访问网络层存在的数据,那么它是如何构造Pseudo-Header的呢?

2个回答

TCP 伪标头只有用于创建原始连接的信息(源 IP 地址和目标 IP 地址)、长度(可用于上层)和众所周知的常量协议(TCP 是 Internet 协议编号 6 .)

来自RFC 793,p17。

+--------+--------+--------+--------+
|           Source Address          |
+--------+--------+--------+--------+
|         Destination Address       |
+--------+--------+--------+--------+
|  zero  |  PTCL  |    TCP Length   |
+--------+--------+--------+--------+

这意味着将数据字节序列包装成段然后包装成数据包的过程仅使用上层拥有的信息。实际上,您会看到对于给定的连接,除了长度之外的所有连接都是恒定的,这意味着它们可以在连接打开时计算并存储到此为止的校验和。每个数据包的计算可以从伪头中的长度字段开始。某些特定的实现可能实际上将长度存储在该位置,如果这可以稍微优化代码。

伪头并不真正存在——它只是临时创建来计算校验和。

在 IP 栈中,网络层将 L3 信息向上传递到传输层——同样,传输层将 L3 和 L4 信息向上传递到应用层。信息不是作为原始数据包传递,而是通过数据字段传入/传出 API 函数。这些 API 函数没有 IETF 标准,但大多数操作系统使用 BSD 样式的“套接字”。