最大傳輸單元

所能接受數據服務單元的最大尺寸

最大傳輸單元(Maximum Transmission Unit,MTU)用來通知對方所能接受數據服務單元的最大尺寸,說明發送方能夠接受的有效載荷大小。

是包或幀的最大長度,一般以位元組記。如果MTU過大,在碰到路由器時會被拒絕轉發,因為它不能處理過大的包。如果太小,因為協議一定要在包(或幀)上加上包頭,那實際傳送的數據量就會過小,這樣也划不來。大部分操作系統會提供給用戶一個默認值,該值一般對用戶是比較合適的。

詳細信息


乙太網和802.3對數據幀的長度都有一個限制,其最大值分別是1500位元組和1492位元組。鏈路層的這個特性稱為MTU,即最大傳輸單元。不同類型網路的數幀長度大多數都有一個上限。如果IP層有一個數據報要傳,而且數據幀的長度比鏈路層的MTU還大,那麼IP層就需要進行分片( fragmentation),即把數據報分成乾片,這樣每一片就都小於MTU。
當同一個網路上的兩台主機互相進行通信時,該網路的MTU是非常重要。但是如果兩台主機之間的通信要通過多個網路,每個網路的鏈路層可能有不同的MTU,那麼這時重要的不是兩台主機所在網路的MTU的值,而是兩台主機通信路徑中的最小MTU,稱為路徑MTU( Path mtu,PMTU)。
兩台主機之間的PMTU不一定是個常數,它取決於當時所選擇的路徑,而且路由選擇也不一定是對稱的(從A到B的路由可能與從B到A的路由不同),因此,PMTU在兩個方向上不一定是一致的。
RFC1191描述了PMTU的發現機制,即確定路徑MTU的方法。ICMP的不可到達錯誤採用的就是這種方法,traceroute程序也是用這種方法來確定到達目的節點的PMT的。

局限


不幸的是,越來越多的網路封殺了ICMP的傳輸(譬如說為了防範DOS攻擊)——這使得路徑最大傳輸單元發現方法不能正常工作,其常見表現就是一個連接在低數據流量的情況下可以正常工作,但一旦有大量數據同時發送,就會立即掛起(例如在使用IRC的時候,客戶會發現在發送了一個禁止IP欺騙的ping之後就得不到任何響應了,這是因為該連接被大量的歡迎消息堵塞了)。而且,在一個使用網際網路協議的網路中,從源地址到目的地址的“路徑”常常會為了響應各種各樣的事件(負載均衡、擁塞、斷電等等)而被動態地修改——這可能導致路徑最大傳輸單元在傳輸過程中發生改變——有時甚至是反覆的改變。其結果是,在主機尋找新的可以安全工作的最大傳輸單元的同時,更多的分組被丟失掉了。
對於時下大多數使用乙太網的區域網來說,最大傳輸單元的值是1500位元組。但是像PPPoE這樣的系統會減小這個數值,這就使得在使用最大傳輸單元發現方法時可能會產生這樣的結果:一些處於配置不當的防火牆之後的站點變得不可達了。對於這種情況,還是可能找到變通的方法的,但這取決於你控制的是網路的哪一部分。這些方法包括改變用來在防火牆一端建立TCP連接的第一個分組的MSS(Maximum Segment Size,最大分段大小)。
對於一些支持老版本乙太網協議的IBM系統(例如XSeries),可能只有在把最大傳輸單元設為1492之後才能在當下常見的區域網上進行運作。

IP分片技術


簡介

鏈路層具有最大傳輸單元MTU這個特性,它限制了數據幀的最大長度,不同的網路類型都有一個上限值。乙太網的MTU是1500,你可以用netstat -i 命令查看這個值。如果IP層有數據包要傳,而且數據包的長度超過了MTU,那麼IP層就要對數據包進行分片(fragmentation)操作,使每一片的長度都小於或等於MTU。我們假設要傳輸一個UDP數據包,乙太網的MTU為1500位元組,一般IP首部為20位元組,UDP首部為8位元組,數據的凈荷(payload)部分預留是1500-20-8=1472位元組。如果數據部分大於1472位元組,就會出現分片現象。

