前言
在 IP 、UDP 和 TCP 协议中,都有 Checksum 这个字段,用于校验数据的可靠性。这篇文章主要讲一下 Checksum 的计算公式。
计算步骤
-
获取数据包中被需要的字节数据,1字节为8位,将数据按照
8位+8位的形式拼接并分组,例:源数据:
7f 00 00 01 00 06 00 20 1F 91 F7 26 70 A7 34 F08位+8位:
7f00 0001 0006 0020 1F91 F726 70A7 34F0 -
将分组后的数据求和,溢出的高位与低位相加,例:
Sum =
7f00 + 0001 + 0006 + 0020 + 1F91 + F726 + 70A7 + 34F0Sum =
23B75高位溢出:
2高低位相加:
3B75 + 2 = 3B77 -
将
步骤2求得的结果取反,最后求得的值就是Checksum,例:3B77 转二进制:
11 1011 0111 0111补足 16 位首部补 0 :
0011 1011 0111 0111取反:
1100 0100 1000 1000Checksum 十六进制 =
c488
参考
RFC 1071 tools.ietf.org/html/rfc107…