TCP计算校验和

时间:2021-02-10 18:00:51

标签: networking tcp checksum calculation

我正在尝试计算以下数据包的校验和: A TCP packet captured with wire shark

但我从未设法获得正确的校验和 (0x67ea)。

我试着像下面这样计算它(当然使用补码和):

<块引用>

源IP+目的IP+TCP协议+(TCP头长度+ 有效载荷长度) + 有效载荷

<块引用>

c0a8 + ae80 + c0a8 + ae01 + 0006 + 0026 + 6c69 + 646f + 720a = 420df

补码:4 + 20df = 20e3

不(20e3) = df1c

这绝对不是当前的校验和。

我还注意到,每次我发送相同的有效负载时,校验和都会发生变化,所以我猜它不可能是那些不变的变量,它必须更多(例如时间戳......)。

校验和使用的确切参数和公式是什么? 我该如何计算?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可能忽略了 TCP 固定标头和 TCP 选项。这些字节也有助于校验和(不仅仅是 TCP 有效载荷)。请注意,为了正确计算,TCP 校验和字段 (ddff) 被替换为 0

IPv4 SRC + IPv4 DST + IPv4 Protocol + TCP Segment Length +

TCP Fixed Header (with checksum field set to 0) +

TCP Options +

TCP Payload

给你

c0a8 + ae80 + c0a8 + ae01 + 0006 + 0026 +

115c + dcba + 28d5 + 41da + 64e8 + 6a10 + 8018 + 01fe + 0000 + 0000 +
                                                       (csum)

0101 + 080a + 5c86 + c6f8 + bd62 e36f + 

6c69 + 646f + 720a

等于 9980c。接下来,9 + 980c = 9815,最后,这将为您提供 67ea

相关问题