UDP 检验和 的计算过程
对发送方的 UDP 报文段的所有 16 比特字的和进行反码运算,当求和遇见溢出的时候,进行回卷(回卷的补充在下面),得到的结果放在 UDP 报文段中的检验和字段。
什么是回卷?
所谓 “回卷” 就是当进行 16 比特的加法运算的时候,如果进位到 17位,则将第 17 位和后 16 位进行加法和运算。
举个例子
假设我们有 3 个 16 比特的字,分别如下
0110011001100000
0101010101010101
1000111100001100
第一步:对 3 个 16 比特的字依次相加
注意,在最后一次加法的过程中,发生了回卷,看下面,多了第 17 位,要消除第 17 位
这两个数相加得到
此时用 1 + 0100 1010 1100 0001 = 0100 1010 1100 0010
第二步:对和进行反码运算
0100 1010 1100 0010 的反码
1011 0101 0011 1101
第三步:将这个值放入校验和中!!!
第四步:在接收方中,将全部的 4 个 16比特的字(包含了校验和哦!)加在一起计算,没有差错的话,就是 1111 1111 1111 1111
为什么全是1就是没有错?
因为发送方的验校和进行了反码操作了啊 并放入了验校和字段 ,发送给了接受方。
等接收方对其他字段进行了二进制的加法 其中就有验校和字段 就是变成了原码和反码的加法 就都变成1了!
如果不是都是1的话 那就说明 其中的字段和发送方的字段不一样 肯定就是错误的 就把包丢了!!!