前言:IP協(xié)議傳輸過程與數(shù)據(jù)分片
當我們進行數(shù)據(jù)傳輸時,操作系統(tǒng)會創(chuàng)建一個 ICMP Echo Request 數(shù)據(jù)包,并在該數(shù)據(jù)包中包含要發(fā)送的目標 IP 地址。然后操作系統(tǒng)將數(shù)據(jù)包傳遞給網(wǎng)絡協(xié)議棧,該數(shù)據(jù)包被封裝成 IP 數(shù)據(jù)包。IP 數(shù)據(jù)包的頭部包含源 IP 地址和目標 IP 地址等信息。封裝后的 IP 數(shù)據(jù)包被傳遞到數(shù)據(jù)鏈路層(如以太網(wǎng)),這樣它就可以通過網(wǎng)絡適配器發(fā)送到目標 IP 地址所在的網(wǎng)絡。
然而,如果 ICMP Echo Request 數(shù)據(jù)包的大小超出了網(wǎng)絡的最大傳輸單元(MTU),則數(shù)據(jù)包可能會被分片,以保證正確的傳輸,每個分片會被封裝成一個獨立的 IP 數(shù)據(jù)包,但它們都攜帶相同的標識符(Identification)字段,以便接收端能夠重新組裝這些分片。稱此過程為IP地址劃分及IP分片重組。
接下來,我們就通過Wireshark抓包來分析IP協(xié)議。
Ping目標主機并發(fā)送數(shù)據(jù)包
向目標主機發(fā)送一個字節(jié)為3200的數(shù)據(jù)包:
由上圖,wireshark抓到六個包,其中三個為請求包,另外三個為目標主機的響應包。
由于數(shù)據(jù)幀的最大傳輸限制(MTU)是1500字節(jié),我們 ping 的數(shù)據(jù)包是 3400 字節(jié),會被IP協(xié)議分割成三個數(shù)據(jù)包,分別為1500字節(jié)、1500字節(jié)、400字節(jié)。
看下面這張圖:
這張圖是我們的第一個請求包的數(shù)據(jù),圖中圈起來的More Fragments
表示這個數(shù)據(jù)包之后有多余的數(shù)據(jù)分片,也就是說這個包的字節(jié)已經(jīng)滿了,多余的字節(jié)在第二個數(shù)據(jù)分片(數(shù)據(jù)包)中;Fragment Offset字段的值是0,表示第一個數(shù)據(jù)分片從第0個字節(jié)開始保存數(shù)據(jù)。
接著我們看第二個請求包:
同樣地,這個包之后還是有多的數(shù)據(jù)分片;Fragment Offset字段的值是1480,表示這個數(shù)據(jù)包從第1480個字節(jié)開始保存數(shù)據(jù)。
所以我們就能知道,第一個數(shù)據(jù)包存儲了1480個字節(jié),再加上每個包首部有20個字節(jié),加起來等于MTU,這也就印證了前言。
在 IPv4 中,每個 IP 數(shù)據(jù)包的首部都有固定的長度為20字節(jié)(不包括選項字段)。這是由于 IPv4 首部的結構是固定的,它包含了一些必需的字段來標識源地址、目標地址、數(shù)據(jù)包長度、協(xié)議類型等信息。
接著看第三個請求包:
可以看到More Fragments字段消失了,即沒有多余的字節(jié)需要下一個數(shù)據(jù)包儲存,毋庸置疑,這是最后一個數(shù)據(jù)包;Fragment Offset字段的值是2960,所以第二個數(shù)據(jù)包存儲的字節(jié)為2960-1480=1480,再加上首部的20字節(jié),剛好為MTU,這也驗證了前言。
我們也可以從第三個數(shù)據(jù)包中看到:
我們發(fā)送的3200字節(jié)的數(shù)據(jù)包被分成了三個 IPv4 分片,編號為 #1633、#1634 和 #1635。每個分片的大小和偏移如下:
- #1633 分片大小為 1480 字節(jié),分片偏移為 0 字節(jié)。
- #1634 分片大小為 1480 字節(jié),分片偏移為 1480 字節(jié)。
- #1635 分片大小為 448 字節(jié),分片偏移為 2960 字節(jié)。
在接受三個數(shù)據(jù)分片后,目標主機能夠根據(jù)這些信息將數(shù)據(jù)分片進行重組。
生存時間
在上圖圈起來的行中,可以看到ttl=128、ttl=51的字段,這是什么意思呢?
TTL (Time to Live) 是 IPv4 數(shù)據(jù)包頭部中的一個字段,它指定了數(shù)據(jù)包在網(wǎng)絡中可以經(jīng)過的最大路由跳數(shù)。每當數(shù)據(jù)包經(jīng)過一個路由器時,該路由器會減少1個 TTL 值,直到 TTL 值為0,數(shù)據(jù)包將被丟棄,同時路由器會發(fā)送一個 ICMP 時間超時消息回到數(shù)據(jù)包的源地址,通知源地址數(shù)據(jù)包已經(jīng)被丟棄。這樣,源地址可以根據(jù)這個信息來確定是否有網(wǎng)絡問題或者路徑選擇錯誤。
TTL 字段的主要目的是防止數(shù)據(jù)包在網(wǎng)絡中無限循環(huán)。
由請求包與響應包TTL的差值,可以知道數(shù)據(jù)在發(fā)送到返回的過程中經(jīng)過了77個路由。文章來源:http://www.zghlxwxcb.cn/news/detail-780054.html
cmd中接受到的回復信息與抓到的返回包存在一致性。文章來源地址http://www.zghlxwxcb.cn/news/detail-780054.html
到了這里,關于【網(wǎng)絡安全 | 網(wǎng)絡協(xié)議】結合Wireshark講解IP協(xié)議的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!