ip 數據包檢驗和 計算方式怎麼進行的?

學習TCP/IP 詳解,在讀到 IP 數據包檢驗和的計算時遇到幾個問題

1. 我對檢驗和計算的理解:

a.發送方 : 因為計算時 檢驗和欄位被置為 0, 所以求得檢驗和 是除檢驗和欄位之外的其他欄位的反碼之和

b.接收方 :因為計算時 檢驗和欄位不是 0 (而是其他欄位的反碼之和),所以接收方計算的檢驗和 相當於 檢驗和欄位本身加上檢驗和欄位的反碼 ---- 也就是一個數加上它的反碼。那麼問題來了:

b.1 對於正數 反碼等於原碼 它們的和不可能全為 1

b.2 對於負數 反碼等於符號位不變,其他位取反,這時候是 全 1

這是不是說明不會出現 b.1 的情況?這是為什麼呢?

最有可能的是本人對這段文字的理解不到位,還望各位給予幫助,謝謝

補充:這裡的檢驗和欄位應該是無符號的吧,對於無符號二進位的反碼是不是就是對其按位取反啊?

補充:【IP 數據包 格式】


謝邀。下面是我對IP校驗和計算的理解:

首先確認幾個事實:

a.IP首部校驗和是16位,只校驗數據報的首部,不包括數據部分;

b.二進位反碼求和規則:從低位到高位逐列進行計算,0和0相加是0,0和1相加是1,1和1相加是0,但要產生一個進位1,加到下列,若最高位相加後產生進位,則最後得到的結果要加1;

c.在二進位反碼運算中,0有兩種表示法:全0和全1(正零和負零)。

接著來看具體的校驗過程:

發送方:

為了計算IP首部校驗和欄位的值,先把首部的校驗和欄位設為0,然後計算整個首部(包括選項)的二進位反碼的和。把首部作為一個16bit整數數組來處理。讓我們把這個計算結果稱為a,因為校驗和欄位被明確設為0,所以a是除了校驗和欄位以外所有IP首部欄位的和。a的二進位反碼,用-a表示,被放在校驗和欄位中,發送該分組。

接收方:

如果在傳輸過程中沒有比特位(首部)被改變,則在目的地計算的校驗和應該等於a + -a 的二進位反碼,在二進位反碼運算中(a + -a)的和是-0(全1)。

註:

a.二進位反碼求和操作,我的理解就是將IP首部中的每16bit按unsigned short類型直接相加,但最高位產生的進位位一定要再加回來。

b.你可以找幾個數據按上述方式驗證一下,我試過。

c.下面一張圖摘自《TCP/IP詳解卷二:實現》

參考資料:

1.《TCP/IP詳解卷二:實現》。

2.《計算機網路》,謝希仁。


推薦閱讀:

「上網高峰期網速較慢」是否侵犯消費者的利益?其他國家也是這樣嗎?
2345是怎樣篡改主頁的以及如何徹底刪除?
除《浪潮之巔》外,可以看哪些書來了解IT發展的歷史呢?
智能手機硬體配置的極限在哪裡?如果硬體配置已經到了極限,那麼小米通過什麼方法做高性價比的手機?
網上看培訓視頻,記課時的,視頻一開始播放,滑鼠一點到網頁之外的地方就自動暫停如何解決這個問題好呢?

TAG:信息技術IT | 計算機網路 | TCPIP | 數據包 |