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

查看詳細的數據包解碼(見下圖):

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

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