下圖為常見的IP報文格式表:
上面是IP的報文格式,接下來我們先說明各個字段的意義。然后,用Etheral軟件轉包分析IP的報文格式。
1.版本:ip報文中,版本占了4位,用來表示該協議采用的是那一個版本的ip,相同版本的ip才能進行通信。一般此處的值為4,表示ipv4。
2.頭長度:該字段用四位表示,表示整個ip包頭的長度,其中數的單位是4字節。即二進制數0000-1111(十進制數0-15),其中一個最小長度為0字節,最大長度為60字節。一般來說此處的值為0101,表示頭長度為20字節。
3.Tos服務字段:該字段用8位表示。該字段一般情況下不使用。
4..總長度:該字段表示整個ip報文的長度,單位是1字節。能表示的最大字節為2^16-1=65535字節。不過由於鏈路層的MTU限制。超過1480字節后就會被分片(以太幀MTU為1500的情況下,除去20字節的包頭)
5.標識:該字段是ip軟件實現的時候自動產生的,該字段的目的不是為了接受方的按序接受而設置的,而是在ip分片以后,用來標識同一片分片的。方便ip分片的重組。
6.標志:該字段是與ip分片有關的。其中有三位,但只有兩位是有效的,分別為MF,DF,MF。MF標識后面是否還有分片,為1時,表示后面還有分片。DF標識是否能分片,為0表示可以分片。
7.片偏移:該字段是與ip分片后,相應的ip片在總的ip片的位置。該字段的單位是8字節。比如,一個長度為4000字節的ip報文,到達路由器。這是超過了鏈路層的MTU,需要進行分片,4000字節中,20字節為包頭,3980字節為數據,需要分成3個ip片(鏈路層MTU為1500),那么第一個分片的片偏移就是0,表示該分片在3980的第0位開始,第1479位結束。第二個ip片的片偏移為185(1480/8),表示該分片開始的位置在原來ip的第1480位,結束在2959。第三片的片偏移為370(2960/8),表示開始的時候是2960位,結束的時候在3979位。
8.TTL:該片表示生存周期,該值占8位。ip分片每經過一個路由器該值減一,它的出現是為了防止路由環路,浪費帶寬的問題。比如,該ip在R1路由器發送到R2路由器。R2路由器又發給R1路由器。防止這種循環。window系統默認為128.
9.協議:該值標識上層的協議。占8位。其中1,標識ICMP、2標識IGMP、6標識TCP、17標識UDP、89標識OSPF。
10校驗和:該值是對整個數據包的包頭進行的校驗。占16位。
11.源地址和目的地址。標識發送ip片的源和目的ip,32位
12.接下來是可選的部分,一般一些特殊的要求會加在這個部分。
13:數據
j接下來,我們用一個具體的ip報文來進行分析。該報文是Etheral報文分析軟件抓的包。
這是是ip報文的第一行,Version是版本,Header length是頭長度,Differentiated Services Field就是區分服務,Total Lehgth為總長度。
其中,45 00 05 dc 為上面的四個信息的傳輸過程中的值,這里面一個數代表4位二進制數。其中,4和5分別表示版本,頭長度,00表示TOS為0。05,
這是ip報文的第二行,Identification 位標識,FLags為標志,在這里可以看到MF為 set 標識還有分片,DF為not set可以分片。片偏移為0.標識這是初始的ip片
90 ad 20 00 為上面的標識字段,90 ad 標識該ip的標識, 2轉換為二進制為0010,其中前三位001位標志,后面的0,是13位的標識的一部分。
這是 TTL 協議 檢驗和這幾部分。可以看到TTL為12,上層協議為ICMP,頭部檢驗和為true.
80 01 ef 05為相應字段的值80位生存時間轉換成10進制為128. 01為協議。ef 05為首部檢驗和。
上面是源和目的IP,
下面是相應的編碼
c0 a8 0a 0e 為源ip
c0 a8 0a of 為目的ip
以上就是我對於ip報文的理解。