【问题标题】:TCP calculate checksumTCP计算校验和
【发布时间】:2021-02-10 18:00:51
【问题描述】:

我正在尝试计算以下数据包的校验和: 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

not(20e3) = df1c

这显然不是当前的校验和。

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

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

感谢您的帮助!

【问题讨论】:

    标签: networking tcp checksum calculation


    【解决方案1】:

    您可能忽略了 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

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2012-10-08
      • 2015-01-30
      • 2014-05-08
      • 2013-05-09
      相关资源
      最近更新 更多