透過IP資料封包的格式,我們能夠更清楚的知道IP協定的作用。 IPv4的資料封包一般以32位元為單位來描述,下面的圖是一個IP資料封包格式圖:
#我們建議學習IP資料封包格式時,可以使用抓包工具(如wireshark),抓取一些IP數據報,認真觀察比較。
現在,我們來看IP資料封包首部各個欄位的作用:
(1)版本:佔4位,指IP協定的版本。
(2)首部長度:佔4位,指首長度(不含資料部分),單位為4位元組。因為首部固定部分為20字節,所以該字段值最小為5(0101)
(3)區分服務:佔8位,目前沒啥用途。
(4)總長度:佔16位,首長度資料部分長度,單位為位元組。那麼理論上,一個IPv4的資料報長度最大為2的16次方減1字節,及65535字節。但資料封包最大長度是受MTU(最大傳輸單元)控制的,一個資料封包的長度不可以超過MTU設定值。這個設定值一般設定為1500。因為過長的資料報,路由器的轉送速度就會變慢,但如果資料報太小,那麼轉送效率就會上不去。當一個資料報長度超過MTU的時候,就需要將一個長的資料報拆分成幾個資料報分片。
(5)標識:佔16位,系統中有一個計數器,每當產生一個資料報,這個計數器就自增1,標識欄位的值就是這個自增的數字。透過這個識別值,以及後面會說到的標誌欄位和偏移量,就可以將分片重裝為原來的資料報。
(6)標誌:佔3位,但目前只有後兩位有意義:
中間位,Don't fragment :不能分片。只有該位元為0時,才允許分片
最後一位,More fragments:還有分片。若數值為0表示已經是最後一個分片了,否則表示後面還有分片。
(7)偏移量:佔13位元。它表示某分片的在原始分組的資料部分的相對位置。單位為8位元組。
(8)跳數限制:佔8位,它是為了防止一個資料封包在網路中無限制的傳播。這個欄位的值表示該資料封包最多能經過多少個路由器,當經過一個路由器時,該值就減1,等到該值為0時資料封包還未交付成功,那麼路由器就丟棄此資料封包。
(9)協議:表示此資料封包所攜帶的資料使用哪一種協議,常用的協議有:
ICMP:值為0
IP:值為4
TCP:值為6
UDP:值為17
(10)首部校驗和:佔16位,這個字段只校驗資料報的首部,但不包括資料部分。透過此欄位可以計算該資料封包是否出些差錯。
(11)來源位址:佔32位元。
(12)目的位址:佔32位元。
(13)可選部分:幾乎用不到。
以上是IP資料報長啥樣-分析IP資料封包格式的詳細內容。更多資訊請關注PHP中文網其他相關文章!