IP報文的分片與重組(ipv4)


數據鏈路的不同,導致鏈路上的MTU(最大傳輸單元)也不盡相同,比如對於IP來說最大的MTU是65535字節,但是這個65535字節的MTU僅僅對於IP上一層的TCP,UDP來說可以看做這么大。

對於以太網傳輸IP報文,由於以太網的最大MTU是1500字節,假如傳輸4342字節的IP數據包,就無法在一個幀中完成發送,這時就需要用到IP分片(IP Fragmentation)。

Tips:分片以8個字節的倍數為單位進行

 

分片之后的IP數據包在傳輸的過程中如果遇到了需要檢查IP上層的TCP、UDP或者其他應用層信息時(防火牆,NAT,端應用),還需要將分片重組,以方便提取IP上層的信息,檢查之后又會按照原分片進行拆分。

 

分片機制也有一定的不足,中途路由器還做分片處理使得路由器的處理負擔加重,不利於鏈路上的高速傳輸,還有,TCP的一個小分片丟失會導致整個數據包重傳。

 

路徑MTU發現技術

PMTUD——Path MTU Discovery ,所謂路徑MTU(PMTU)是指從發送端主機到接收端主機之間不需要分片的最大MTU的大小,可以避免在中途的路由器上進行分片處理。

PMTUD的工作原理:

1.在發送端主機發送IP數據包時將首部的分片禁止標志位置為1

2.數據包傳輸途中路由器遇到需要分片的大包也不分片,而是直接丟棄

3.通過ICMP的不可達消息將鏈路MTU返回給主機

4.主機下一次發送根據返回的MTU進行分片處理再發送

5.如果路上又遇到下一台路由器需要分片,則又直接丟棄,返回帶MTU的ICMP

6.主機再次根據這個MTU進行分片,不斷循環,直到最后一次設置的MTU整個路徑都不用分片

7.對於UDP來說,分片指UDP傳過來的UDP首部和UDP數據在IP層被分片,對於IP,不區分UDP的首部和數據,所有分片到達目標主機后先被重組,再傳給UDP層

8.對於TCP來說,分片指TCP超時時自動按照比例縮減MSS的大小,重傳數據包,TCP將數據分成IP層不會再被細分的粒度后傳給IP層,IP層不再做分片處理,所有分片到達目標主機后,照原樣傳給TCP層,而不用先被重組

 

IPv4首部中部分字段

總長度-Total Length

表示IP首部和數據部分加起來的總字節數,該字段長16比特,所以IP包最大長度 2^16=65535字節

標識-Identification

用於分片重組,長16比特,同一組分片的標識值相同(即使標識相同,源目的地址或者協議不同也視為不同分片),不同分片的標識值不同

標志-Flags

長3比特,比特0,未用;比特1,表示dont fragment,0-可以分片,1-不能分片;比特2,表示是否為最后一個包,0-最后一個分片包,1-分片中段的包

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM