ip 數據包檢驗和 計算方式怎麼進行的?
01-27
學習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發展的歷史呢?
※智能手機硬體配置的極限在哪裡?如果硬體配置已經到了極限,那麼小米通過什麼方法做高性價比的手機?
※網上看培訓視頻,記課時的,視頻一開始播放,滑鼠一點到網頁之外的地方就自動暫停如何解決這個問題好呢?