整理 TCP分段和IP分片

2021-08-21 14:27:43 字數 1735 閱讀 6422

我們在學習tcp/ip協議時都知道,tcp報文段如果很長的話,會在傳送時發生分段,在接受時進行重組,同樣ip資料報在長度超過一定值時也會發生分片,在接收端再將分片重組。

我們先來看兩個與tcp報文段分段和ip資料報分片密切相關的概念。

mtu(最大傳輸單元)

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分片),沒有辦法只重傳資料報中的乙個資料分片。

在不同資料鏈路中,mac幀各自的最大傳輸單位(mtu:maximum transmission unit)不同。

mtu的值在乙太網中是1500位元組,在fddi中是4352位元組,在atm則為9180位元組。

mac幀最小位元組為56位元組,mtu在不同資料鏈路中是不同的。

當乙太網幀大小不夠56位元組的時候,會對mac幀進行填充。而當大小超過mtu的時候,就會進行分片。

分片的時候,經過分片的資料16位標識都一樣,為了組裝的時候能夠知道哪些是同一片資料。

那麼組裝順序如何保證呢:

通過片偏移來保證,片偏移為0的資料為資料首部,而下一次偏移量等於當前片偏移+總長度。

組裝的時候也是通過片偏移進行組裝的。

TCP分段和IP分片

主要講tcp ip協議中傳輸層的分段和網路層的分片 1 tcp分段是指在經三次握手後,收發雙方建立起連線通過後,雙方已經協商好並確定彼此要採用的mss 最大分段長度b mss一般都是按照接受方確定。然後把使用者資料payload按照mss大小進行分段,各個分段資料被逐一新增tcp報頭後 20b 送給...

TCP分段與IP分片

我們在學習tcp ip協議時都知道,tcp報文段如果很長的話,會在傳送時發生分段,在接受時進行重組,同樣ip資料報在長度超過一定值時也會發生分片,在接收端再將分片重組。我們先來看兩個與tcp報文段分段和ip資料報分片密切相關的概念。myu 最大傳輸單元 mtu前面已經說過了,是鏈路層中的網路對資料幀...

TCP分段與IP分片

鏈路層的乙個作用就是資料成幀,幀包括了head和data,而data有大小限制,就是常說的mtu,對乙太網來說是1500位元組。data包括了上層的網路層head和傳輸層head,這兩個head共佔了40位元組,剩下的資料大小不能超過1460位元組,也就是mms。mss是tcp資料報每次能夠傳輸的最...