IP包頭結構詳解
P包頭結構詳解
下面具體分析IP包頭中各部分的作用。
版本號(Version):長度4位元。標識目前採用的IP協議的版本號。一般的值為0100(IPv4),0110(IPv6)
IP包頭長度(Header Length):長度4位元。這個欄位的作用是為了描述IP包頭的長度,因為在IP包頭中有變長的可選部分。該部分佔4個bit位,單位為32bit(4個位元組),即本區域值= IP頭部長度(單位為bit)/(8*4),因此,一個IP包頭的長度最長為“1111”,即15*4=60個位元組。IP包頭最小長度為20位元組。
服務型別(Type of Service):長度8位元。8位 按位被如下定義 PPP D T R C 0
PPP:定義包的優先順序
000 普通 (Routine)
001 優先的 (Priority)
010 立即的傳送 (Immediate)
011 閃電式的 (Flash)
100 比閃電還閃電式的 (Flash Override)
101 CRI/TIC/ECP (不知道蝦米意思)
110 網間控制 (Internetwork Control)
111 網路控制 (Network Control)
D 時延: 0:普通 1:儘量小
T 吞吐量: 0:普通 1:儘量大
R 可靠性: 0:普通 1:儘量大
M 傳輸成本: 0:普通 1:儘量小
0 最後一位被保留,恆定為0
IP包總長(Total Length):長度16位元。 以位元組為單位計算的IP包的長度 (包括頭部和資料),所以IP包最大長度65535位元組。
識別符號(Identifier)(資料包ID):長度16位元。該欄位和Flags和Fragment Offest欄位聯合使用,對大的上層資料包進行分段(fragment)操作。路由器將一個包拆分後,所有拆分開的小包被標記相同的值,以便目的端裝置能夠區分哪個包屬於被拆分開的包的一部分。
標記(Flags):長度3 位元。該欄位第一位不使用。第二位是DF(Don't Fragment)位,DF位設為1時表明路由器不能對該上層資料包分段。如果一個上層資料包無法在不分段的情況下進行轉發,則路由器會丟棄該上層資料包 並返回一個錯誤資訊。第三位是MF(More Fragments)位,當路由器對一個上層資料包分段,則路由器會在除了最後一個分段的IP包的包頭中將MF位設為1。
片偏移(Fragment Offset):長度13位元。表示該IP包在該組分片包中位置,接收端靠此來組裝還原IP包。
生存時間(TTL):長度8位元。當IP包進行傳送時,先會對該欄位賦予某個特定的值。當IP包經過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。如果TTL減少為0,則該IP包會被丟棄。這個欄位可以防止由於路由環路而導致IP包在網路中不停被轉發。
協議(Protocol):長度8位元。標識了上層所使用的協議。
以下是比較常用的協議號:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
頭部校驗(Header Checksum):長度16位。用來做IP頭部的正確性檢測,但不包含資料部分。 因為每個路由器要改
變TTL的值,所以路由器會為每個通過的資料包重新計算這個值。
起源和目標地址(Source and Destination Addresses):這兩個地段都是32位元。標識了這個IP包的起源和目標地址。要注意除非使用NAT,否則整個傳輸的過程中,這兩個地址不會改變。
至此,IP包頭基本的20位元組已介紹完畢,此後部分屬於可選項,不是必須的部分。
可選項(Options):這是一個可變長的欄位。該欄位屬於可選項,主要用於測試,由起源裝置根據需要改寫。可選專案包含以下內容:
鬆散源路由(Loose source routing):給出一連串路由器介面的IP地址。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個IP地址之間跳過多個路由器。
嚴格源路由(Strict source routing):給出一連串路由器介面的IP地址。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中則表示發生錯誤。
路由記錄(Record route):當IP包離開每個路由器的時候記錄路由器的出站介面的IP地址。
時間戳(Timestamps):當IP包離開每個路由器的時候記錄時間。
填充(Padding):因為IP包頭長度(Header Length)部分的單位為32bit,所以IP包頭的長度必須為32bit的整數倍。因此,在可選項後面,IP協議會填充若干個0,以達到32bit的整數倍。
下面具體分析IP包頭中各部分的作用。
版本號(Version):長度4位元。標識目前採用的IP協議的版本號。一般的值為0100(IPv4),0110(IPv6)
IP包頭長度(Header Length):長度4位元。這個欄位的作用是為了描述IP包頭的長度,因為在IP包頭中有變長的可選部分。該部分佔4個bit位,單位為32bit(4個位元組),即本區域值= IP頭部長度(單位為bit)/(8*4),因此,一個IP包頭的長度最長為“1111”,即15*4=60個位元組。IP包頭最小長度為20位元組。
服務型別(Type of Service):長度8位元。8位 按位被如下定義 PPP D T R C 0
PPP:定義包的優先順序
000 普通 (Routine)
001 優先的 (Priority)
010 立即的傳送 (Immediate)
011 閃電式的 (Flash)
100 比閃電還閃電式的 (Flash Override)
101 CRI/TIC/ECP (不知道蝦米意思)
110 網間控制 (Internetwork Control)
111 網路控制 (Network Control)
D 時延: 0:普通 1:儘量小
T 吞吐量: 0:普通 1:儘量大
R 可靠性: 0:普通 1:儘量大
M 傳輸成本: 0:普通 1:儘量小
0 最後一位被保留,恆定為0
IP包總長(Total Length):長度16位元。 以位元組為單位計算的IP包的長度 (包括頭部和資料),所以IP包最大長度65535位元組。
識別符號(Identifier)(資料包ID):長度16位元。該欄位和Flags和Fragment Offest欄位聯合使用,對大的上層資料包進行分段(fragment)操作。路由器將一個包拆分後,所有拆分開的小包被標記相同的值,以便目的端裝置能夠區分哪個包屬於被拆分開的包的一部分。
標記(Flags):長度3 位元。該欄位第一位不使用。第二位是DF(Don't Fragment)位,DF位設為1時表明路由器不能對該上層資料包分段。如果一個上層資料包無法在不分段的情況下進行轉發,則路由器會丟棄該上層資料包 並返回一個錯誤資訊。第三位是MF(More Fragments)位,當路由器對一個上層資料包分段,則路由器會在除了最後一個分段的IP包的包頭中將MF位設為1。
片偏移(Fragment Offset):長度13位元。表示該IP包在該組分片包中位置,接收端靠此來組裝還原IP包。
生存時間(TTL):長度8位元。當IP包進行傳送時,先會對該欄位賦予某個特定的值。當IP包經過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。如果TTL減少為0,則該IP包會被丟棄。這個欄位可以防止由於路由環路而導致IP包在網路中不停被轉發。
協議(Protocol):長度8位元。標識了上層所使用的協議。
以下是比較常用的協議號:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
頭部校驗(Header Checksum):長度16位。用來做IP頭部的正確性檢測,但不包含資料部分。 因為每個路由器要改
變TTL的值,所以路由器會為每個通過的資料包重新計算這個值。
起源和目標地址(Source and Destination Addresses):這兩個地段都是32位元。標識了這個IP包的起源和目標地址。要注意除非使用NAT,否則整個傳輸的過程中,這兩個地址不會改變。
至此,IP包頭基本的20位元組已介紹完畢,此後部分屬於可選項,不是必須的部分。
可選項(Options):這是一個可變長的欄位。該欄位屬於可選項,主要用於測試,由起源裝置根據需要改寫。可選專案包含以下內容:
鬆散源路由(Loose source routing):給出一連串路由器介面的IP地址。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個IP地址之間跳過多個路由器。
嚴格源路由(Strict source routing):給出一連串路由器介面的IP地址。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中則表示發生錯誤。
路由記錄(Record route):當IP包離開每個路由器的時候記錄路由器的出站介面的IP地址。
時間戳(Timestamps):當IP包離開每個路由器的時候記錄時間。
填充(Padding):因為IP包頭長度(Header Length)部分的單位為32bit,所以IP包頭的長度必須為32bit的整數倍。因此,在可選項後面,IP協議會填充若干個0,以達到32bit的整數倍。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-704282/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- IP資料包格式詳解
- 結構詳解
- RNN 結構詳解RNN
- IP資料包頭部資訊分析
- 閉包用法結合例項詳解
- IP地址結構
- MachO 檔案結構詳解Mac
- 資料結構:棧詳解資料結構
- Tomcat結構原理詳解Tomcat
- JavaScript --- Map集合結構詳解JavaScript
- JavaScript — Map集合結構詳解JavaScript
- MySQL體系結構詳解MySql
- IP地址詳解
- IP報文頭部圖解圖解
- Rocks 頭結點更改public IP 上網IP地址薦
- 高階資料結構詳解資料結構
- 線性表的結構詳解
- Angular專案目錄結構詳解Angular
- Go 結構體標籤詳解Go結構體
- MySQL體系結構圖詳解MySql
- 【00】Oracle體系結構詳解Oracle
- SQLite SQL語句結構詳解SQLite
- Redis資料結構詳解(一)Redis資料結構
- Http頭資訊詳解HTTP
- 位元組碼檔案結構詳解
- JVM之記憶體結構詳解JVM記憶體
- NumPy之:結構化陣列詳解陣列
- OSI七層網路結構詳解
- Tomcat的目錄結構詳解Tomcat
- vue-cli專案結構詳解Vue
- TCP/IP協議詳解TCP協議
- IP校驗和詳解
- 詳解華為錢包
- JavaScript閉包詳解JavaScript
- 閉包詳解一
- 詳解 JavaScript 閉包JavaScript
- Struts jar包詳解JAR
- javascript 閉包詳解JavaScript