TCP/IP協(xié)議時都知道斜友,TCP報文段如果很長的話,會在發(fā)送時發(fā)生分段株憾,在接受時進行重組,同樣IP數據報在長度超過一定值時也會發(fā)生分片晒衩,在接收端再將分片重組嗤瞎。
我們先來看兩個與TCP報文段分段和IP數據報分片密切相關的概念。
MTU(最大傳輸單元)
MTU前面已經說過了听系,是鏈路層中的網絡對數據幀的一個限制贝奇,依然以以太網為例,MTU為1500個字節(jié)靠胜。一個IP數據報在以太網中傳輸掉瞳,如果它的長度大于該MTU值,就要進行分片傳輸浪漠,使得每片數據報的長度小于MTU陕习。分片傳輸的IP數據報不一定按序到達,但IP首部中的信息能讓這些數據報片按序組裝址愿。
IP數據報的分片與重組是在網絡層進完成的该镣。
MSS(最大分段大小)
MSS是TCP里的一個概念(首部的選項字段中)响谓。MSS是TCP數據包每次能夠傳輸的最大數據分段损合,TCP報文段的長度大于MSS時,要進行分段傳輸娘纷。
TCP協(xié)議在建立連接的時候通常要協(xié)商雙方的MSS值嫁审,每一方都有用于通告它期望接收的MSS選項(MSS選項只出現在SYN報文段中,即TCP三次握手的前兩次)赖晶。MSS的值一般為MTU值減去兩個首部大新墒省(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以如果用鏈路層以太網,MSS的值往往為1460。而Internet上標準的MTU(最小的MTU擦耀,鏈路層網絡為x2.5時)為576棉圈,那么如果不設置,則MSS的默認值就為536個字節(jié)眷蜓。很多時候分瘾,MSS的值最好取512的倍數。TCP報文段的分段與重組是在運輸層完成的吁系。
TCP分段的原因是MSS德召,IP分片的原因是MTU,由于一直有MSS<=MTU汽纤,很明顯上岗,分段后的每一段TCP報文段再加上IP首部后的長度不可能超過MTU,因此也就不需要在網絡層進行IP分片了蕴坪。因此TCP報文段很少會發(fā)生IP分片的情況肴掷。
再來看UDP數據報,由于UDP數據報不會自己進行分段背传,因此當長度超過了MTU時呆瞻,會在網絡層進行IP分片。? ?同樣径玖,ICMP(在網絡層中)同樣會出現IP分片情況痴脾。
總結:UDP不會分段,就由IP來分梳星。TCP會分段赞赖,當然就不用IP來分了!
另外冤灾,
IP數據報分片后前域,只有第一片帶有UDP首部或ICMP首部,其余的分片只有IP頭部韵吨,到了端點后根據IP頭部中的信息再網絡層進行重組话侄。
而TCP報文段的每個分段中都有TCP首部,到了端點后根據TCP首部的信息在傳輸層進行重組学赛。 IP數據報分片后年堆,只有到達目的地后才進行重組,而不是向其他網絡協(xié)議盏浇,在下一站就要進行重組变丧。
最后一點,
對IP分片的數據報來說绢掰,即使只丟失一片數據也要重新傳整個數據報(既然有重傳痒蓬,說明傳輸層使用的是具有重傳功能的協(xié)議童擎,如TCP協(xié)議)。
這是因為IP層本身沒有超時重傳機制------由更高層(比如TCP)來負責超時和重傳攻晒。
當來自TCP報文段的某一段(在IP數據報的某一片中)丟失后顾复,TCP在超時后會重發(fā)整個TCP報文段,該報文段對應于一份IP數據報(可能有多個IP分片)鲁捏,沒有辦法只重傳數據報中的一個數據分片芯砸。