IP分片與重組

2021-07-12 02:07:29 字數 1752 閱讀 6407

物理網路層一般要限制每次傳送的資料幀的最大長度,當ip層接收到乙份要傳送的ip資料報時,它要判斷向本地哪個介面傳送資料,並查詢該介面獲得其mtu。ip把mtu與資料報長度進行比較,如果資料報大於mtu則進行分片。分片可以發生在原始傳送端主機上,也可以發生在中間路由器上。

mtu指定了網路中可傳輸資料報的最大尺寸,在我們常用的乙太網中,mtu是1500byte。

檢視本地連線的mtu:netsh inte***ce ipv4 show subinte***ces

設定本機mtu值一定要小於或等於路由器的mtu值

當提交給資料鏈路層進行傳送時,乙個ip分片或乙個很小的無需分片的ip資料報稱為分組。資料鏈路層在分組前面加上它自己的首部,並傳送得到的幀。

ip首部關於分片和重組的字段:

3位標誌

identification:傳送端傳送的ip資料報標識欄位都是乙個唯一值,該值在分片時被複製到每個片中。

r:保留未用。

df:don』t fragment,「不分片」位,如果將這一位元置1 ,ip層將不對資料報進行分片。

mf:more fragment,「更多的片」,除了最後一片外,其他每個組成資料報的片都要把該位元置1。

fragment offset:該片偏移原始資料報開始處的位置。偏移的位元組數是該值乘以8。

進行分片時,df位元設定為0,表示可以進行分片,這時如果 mf的值為1,則表示當前ip報文是乙個ip包的其中一段分片,並且不是最後乙個分片,這時結合fragment offset域繼續判斷;如果mf為1而 fragment offset = 0,表示該ip報文為第乙個分片,而且後續有分片;如果mf為1而fragment offset不是0,表示該ip報文為中間的乙個分片;如果mf為0而fragment offset不是0,表示該報文是最後乙個分片。另外,當資料報被分片後,每個片的總長度值要改為該片的長度值。

如果將df位元設定為1,則ip將不對資料報進行分片。相反把資料報丟棄並傳送乙個icmp差錯報文給起始端(需要分片但設定了不分片)。

把乙份ip資料報分片以後,只有到達目的地才進行重新組裝,與其他網路協議不同,他們要求在下一站就進行重新組裝,而不是在最終的目的地。重新組裝由目的端的ip層來完成,其目的是使分片和重組過程對運輸層透明。已經分片過的資料報有可能會再次進行分片,ip首部中包含的資料為分片和重組提供了足夠的資訊。

分片實驗:ping 192.168.0.208 –l 2000 指定資料報大小,使用工具抓包檢視

採用tcp協議進行資料傳輸,是不會造成ip分片的。若資料過大,只會在傳輸層進行資料分段,到了ip層就不用分片。ip分片產生的原因是網路層的mtu;而tcp分段產生原因是mss。對於乙太網,mss為1460位元組,而mut(預設為1500)往往會大於mss。ip分片由網路層完成,也在網路層進行重組;tcp分段是在傳輸層完成,並在傳輸層進行重組.。

因此tcp協議進行傳輸一般不會造成分片,而udp傳輸可能會造成ip分片。

另: linux核心中的ip重組過程,核心**版本2.4.26:

IP分片重組

libnids ip重組 收藏 1 ip分片 任何ip層接收到乙份要傳送的ip資料報時,它要判斷向本地哪個介面傳送資料,並查詢該介面的mtu。ip把mtu與資料報的長度進行比較,如果需要則進行分片。分片可以發生在原始傳送端主機上,也可以傳送在中間路由器上。ip資料報分片後,只有到達目的主機後才進行重...

分片報文的最後一片 IP分片(碎片)重組簡單概念

鏈路層具有最大傳輸單元mtu這個特性,它限制了資料幀的最大長度,不同的網路型別都有乙個上限值。乙太網的mtu是1500,可以用 netstat i 命令檢視這個值。如果ip層有資料報要傳,而且資料報的長度超過了mtu,那麼ip層就要對資料報進行分片 fragmentation 操作,使每一片的長度都...

IP分片與TCP分片的考慮

剛剛終於想明白了關於tcp分片後,為什麼抓包是從來沒看到過ip分片,而在pingicmp報文的時候,很容易就出現ip分片。之前考慮問題只考慮了一方面 作為接收方,tcp的mss欄位和ip的mtu欄位,在tcp連線的前兩次握手時,溝通好了,以小的值為最大傳輸位元組。一般情況下mtu 40 mss。具體...