IP數據報檢驗和計算

在進行計算之前先補充一下基礎知識。

一、原碼,反碼和補碼

原碼

原碼是計算機機器數中最簡單的一種形式,數值位就是真值的絕對值,符號位位“0”時表示正數,符號位爲“1”時表示負數,原碼又稱帶符號的絕對值。爲了方便整數和小數區別,整數的符號位與數值位之間用“,”隔開,小數的符號位與數值位之間用“.”隔開。
舉例: 以8位機器數爲例,整數的“+0”原碼爲0,0000000;整數的“-0”原碼爲1,0000000;小數的“+0”原碼爲0.0000000,小數的“-0”原碼爲1.0000000

反碼

正數的反碼就等於原碼,負數的反碼相當於除了符號位之外,其他位取反。
舉例: 整數的“+0”反碼爲0,0000000;整數的“-0”原碼爲1,1111111;小數的“+0”原碼爲0.0000000,小數的“-0”原碼爲1.1111111

補碼

正整數的補碼是其二進制表示,與原碼相同;
負整數的補碼爲反碼加1;
舉例: +1的補碼爲0,0000001;
-1的補碼爲1,111 1111

二、IP數據報中,首部檢驗和計算方法

這個字段用來檢驗數據報的首部,不包括數據部分。數據報每經過一個路由器,路由器都要重新計算首部檢驗和。不檢驗數據部分可以減小計算量。
計算方法: 先把IP數據報首部化爲許多16位的序列,並把檢驗和字段置零。用反碼運算把所有16字相加後,將得到的和的反碼寫入檢驗和字段。接收方收到數據後,將首部的所有16位子序列再使用反碼算術符相加一次,將得到的和取反碼。如果首部未發生任何變化,那麼這個和肯定爲0。否則認爲出差錯,並將此數據報丟棄。

反碼相加:從低位向高位計算,0 0 得0 ,0 1 得1 ,1 1 得0 進1,如果最高位相加後產生進位,最後得到的結果加1。

例題:設IP數據報使用固定首部,其個字段的數值如圖。計算下列IP數據報首部的檢驗和,各字段的數值如圖
在這裏插入圖片描述
4 5 0 —>01000101 00000000
28 —>00000000 00011100
1 —>00000000 00000001
00 —>00000000 00000000
4 17 —>00000100 00010001
10.12.14.5 —>00001010 00001100 00001100 00000110
12.6.7.9 —> 00001110 00000101 0000111 00001001
反碼運算:
01110100 01001110
取反,得到檢驗和字段:
10001011 10110001

使用16進制算法(每16位二進制數字,轉換爲4個十六進制數字表示)
4 5 0 —>4500
28 ---->001C
1 --------->0001
0 0 —>0000
4 17 ---->0411
10.12.14.5 —> 0A0C 0E05
12.6.7.9 -->0C06 0709
加法結果:744E
反碼:8BB1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章