IP包頭詳解

2021-07-29 18:29:38 字數 2469 閱讀 1381

ip協議

writed by vindeselly 版本

4 bit

首部長度

4 bit

服務型別(tos)

8 bit

總長度(位元組數)

16 bit

標識16 bit

標誌3 bit

片偏移13 bit

生成時間(ttl)

8 bit

協議8 bit

首部檢驗和

16 bit

源ip位址

32 bit

目的ip位址

32 bit

選項(可選)

資料4bit的版本字段表示ip的版本號。如果為0100表示ipv4,如果為0110表示ipv6。

4位元的首部長度字段表示ip首部的總長度,其中包括選項字段(如果有)。該字段的表示的長度單位為32bit(4 bytes),因此首部長度最大為15(1111)*32bit=60bytes。在沒有選項時,該字段的值為5,表示普通的ip包頭長度20bytes。

8bit的伺服器型別(tos)字段,其中前3個bit表示優先權(現在已經忽略該欄位),隨後的4個bit表示服務型別,按順序分別表示為最小時延、最大吞吐量、最高可靠性、最小費用四種。這個4個bit中最多只能有1個bit置位,如果全是0則表示一般服務。最有1個bit為未用位,必須置0。

16個bit的總長度字段表示整個ip資料報的長度,以位元組為單位。所以ip資料報的最大長度為16個1=65535bytes。

此處的總長度欄位與mtu是密切相關的,mtu表示ip資料報的最大傳輸單元的大小,我們知道一般預設的mtu值為1500,也就是說單個ip資料報的最大長度為1500bytes。常規的無選項的ip包頭長度為20bytes,可以通過mtu計算出data資料字段的最大長度為1480bytes。不僅如此,mtu還與tcp協議報頭中的mss有關聯,mss表示tcp資料報的最大傳輸長度,常規的tcp報頭長度為20bytes,又因為tcp報頭是封裝在ip包頭上的,所以mss一般為1460bytes=mtu1500-ip包頭20-tcp報頭20。(其中關於mss欄位的詳細解釋請參見《tcp協議文件》)。由於預設mtu為1500bytes,所以網絡卡傳送的資料幀的大小為1518bytes,多了18bytes分別為:目的mac(6bytes)、源mac(6bytes)、type(2bytes)、crc(4bytes)。(具體關於二層資料幀的解釋請參見《二層資料幀文件》)

16bit的標識字段唯一的標識主機傳送的每乙份資料報,由主機生成具有唯一性。通常每傳送乙份報文該值加1。該值在資料報分片時,會複製到每乙個片中。所以在重組分片包的時候會觀察該值,把該值相同的分片收集到一起重組,後面會繼續討論分片。

3bit的標識欄位每一位都有特定的含義,該欄位主要用來分片和重組。第1個bit為保留位(reserved bit),一般置位0。第2個bit為不分片位(don』t fragment),該位在置1時表示不分片。第3個bit為更多片位(more fragment),該位表示後面是否還有更多的分片,置位1時表示後面還有,所以除了最後一片報文,其他分片報文該位全部置1。

13位元的片偏移字段表示分片時,每乙個分片的資料字段偏移原始資料報開始處的位置。比如原始資料報的資料字段總長為1461bytes,使用tcp傳輸協議,那麼對該資料報進行分片,第一片的offset欄位為0,第二片的offset欄位就應該為1460。就是這麼理解就對了^_^

再次簡要討論一下分片:把乙份超過mtu的資料報分片以後,這些分片只有在到達目的地才進行重新組裝。在一組分片報文傳輸的過程時中間裝置有可能會對該分片再次分片。如果採用tcp傳輸協議,在傳輸過程中丟失乙個分片報文,那麼整個tcp資料報都將被重新傳送,不會只傳送丟失的分片。其原因是tcp協議有自己的超時和重傳機制。(詳解請參見《tcp協議文件》)

在一組分片報文中,任何傳輸層的首部只會出現在第乙個分片中。並且由於資料報被分片後ip包頭的首部校驗和將會重算。在分片時,出最後一片外,其他每一片的資料部分必須是8位元組的整數倍。

8bit的生成時間字段表示該ip資料報可以經過的路由器的最大數量。最大為256表示可以穿越256臺路由,該欄位採用減法的方式賦值,比如在開始時8個bit全部置位1,沒經過一台路由器該字段的值減1。如果該字段的值減到了0還沒有送達目的地,那麼該ip資料報將被丟棄。最初設計這個欄位是為了防止ip報文在網路中迴圈無限傳輸,占用頻寬等問題。

8bit的協議字段表示在ip上層承載的是什麼協議。比如:0x01表示icmp協議、0x06表示tcp協議、0x11表示udp協議等。

16bit的首部校驗和字段用來使接收端檢驗收到的報文是否正確。該字段只對ip首部計算校驗和不包含後面的資料字段。原因是ip的上層協議比如icmp、igmp、tcp、udp協議的各自首部中均含有同時覆蓋首部和資料的校驗和。

計算方法:首先把首部中的該字段全部置0,然後對首部中的每個16bit進行反碼求和,得到的值就是該字段的值,填入後。將該資料報發給接收端後,接收端將進行相同的操作,對每個16bit進行反碼求和(此時首部校驗和字段為非0欄位),所以計算後的值若為全1表示正確,否則表示收到的資料報不正確,動作為丟棄。

一般不使用該欄位,該字段的值以32bit為單位,不足時以0補充。

IP包頭結構詳解

這篇講得比較詳細 清楚,轉了 ip包頭結構如下圖所示 下面具體分析ip包頭中各部分的作用。版本號 version 長度4位元。標識目前採用的ip協議的版本號。一般的值為0100 ipv4 0110 ipv6 ip包頭長度 header length 長度4位元。這個欄位的作用是為了描述ip包頭的長度...

ip包頭結構詳解

空間管理您的位置 51testing軟體測試網 seventest 日誌 檢視 1195 評分 0 0 版本號 version 長度4位元。標識目前採用的ip協議的版本號。一般的值為0100 ipv4 0110 ipv6 ip包頭長度 header length 長度4位元。這個欄位的作用是為了描述...

ip包頭字段詳解

version 版本號 長度4位元。標識目前採用的ip協議的版本號。一般的值為0100 ipv4 0110 ipv6 header length ip包頭長度 4位元。這個欄位的作用是為了描述ip包頭的長度,因為在ip包頭中有變長的可選部分。該部分佔4個bit位,單位為32bit 4個位元組 即本區...