UDP / TCP中使用的伪标头的意义是什么?

时间:2008-12-11 11:30:54

标签: networking tcp udp

为什么UDP {3}}在UDP数据报之前用于计算UDP校验和?这背后的理性是什么?

5 个答案:

答案 0 :(得分:18)

最近的你会得到一个“直接从马的嘴里”的答案,来自David P. Reed的以下链接。

http://www.postel.org/pipermail/end2end-interest/2005-February/004616.html

答案的简短版本是“伪标题因历史原因而存在”。

最初,TCP / IP是一个单一的协议(简称为TCP)。当他们决定将其拆分为TCP和IP(以及其他)时,他们并没有将这两者完全分开:IP地址仍然被认为是TCP的一部分,但它们只是从IP层“继承”了而不是在TCP标头中重复。 TCP校验和在部分IP头(包括IP地址)上运行的原因是因为他们打算使用加密技术来加密和验证TCP有效载荷,他们希望伪头中的IP地址和其他TCP参数是受身份验证代码保护。这将使一个中间人篡改IP源和目标地址变得不可行:中间路由器不会注意到篡改,但TCP端点会在它尝试验证签名时。

由于各种原因,没有一个大型加密计划成功通过,但取而代之的TCP校验和仍然在伪标题上运行,就好像它是一个有用的事情。是的,它为您提供了针对随机错误的额外保护,但这不是它存在的原因。坦率地说,没有它我们会更好:TCP和IP之间的耦合意味着您在更改IP时必须重新定义TCP。因此,IPv6的定义包括TCP和UDP伪报头的新定义(参见RFC 2460,s8.1)。为什么IPv6设计者选择使这种耦合永久化,而不是抓住机会废除它,这超出了我的范围。

答案 1 :(得分:15)

从TCP或UDP的角度来看,数据包不包含IP地址。 (IP是它们下面的层。)

因此,为了进行适当的校验和,包括“伪标题”。它是“伪”的,因为它不是UDP数据报的一部分。它包含IP头的最重要部分,即源和目标地址,协议号和数据长度。

这是为了确保UDP校验和考虑这些字段。

答案 2 :(得分:7)

当设计这些协议时,他们的一个严重问题是接收数据包的主机认为它不属于他们。如果在传输期间在IP报头中翻转了几个比特并且数据包改变了路线(但IP校验和仍然正确),则重定向接收器的TCP / UDP堆栈仍然可以知道拒绝该数据包。

虽然伪标题打破了层次成语的分离,但认为提高可靠性是可以接受的。

答案 3 :(得分:7)

  

"使用伪标头的目的是验证UDP   数据报已到达正确的目的地。关键   了解伪标题在于实现正确   destination包含特定的计算机和特定的协议   该机器内的端口。 UDP标头本身仅指定   协议端口号。因此,要验证目的地,UDP就可以了   发送计算机计算覆盖目标IP的校验和   地址以及UDP数据报。伪标头不是   与UDP数据报一起传输,也不包含在长度中。"

电子。 Comer - 使用TCP / IP第4版进行网络互联。

答案 4 :(得分:0)

伪IP标头包含源IP,目标IP,协议和总长度字段。现在,通过将这些字段包括在TCP校验和中,我们正在网络层和传输层验证这些字段的校验和,从而进行双重检查以确保将数据传递到正确的主机。