国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網絡通信 > 正文

小議TCP的MSS(最大分段)以及MTU

2019-11-04 10:59:27
字體:
來源:轉載
供稿:網友

  [背景知識]
MTU: Maxitum Transmission Unit 最大傳輸單元

MSS: Maxitum Segment Size 最大分段大?。ㄅ际侵弊g,翻譯的不好,不要打
俺PP)

PPPoE: PPP Over Ethernet(在以太網上承載PPP協議)

[分析過程]
先說說這MTU最大傳輸單元,這個最大傳輸單元實際上和鏈路層協議有著密切的關系,讓我們先仔細回憶一下EthernetII幀的結構DMAC+SMAC+Type+Data+CRC
由于以太網傳輸電氣方面的限制,每個以太網幀都有最小的大小64bytes最大不能超過1518bytes,對于小于或者大于這個限制的以太網幀我們都可以視之為錯誤的數據幀,一般的以太網轉發設備會丟棄這些數據幀。
(注:小于64Bytes的數據幀一般是由于以太網沖突產生的“碎片”或者線路干擾或者壞的以太網接口產生的,對于大于1518Bytes的數據幀我們一般把它叫做Giant幀,這種一般是由于線路干擾或者壞的以太網口產生)

由于以太網EthernetII最大的數據幀是1518Bytes這樣,刨去以太網幀的幀頭(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗部分4Bytes(這個部門有時候大家也把它叫做FCS),那么剩下承載上層協議的地方也就是Data域最大就只能有1500Bytes這個值我們就把它稱之為MTU。這個就是網絡層協議非常關心的地方,因為網絡層協議比如ip協議會根據這個值來決定是否把上層傳下來的數據進行分片。就好比一個盒子沒法裝下一大塊面包,我們需要把面包切成片,裝在多個盒子里面一樣的道理。

當兩臺遠程PC互聯的時候,它們的數據需要穿過很多的路由器和各種各樣的網絡媒介才能到達對端,網絡中不同媒介的MTU各不相同,就好比一長段的水管,由不同粗細的水管組成(MTU不同 )通過這段水管最大水量就要由中間最細的水管決定。

對于網絡層的上層協議而言(我們以TCP/IP協議族為例)它們對水管粗細不在意它們認為這個是網絡層的事情。網絡層IP協議會檢查每個從上層協議下來的數據包的大小,并根據本機MTU的大小決定是否作“分片”處理。分片最大的壞處就是
降低了傳輸性能,本來一次可以搞定的事情,分成多次搞定,所以在網絡層更高一層(就是傳輸層)的實現中往往會對此加以注重!有些高層因為某些原因就會要求我這個面包不能切片,我要完整地面包,所以會在IP數據包包頭里面加上一
個標簽:DF(Donot Fragment)。這樣當這個IP數據包在一大段網絡(水管里面)傳輸的時候,假如碰到MTU小于IP數據包的情況,轉發設備就會根據要求丟棄這個數據包。然后返回一個錯誤信息給發送者。這樣往往會造成某些通訊上的問題,不過幸運的是大部分網絡鏈路都是MTU1500或者大于1500。

對于UDP協議而言,這個協議本身是無連接的協議,對數據包的到達順序以及是否正確到達不甚關心,所以一般UDP應用對分片沒有非凡要求。

對于TCP協議而言就不一樣了,這個協議是面向連接的協議,對于TCP協議而言它非常在意數據包的到達順序以及是否傳輸中有錯誤發生。所以有些TCP應用對分片有要求---不能分片(DF)。

花開兩朵,各表一枝,說完MTU的故事我們該講講今天的第二個豬腳---PPPoE所謂PPPoE就是在以太網上面跑PPP協議,有人希奇了,PPP協議和Ethernet不都是鏈路層協議嗎?怎么一個鏈路層跑到另外一個鏈路層上面去了,難道升級成網絡層協議了不成。其實這是個誤區:就是某層協議只能承載更上一層協議。

為什么會產生這種希奇的需求呢?這是因為隨著寬帶接入(這種寬帶接入一般為Cable Modem或者xDSL或者以太網的接入)由于以太網缺乏認證計費機制而傳統運營商是通過PPP協議來對撥號等接入服務進行認證計費的,所以就出了這么一個怪胎:PPPoE。(有關PPPoE的具體介紹參見V大以及本站其他成員的一些介紹文章,我就不啰里啰唆的了)

PPPoE帶來了好處,也帶來了一些壞處,比如:二次封裝耗費資源,降低了傳輸效能等等,這些壞處俺也不多說了,最大的壞處就是PPPoE導致MTU變小了以太網的MTU是1500,再減去PPP的包頭包尾的開銷(8Bytes),就變成1492。

假如兩臺主機之間的某段網絡使用了PPPoE那么就會導致某些不能分片的應用無法通訊。

這個時候就需要我們調整一下主機的MTU,通過降低主機的MTU,這樣我們就能夠順利地進行通訊了。

當然對于TCP應用而言還有另外的解決方案。
馬上請出今天第三位豬腳:MSS。
MSS最大傳輸大小的縮寫,是TCP協議里面的一個概念。
MSS就是TCP數據包每次能夠傳輸的最大數據分段。為了達到最佳的傳輸效能TCP協議在建立連接的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以往往MSS為1460。通訊雙方會根據雙方提供的MSS值得最小值確定為這次連接的最大MSS值。

介紹完這三位豬腳s
我們回過頭來看前言里面的那個問題,我們試想一下,假如我們在中間路由器上把每次TCP連接的最大MSS進行調整這樣使得通過PPPoE鏈路的最大MSS值加上數據包頭包尾不會超過PPPoE的MTU大小1492這樣就不會造成無法通訊的問題.所以上面的問題可以通過ip tcp adjust-mss 1452來解決。

當然問題也可以通過修改PC機的MTU來解決。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万源市| 白山市| 龙胜| 文山县| 文水县| 东海县| 泸西县| 宁海县| 花垣县| 台湾省| 中阳县| 子长县| 垣曲县| 邢台市| 伽师县| 雅江县| 乐安县| 迁安市| 长海县| 咸阳市| 武宣县| 娱乐| 云浮市| 龙胜| 墨玉县| 柘荣县| 北碚区| 台北县| 合阳县| 内黄县| 庐江县| 旬阳县| 和龙市| 泗阳县| 庆安县| 五家渠市| 莒南县| 峨山| 梨树县| 博白县| 华坪县|