內容

IP首部包含了分片和重組所需的信息:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |R|DF|MF| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<-------------16-------------->|<--3-->|<---------13---------->|
Identification:發送端發送的IP數據包標識欄位都是一個唯一值,該值在分片時被複制到每個片中。
R:保留未用。
DF:Don't Fragment,“不分片”位,如果將這一比特置1 ,IP層將不對數據報進行分片。
MF:More Fragment,“更多的片”,除了最後一片外,其他每個組成數據報的片都要把該比特置1。
Fragment Offset:該片偏移原始數據包開始處的位置。偏移的位元組數是該值乘以8。
另外,當數據報被分片后,每個片的總長度值要改為該片的長度值
設備的MTU調成多少比較好?
以ISP(電信服務商)的MTU為基準,每下級設備的MTU都最好比上級設置的略低為好。
例如在ISP=>貓=>路由器=>電腦的布局中,ISP的MTU是1466,那麼下級的貓可以設置成1464,再下 級的路由器可以設置成1462,再下級的電腦的MTu可以設置成1460,以此類推。
MTU的作用
通常來說MTU越小,你所發送包的頻率越快,在一些遊戲和網路軟體中可以通過更改mtu獲得更好的效果。mtu代表的是封裝包的大小,封閉包的大小決定你發送包的發送頻率。

MTU位元組


在遠端節點的配置響應中將包含在該通道使用的實際的MTU大小,通道的方向是流向本地節點,MTU值取在configReq中的MTU和遠端節點的輸出MTU能力中最小值。該MTU只能用於這個通道,不能用於相反方向的通道。
MTU欄位:2個位元組。
MTU欄位表示發起請求方可以接受的最大的L2CAP分組凈荷(按位元組計)。MTU是非對稱的,請求的發送方指定在該通道上它可以接收的MTU值。L2CAP的實現必須支持最小的48位元組的MTU值。預設值是672位元組。
數據鏈路不同,最大傳輸單元( Maximum transmission Unit,MTU)也不同,由於IP協議是數據鏈路的上一層,所以它必須不受數據鏈路的MTU大小的影響能夠加以利用。當IP數據報太大時,就要採用分片技術,以保證數據幀不大於要過的網路的MTU。
IP協議除了具有路由定址功能外,另一個重要的功能就是IP數據報的分片處理。每個數據鏈路層能夠確定發送的一個幀的最大長度稱為最大傳輸單元。在Ethernet中,MTU為1500位元組;在FDDI中,MTU為4352位元組;在 IP over ATM中,MTU為9180位元組。
如果要發送的IP數據報比數據鏈路層的MTU大,則無法發送該數據報。對於來自於上一層的IP協議,當要求發送的IP數據報比數據鏈路層的MTU大時,必把該數據報分割成多個IP數據報才能發送。另外,在進行通信的各台主機之間,存在著MTU不同的數據鏈路;在發送的過程中,也有MTU縮小的情況發生。當出現上述情況時,在發送過程中必須有一台能夠進行分片處理的路由器。
接收端主機必須對經過分片處理后的IP數據報進行還原處理。在中繼路由器中,雖然路由器進行了分片處理,但並不進行還原處理。另外,經分片處理的IP數據報只有經過還原處理后才能還原成原來的IP數據報,才可以向上一層的模塊傳遞數據。

用途


MTU是網路調節的重要因素,因為包中的額外開銷量相當高。高的MTU減少了頭信息浪費的位元組數。對大量數據傳輸尤其重要,而對小於MTU的傳輸沒有影響。因此,注意配置傳輸大量數據流的伺服器(如文件伺服器和FTPH&.務器)上的MTU。
選擇MTU時,規則是選擇傳輸中不需分段的最大MTU。如果網路使用一種媒體類型,預設的設置就可以。選擇比媒體最大值更小的MTU並沒有好處,整個數據報會因為每個包的錯誤而重發。換言之,不能重發單個段。