關於IP資料報首部校驗欄位的理解

2022-04-04 01:27:56 字數 1255 閱讀 3215

關於ip資料報首部校驗欄位的理解

ip資料報格式及首部個字段:

www.2cto.com  

對上表的各個資料項就不一一解釋了,這裡具體關注以下幾個資料項:

1、4位首部長度:這裡的長度指的是4bytes單元的個數,例如上圖在「選項」欄位不存在的情況下,ip包的首部是20bytes,那麼首部長度字段應該為5。另外根據首部長度的位數,也可以得知ip資料報的首部最長為:(2^4 - 1) * 4  = 60 bytes,當然這個不常用,為了減少開銷ip資料報的首部一般為20 bytes.

2、16位總長度:整個ip資料報的長度,位元組為單位,很顯然可以利用總的資料報的長度減去資料報的首部長度可以得到ip資料資料報中資料內容的長度,同理可以得知ip資料報的max_length為65535 bytes,這個欄位是ip首部必要的內容。

3、16位首部校驗和:

steve的書上是這樣說的:

a、把校驗和字段置零

b、對首部中每個16位進行二進位制反碼求和(整個首部看成是由一串16bit的字組成),結果存在校驗和字段中。

c、收到乙份ip資料報後,同樣對首部的每個16bit進行二進位制反碼求和(高位溢位新增到低位,與通常的補碼運算直接丟棄溢位的高位不同)。

d、接收方在計算過程中包含了傳送方存在的首部校驗和,因此,首部在傳送過程中如果沒有任何差錯,那麼接收方計算的檢驗結果應該全為1(0xffff),否則表明資料報接收錯誤,丟棄該ip包。

注意:這裡的二進位制反碼求和理解應該為對各個16bbit進行求和後取反,關鍵是這些16bit的單元加在一起,如果沒有整除16(size還存在不足16位),則應該加上剩餘的部分,這是的結果應該會超出16位,所以要對高出16位的的和再次與低16位相加得到cksum,這是第一步。而第一步相加是很可能會再次產生進製,因此需要再次把進製移到低16位相加的到最終的cksum的反碼,這是將結果取反即可。

下面還是通過test source code來仔細了解該過程:

通用的校驗函式:

main函式中呼叫:

從理論上判斷,如果對接收的ip包中的校驗值再次重新校驗一次,在資料報準確無誤的情況下,得出的新的校驗值應該是0xffff(當然,計算機用補碼在計算,可能顯示的結果是0),其他的結果表示接收到的資料報有錯誤。故cksum 2應該為0, cksum 3應該與cksum 1相同。

這裡驗證過:

ip資料報中的首部校驗欄位的演算法不採用迴圈冗餘演算法,是因為ip包在網路中傳輸時,其ttl欄位的值經常會變化,故採用簡單的疊加方法,就可以避開中間路由器重新計算其校驗值,只是簡單的增加1操作即可,這樣可以明顯提高傳輸效率。

IP資料報首部選項字段詳解

ip選項主要用於控制和測試兩大目的。作為選項,使用者可以使用也可以不使用ip選項,但作為ip協議的組成部分,所有實現ip協議的裝置能處理ip選項。在使用選項的過程中 有可能造成資料報頭部不是32b的整數倍,那麼則需要 填充域來湊齊。ip資料報選項有選項碼 長度 和選項資料3部分組成,其中,選項碼用於...

ip首部可選字段 IP資料報格式及首部中的各欄位

ip資料報的格式如圖所示。普通的ip首部長為20個位元組,除非含有選項字段。分析圖中的首部。最高位在左邊,記為0bit 最低位在右邊,記為31 bit。1 目前的協議版本號是4,因此ip有時也稱作ipv4 2 首部長度指的是首部佔32 bit字的數目,包括任何選項。由於它是乙個4位元字段,因此首部最...

ip首部可選字段 IP資料報格式 35

1 tcp ip協議棧 2 最大傳送單元mtu 1 最大傳送單元mtu 鏈路層資料可封裝資料的上限。如乙太網的mtu是1500位元組。2 如果所傳送的資料報長度超過某鏈路的mtu值,要怎麼處理?答 當ip資料報比鏈路的最大傳輸單元大時,就可以被分解為很多的足夠小片段,以便能夠在其上進行傳輸。即分片。...