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