UDP 检验和

UDP 检验和提供了差错检测的功能。这是基于端到端原则实现的。但是 UDP 的检验和并不提供差错回复的能力。

本文不叙述 UDP 的原理,仅仅着力介绍一下检验和的实现原理。

1. 原理

对发送方的 UDP 报文段的所有 16 比特字的和进行反码运算,当求和遇见溢出的时候,进行回卷(回卷的补充在下面),得到的结果放在 UDP 报文段中的检验和字段

2. 什么是回卷

所谓 “回卷” 就是当进行 16 比特的加法运算的时候,如果进位到 17位,则将第 17 位和后 16 位进行加法和运算。

我们将在下面的小例子中实际操练。

3. 示例

假设我们有 3 个 16 比特的字,分别如下:

0110011001100000
0101010101010101
1000111100001100
第一步:对 3 个 16 比特的字依次相加
0110 0110 0110 0000 + 0101 0101 0101 0101 + 1000 1111 0000 1100 = 0100 1010 1100 0010

注意,在最后一次加法的过程中,发生了回卷,看下面,多了第 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

如果这些比特之一是0, 那么该分组中已经出现了差错。

参考链接: https://blog.csdn.net/qq_34902437/article/details/87938913

原文地址:https://www.cnblogs.com/neozheng/p/13028895.html