1. 程式人生 > >TCP/IP具體解釋--TCP的分段和IP的分片

TCP/IP具體解釋--TCP的分段和IP的分片

能夠 重傳機制 選項 來看 即使 pos ip協議 一個數 信息

寫在前面:

分組能夠發生在運輸層和網絡層。運輸層中的TCP會分段,網絡層中的IP會分片。IP層的分片很多其它的是為運輸層的UDP服務的,因為TCP自己會避免IP的分片,所以使用TCP傳輸在IP層都不會發生分片的現象。

我們在學習TCP/IP協議時都知道。TCP報文段假設非常長的話,會在發送時發生分段。在接受時進行重組,相同IP數據報在長度超過一定值時也會發生分片,在接收端再將分片重組。

我們先來看兩個與TCP報文段分段和IP數據報分片密切相關的概念。

MYU(最大傳輸單元)

MTU前面已經說過了,是鏈路層中的網絡對數據幀的一個限制,依舊以以太網為例。MTU為1500個字節。一個IP數據報在以太網中 傳輸,假設它的長度大於該MTU值,就要進行分片傳輸,使得每片數據報的長度小於MTU。

分片傳輸的IP數據報不一定按序到達。但IP首部中的信息能讓這些數據報片按序組裝。IP數據報的分片與重組是在網絡層進完畢的。

MSS(最大分段大小)

MSS是TCP裏的一個概念(首部的選項字段中)。MSS是TCP數據包每次可以傳輸的最大數據分段,TCP報文段的長度大於MSS時,要進行分段傳輸。

TCP協議在建立連接的時候通常要協商兩方的MSS值,每一方都實用於通告它期望接收的MSS選項(MSS選項僅僅出如今SYN報文段中,即TCP三次握手的前兩次)。MSS的值一般為MTU值減去兩個首部大小(須要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以假設用鏈路層以太網。MSS的值往往

為1460。而Internet上標準的MTU(最小的MTU,鏈路層網絡為x2.5時)為576,那麽假設不設置,則MSS的默認值就為536個字節。非常多時候,MSS的值最好取512的倍數。TCP報文段的分段與重組是在運輸層完畢的。

到了這裏有一個問題自然就明了了,TCP分段的原因是MSS,IP分片的原因是MTU,因為一直有MSS<=MTU。非常明顯,分段後的每一段TCP報文段再加上IP首部後的長度不可能超過MTU,因此也就不須要在網絡層進行IP分片了。因此TCP報文段非常少會發生IP分片的情況。

再來看UDP數據報,因為UDP數據報不會自己進行分段,因此當長度超過了MTU時,會在網絡層進行IP分片。相同。ICMP(在網絡層中)相同會出現IP分片情況。

總結:UDP不會分段,就由IP來分。

TCP會分段。當然就不用IP來分了!

另外。IP數據報分片後,僅僅有第一片帶有UDP首部或ICMP首部,其余的分片僅僅有IP頭部,到了端點後依據IP頭部中的信息再網絡層進行重組。而TCP報文段的每一個分段中都有TCP首部,到了端點後依據TCP首部的信息在傳輸層進行重組。

IP數據報分片後,僅僅有到達目的地後才進行重組,而不是向其它網絡協議,在下一站就要進行重組。

最後一點,對IP分片的數據報來說。即使僅僅丟失一片數據也要又一次傳整個數據報(既然有重傳。說明運輸層使用的是具有重傳功能的協議,如TCP協議)。

這是由於IP層本身沒有超時重傳機制------由更高層(比方TCP)來負責超時和重傳。當來自TCP報文段的某一段(在IP數據報的某一片中)丟失後,TCP在超時後會重發整個TCP報文段,該報文段相應於一份IP數據報(可能有多個IP分片)。沒有辦法僅僅重傳數據報中的一個數據分片。


在IP層分片時,僅僅有第一個分片存在運輸層協議頭部,其余分片都不包括運輸層協議的首部,這一點非常重要。然後TCP的分段,每個分段都包括TCP首部信息,。

再有就是IP分片時到達目的地之後再進行重組的,IP層的重組是發生在目的地的IP層,TCP的重組是發生在目的地的傳輸層中。

TCP/IP具體解釋--TCP的分段和IP的分片