1. 程式人生 > 其它 >輕鬆掌握UDP校驗和

輕鬆掌握UDP校驗和

學習網路原理校驗和的,要麼就覺得不就是16bit的和嘛一笑而,要麼對一長串的計算嚇到了,算了一次結果錯了,還不知道哪裡錯了。現在總算搞明白了一些內容,記錄一下。

一、簡單快速瞭解

加上偽首部的所有資料,以16bit為單位求和,進位“回捲”,回捲就是進位加到和上,所得結果按位取反,即為校驗和。

二、傳送和接收

在傳送資料時,計算資料包的檢驗和,把得到的結果存入校驗和欄位中。

在接收資料時,計算資料包的檢驗和相對簡單:

    1、所有資料以16bit求和;

    2、判是否為16bit全1;

    3、全1則正確,否則錯誤。

三、詳細計算解釋

對於一個udp資料包,進行以16bit為單位的劃分,對其二進位制碼(機器數)進行按位和( 1s complement of the sum),直到計算完全部內容(包括資料)。

得到一個16bit的和,記之為A,按位取反,記之為Ã。將Ã填入校驗位。

舉簡單例子

 

步驟介紹完了,簡而言之就是傳送方把udp的包看成二進位制,看成以16bit為單位的二進位制,每個單位每個單位的加起來,加出來的結果放入校驗位。

接收方更無腦,將UDP包看成二進位制後,16bit加完,看結果是不是全1.

現在解釋為啥結果會是全1,這裡沒有任何高深數學知識,只是一個小小的trick。

無論傳送方,還是接收方,計算包中除了校驗位的內容,得到的結果就是A(上文提到的16bit和),接收方再將A+Ã,即為全1.

四、為什麼時間

為什麼是16bit為單位求和?*可能16位cpu計算的原因?

為什麼用這個加法來計算?*我其實覺得,要是簡單的來說,發一個UDP包可以看成我給你了多少錢(過年紅包),我先點一遍錢,在紅包封皮上寫上數額,比如68,你收到了紅包,點了一遍裡面的錢,一看少了一塊,是67,特別生氣,直接把紅包扔了。簡單的辦法也能計算校驗和,反正都是求和運算。但這裡主要存在機器數的大端小端表示問題,索性避免歧義使用機器數來進行加減。

為什麼使用這種校驗和方式?方便計算,結果簡單。簡直就是喂到計算機嘴裡的校驗方式。

五、複雜的例子

 

 我覺得這個例子不合格,反正我看這個圖算了半天也不知道是啥,但是理解原理後,看這個圖就比較明白了。

 

 

六、存在的困難

理解校驗和存在的困難就是中文資料太少,並且不少內容已經失效;

專有名詞太多,這個主要是沒搞清楚本質而被表象迷惑了。

七、參考內容

  1. 《計算機網路-第7版》-謝希仁著
  2. https://www.cnblogs.com/noble/p/4144139.html
  3. https://www.ques10.com/p/10930/how-is-checksum-computed-in-udp-1/
  4. https://www.quora.com/Why-is-it-that-UDP-takes-the-1s-complement-of-the-sum-that-is-why-not-just-use-the-sum