Checksum 计算方式

4,307 阅读1分钟

前言

IPUDPTCP 协议中,都有 Checksum 这个字段,用于校验数据的可靠性。这篇文章主要讲一下 Checksum 的计算公式。

计算步骤

  1. 获取数据包中被需要的字节数据,1字节为8位,将数据按照8位+8位的形式拼接并分组,例:

    源数据:7f 00 00 01 00 06 00 20 1F 91 F7 26 70 A7 34 F0

    8位+8位:7f00 0001 0006 0020 1F91 F726 70A7 34F0

  2. 将分组后的数据求和,溢出的高位与低位相加,例:

    Sum = 7f00 + 0001 + 0006 + 0020 + 1F91 + F726 + 70A7 + 34F0

    Sum = 23B75

    高位溢出:2

    高低位相加:3B75 + 2 = 3B77

  3. 步骤2求得的结果取反,最后求得的值就是Checksum,例:

    3B77 转二进制:11 1011 0111 0111

    补足 16 位首部补 0 :0011 1011 0111 0111

    取反:1100 0100 1000 1000

    Checksum 十六进制 = c488

参考

RFC 1071 tools.ietf.org/html/rfc107…