---------------------------------------------------------------------------------------------- 我們都知道,在以太網(wǎng)中,如果源主機向目標(biāo)主機發(fā)送的數(shù)據(jù)包大于網(wǎng)關(guān)MTU,則該數(shù)據(jù)包在傳輸過程中會被IP協(xié)議分片傳輸,具體的分片過程是怎樣的呢?我們通過協(xié)議分析軟件抓包來進(jìn)行詳細(xì)的查看(抓包軟件使用科來網(wǎng)絡(luò)分析系統(tǒng))。
因為以太網(wǎng)默認(rèn)的MTU值為1500Byte,所以,為了達(dá)到分片的效果,我們應(yīng)該傳輸大于1500Byte字節(jié)的數(shù)據(jù)包,才能使該數(shù)據(jù)包分段傳輸。
我們從本機(192.168.6.11)發(fā)送一個2000字節(jié)的數(shù)據(jù)包到局域網(wǎng)的另一臺主機(192.168.0.208)為例,在傳輸?shù)倪^程中,開啟軟件抓包,就能夠查看到詳細(xì)的分片結(jié)果。
我們以ping為例,在Windows命令提示符下輸入:ping 192.168.0.208 –l2000
通過科來網(wǎng)絡(luò)分析系統(tǒng)抓包,我們看到,該數(shù)據(jù)包被分片了,由于我們重復(fù)Ping了4次,所以,抓到了4次同樣的請求與回顯的數(shù)據(jù)包。如下圖:

查看詳細(xì)的數(shù)據(jù)包解碼(見下圖):

分析:因為ping的長度是2000字節(jié),大于了MTU的值,所以會分片發(fā)送,如上圖。捕獲的這個數(shù)據(jù)包總長度為1500字節(jié),更多分段位置1,表示還有數(shù)據(jù)分段。s,偏移量為0,需要注意的是IP頭部的總長度字段值(這里是1500字節(jié))并不全是數(shù)據(jù)的凈載荷長度,這里還包括了IP以及ICMP的頭部長度,分別是20字節(jié)和8字節(jié)。
另外,IP協(xié)議的頭部總長度并不一定就是MTU值1500字節(jié),這個值與網(wǎng)絡(luò)環(huán)境、操作系統(tǒng)等因素有關(guān)。
下圖是第一個分片包。

分析:IP字段的標(biāo)識0x787F,與第一個包相同,說明這是同一個數(shù)據(jù)包,只是被分片了。 偏移量為185,表示相對第一個包的位置,以便接收主機根據(jù)偏移量進(jìn)行數(shù)據(jù)重組。 需要注意的是此處分片包并沒有ICMP字段,接收主機會可以根據(jù)偏移重組成完整的ICMP數(shù)據(jù)包。
最后,我們來計算一下該數(shù)據(jù)包的長度:第一個數(shù)據(jù)包的總長度為1500字節(jié),減去IP頭部長度20字節(jié),減去ICMP頭部長度8字節(jié),即1500-20-8=1472字節(jié);第二個數(shù)據(jù)包的總長度為548字節(jié),減去IP頭部長度20字節(jié),即548-20=528字節(jié),兩個數(shù)據(jù)包的凈載荷1472+528=2000,正好是我們發(fā)送的數(shù)據(jù)長度。 -------------------------------------------------------------------------------------------------
1.IP分片產(chǎn)生的原因是網(wǎng)絡(luò)層的MTU;TCP分段產(chǎn)生原因是MSS.
2.IP分片由網(wǎng)絡(luò)層完成,也在網(wǎng)絡(luò)層進(jìn)行重組;TCP分段是在傳輸層完成,并在傳輸層進(jìn)行重組. //透明性
3.對于以太網(wǎng),MSS為1460字節(jié),而MUT(默認(rèn)為1500)往往會大于MSS.
故采用TCP協(xié)議進(jìn)行數(shù)據(jù)傳輸,是不會造成IP分片的。若數(shù)據(jù)過大,只會在傳輸層進(jìn)行數(shù)據(jù)分段,到了IP層就不用分片。
-------------------------------------------------------------------------------------------------
|