IP數(shù)據(jù)包結(jié)構(gòu)詳解
IP報(bào)文是在網(wǎng)絡(luò)層傳輸?shù)臄?shù)據(jù)單元,也叫IP數(shù)據(jù)報(bào)。IP報(bào)文格式如下圖:
- 版本:
IP協(xié)議的版本,目前的IPV4
,以后會(huì)是IPV6
。
- 首部長(zhǎng)度:
IP報(bào)頭的長(zhǎng)度。固定部分的長(zhǎng)度(20字節(jié)
)和可變部分的長(zhǎng)度之和。共占4
位。最大為1111
,即10進(jìn)制
的15
,代表IP報(bào)頭的最大長(zhǎng)度可以為15個(gè)32bits
(4字節(jié)),也就是最長(zhǎng)可為15*4=60
字節(jié),除去固定部分的長(zhǎng)度20字節(jié),可變部分的長(zhǎng)度最大為40字節(jié)。也就是IP數(shù)據(jù)包最小為20字節(jié)
,最大為60字節(jié)
。
- 服務(wù)類型:
這個(gè)一般沒什么用,因?yàn)槟憔退氵x了也沒效果,只有在QOS
或其他特殊情況下才會(huì)使用到。
- 總長(zhǎng)度:
用來記錄IP報(bào)文的總長(zhǎng)度。報(bào)頭的長(zhǎng)度和數(shù)據(jù)部分的長(zhǎng)度之和。
- 標(biāo)識(shí):
唯一的標(biāo)識(shí)主機(jī)發(fā)送的每一分?jǐn)?shù)據(jù)報(bào)。通常每發(fā)送一個(gè)報(bào)文,它的值加一。當(dāng)IP報(bào)文長(zhǎng)度超過傳輸網(wǎng)絡(luò)的MTU(最大傳輸單元)時(shí)必須分片,這個(gè)標(biāo)識(shí)字段的值被復(fù)制到所有數(shù)據(jù)分片的標(biāo)識(shí)字段中,使得這些分片在達(dá)到最終目的地時(shí)可以依照標(biāo)識(shí)字段的內(nèi)容重新組成原先的數(shù)據(jù)。(說白了就算用來排序的)
- 標(biāo)志:
共3位。R、DF、MF三位。目前只有后兩位有效,DF
位:為1表示不分片,為0表示分片。MF
:為1表示“還有更多的片”,為0表示這是最后一片。
- 片位移:
本分片在原先數(shù)據(jù)報(bào)文中相對(duì)首位的偏移位。(也就是用來IP分片最后排序組合的)
- 生存時(shí)間:
IP報(bào)文所允許通過的路由器的最大數(shù)量。每經(jīng)過一個(gè)路由器,TTL減1,當(dāng)為0時(shí),路由器將該數(shù)據(jù)報(bào)丟棄。TTL 字段是由發(fā)送端初始設(shè)置一個(gè) 8 bit字段.推薦的初始值由分配數(shù)字 RFC
指定,當(dāng)前值為 64。發(fā)送 ICMP
回顯應(yīng)答時(shí)經(jīng)常把 TTL 設(shè)為最大值 255。
- 協(xié)議:
指出IP報(bào)文攜帶的數(shù)據(jù)使用的是那種協(xié)議,以便目的主機(jī)的IP層能知道要將數(shù)據(jù)報(bào)上交到哪個(gè)進(jìn)程(不同的協(xié)議有專門不同的進(jìn)程處理)。和端口號(hào)類似,此處采用協(xié)議號(hào),TCP
的協(xié)議號(hào)為6,UDP
的協(xié)議號(hào)為17。ICMP
的協(xié)議號(hào)為1,IGMP
的協(xié)議號(hào)為2.
- 首部校驗(yàn)和:
計(jì)算IP頭部的校驗(yàn)和,檢查IP報(bào)頭的完整性。