王悅悅,胡曦明,2,馬苗,2,李鵬,2
(1.陜西師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,西安 710119;2.現(xiàn)代教學(xué)技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室,西安 710119)
在IPv4網(wǎng)絡(luò)傳輸中,當(dāng)一個(gè)數(shù)據(jù)包大于硬件接口的最大傳輸單元(Maximum Transmission Unit,MTU)[1]時(shí),網(wǎng)絡(luò)層會對其進(jìn)行分片[2],保證每個(gè)分片都小于對應(yīng)接口的MTU值[3-4]。該功能實(shí)現(xiàn)了大塊數(shù)據(jù)分片傳送,但它會使網(wǎng)絡(luò)中數(shù)據(jù)碎片增多、路由器負(fù)荷加重,導(dǎo)致網(wǎng)絡(luò)出現(xiàn)擁塞、丟包現(xiàn)象[1,5]。路徑最大傳輸單元(Path MTU,PMTU)是從發(fā)送端到接收端之間所有數(shù)據(jù)鏈路中最小的MTU值[5]。PMTU探測技術(shù)能有效地減少分片,提高網(wǎng)絡(luò)傳輸效率[6],但在當(dāng)前網(wǎng)絡(luò)中,常常由于防火墻、VPN等網(wǎng)關(guān)設(shè)備丟棄ICMP差錯(cuò)控制報(bào)文,導(dǎo)致PMTU探測技術(shù)不能正常運(yùn)轉(zhuǎn)[6-7]。
在IPv6網(wǎng)絡(luò)環(huán)境中,IPv6報(bào)文中沒有分片與重組字段[8-9],數(shù)據(jù)分段只能由源節(jié)點(diǎn)進(jìn)行,中間路由器不允許對數(shù)據(jù)進(jìn)行分段[10-11],發(fā)送端需要利用PMTU探測技術(shù)來感知傳輸路徑的最大傳輸單元,以此控制發(fā)送的最大數(shù)據(jù)包的長度[1]。因此,在IPv6網(wǎng)絡(luò)中,PMTU探測技術(shù)成為了實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)年P(guān)鍵技術(shù)[12]。
PMTU探測技術(shù)的基本原理是發(fā)送端將到達(dá)某一節(jié)點(diǎn)的PMTU值假定為第一段鏈路的MTU值,按照假定的長度發(fā)送數(shù)據(jù)包。中間節(jié)點(diǎn)在轉(zhuǎn)發(fā)數(shù)據(jù)包時(shí),若發(fā)現(xiàn)數(shù)據(jù)包長度大于下一跳鏈路的MTU值,那么該節(jié)點(diǎn)將會丟棄數(shù)據(jù)包并回復(fù)一個(gè)ICMPv6數(shù)據(jù)包過大報(bào)文給發(fā)送端。發(fā)送端收到差錯(cuò)報(bào)文后,會將PMTU值修改為該報(bào)文中攜帶的MTU值。當(dāng)假定的PMTU值小于或等于實(shí)際的PMTU時(shí),PMTU探測過程結(jié)束[13-14]。
在Oracle VM VirtualBox虛擬機(jī)上使用H3C Cloud Lab平臺搭建了IPv6網(wǎng)絡(luò),在該平臺上進(jìn)行仿真實(shí)驗(yàn),實(shí)驗(yàn)拓?fù)鋱D如圖1所示,其中PC_A為發(fā)送端,PC_B為接收端,RT_1、RT_2為轉(zhuǎn)發(fā)路由器:
圖1 實(shí)驗(yàn)拓?fù)鋱D
(1)實(shí)驗(yàn)過程
①分別設(shè)置發(fā)送端PC_A的出接口GE_0/1的MTU值為1500、1420、1360,其余路由器接口的MTU值為1500。
圖2 PC_A的出接口GE_0/1的MTU值為1500
②PC_A向PC_B發(fā)送4500字節(jié)數(shù)據(jù)。
③使用Wireshark抓包查看發(fā)送端PC_A的出接口GE_0/1處初始報(bào)文的大小,圖3所示為PC_A的出接口GE_0/1在其MTU值為1500時(shí)的初始報(bào)文。
圖3 PC_A出接口GE_0/1處的初始報(bào)文
(2)結(jié)果分析
發(fā)送端PC_A的出接口GE_0/1在其MTU值分別為1500、1420、1360時(shí),初始報(bào)文的大小以及初始PMTU值如表1所示:
表1 PC_A的MTU值不同時(shí)初始報(bào)文大小及初始PMTU值
由表1可知,發(fā)送端發(fā)送數(shù)據(jù)時(shí),初始PMTU值等于發(fā)送接口的MTU值,與相連路由器的接口無關(guān)。
(1)實(shí)驗(yàn)過程
①分別設(shè)置最小鏈路是接收端PC_B、最小鏈路是轉(zhuǎn)發(fā)路由器RT_2(實(shí)驗(yàn)數(shù)據(jù)如表2、表3所示),具體配置過程如表4所示,圖4、圖5為實(shí)驗(yàn)數(shù)據(jù)一的配置結(jié)果。
表2 實(shí)驗(yàn)數(shù)據(jù)一
表3 實(shí)驗(yàn)數(shù)據(jù)二
表4 實(shí)驗(yàn)配置
圖4 實(shí)驗(yàn)數(shù)據(jù)一,最小鏈路是PC_B配置結(jié)果
②PC_A向PC_B發(fā)送4500字節(jié)數(shù)據(jù)。
③數(shù)據(jù)傳輸完成后,在發(fā)送端PC_A處查看其到接收端PC_B的數(shù)據(jù)鏈路的PMTU值。圖6為實(shí)驗(yàn)數(shù)據(jù)一,最小鏈路是接收端PC_B時(shí)的PMTU值。
圖6 實(shí)驗(yàn)數(shù)據(jù)一,最小鏈路是PC_B時(shí)的PMTU值
④分別在PC_A的GE_0/1,RT_1和RT_2的GE_0/0、GE_0/1以及PC_B的GE_0/0處抓包,分析數(shù)據(jù)的發(fā)送過程。
(2)結(jié)果分析
接收端MTU值對PMTU的影響實(shí)驗(yàn)結(jié)果如表5、表6所示:
表5 數(shù)據(jù)一實(shí)驗(yàn)結(jié)果
表6 數(shù)據(jù)二實(shí)驗(yàn)結(jié)果
兩個(gè)實(shí)驗(yàn)數(shù)據(jù)的發(fā)送接口的MTU值都為1500,所以初始PMTU值都是1500。
通過抓包分析可知,在實(shí)驗(yàn)數(shù)據(jù)一中,當(dāng)鏈路狀況為1500→420時(shí),沒有丟包,PMTU值不變;當(dāng)鏈路狀況為1500→1420→1420時(shí),在轉(zhuǎn)發(fā)路由器RT_2的接口GE_0/0處丟一個(gè)包,回復(fù)差錯(cuò)報(bào)文,PC_A將其到PC_B的PMTU值修改為1420。
在實(shí)驗(yàn)數(shù)據(jù)二中,當(dāng)鏈路狀況為1500→1420→1360時(shí),只在RT_2的接口GE_0/0處丟包,回復(fù)差錯(cuò)報(bào)文,PC_A將PMTU值修改為1420;當(dāng)鏈路狀況為1500→1420→1360→1360時(shí),在RT_1接口GE_0/0處丟一個(gè)包,PC_A將PMTU值修改為1420,之后在轉(zhuǎn)發(fā)路由器RT_2接口GE_0/0處再次丟包,再次回復(fù)差錯(cuò)報(bào)文(圖7為ICMPv6差錯(cuò)報(bào)文),PMTU值變?yōu)?360。
圖7 ICMPv6差錯(cuò)報(bào)文
結(jié)論:當(dāng)較大鏈路向較小鏈路發(fā)送數(shù)據(jù)包且該數(shù)據(jù)包長度大于較小鏈路的MTU值時(shí),若較小鏈路是接收端,不會回復(fù)差錯(cuò)報(bào)文,直接接收;若較小鏈路的路由器是轉(zhuǎn)發(fā)路由器時(shí),在轉(zhuǎn)發(fā)時(shí)丟包,回復(fù)ICMPv6差錯(cuò)報(bào)文。因此,接收端鏈路狀況不會改變PMTU值。
(1)實(shí)驗(yàn)過程
①設(shè)置不同鏈路狀況(如表7所示)。如圖8,設(shè)置RT_2接口GE_0/0和GE_0/1的MTU值為1360,PC_B接口GE_0/0的MTU值為1420,其余路由器接口的MTU值為1500,整個(gè)鏈路狀況為1500→1360→1420,為大小中鏈路。
表7 不同的鏈路狀況
圖8 鏈路狀況為1500→1360→1420配置結(jié)果
②PC_A向PC_B發(fā)送4500字節(jié)數(shù)據(jù),查看數(shù)據(jù)丟包情況。
③數(shù)據(jù)傳輸完成后,在發(fā)送端PC_A處查看其到接收端PC_B的數(shù)據(jù)鏈路的PMTU值。圖9為鏈路狀況是大小中鏈路,具體數(shù)據(jù)為1500→1360→1420時(shí)PMTU值。
圖9 鏈路狀況為150→136→1420時(shí)PMTU值
④分別在PC_A的GE_0/1,RT_1和RT_2的GE_0/0、GE_0/1,PC_B的GE_0/0處抓包,分析數(shù)據(jù)的發(fā)送過程。圖10為鏈路狀況為1500→1360→1420時(shí),在PC_A的接口GE_0/1處獲取的報(bào)文。
圖10 鏈路狀況為1500→1360→1420報(bào)文
(2)結(jié)果分析
上述實(shí)驗(yàn)中,不同鏈路狀況下PMTU值、丟包情況以及實(shí)際丟包率如表8所示。
表8 不同鏈路狀況對PMTU值影響實(shí)驗(yàn)結(jié)果
通過抓包分析可知,當(dāng)較大鏈路向較小鏈路發(fā)送報(bào)文時(shí),若較小鏈路不是接收端,會丟一個(gè)包,回復(fù)ICMPv6差錯(cuò)報(bào)文,之后以較小鏈路的MTU值發(fā)送;若較小鏈路是接收端,不會丟包,直接接收。較小鏈路向較大鏈路發(fā)送報(bào)文時(shí),不會丟包。
通過抓包發(fā)現(xiàn),有些鏈路中接收端實(shí)際收到的包與發(fā)送端顯示的丟包情況不符合,這是因?yàn)楫?dāng)接收端收到數(shù)據(jù)后,在回復(fù)報(bào)文時(shí)也遵循PMTU探測技術(shù),在中間較小鏈路也會丟包,發(fā)送端未收到回復(fù),認(rèn)為數(shù)據(jù)已丟失。
結(jié)論:IPv6網(wǎng)絡(luò)環(huán)境中,在不同鏈路狀態(tài)下,路由器轉(zhuǎn)發(fā)數(shù)據(jù)都遵循PMTU探測技術(shù)。由于遵循PMTU探測技術(shù),當(dāng)中間鏈路的MTU值小于兩端時(shí),發(fā)送端顯示的丟包情況可能與接收端實(shí)際收到數(shù)據(jù)包的情況不符。
上述實(shí)驗(yàn)通過分別設(shè)置發(fā)送端、接收端以及傳輸鏈路的MTU值,研究了PMTU值的變化。在此過程中發(fā)現(xiàn),IPv6網(wǎng)絡(luò)的PMTU的類型既有動態(tài)類型(Dynamic),又有靜態(tài)類型(Static)。為此,針對IPv6靜態(tài)PMTU值對報(bào)文傳輸?shù)挠绊戦_展研究。
(1)實(shí)驗(yàn)過程
①設(shè)置RT_2接口GE_0/0和GE_0/1的MTU值為1360,PC_B接口GE_0/0的MTU值為1420,其余路由器接口的MTU值為1500,整個(gè)鏈路狀況為1500→1360→1420。
②在發(fā)送端PC_A中分別設(shè)置其到接收端PC_B的數(shù)據(jù)鏈路的靜態(tài)PMTU值為1380、1360、1300,圖12所示為在PC_A中設(shè)置靜態(tài)PMTU值為1380。
圖11 鏈路1500→1360→1420,靜態(tài)PMTU值為1380
圖12 設(shè)置靜態(tài)PMTU值為1380
③PC_A向PC_B發(fā)送4500字節(jié)數(shù)據(jù),如圖13所示。
圖13 PC_A向PC_B發(fā)送4500字節(jié)數(shù)據(jù)
④數(shù)據(jù)傳輸完成后,在發(fā)送端PC_A處查看其到接收端PC_B的數(shù)據(jù)鏈路的PMTU值,在各個(gè)接口處抓包分析報(bào)文的發(fā)送過程。
圖14 靜態(tài)PMTU為1380時(shí)PMTU值
(2)結(jié)果分析
上述實(shí)驗(yàn)中,在發(fā)送端的靜態(tài)PMTU值不同的情況下,數(shù)據(jù)丟包情況以及丟包率如表9所示。
表9 靜態(tài)PMTU值對報(bào)文傳輸?shù)挠绊憣?shí)驗(yàn)結(jié)果
對發(fā)送過程進(jìn)行抓包分析,發(fā)現(xiàn)發(fā)送端總是以靜態(tài)PMTU的大小發(fā)送數(shù)據(jù)。當(dāng)靜態(tài)PMTU值為1380時(shí),PC_A以1380的大小發(fā)送數(shù)據(jù),轉(zhuǎn)發(fā)路由器RT_2的接口GE_0/0處丟包,回復(fù)MTU值為1360的差錯(cuò)報(bào)文,但PC_A繼續(xù)以1380發(fā)送,全部丟包;當(dāng)靜態(tài)PMTU值為1360和1300時(shí),PC_A分別以1360和1300的大小發(fā)送數(shù)據(jù),無丟包現(xiàn)象。
結(jié)論:當(dāng)路由器配置了靜態(tài)PMTU時(shí),ICMPv6差錯(cuò)報(bào)文中的MTU值不會改變發(fā)送端PMTU值的大小,PMTU探測技術(shù)不再起作用。
本文利用H3C Cloud Lab平臺對IPv6網(wǎng)絡(luò)中的PMTU探測技術(shù)進(jìn)行了深入研究。發(fā)現(xiàn)IPv6網(wǎng)絡(luò)可以有效地支持PMTU探測技術(shù),通過避免中間路由器多次分片來減少網(wǎng)絡(luò)中報(bào)文碎片、減少路由器的負(fù)荷,從而提高網(wǎng)絡(luò)傳輸效率。
實(shí)驗(yàn)結(jié)果表明,在IPv6網(wǎng)絡(luò)的數(shù)據(jù)傳輸中,當(dāng)路由器配置動態(tài)PMTU時(shí),數(shù)據(jù)包的大小由PMTU值決定,PMTU值由路由器發(fā)送接口與鏈路中轉(zhuǎn)發(fā)數(shù)據(jù)的最小MTU值決定,不受接收端鏈路狀況的影響。
相比之下,當(dāng)路由器配置靜態(tài)PMTU時(shí),PMTU探測技術(shù)不再起作用。因此,靜態(tài)PMTU值不適合運(yùn)用于動態(tài)網(wǎng)絡(luò)中,在只有靜態(tài)路由的網(wǎng)絡(luò)中,配置一定的靜態(tài)PMTU值可以提高鏈路層的傳輸效率。