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