MTU IP MTU 和 MSS 引數詳解

2021-10-10 11:51:56 字數 2311 閱讀 2677

本文主要分析網路通訊中mtu,ip mtu和mss的概念以及它們之間的關係。這三個概念對於網路通訊來說非常重要,常常很多網頁打不開等問題都是這幾個引數沒配置好導致的。

最大傳輸單元(maximum transmission unit,mtu)是指一種通訊協議在某一層上面所能通過的最大資料報大小(以位元組為單位),它通常與鏈路層協議有密切的關係。ethernetii 幀結構如圖 2.1所示。

圖 2.1 ethernetii幀結構

由於乙太網傳輸電氣方面的限制,每個乙太網幀最小64位元組,最大不能超過1518位元組,對於小於或者大於這個限制的乙太網幀,乙太網都可以視之為錯誤的資料幀。一般的乙太網**裝置會丟棄這些資料幀。(注:小於64位元組的資料幀一般是由於乙太網衝突產生的「碎片」或者線路干擾或者壞的乙太網介面產生的,對於大於1518位元組的資料幀我們一般把它叫做giant幀,這種一般是由於線路干擾或者壞的乙太網口產生)。

由於乙太網ethernetii最大的資料幀是1518位元組,除去乙太網幀的幀頭(dmac目的mac位址48bit=6bytes+smac源mac位址48bit=6bytes+type域2bytes)14位元組和幀尾crc校驗部分4位元組(這個部分有時人們也把它叫做fcs),那麼剩下承載上層協議的地方也就是data域最大就只能有1500位元組,這個值就稱之為mtu。

這個mtu是網路層協議非常關心的地方,因為網路層協議比如ip協議會根據這個值來決定是否把上層傳下來的資料進行分片。就好比乙個盒子沒法裝下一大塊麵包,就需要把麵包切成片,裝在多個盒子裡面一樣的道理。當兩台遠端pc互聯的時候,它們的資料需要穿過很多的路由器和各種各樣的網路媒介才能到達對端,網路中不同媒介的mtu各不相同,就好比一長段的水管,由不同粗細的水管組成(mtu不同)通過這段水管最大水量就要由中間最細的水管決定。

對於udp協議而言,這個協議本身是無連線的協議,對資料報的到達順序以及是否正確到達不甚關心,所以一般udp應用對分片沒有特殊要求。對於tcp協議而言就不一樣了,這個協議是面向連線的協議,對於tcp協議而言它非常在意資料報的到達順序以及是否傳輸中有錯誤發生,所以有些tcp應用對分片有要求——不能分片(df)。

mss是最大傳輸大小的縮寫,它是tcp協議裡面的乙個概念。如下圖 4.1 所示。

圖 4.1 tcp頭部

注:urg等引數指的是ack urg psh sin fin rst 等引數。

由上文敘述可知:mtu是乙個二層的概念,乙太網最大的mtu就是1500(它是不包含二層頭部的,加上頭部應該為1518位元組),當然這裡說的是很常規的情況,也有些server,比如server2008,發出的就是jumbo frame了,這裡討論常規情況。ip mtu是乙個三層概念,它包含了三層頭部及所有載荷,根據下層為上層服務的,上層基於下層才能做進一步的擴充套件的原則,儘管ip mtu的變化範圍很大(68-65535),但也不得不照顧乙太網mtu的限制,說白了就是ip對乙太網的妥協。mss是tcp裡面的乙個概念,它是tcp資料報每次能夠傳輸的最大資料分段,不包含包頭部分,它與ip mtu滿足如下關係:ip mtu=mss+20位元組(ip包頭)+20位元組(tcp包頭)。當然,如果傳輸的時候還承載有其他協議,還要加些包頭在前面,簡言之,mtu就是總的最後發出去的報文大小,mss就是需要發出去的資料大小,比如pppoe,就是在乙太網上承載ppp協議(點到點連線協議),它包括6位元組的pppoe頭部和2位元組的ppp協議id號,此時,由於乙太網的mtu值為1500,所以上層ppp負載資料不能超過1492位元組,也就是相當於在pppoe環境下的mtu是1492位元組,mss是1452位元組。

通常情況下,mtu不匹配會表現為兩種故障情況:

ping大包時不通;

無法訪問某些站點。

在這種情況下,通常有兩種解決方法:

修改使用者端mtu值(不推薦使用);

修改傳輸路由所有裝置mtu值,確保路徑mtu值大於使用者傳送的ip報文的長度,以保證使用者報文不會因為超過裝置的mtu值被丟棄。

主要要考慮下面幾種情況:

對於純ip網路,要保證:路徑mtu值》最大使用者報文長度;

對於純mpls網路(沒有vpn業務),要保證路徑mtu值》最大使用者報文+一層標籤長度(4);

對於三層vpn業務,要保證:路徑mtu值》最大使用者報文+兩層標籤長度(8);

對於二層vpn業務,要保證:路由mtu值》最大使用者報文長度+兩處標籤長度(8)+二層幀頭長度(18)。

值得注意的是:fast ethernet介面不能調整mtu,所以說在有些裝置中,使用mtu命令不能解決問題的。此外,更改mtu後,如果igp是ospf的話,不同的mtu可能會造成ospf停留在init狀態,此時需要將兩端的mtu調整一致。

MSS和MTU的關係

網上有文章這樣描述 大家可以參考理解 mss指的是tcp中的乙個概念。mtu是乙個沒有固定到特定osi層的概念,不受其他特定協議限制。也就是說第二層會有mtu,第三層會有mtu,像mpls這樣的第2.5層協議,也有自己的mtu值。並且不同層之間存在關聯關係。舉個例子 如果你要搬家,需要把東西打包,用...

hda verb引數詳表

hda verb引數詳表 hda verb的由來 hda verb是linux下面的alsa project的一條命令,它的作用是傳送hd audio命令。命令格式 linux hda verb dev snd hwc0d0 0x12 0x701 2 mac hda verb 0x12 0x701 ...

linux shutdown命令以及引數詳解

在說shutdown命令之前 先說一下sync命令 sync 將記憶體中尚未寫入硬碟的資料寫入硬碟 因為linux為了保證資料讀寫速度,把常用的資料放在記憶體中,不會立即寫入硬碟,如果有不當關機,這些資料就會丟失 所以在執行shutdown reboot之類的命令之前,應當多執行幾次sync命令來保...