Mtu即最大傳輸單元,,全稱為Maximum Transmission Unit,是指通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)包大?。ㄒ宰止?jié)為單位),。由于定義的模糊性,在此也介紹幾個相關的名詞,,MRU,、PMTU,、MSS和JUMBO FRAME,供大家甄別,。
MRU即最大接收單元,,全稱為Maximum Receive Unit,與MTU相對,稱為最大接收單元,,目前也沒有權威的標準定義,,但許多文章中有這個名詞。一臺主機或路由器的MTU與MRU可以不一致,。
PMTU,,全稱為 path maximum transmission unit,即路徑MTU,把一條IP路徑上MTU的最小值稱為PMTU,,PMTU是個理想化的概念,,但目前業(yè)界沒有有效的手段來實現(xiàn)PMTU的發(fā)現(xiàn)和更新。`
MSS是OSI參考模型中四層的一個概念,,即最大分段長度,,全稱為TCP Maximum Segment Size,指TCP每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段長度(以字節(jié)為單位),,MSS一般比MTU小40字節(jié),。
Jumbo Frame(有些稱Giant Frame),網(wǎng)絡上會遇到jumbo frame的概念,,cisco路由器的接口中也有這個參數(shù),,超過以太網(wǎng)標準長度1518字節(jié)的幀稱為jumbo frame。
二,、MTU涉及主要原理:
1,、常見網(wǎng)絡的MTU值:
IP網(wǎng)絡以包為單位進行信息傳遞,那么,,一次傳送多大的包合適,、多大的包最高效就成為一個核心問題之一。MTU就是決定在什么樣的物理網(wǎng)絡傳送多大數(shù)據(jù)包大的事實標準,,不同類型網(wǎng)絡由于物理特性,、發(fā)展階段不同,其MTU的默認值也不盡相同,,以下是摘錄的各類網(wǎng)絡及其默認MTU值:
對于windows操作系統(tǒng)來講,,其以太網(wǎng)網(wǎng)卡MTU默認為1500,但可以通過修改工具或修改注冊表進行修改,,但只能改小,,不能改大,即只能修改為小于或等于1500字節(jié)。
2,、PMTU 發(fā)現(xiàn)過程:
對于一個基于網(wǎng)絡的應用來講,,如果應用穿過網(wǎng)絡的MTU與PMTU相等,那么應用穿過網(wǎng)絡的效率最高,,或者說,,應用通過主機網(wǎng)卡發(fā)出的最大數(shù)據(jù)包與PMTU越接近(指小于等于PMTU),應用穿過網(wǎng)絡的效率越高,,原因是有效的避免了分片和重組,。
為了達到這個目的,一些操作系統(tǒng)支持自動發(fā)現(xiàn)路徑MTU的功能,,具體過程為:
路由器接口上收到一個報文長度大于本接口MTU值的報文,,如果該報文被打上不分片的標記,將丟棄本報文,,并且返回一個ICMP差錯報文,,通知報文發(fā)起者丟棄原因。報文發(fā)起者將發(fā)送比較小的報文,。通過多次上述報文協(xié)商,,將得到對于某一個固定路徑上的最小Mtu值,這個過程叫做“Mtu Discovery”[詳見RFC1191],。
了解了MTU發(fā)現(xiàn)的原理,,舉一個實例驗證PMTU變化過程:
在上圖所示實驗網(wǎng)絡中,由三層設備模擬PPPOE撥號,,實現(xiàn)接入寬帶IP網(wǎng),。三層設備上行以太網(wǎng)口默認MTU為1482字節(jié)。抓包結(jié)果顯示如下:
將三層設備上行以太網(wǎng)口默認MTU改為1000字節(jié),。抓包結(jié)果顯示如下:
3、“PMTU”發(fā)現(xiàn)存在的問題:
由于互聯(lián)網(wǎng)上路由器或其它網(wǎng)絡設備的配置的無法統(tǒng)一規(guī)范,,某些運營商或網(wǎng)站考慮到網(wǎng)絡安全和其它需要,,有時會把ICMP報文過濾掉,此外,,PMTU牽涉到主機,、各類交換機、路由器,、防火墻等網(wǎng)絡設備,,這些主機和網(wǎng)絡設備沒有有效的手段實現(xiàn)PMTU的協(xié)商和交互,這樣Mtu Discovery不能正常運行,影響應用正常運行,,即實質(zhì)上目前沒有有效的手段來發(fā)現(xiàn)PMTU,。
互聯(lián)網(wǎng)上的網(wǎng)絡設備,遇到MTU發(fā)現(xiàn)報文或必須將IP包分片但DF設置為1時,路由器可采用以下任一種方式(從網(wǎng)上摘錄):
發(fā)送符合 RFC 792 中最初定義的“ICMP Destination Unreachable-Fragmentation Needed and DF Set”消息,,然后丟棄該包,。原始消息格式中不包含有關轉(zhuǎn)發(fā)失敗的鏈路的 IP MTU 的信息,。(導致PMTU無法正常發(fā)現(xiàn))
? 發(fā)送符合 RFC 1191 中重新定義的“ICMP Destination Unreachable-Fragmentation Needed and DF Set”消息,然后丟棄該包,。此新消息格式包含一個 MTU 字段,,可指出轉(zhuǎn)發(fā)失敗的鏈路的 IP MTU。(PMTU可能會正常發(fā)現(xiàn))
RFC 1191 定義了路徑 MTU (PMTU) 發(fā)現(xiàn),,它使得源和目的 TCP 對等方能夠動態(tài)地發(fā)現(xiàn)二者之間路徑的IP MTU,,從而發(fā)現(xiàn)該路徑的 TCP MSS。一旦收到符合 RFC 1191 定義的“Destination Unreachable-Fragmentation Needed and DF Set”消息,,TCP 就會將該連接的 MSS 調(diào)整為指定 IP MTU 減去 TCP 和 IP 報頭的大小,。這樣,在該 TCP 連接上發(fā)送的后續(xù)包就不會超過最大大小,,無需分段即可在該路徑上傳輸,。
直接丟棄包。直接丟棄需分段但 DF 標記設置為 1 的包的路由器稱為 PMTU 黑洞路由器,。
總之,,PMTU的不可發(fā)現(xiàn)性,導致因MTU問題引起的應用系統(tǒng)無法正常運行情況時有發(fā)生,。
4,、超過MTU值的數(shù)據(jù)包分片、重組過程,,:
IP包的格式如下:
IP包的分片重組牽涉到IP包頭的幾個重要字段,,主要是標識符、標識位,、偏移量,,分別詳述如下:
標識符(Identification):在發(fā)送數(shù)據(jù)包前,發(fā)送主機給每個數(shù)據(jù)包一個ID值,,放在16位的標識符字段中,。此ID用于標識唯一的數(shù)據(jù)報或數(shù)據(jù)流。接收主機利用此ID對收到的數(shù)據(jù)報進行重組,。當分片的IP數(shù)據(jù)報從源地址發(fā)送到目的地址的時候,,由于網(wǎng)絡延遲或者不同的傳輸路徑的關系,在到達目的主機時,,這些分片數(shù)據(jù)報并不總是有序的到達,,而是處于一種無序狀態(tài),因此,,接收主機便用此ID判斷接收的這些分片數(shù)據(jù)報是否屬于同一個數(shù)據(jù)流,,然后再進行重組。
標志(Flags):第一個bit稱為R位,目前保留未用,。第二個bit稱為DF位,,Don't Fragment,“不分片”位,,即如果將這一比特置1 ,,表示上層應用不允許分片,IP層將不對數(shù)據(jù)報進行分片,。第三個bit稱為MF位,,More Fragment,“更多的片”,。除了最后一個數(shù)據(jù)分片外,,其他每個組成數(shù)據(jù)報的數(shù)據(jù)分片都要把該比特置1,表示有更多的分片,。
偏移量(Framentation offset):13位的偏移量字段用來表示分段的數(shù)據(jù)報在整個數(shù)據(jù)流中的位置,,即相當于分片數(shù)據(jù)報的順序號。發(fā)送主機對第一個數(shù)據(jù)報的偏移量置為0,,而后續(xù)的分片數(shù)據(jù)報的偏移量則以網(wǎng)絡的MTU大小賦值,。偏移量對于接收方進行數(shù)據(jù)重組的時候,這是一個唯一依據(jù),。對于分片的數(shù)據(jù)段(單位:字節(jié))必須為8的整數(shù)倍,,否則IP無法表達其偏移量。
了解了數(shù)據(jù)分片的幾個關鍵字段后,,我們找一個實例說明分片過程(從網(wǎng)上摘錄):
在MTU為1500的以太網(wǎng)中,,源主機如果需要通過UDP傳送3000字節(jié)的數(shù)據(jù)到目的主機,這時的分段情況如下所示(假定在同一網(wǎng)段):
此處需要注意的是對于分片1的報頭,,相對于其他兩個分片的報頭要多8個字節(jié)UDP協(xié)議報頭的開銷,。因此,在計算實際傳輸?shù)臄?shù)據(jù)凈載荷時,,分片1要多減去8字節(jié)UDP報頭,。最后,接收主機通過包ID,、標識位、偏移量值將數(shù)據(jù)重組成完整的數(shù)據(jù),。
需要注意是,,有些數(shù)據(jù)包在一次分片后,由于遇到更小MTU的網(wǎng)絡,,還可能被繼續(xù)分片,。為數(shù)據(jù)包分片和為數(shù)據(jù)包再次分片的區(qū)別在于網(wǎng)關處理MF位的不同。在一個網(wǎng)關為原來未分片的數(shù)據(jù)包分片時,除了末尾的數(shù)據(jù)包片,,它將其余所有分片上的MF位置為1,,最后一片為0。然而,,當網(wǎng)關為一個非末尾的數(shù)據(jù)包片再次分片時,,它會把生成的所有子分片中的MF位全部調(diào)為1,因為所有這些子分片都不可能是整個數(shù)據(jù)包末尾的數(shù)據(jù)包,。分片中標志字段的M值取決于該分片是否是原始分組的最后一片,,而片偏移量也是相對于原始分組的偏移量。
三,、MTU對上層應用的影響:
1,、TCP、UDP等上層應用傳輸效率的高低與PMTU有密切聯(lián)系,。
對TCP來講,,其傳輸效率與MSS的合適大小密切相關,而MTU是決定MSS大小的唯一因素,。MSS的大小會在TCP連接建立階段進行協(xié)商,,具體協(xié)商過程如下:
TCP client發(fā)出SYN報文,其中option選項填充的MSS字段一般為(MTU-IP頭大小-TCP頭大小),,同樣TCP server收到SYN報文后,,會發(fā)送SYN+ACK報文應答,option選項填充的mss字段也為(MTU-IP頭大小-TCP頭大小),;協(xié)商雙方會比較SYN和SYN+ACK報文中MSS字段大小,,選擇較小的MSS作為發(fā)送TCP分片的大小。
理論上,,如果MSS與合適的MTU即PMTU(我認為合適的PMTU為路徑上可不分片通過的最大MTU)匹配,,TCP傳輸效率最高,因為免去了分片,、重組等工作,。但由于PMTU發(fā)現(xiàn)過程無法保證,導致最終發(fā)現(xiàn)的MTU可能并不合適路徑傳輸,,造成部分應用的分片和重組,,降低了傳輸效率。
2,、部分網(wǎng)絡設備對特定應用的分片報文處理能力弱,,造成部分應用故障。
目前,,國內(nèi)寬帶IP網(wǎng)絡多數(shù)用戶采用PPPOE撥號方式實現(xiàn)業(yè)務接入,。位于電信運營商內(nèi)側(cè)的BAS設備用于終結(jié)PPP連接,,實現(xiàn)用戶接入?yún)R聚。實際應用中,,部分BAS設備對VPDN等特定應用的分片,、重組機制不健全,造成部分基于VPDN方式的業(yè)務速度緩慢,。如:筆者曾發(fā)現(xiàn)過某廠商BAS設備ME60當TSU板未啟用時,,其于L2TP隧道的VPDN撥號應用,經(jīng)常出現(xiàn)業(yè)務訪問緩慢,,甚至不通的情況,,當啟用TSU板后,業(yè)務恢復正常(經(jīng)了解,,TSU板是專門用于基于隧道或其它協(xié)議數(shù)據(jù)包分片處理功能),。某廠商設備SE800,承載了基于L2TP隧道的VPDN撥號應用后,,部分應用可以使用,,部分應用無法正常運行。
3,、部分網(wǎng)絡安全設備對分片的重組過程進一步影響業(yè)務應用,。
原則上,當某個網(wǎng)絡應用業(yè)務在傳輸過程中發(fā)生分片后,,只有發(fā)送端和接收端會進行分片的重組,,這已經(jīng)影響到業(yè)務運行速度。當分過片的IP包經(jīng)過網(wǎng)絡監(jiān)測設備,、安全系統(tǒng)等設備時,,基于安全和其它特定目的,有些設備要求完成數(shù)據(jù)包的分片和重組,,會進一步延緩應用的運行速度,,甚至導致部分應用無法使用。
四,、MTU常見問題小結(jié)(摘錄自網(wǎng)絡):
1,、為何有些共享上網(wǎng)的路由器的網(wǎng)絡設備以太網(wǎng)口MTU值不是1500?
有些通過共享路由器PPPOE撥號上網(wǎng)的路由器上連口(與ADSL調(diào)制器互聯(lián)的以太網(wǎng)口)MTU為1492,,因為PPP報文占據(jù)了8個字節(jié),,導致承載數(shù)據(jù)信息的IP報文大小變成了1492。
2,、為什么在思科路由器上GRE接口的默認MTU為1476,?
因為GRE會重新封裝一個IP包頭,以及加上GRE的4字節(jié)頭部,,一共是24個字節(jié),。這樣總的用于應用的IP包的長度為1476。
3,、為什么支持VLAN標記的接口MTU要大于1514字節(jié),?
由于VLAN的原理是在以太網(wǎng)的幀頭部加入了4個字節(jié)的VLAN TAG信息,因此在支持802.1q標記的鏈路的接口上要求MTU不小于1518字節(jié),,才能保證凈荷為1500的數(shù)據(jù)包順利通過該接口,。
4、MTU和各種VPN的關系有無規(guī)律性,?
因VPN的實現(xiàn)需要對原有的IP或者是TCP/UDP數(shù)據(jù)進行封裝,,因此也就增加了數(shù)據(jù)包或數(shù)據(jù)幀的總長度,這樣也就導致了VPN 承載的數(shù)據(jù)凈荷值的減小,,具體減少的數(shù)值與不同的VPN類型相關,。
即:MTU=經(jīng)VPN封裝后數(shù)據(jù)包長度-VPN封裝包頭長度
5、對于因MTU問題引起的應用系統(tǒng)故障現(xiàn)象有哪些,?處理思路是什么,?
因MTU引的網(wǎng)絡問題表現(xiàn)各種各樣,如:有些游戲,,經(jīng)??C。有的網(wǎng)站,,部分網(wǎng)頁可以打開,,部分網(wǎng)頁打不開??偟膩碇v,,如果網(wǎng)絡不丟包,而網(wǎng)絡應用時快時慢,,或部分應用無法使用,,很大程度上可以定位為MTU問題。
對于MTU引起的問題,,處理思路為:要么增加網(wǎng)絡中最細管道的MTU值,,要么減少終端應用發(fā)現(xiàn)的數(shù)據(jù)包大小。對于終端的MTU,,會有各種各樣的工具或方法進行修改,。