TCP和UDP報文分片的區別


搞了三年網絡,今天才知道這個細節,汗,總結下:

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來分了!


免責聲明!

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



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