網絡之間互連的協議也就是為計算機網絡相互連接進行通信而設計的協議。在因特網中,它是能使連接到網上的所有計算機網絡實現相互通信的一套規則,規定了計算機在因特網上進行通信時應當遵守的規則。
什么是報文?
報文(message)是網絡中交換與傳輸的數據單元,即站點一次性要發送的數據塊。報文包含了將要發送的完整的數據信息,其長短很不一致,長度不限且可變。
一、IP數據報文結構如下:
各字段解釋如下:
1,version:版本號,4bits,指IP協議的版本。
2,header length:首部長度,4bits,單位為4字節,故最大長度為4*(2^4-1)=60字節,首部固定部分長度為20字節,可變部分為0~40字節。
3,differentiated services:服務類型,8bits,組成如下:
過程字段:3位,設置了數據包的重要性,取值越大數據越重要,取值范圍為:0(正常)~ 7(網絡控制)
延遲字段:1位,取值:0(正常)、1(期特低的延遲)
流量字段:1位,取值:0(正常)、1(期特高的流量)
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
成本字段:1位,取值:0(正常)、1(期特最小成本)
保留字段:1位 ,未使用
4,total length:總長度,16bits,首部加上數據的長度總和,單位為字節,故數據報最大長度為2^16-1=65525字節。另外總長度必須不超過最大傳送單元MTU。
5,identification:標識,16bits,計數器,作為數據報標識。當數據報需要分片時,該標識用來表示同屬一個數據報的分片。需要分片時結合以下flags、fragment offset一起使用。
6,flags:標志,3bits,記為D0-D1-D2,各自意義如下:
D0:1表示有后續分片,0表示該數據報為最后一片。
D1:1表示不分片,0表示分片。
D2:保留位,未使用。
7,fragment offset:片偏移,13bits,單位為8字節,表示分片后的某分片在原分組中的相對位置。
8,time to live:生存時間,8bits,表示數據報在網絡中的壽命,單位為跳,經過一個路由表示一跳,該值減 一,到零則丟棄。
9,protocal:協議,8bits,指出使用該包裹的上層協議,如TCP=6,ICMP=1,UDP=17等。
10,header checksum:首部(不包括數據部分)檢驗和,16bits。這里不采用 CRC 檢驗碼而采用簡單的“反碼算術求和”計算方法。
11,source address:源地址,32bits,即源IP地址。
12,destination address:目的地址,32bits,即目的IP地址。
13,options:可選字段,長度可變,1~40字節。用于增加IP數據報的控制功能。
14,另外還有個填充字段,上圖中未顯示,該字段用來保證首部的長度為4字節的整數倍。
15,Data:用戶數據。
二、用抓包工具抓IP數據報,截圖如下:
由圖可知,該IP首部只有20個字節,各字段值分別為:
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字節為以太網幀中的部分數據,其實就是兩個mac(6byte)地址再加一個2字節的type。
identification(16):ox4c46,19526。
flags(3):二進制010,可知該數據報不分片且為最后片。
fragment offset(13):二進制0 0000 0000 0000。
time to live(8):0x40,即64跳。
protocal(8):0x06,即上層協議為TCP。
header checksum(16):0xd7e8。
source address(32):0xc0a80569,即192.168.5.105。
destination address(32):ox774bd938,即119.75.217.56。
options(1~40):無
以上就是IP報文的結構的詳細介紹,希望大家看了本片文章以后可以對IP報文有多了解,謝謝閱讀。