计算机网络:协议
?
?
?
鏈路層分包格式
?IP數(shù)據(jù)包結(jié)構(gòu):
?TCP數(shù)據(jù)包結(jié)構(gòu):
?
?
以太幀結(jié)構(gòu)如圖所示
?
? ? 封裝流程圖?
?
最大傳輸單元MTU
? ?以太網(wǎng)和8 0 2 . 3對數(shù)據(jù)幀的長度都有一個(gè)限制,其最大值分別是1 5 0 0和1 4 9 2字節(jié)。鏈路層的這個(gè)特性稱作MTU,最大傳輸單元。不同類型的網(wǎng)絡(luò)大多數(shù)都有一個(gè)上限。
? ?如果I P層有一個(gè)數(shù)據(jù)報(bào)要傳,而且數(shù)據(jù)的長度比鏈路層的M T U還大,那么I P層就需要進(jìn)行分片( f r a g m e n t a t i o n),把數(shù)據(jù)報(bào)分成若干片,這樣每一片都小于M T U。
?
?MSS(最大分段大小)
? ??MSS是TCP里的一個(gè)概念(首部的選項(xiàng)字段中)。MSS是TCP數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段,TCP報(bào)文段的長度大于MSS時(shí),要進(jìn)行分段傳輸。TCP協(xié)議在建立連接的時(shí)候通常要協(xié)商雙方的MSS值,每一方都有用于通告它期望接收的MSS選項(xiàng)(MSS選項(xiàng)只出現(xiàn)在SYN報(bào)文段中,即TCP三次握手的前兩次)。MSS的值一般為MTU值減去兩個(gè)首部大小(需要減去IP數(shù)據(jù)包包頭的大小20Bytes和TCP數(shù)據(jù)段的包頭20Bytes)所以如果用鏈路層以太網(wǎng),MSS的值往往為1460。而Internet上標(biāo)準(zhǔn)的MTU(最小的MTU,鏈路層網(wǎng)絡(luò)為x2.5時(shí))為576,那么如果不設(shè)置,則MSS的默認(rèn)值就為536個(gè)字節(jié)。很多時(shí)候,MSS的值最好取512的倍數(shù)。TCP報(bào)文段的分段與重組是在運(yùn)輸層完成的。
? ? 到了這里有一個(gè)問題自然就明了了,TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明顯,分段后的每一段TCP報(bào)文段再加上IP首部后的長度不可能超過MTU,因此也就不需要在網(wǎng)絡(luò)層進(jìn)行IP分片了。因此TCP報(bào)文段很少會發(fā)生IP分片的情況。
? ? 再來看UDP數(shù)據(jù)報(bào),由于UDP數(shù)據(jù)報(bào)不會自己進(jìn)行分段,因此當(dāng)長度超過了MTU時(shí),會在網(wǎng)絡(luò)層進(jìn)行IP分片。同樣,ICMP(在網(wǎng)絡(luò)層中)同樣會出現(xiàn)IP分片情況。
? ? 總結(jié):UDP不會分段,就由IP來分。TCP會分段,當(dāng)然就不用IP來分了!
?
數(shù)據(jù)封裝過程
?
總結(jié)
- 上一篇: 常考数据结构与算法:容器盛水问题
- 下一篇: 计算机网络:大小端存储