TCP校验和覆盖TCP首部和TCP数据,还要加上一个12字节的伪首部。计算时先把TCP报头中的校验和字段置为0

计算方法 把伪首部、TCP报头、TCP数据分为16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。累加所有的16位字。最后结果如果有进位,把高16位移到低16位和低16位进行相加,直到高16位都为0,最后,对计算结果取反,作为TCP的校验和。

上图计算示例:

伪首部

源目的ip地址         :       a9fe   5205    a9fe  5263 

0字段和tcp协议      :      0006   

tcp头和数据长度和:       002a       (tcp 头 20B ,数据 22B)

a9fe  + 5205  +  a9fe  + 5263 + 0006 + 002a = 1f894

tcp 头需要把checksum字段置为0计算

dc2c + 2711 + 53dc + 167f + 0077 + cef9  + 5018 + 1000 + 0000 + 0000 = 29d20

数据计算

 5468 + 6973 + 2069 + 7320 + 6120 + 5443 + 5020 + 6d65 + 7373 + 6167 + 6500 = 3fe26

计算总和

1f894 + 29d20 + 3fe26 = 893da

总和大于 FFFF

893da  -》   8 +  93da = 93e2

按位取反

93e2     1001  0011  1110  0010

6c1d      0110  1100  0001  1101

报文检验和  0x6c1d , 和抓到的报文校验和一致。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