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