[摘要]文章介紹PMTU以及在復(fù)雜網(wǎng)絡(luò)環(huán)境面臨的問(wèn)題,并且探討PMTU 自動(dòng)探測(cè)和隧道MTU發(fā)現(xiàn)機(jī)制。
[關(guān)鍵詞]MTU;隧道MTU;PMTU
[作者簡(jiǎn)介]姚利增,唐山學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,研究方向:計(jì)算機(jī)網(wǎng)絡(luò)安全,河北唐山,063000
[中圖分類號(hào)] TP393[文獻(xiàn)標(biāo)識(shí)碼] A[文章編號(hào)] 1007-7723(2008)07-0036-0002
一、PMTU以及復(fù)雜網(wǎng)絡(luò)環(huán)境面臨的問(wèn)題
在因特網(wǎng)上,兩個(gè)主機(jī)之間的通信要經(jīng)過(guò)多個(gè)網(wǎng)絡(luò),而每個(gè)不同的網(wǎng)絡(luò)在IP 層可能有不同的MTU(最大傳輸單元)。兩臺(tái)通信主機(jī)路徑中的最小MTU 被稱作路徑MTU 即PMTU。路徑MTU 發(fā)現(xiàn)機(jī)制通過(guò)在IP 首部中繼承并設(shè)置“不要分片(DF)”比特,來(lái)發(fā)現(xiàn)當(dāng)前路徑的路由器是否需要對(duì)正在發(fā)送的IP 數(shù)據(jù)報(bào)進(jìn)行分片。如果一個(gè)待轉(zhuǎn)發(fā)的IP 數(shù)據(jù)報(bào)被設(shè)置DF 比特,而其長(zhǎng)度又超過(guò)了MTU ,那么路由器就會(huì)丟棄這個(gè)報(bào)文,并返回一個(gè)ICMP 不可達(dá)的差錯(cuò)報(bào)文(類型為3 ,代碼為4 :需要進(jìn)行分片但設(shè)置了不分片比特),其中填有下一跳正確的MTU。如果發(fā)送端主機(jī)接收到這個(gè)ICMP 差錯(cuò)控制報(bào)文,它就可以用正確的MTU 重新傳送這個(gè)報(bào)文,并在以后的傳輸中沿用這個(gè)MTU 大小。路徑MTU 發(fā)現(xiàn)機(jī)制的出現(xiàn)大大減少了網(wǎng)路上IP 分片的可能性。它在簡(jiǎn)單環(huán)境下是能夠正常運(yùn)行的,但在復(fù)雜網(wǎng)絡(luò)環(huán)境下會(huì)有問(wèn)題。
在實(shí)際復(fù)雜的網(wǎng)絡(luò)環(huán)境中,一些網(wǎng)關(guān)設(shè)備(如防火墻、路由器等)會(huì)為了避免拒絕服務(wù)攻擊或者其他原因而將這個(gè)ICMP 差錯(cuò)報(bào)文無(wú)條件地丟棄掉。源主機(jī)會(huì)一直以原來(lái)的那個(gè)MTU 大小發(fā)送IP 數(shù)據(jù)報(bào)并設(shè)置DF 位,這些數(shù)據(jù)報(bào)就會(huì)像前面的數(shù)據(jù)報(bào)一樣被路由器丟棄掉,不能到達(dá)目的地。另外,在實(shí)際的網(wǎng)絡(luò)環(huán)境中存在諸如VPN 一類的設(shè)備,它們由于加密的需要對(duì)報(bào)文進(jìn)行了封裝。這樣,報(bào)文的長(zhǎng)度就增加了,報(bào)文有可能因?yàn)樘蟊幌乱徽镜穆酚善鱽G棄掉。但是,由于路由器返回的ICMP 差錯(cuò)報(bào)文中包含的原始IP 數(shù)據(jù)報(bào)信息是加密過(guò)的,VPN 并不能正確識(shí)別,只能丟棄。在這種情況下,在客戶端看來(lái)就有一個(gè)異?,F(xiàn)象:可以和服務(wù)器端交換少量數(shù)據(jù),如能夠收到服務(wù)器端的ICMP 回顯請(qǐng)求應(yīng)答,卻不能從服務(wù)器下載大的數(shù)據(jù)。
二、PMTU 自動(dòng)探測(cè)
PMTU 自動(dòng)探測(cè)是自動(dòng)探測(cè)網(wǎng)絡(luò)中各個(gè)子網(wǎng)的PMTU 值。首先在內(nèi)核中建立一張PMTU 表,表中的內(nèi)容是防火墻知道的各個(gè)客戶端子網(wǎng)的路徑MTU ,初始值均設(shè)置為防火墻外口的MTU。探測(cè)模塊每隔一定的時(shí)間向各個(gè)子網(wǎng)發(fā)送分組,并設(shè)置“不分片”標(biāo)志比特。發(fā)送的第一個(gè)分組的長(zhǎng)度正好與出口MTU 相等,每次收到ICMP“不能分片”差錯(cuò)時(shí),檢查其報(bào)文格式,更新PMTU 表。如果是新格式,包含下一跳出口的MTU 就用該MTU 值替換表中原來(lái)的PMTU 值;否則,就用下一個(gè)最小的MTU 值繼續(xù)發(fā)送分組。據(jù)RFC 1191 中的聲明,MTU 值的個(gè)數(shù)是有限的。探測(cè)模塊將這些近似值構(gòu)成一個(gè)數(shù)組(如int mtus[ ] ={17914,8166,4464,4352,2048,2002,1536,1500,1492 ,1006 ,576 ,552 ,544 ,512 ,508 ,296 ,680}),取下一個(gè)最小的MTU 值來(lái)發(fā)送。對(duì)于網(wǎng)絡(luò)中存在VPN 一類的設(shè)備導(dǎo)致不能返回ICMP差錯(cuò)報(bào)文的情況,可以設(shè)置一個(gè)超時(shí)閾值。如果超過(guò)了這個(gè)閾值沒(méi)有收到ICMP 差錯(cuò)報(bào)文,同時(shí)也沒(méi)有收到目的主機(jī)的回應(yīng),就向目的主機(jī)發(fā)送ICMP 回顯請(qǐng)求,檢查是否是由于網(wǎng)絡(luò)狀況太差而導(dǎo)致沒(méi)有回應(yīng)。如果收到了目的主機(jī)發(fā)回的ICMP 回顯請(qǐng)求應(yīng)答,說(shuō)明網(wǎng)絡(luò)狀況良好,只是VPN 等設(shè)備丟棄了ICMP 差錯(cuò)報(bào)文,于是,探測(cè)模塊從上述MTU 值數(shù)組中取下一個(gè)最小的MTU 值來(lái)發(fā)送。最終,各個(gè)客戶端子網(wǎng)正確的PMTU 值對(duì)應(yīng)表就建立起來(lái)了。
三、隧道MTU發(fā)現(xiàn)
參照RFC 2473,隧道邊緣路由器TE1 和TE2 執(zhí)行隧道發(fā)現(xiàn)協(xié)議,并保存隧道MTU。TE1 和TE2 假定最初始隧道MTU 為第一跳鏈路MTU,即RTE MTU1 和2 TE MTU2 ,最后得到的隧道MTU 為隧道中間所有鏈路的MTU 的最小值。假設(shè)H1 和H2 為兩臺(tái)IPv6 主機(jī)。H1 發(fā)送IPv6 報(bào)文到達(dá)隧道入口TE1,設(shè)報(bào)文長(zhǎng)度為L(zhǎng)EN。TE1 需要對(duì)其進(jìn)行隧道封裝并向R 轉(zhuǎn)發(fā),封裝后的報(bào)文長(zhǎng)度為(LEN+Ltul )。若隧道MTU 發(fā)現(xiàn)執(zhí)行完畢,即TE1 和TE2 已知曉隧道MTU 為MTUtul 。假如LEN + Ltul >MTUtul ,則存在兩種情況:(1)如果LEN + Ltul> MTUminv6 (MTUminv6為RFC 2460規(guī)定的IPv6 最小鏈路MTU,等于1 280B),則TE1 將報(bào)文丟棄,并生成ICMPv6 包太大報(bào)文。其中IPv6 報(bào)頭的源地址為T(mén)E1 的IPv6 地址,目的地址為H1 的IPv6 地址。并將跟隨的ICMPv6 報(bào)文的MTU 字段設(shè)置為Max{ MTUtul, MTUminv6}。若LEN + Ltul?蕎MTUminv6,則TE1 不丟棄報(bào)文,而是以不超過(guò)隧道MTU 的大小對(duì)IPv6 報(bào)文進(jìn)行分段,通過(guò)隧道封裝后轉(zhuǎn)發(fā)至R。(2)隧道MTU 發(fā)現(xiàn)協(xié)議執(zhí)行過(guò)程中,在TE1 和TE2 并不知道隧道MTU 的情況下,報(bào)文太大可能由隧道中間路由器發(fā)現(xiàn)。只要滿足MTURTE2
IPv4 主機(jī)間通信假設(shè)H1 和H2 為需要通信的IPv4 主機(jī)。此時(shí)H1 發(fā)送的IPv4 報(bào)文到達(dá)TE1 需要?dú)v經(jīng)IPv6 封裝和隧道封裝,報(bào)文長(zhǎng)度由LEN 增加到(LEN+Lhdr6+Ltul)。(1)若隧道MTU 發(fā)現(xiàn)執(zhí)行完成,即TE1 和TE2 知道隧道PMTU 為MTUtul。如果LEN+Lhdr6+Ltul>MTUtul,則TE1作如下處理:若原始IPv4 報(bào)文的DF 位(不可分片位)置位,那么TE1將報(bào)文丟棄,并返回ICMPv4 目的不可達(dá)報(bào)文(需要分片但DF 置位)。報(bào)頭的源和目標(biāo)地址分別為T(mén)E1 和H1 的IPv4 地址??梢允褂肐CMPv4 報(bào)文中的unused 字段來(lái)傳達(dá)所期望的MTU 值,即tul MTU 。若原始IPv4 報(bào)文的DF 位(不可分片位)未置位,那么隧道邊緣路由器TE1 不可避免地需要對(duì)源報(bào)文進(jìn)行分片處理,分片大小必須不大于(MTUtul -Lhdr6)。然后TE1 對(duì)分片依次進(jìn)行兩次封裝并向下一跳R 轉(zhuǎn)發(fā)。(2)隧道MTU 發(fā)現(xiàn)執(zhí)行過(guò)程中, 如果MTURTE2 四、結(jié)語(yǔ) 在復(fù)雜網(wǎng)絡(luò)環(huán)境中,常常由于防火墻、VPN 等網(wǎng)關(guān)設(shè)備丟棄ICMP 差錯(cuò)控制報(bào)文,導(dǎo)致路徑MTU 發(fā)現(xiàn)機(jī)制不能正常運(yùn)轉(zhuǎn),以致于有些應(yīng)用不能正常進(jìn)行。本文淺顯地探討了PMTU 自動(dòng)探測(cè)機(jī)制和隧道MTU發(fā)現(xiàn)機(jī)制,很多地方還需要更加深入的研究。由于黑客可能冒充中間網(wǎng)關(guān)設(shè)備向發(fā)送端發(fā)送ICMP差錯(cuò)控制報(bào)文,會(huì)導(dǎo)致發(fā)送端很敏感地就減少了發(fā)送數(shù)據(jù)報(bào)的大小。因此,路徑MTU 發(fā)現(xiàn)機(jī)制的安全性也有待進(jìn)一步研究。 [參考文獻(xiàn)] [1]W Richard Stevens. TCP/ IP 詳解:協(xié)議1:第1卷[M]. 北京: 機(jī)械工業(yè)出版社, 2000. [2]J Mogul . Path MTU discovery[R]. RFC 1191 , 1990. [3]J McCann ,S Deering. RFC :1981 2Path MTU discovery for IPversion 6[EB/ OL] . www. ietf . org ,2003. [4]K Lahey ,dotRocket . RFC :29232TCP problems with path MTUdiscovery[EB/ OL] . www. ietf . org ,2003.