在網(wǎng)絡(luò)分析領(lǐng)域,偏移量是一個(gè)頻繁出現(xiàn)的術(shù)語(yǔ),,如IP分段偏移量,、TCP偏移量、位偏移,,基于數(shù)據(jù)包偏移,、基于協(xié)議偏移等等。那它們到底是什么含義,,有什么區(qū)別呢,?帶著這些疑問(wèn),我查閱了一些TCP/IP書籍,,并對(duì)其有了一定的了解,。下面我就將我的個(gè)人理解與大家一起共同分享,。歡迎拍磚啊,!?。海?br>1 IP分段偏移量 IP數(shù)據(jù)包在網(wǎng)絡(luò)中進(jìn)行傳輸,如果數(shù)據(jù)包的大小超過(guò)網(wǎng)絡(luò)設(shè)備的MTU值,,則需要進(jìn)行分段傳輸,。分段偏移量用來(lái)標(biāo)識(shí)數(shù)據(jù)包在該數(shù)據(jù)流中的位置,也可以理解為使用同一個(gè)IP標(biāo)識(shí)發(fā)送多個(gè)數(shù)據(jù)包時(shí)的順序號(hào),。發(fā)送主機(jī)給第一個(gè)分段數(shù)據(jù)包的偏移量賦值為0,,對(duì)于其后的分段,該偏移量的值是MTU值減去上一個(gè)IP報(bào)頭的大小,,所以我們也可以說(shuō)IP分段偏移量是指數(shù)據(jù)包中某個(gè)分段相對(duì)與第一分段在數(shù)據(jù)包中的位置,。 下面我們舉一個(gè)實(shí)例。我在我的機(jī)器(192.168.0.90)的CMD窗口中執(zhí)行“ping 192.168.0.1 -l 3000 -n 1”命令,,同時(shí)在科來(lái)網(wǎng)絡(luò)分析系統(tǒng)中設(shè)定一個(gè)過(guò)濾器,只捕獲從192.168.0.90到192.168.0.1的單方向數(shù)據(jù),,由于3000遠(yuǎn)遠(yuǎn)大于了以太網(wǎng)的MTU值,,所以它會(huì)被分段傳輸。這時(shí)我們來(lái)看捕獲到的數(shù)據(jù)包,,如圖1所示,。
從圖1可知中,共捕獲到了三個(gè)數(shù)據(jù)包,,第一個(gè)協(xié)議是ICMP,,后面兩個(gè)是IP Fragment,前面兩個(gè)數(shù)據(jù)包的大小是1518字節(jié),,第三個(gè)是86字節(jié),。第一個(gè)數(shù)據(jù)包的IP偏移量是0,第二個(gè)是185,,第三個(gè)是370,。 這三個(gè)數(shù)據(jù)包的詳細(xì)情況如下表: 數(shù)據(jù)包編號(hào) IP分段標(biāo)志 IP偏移量 傳輸數(shù)據(jù) 1 更多分段置1 0 0字節(jié) 1518-14-20-8-4=1472 2 更多分段置1 185 1480字節(jié) 1518-14-20-4=1480 3 更多分段置0 370 2960字節(jié) 86-14-20-4=48 上表中,第1個(gè)數(shù)據(jù)包中,,多了一個(gè)ICMP報(bào)頭,,所以在計(jì)算傳輸?shù)臄?shù)據(jù)時(shí),多減了8個(gè)字節(jié)的ICMP報(bào)頭,,而后面的兩個(gè)數(shù)據(jù)包由于存在ICMP的報(bào)頭開銷,,所以不需要減去8字節(jié)的ICMP報(bào)頭。將傳輸?shù)臄?shù)據(jù)加起來(lái),,1472+1480+48=3000,,與測(cè)試的數(shù)據(jù)完全吻合,。 注意:如果有更多的分段,按照此規(guī)則依次累加即可,,同時(shí)所有分段數(shù)據(jù)包的IP標(biāo)識(shí)都是相同的,。
2 TCP偏移量 TCP偏移量出現(xiàn)在TCP報(bào)頭里,它主要是指TCP報(bào)頭的長(zhǎng)度,。TCP偏移量字段的長(zhǎng)度是1字節(jié),,以32比特(4個(gè)字節(jié))字長(zhǎng)表示TCP報(bào)頭的長(zhǎng)度。不包含選項(xiàng)的TCP報(bào)頭長(zhǎng)為20個(gè)字節(jié),,用TCP偏移量來(lái)表示就是5(5X4=20個(gè)字節(jié)),,如圖2所示。如果TCP報(bào)頭中有選項(xiàng),,TCP的報(bào)頭長(zhǎng)度則會(huì)按照4的倍數(shù)進(jìn)行累加,,如有一個(gè)選項(xiàng)時(shí),TCP報(bào)頭長(zhǎng)度是24字節(jié),,這時(shí)TCP偏移量是6,,有兩個(gè)選項(xiàng)時(shí),TCP報(bào)頭長(zhǎng)度是28字節(jié),,這時(shí)TCP偏移量是7,。
3 位偏移量 有些報(bào)頭的某些字段,每位都表示不同的含義,,而一個(gè)數(shù)據(jù)包可同時(shí)有1位或多位置1,,比如TCP標(biāo)志字段。簡(jiǎn)單的說(shuō)位偏移量是指字段中某一位在該字段中的位置,。我們來(lái)看看TCP的標(biāo)志字段,。如圖3所示。
圖3中高亮顯示的是同步位置1時(shí)的情況,,也就是說(shuō)該數(shù)據(jù)包是一個(gè)TCP同步數(shù)據(jù)包,。TCP同步數(shù)據(jù)包的值是TCP標(biāo)志位的值是10(二進(jìn)制)或02(16進(jìn)制)或2(10進(jìn)制,8進(jìn)制),。同時(shí)我們從圖中可知,,該字段中的每一位都有不同的掩碼,我們?cè)谔囟ǚ治鲂枰O(shè)定位偏移的過(guò)濾器時(shí),,即可通過(guò)設(shè)定該掩碼的值實(shí)現(xiàn)過(guò)濾,。如只希望捕獲網(wǎng)絡(luò)中的同步數(shù)據(jù)包,我們只需設(shè)定如圖4所示的過(guò)濾器并根據(jù)該過(guò)濾器捕獲數(shù)據(jù)即可,。 4 基于數(shù)據(jù)包偏移和基于協(xié)議偏移 偏移量的計(jì)算一般按兩種類型:基于數(shù)據(jù)包類型和基于協(xié)議偏移,。 4.1 基于數(shù)據(jù)包偏移 基于數(shù)據(jù)包偏移的偏移量算法,是從以太網(wǎng)報(bào)頭作為基準(zhǔn)點(diǎn),向后開始計(jì)算特定字段的偏移量,,這里我仍然以TCP標(biāo)志字段為例,,說(shuō)明基于數(shù)據(jù)包偏移的偏移量計(jì)算方法。圖5所示的是一個(gè)TCP確認(rèn)數(shù)據(jù)包,,我們借助圖5查看TCP標(biāo)志位的偏移量,。
由于是以以太網(wǎng)報(bào)頭作基準(zhǔn),所以這個(gè)數(shù)據(jù)包中的TCP標(biāo)志位偏移量應(yīng)該是以下報(bào)頭的相加的總和: Ethernet II報(bào)頭14,,IP報(bào)頭20,,TCP源端口2,TCP目標(biāo)端口2,,TCP序列號(hào)4,,TCP確認(rèn)號(hào)4,TCP偏移量1,。 所以,,在基于數(shù)據(jù)包偏移的情況下,該數(shù)據(jù)包的TCP標(biāo)志字段偏移量是14+20+2+2+4+4+1=47,。 4.2 基于協(xié)議偏移 基于協(xié)議偏移的偏移量算法,,是以某種協(xié)議為基準(zhǔn)點(diǎn),向后開始計(jì)算特定字段的偏移量,,而并非從以太網(wǎng)報(bào)頭開始,。我們還是以圖5中TCP標(biāo)志位偏移量來(lái)舉例。 在這種情況下,,這個(gè)數(shù)據(jù)包如果按照TCP協(xié)議進(jìn)行偏移,,那么TCP標(biāo)志位的偏移量應(yīng)該是以下字段的相加總和: TCP源端口2,,TCP目標(biāo)端口2,,TCP序列號(hào)4,TCP確認(rèn)號(hào)4,,TCP偏移量1,。 所以,TCP標(biāo)志字段在這個(gè)數(shù)據(jù)包的偏移量是2+2+4+4+1=13,。 注意: 基于數(shù)據(jù)包的偏移,,只匹配了偏移值,沒有進(jìn)行協(xié)議匹配,,可能出現(xiàn)誤差,。所以,在精確度較高,,且分析軟件支持的情況下,,應(yīng)盡量使用基于協(xié)議偏移的偏移量計(jì)算方法,這樣的分析結(jié)果可能更準(zhǔn)確,。
————————————————————————————————————————————————————————————
PS:抱歉里面的圖片我沒有引用過(guò)來(lái),,但若熟悉協(xié)議,,使用過(guò)嗅探工具,很容易看明白,。謝謝CSDN的菜鳥飛人.
freedom,i like it.
|