gpt4 book ai didi

math - 为什么 UDP 校验和包含两倍的 UDP 长度?

转载 作者:行者123 更新时间:2023-12-04 00:44:32 25 4
gpt4 key购买 nike

我试图了解 UDP 校验和机制。我正在使用这个数据包。我看到一个例子,在所有字段的总和中,UDP 长度被包含了两次。为什么我们需要在校验和中包含两次 UDP 长度?

这是我看到的例子

IP header: Source IP address c0a8
… 0291
IP header: Destination IP address c0a8
… 0101
IP header: Protocol number(zero padded on left) 0011
16 bit UDP Length 0032
UDP header: source port 0618
UDP header: destination port 0035
UDP header: length 0032
UDP Data
0001
0100
0001
0000
0000
0000
0131
0131
0331
3638
0331
3932
0769
6e2d
6164
6472
0461
7270
6100
000c
0001
  • 对所有十六进制值求和 181e
  • 携带 4
  • 加入进位1822
  • 1 的补码 = 校验和! E7dd

最佳答案

真正的原因是伪头不是为UDP写的。它是为 TCP 定义的,并通过包含用于 UDP。

TCP 在 TCP header 中没有单独的长度字段。 TCP 数据包的有效载荷大小是 IP 数据包的大小减去 header 的大小。为了防止某些类型的损坏,TCP 设计者决定在伪 header 中包含实际有效负载长度。

UDP 决定不定义它自己的任何东西。相反,它只是按原样合并了 TCP 伪 header 。由于 UDP 的 header 中确实有一个长度字段,因此现在为了计算 UDP 校验和,同一个字段被使用了两次。

可以说 UDP header 中的 UDP 长度本身是多余的,原因与 TCP 不包含类似字段的原因相同。据我了解,这样做的原因也是历史性的,并且与在 IPv4 最终确定之前定义的 UDP 有关。 UDP RFC 载有 1980 年 8 月的日期,而 IP RFC 载有 1981 年 9 月的日期(即 - 一年多之后)这一事实证实了这一点。

关于math - 为什么 UDP 校验和包含两倍的 UDP 长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19213699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com