IP報文結(jié)構(gòu)
一、IP數(shù)據(jù)報文結(jié)構(gòu)如下:

各字段解釋如下:
1,version:版本號,4bits,指IP協(xié)議的版本。
2,header length:首部長度,4bits,單位為4字節(jié),故***長度為4*(2^4-1)=60字節(jié),首部固定部分長度為20字節(jié),可變部分為0~40字節(jié)。
3,differentiated services:服務(wù)類型,8bits,組成如下:
過程字段:3位,設(shè)置了數(shù)據(jù)包的重要性,取值越大數(shù)據(jù)越重要,取值范圍為:0(正常)~ 7(網(wǎng)絡(luò)控制)
延遲字段:1位,取值:0(正常)、1(期特低的延遲)
流量字段:1位,取值:0(正常)、1(期特高的流量)
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
成本字段:1位,取值:0(正常)、1(期特最小成本)
保留字段:1位 ,未使用
4,total length:總長度,16bits,首部加上數(shù)據(jù)的長度總和,單位為字節(jié),故數(shù)據(jù)報***長度為2^16-1=65525字節(jié)。另外總長度必須不超過***傳送單元MTU。
5,identification:標(biāo)識,16bits,計數(shù)器,作為數(shù)據(jù)報標(biāo)識。當(dāng)數(shù)據(jù)報需要分片時,該標(biāo)識用來表示同屬一個數(shù)據(jù)報的分片。需要分片時結(jié)合以下flags、fragment offset一起使用。
6,flags:標(biāo)志,3bits,記為D0-D1-D2,各自意義如下:
D0:1表示有后續(xù)分片,0表示該數(shù)據(jù)報為***一片。
D1:1表示不分片,0表示分片。
D2:保留位,未使用。
7,fragment offset:片偏移,13bits,單位為8字節(jié),表示分片后的某分片在原分組中的相對位置。
8,time to live:生存時間,8bits,表示數(shù)據(jù)報在網(wǎng)絡(luò)中的壽命,單位為跳,經(jīng)過一個路由表示一跳,該值減 一,到零則丟棄。
9,protocal:協(xié)議,8bits,指出使用該包裹的上層協(xié)議,如TCP=6,ICMP=1,UDP=17等。
10,header checksum:首部(不包括數(shù)據(jù)部分)檢驗和,16bits。這里不采用 CRC 檢驗碼而采用簡單的“反碼算術(shù)求和”計算方法。
11,source address:源地址,32bits,即源IP地址。
12,destination address:目的地址,32bits,即目的IP地址。
13,options:可選字段,長度可變,1~40字節(jié)。用于增加IP數(shù)據(jù)報的控制功能。
14,另外還有個填充字段,上圖中未顯示,該字段用來保證首部的長度為4字節(jié)的整數(shù)倍。
15,Data:用戶數(shù)據(jù)。
二、用抓包工具抓IP數(shù)據(jù)報,截圖如下:

由圖可知,該IP首部只有20個字節(jié),各字段值分別為:
version(4):4。
header length(4):5 * 4 = 20 bytes。
differentiated services(8):ox00。
total length(16):ox0034,3*16 + 4 = 52 bytes,由上圖可知,IP報文長度為66 -14 = 52,前面14字節(jié)為以太網(wǎng)幀中的部分數(shù)據(jù),其實就是兩個mac(6byte)地址再加一個2字節(jié)的type。
identification(16):ox4c46,19526。
flags(3):二進制010,可知該數(shù)據(jù)報不分片且為***片。
fragment offset(13):二進制0 0000 0000 0000。
time to live(8):0x40,即64跳。
protocal(8):0x06,即上層協(xié)議為TCP。
header checksum(16):0xd7e8。
source address(32):0xc0a80569,即192.168.5.105。
destination address(32):ox774bd938,即119.75.217.56。
options(1~40):無