在網(wǎng)絡(luò)分析領(lǐng)域,偏移量是一個(gè)頻繁出現(xiàn)的術(shù)語,如IP分段偏移量、TCP偏移量、位偏移,基于數(shù)據(jù)包偏移、基于協(xié)議偏移等等。那它們到底是什么含義,有什么區(qū)別呢?帶著這些疑問,我查閱了一些TCP/IP書籍,并對其有了一定的了解。下面我就將我的個(gè)人理解與大家一起共同分享。歡迎拍磚?。 。海?br>1 IP分段偏移量 IP數(shù)據(jù)包在網(wǎng)絡(luò)中進(jìn)行傳輸,如果數(shù)據(jù)包的大小超過網(wǎng)絡(luò)設(shè)備的MTU值,則需要進(jìn)行分段傳輸。分段偏移量用來標(biāo)識數(shù)據(jù)包在該數(shù)據(jù)流中的位置,也可以理解為使用同一個(gè)IP標(biāo)識發(fā)送多個(gè)數(shù)據(jù)包時(shí)的順序號。發(fā)送主機(jī)給第一個(gè)分段數(shù)據(jù)包的偏移量賦值為0,對于其后的分段,該偏移量的值是MTU值減去上一個(gè)IP報(bào)頭的大小,所以我們也可以說IP分段偏移量是指數(shù)據(jù)包中某個(gè)分段相對與第一分段在數(shù)據(jù)包中的位置。 下面我們舉一個(gè)實(shí)例。我在我的機(jī)器(192.168.0.90)的CMD窗口中執(zhí)行“ping 192.168.0.1 -l 3000 -n 1”命令,同時(shí)在科來網(wǎng)絡(luò)分析系統(tǒng)中設(shè)定一個(gè)過濾器,只捕獲從192.168.0.90到192.168.0.1的單方向數(shù)據(jù),由于3000遠(yuǎn)遠(yuǎn)大于了以太網(wǎng)的MTU值,所以它會(huì)被分段傳輸。這時(shí)我們來看捕獲到的數(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ù)包編號 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ù)加起來,1472+1480+48=3000,與測試的數(shù)據(jù)完全吻合。 注意:如果有更多的分段,按照此規(guī)則依次累加即可,同時(shí)所有分段數(shù)據(jù)包的IP標(biāo)識都是相同的。
2 TCP偏移量 TCP偏移量出現(xiàn)在TCP報(bào)頭里,它主要是指TCP報(bào)頭的長度。TCP偏移量字段的長度是1字節(jié),以32比特(4個(gè)字節(jié))字長表示TCP報(bào)頭的長度。不包含選項(xiàng)的TCP報(bào)頭長為20個(gè)字節(jié),用TCP偏移量來表示就是5(5X4=20個(gè)字節(jié)),如圖2所示。如果TCP報(bào)頭中有選項(xiàng),TCP的報(bào)頭長度則會(huì)按照4的倍數(shù)進(jìn)行累加,如有一個(gè)選項(xiàng)時(shí),TCP報(bào)頭長度是24字節(jié),這時(shí)TCP偏移量是6,有兩個(gè)選項(xiàng)時(shí),TCP報(bào)頭長度是28字節(jié),這時(shí)TCP偏移量是7。
3 位偏移量 有些報(bào)頭的某些字段,每位都表示不同的含義,而一個(gè)數(shù)據(jù)包可同時(shí)有1位或多位置1,比如TCP標(biāo)志字段。簡單的說位偏移量是指字段中某一位在該字段中的位置。我們來看看TCP的標(biāo)志字段。如圖3所示。
圖3中高亮顯示的是同步位置1時(shí)的情況,也就是說該數(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í)我們從圖中可知,該字段中的每一位都有不同的掩碼,我們在特定分析需要設(shè)定位偏移的過濾器時(shí),即可通過設(shè)定該掩碼的值實(shí)現(xiàn)過濾。如只希望捕獲網(wǎng)絡(luò)中的同步數(shù)據(jù)包,我們只需設(shè)定如圖4所示的過濾器并根據(jù)該過濾器捕獲數(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)志字段為例,說明基于數(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序列號4,TCP確認(rèn)號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)志位偏移量來舉例。 在這種情況下,這個(gè)數(shù)據(jù)包如果按照TCP協(xié)議進(jìn)行偏移,那么TCP標(biāo)志位的偏移量應(yīng)該是以下字段的相加總和: TCP源端口2,TCP目標(biāo)端口2,TCP序列號4,TCP確認(rèn)號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:抱歉里面的圖片我沒有引用過來,但若熟悉協(xié)議,使用過嗅探工具,很容易看明白。謝謝CSDN的菜鳥飛人.
freedom,i like it.
|