本文主要分析二層MTU,IP MTU和MSS的概念以及它們之間的關係。這三個概念對於路由器來講很是重要。網絡
最大傳輸單元(Maximum Transmission Unit,MTU)是指一種通訊協議在某一層上面所能經過的最大數據報大小(以字節爲單位),它一般與鏈路層協議有密切的關係。ide
以太網對傳輸的幀的長度有一個限制,稱爲最大傳輸單元MTU,以太網通常是1500。性能
1、EthernetII幀結構大數據
字段釋義:blog
目的地址:6字節,網卡中的硬件地址,固定在網卡上的
源地址:6字節,網卡中的硬件地址(MAC)
類型:協議類型:IP,ARP,RARP
數據:46~1500字節,
CRC:循環冗餘驗證接口
2、認識MTU:路由
MTU,最大傳輸單元,至關於發快遞時對包裹尺寸的限制,是由物理層產生的限制,一般與通訊接口有關(網卡接口卡)
以太網幀中數據最小長度時46,ARP數據報的長度不夠46字節,要在後面補填充爲
以太網幀中的數據最大時1500,稱爲以太網的最大傳輸單元(MTU),不一樣的網絡類型有不一樣的MTU
若是以太網中傳輸的數據包長度大於MTU,則要對其進行分片it
因爲以太網傳輸電氣方面的限制,每一個以太網幀最小64字節,最大不能超過1518字節,對於小於或者大於這個限制的以太網幀,以太網均可以視之爲錯誤的數據幀。通常的以太網轉發設備會丟棄這些數據幀。(注:小於64字節的數據幀通常是因爲以太網衝突產生的「碎片」或者線路干擾或者壞的以太網接口產生的,對於大於1518字節的數據幀咱們通常把它叫作Giant幀,這種通常是因爲線路干擾或者壞的以太網口產生)。io
這個MTU是網絡層協議很是關心的地方,由於網絡層協議好比IP協議會根據這個值來決定是否把上層傳下來的數據進行分片。就比如一個盒子無法裝下一大塊麪包,就須要把麪包切成片,裝在多個盒子裏面同樣的道理。當兩臺遠程PC互聯的時候,它們的數據須要穿過不少的路由器和各類各樣的網絡媒介才能到達對端,網絡中不一樣媒介的MTU各不相同,就比如一長段的水管,由不一樣粗細的水管組成(MTU不一樣)經過這段水管最大水量就要由中間最細的水管決定。class
3、IP MTU
對於網絡層的上層協議而言(以TCP/IP協議族爲例),網絡層IP協議會檢查每一個從上層協議下來的數據包的大小,並根據本機MTU的大小決定是否做「分片」處理。分片最大的壞處就是下降了傳輸性能,原本一次能夠搞定的事情,分紅屢次搞定,因此在網絡層更高一層(傳輸層)的實現中每每會對此加以注意!有些高層由於某些緣由就會要求本層這個麪包不能切片,須要完整的「麪包」,因此會在IP數據包包頭裏面加上一個標籤:DF(Do not Fragment)。這樣當這個IP數據包在一大段網絡(水管裏面)傳輸的時候,若是遇到MTU小於IP數據包的狀況,轉發設備就會根據要求丟棄這個數據包,而後返回一個錯誤信息給發送者。這樣每每會形成某些通信上的問題,不過幸運的是大部分網絡鏈路MTU都是等於1500或者小於1500。
MTU對IP協議的影響:
因爲數據鏈路層MTU的限制,對於較大的IP數據包要進行分包
將較大的IP包分爲多個小包,並給每一個小包打上標籤
每一個小包的IP協議頭的16位標識(id)都是相同的
每一個小包IP協議頭的三位標誌字段中,第一位保留,第二位置0,表示容許切片,第三位表示結束標誌(最後一個小包置1,其他的小包置0)
到達對端將這些小包按順序重組,拼裝在一塊兒返回給傳輸層
一但這些小包中任意一個丟失,接受端重組就會失敗,可是IP層不負載重傳(IP協議無鏈接,不可靠)
3、MTU對TCP的影響
TCP的一個數據報也不可能無限大,仍是受制於MTU,TCP單個數據報的最大消息長度,稱爲MSS
TCP在創建鏈接的過程當中,雙方會進行MSS協商
最理想的狀況下,MSS的值正好是在IP不會被分片處理的最大長度(這個長度受限於數據鏈路層的MTU)
雙方在發送SYN的時候會在TCP的頭部寫入字節能支持的MSS值
而後雙方得知對方的MSS值以後,選擇較小的做爲最終MSS
MMS的值就在TCP首部的40字節變長選項中(kind=2)
對於TCP協議而言,這個協議是面向鏈接的協議,對於TCP協議而言它很是在乎數據包的到達順序以及是否傳輸中有錯誤發生,因此有些TCP應用對分片有要求——不能分片(DF)。
4、MTU對UDP的影響
一旦UDP攜帶的數據超過1472(1500-20(IP首部)-8(UDP首部)),那麼UDP數據就會在網絡層被分紅多個IP數據報
對於UDP協議而言,這個協議自己是無鏈接的協議,對數據包的到達順序以及是否正確到達不甚關心,因此通常UDP應用對分片沒有特殊要求。
5、MTU和MSS的關係
MTU:最大傳輸單元,由不一樣的數據鏈路層對應物理層產生的(硬件規定),以太網的MTU=1500
MSS:最大分節大小,爲TCP數據包每次傳輸的最大數據分段大小
MSS的取值受限於MTU
若是網絡層要傳輸一個數據報比鏈路層的MTU還大的話,就會進行IP分片,使得每個分片的大小都不大於MTU。可是過多的分片後,對於對端的重組又是一個比較麻煩的事情,因此爲了能儘可能避免IP分片,在上一層提出了分段(MSS),它儘可能保證傳輸給IP層的數據報都小於MTU,使得在IP層不用對數據報進行分片,減少了過多分片時處理的消耗時間。
路徑MTU和上面的類似,只是要知道整個路徑上最小的MTU
數據鏈路層信息單元和MTU
鏈路層的信息單元是幀,鏈路層不一樣協議對最大幀長度(最大傳輸單元:MTU)作了限制,以太網協議規定最大幀長度是1500Byte。
OSI各層的信息單元對應以下:
段——————–>傳輸層
數據包、數據報——>網絡層
數據幀—————>數據鏈路層
若是IP數據報的長度大於MTU,這時候就須要對IP數據報進行分片處理後再經由鏈路層轉發。