王悦悦,胡曦明,2,马苗,2,李鹏,2
(1.陕西师范大学计算机科学学院,西安 710119;2.现代教学技术教育部重点实验室,西安 710119)
在IPv4网络传输中,当一个数据包大于硬件接口的最大传输单元(Maximum Transmission Unit,MTU)[1]时,网络层会对其进行分片[2],保证每个分片都小于对应接口的MTU值[3-4]。该功能实现了大块数据分片传送,但它会使网络中数据碎片增多、路由器负荷加重,导致网络出现拥塞、丢包现象[1,5]。路径最大传输单元(Path MTU,PMTU)是从发送端到接收端之间所有数据链路中最小的MTU值[5]。PMTU探测技术能有效地减少分片,提高网络传输效率[6],但在当前网络中,常常由于防火墙、VPN等网关设备丢弃ICMP差错控制报文,导致PMTU探测技术不能正常运转[6-7]。
在IPv6网络环境中,IPv6报文中没有分片与重组字段[8-9],数据分段只能由源节点进行,中间路由器不允许对数据进行分段[10-11],发送端需要利用PMTU探测技术来感知传输路径的最大传输单元,以此控制发送的最大数据包的长度[1]。因此,在IPv6网络中,PMTU探测技术成为了实现网络数据传输的关键技术[12]。
PMTU探测技术的基本原理是发送端将到达某一节点的PMTU值假定为第一段链路的MTU值,按照假定的长度发送数据包。中间节点在转发数据包时,若发现数据包长度大于下一跳链路的MTU值,那么该节点将会丢弃数据包并回复一个ICMPv6数据包过大报文给发送端。发送端收到差错报文后,会将PMTU值修改为该报文中携带的MTU值。当假定的PMTU值小于或等于实际的PMTU时,PMTU探测过程结束[13-14]。
在Oracle VM VirtualBox虚拟机上使用H3C Cloud Lab平台搭建了IPv6网络,在该平台上进行仿真实验,实验拓扑图如图1所示,其中PC_A为发送端,PC_B为接收端,RT_1、RT_2为转发路由器:
图1 实验拓扑图
(1)实验过程
①分别设置发送端PC_A的出接口GE_0/1的MTU值为1500、1420、1360,其余路由器接口的MTU值为1500。
图2 PC_A的出接口GE_0/1的MTU值为1500
②PC_A向PC_B发送4500字节数据。
③使用Wireshark抓包查看发送端PC_A的出接口GE_0/1处初始报文的大小,图3所示为PC_A的出接口GE_0/1在其MTU值为1500时的初始报文。
图3 PC_A出接口GE_0/1处的初始报文
(2)结果分析
发送端PC_A的出接口GE_0/1在其MTU值分别为1500、1420、1360时,初始报文的大小以及初始PMTU值如表1所示:
表1 PC_A的MTU值不同时初始报文大小及初始PMTU值
由表1可知,发送端发送数据时,初始PMTU值等于发送接口的MTU值,与相连路由器的接口无关。
(1)实验过程
①分别设置最小链路是接收端PC_B、最小链路是转发路由器RT_2(实验数据如表2、表3所示),具体配置过程如表4所示,图4、图5为实验数据一的配置结果。
表2 实验数据一
表3 实验数据二
表4 实验配置
图4 实验数据一,最小链路是PC_B配置结果
②PC_A向PC_B发送4500字节数据。
③数据传输完成后,在发送端PC_A处查看其到接收端PC_B的数据链路的PMTU值。图6为实验数据一,最小链路是接收端PC_B时的PMTU值。
图6 实验数据一,最小链路是PC_B时的PMTU值
④分别在PC_A的GE_0/1,RT_1和RT_2的GE_0/0、GE_0/1以及PC_B的GE_0/0处抓包,分析数据的发送过程。
(2)结果分析
接收端MTU值对PMTU的影响实验结果如表5、表6所示:
表5 数据一实验结果
表6 数据二实验结果
两个实验数据的发送接口的MTU值都为1500,所以初始PMTU值都是1500。
通过抓包分析可知,在实验数据一中,当链路状况为1500→420时,没有丢包,PMTU值不变;当链路状况为1500→1420→1420时,在转发路由器RT_2的接口GE_0/0处丢一个包,回复差错报文,PC_A将其到PC_B的PMTU值修改为1420。
在实验数据二中,当链路状况为1500→1420→1360时,只在RT_2的接口GE_0/0处丢包,回复差错报文,PC_A将PMTU值修改为1420;当链路状况为1500→1420→1360→1360时,在RT_1接口GE_0/0处丢一个包,PC_A将PMTU值修改为1420,之后在转发路由器RT_2接口GE_0/0处再次丢包,再次回复差错报文(图7为ICMPv6差错报文),PMTU值变为1360。
图7 ICMPv6差错报文
结论:当较大链路向较小链路发送数据包且该数据包长度大于较小链路的MTU值时,若较小链路是接收端,不会回复差错报文,直接接收;若较小链路的路由器是转发路由器时,在转发时丢包,回复ICMPv6差错报文。因此,接收端链路状况不会改变PMTU值。
(1)实验过程
①设置不同链路状况(如表7所示)。如图8,设置RT_2接口GE_0/0和GE_0/1的MTU值为1360,PC_B接口GE_0/0的MTU值为1420,其余路由器接口的MTU值为1500,整个链路状况为1500→1360→1420,为大小中链路。
表7 不同的链路状况
图8 链路状况为1500→1360→1420配置结果
②PC_A向PC_B发送4500字节数据,查看数据丢包情况。
③数据传输完成后,在发送端PC_A处查看其到接收端PC_B的数据链路的PMTU值。图9为链路状况是大小中链路,具体数据为1500→1360→1420时PMTU值。
图9 链路状况为150→136→1420时PMTU值
④分别在PC_A的GE_0/1,RT_1和RT_2的GE_0/0、GE_0/1,PC_B的GE_0/0处抓包,分析数据的发送过程。图10为链路状况为1500→1360→1420时,在PC_A的接口GE_0/1处获取的报文。
图10 链路状况为1500→1360→1420报文
(2)结果分析
上述实验中,不同链路状况下PMTU值、丢包情况以及实际丢包率如表8所示。
表8 不同链路状况对PMTU值影响实验结果
通过抓包分析可知,当较大链路向较小链路发送报文时,若较小链路不是接收端,会丢一个包,回复ICMPv6差错报文,之后以较小链路的MTU值发送;若较小链路是接收端,不会丢包,直接接收。较小链路向较大链路发送报文时,不会丢包。
通过抓包发现,有些链路中接收端实际收到的包与发送端显示的丢包情况不符合,这是因为当接收端收到数据后,在回复报文时也遵循PMTU探测技术,在中间较小链路也会丢包,发送端未收到回复,认为数据已丢失。
结论:IPv6网络环境中,在不同链路状态下,路由器转发数据都遵循PMTU探测技术。由于遵循PMTU探测技术,当中间链路的MTU值小于两端时,发送端显示的丢包情况可能与接收端实际收到数据包的情况不符。
上述实验通过分别设置发送端、接收端以及传输链路的MTU值,研究了PMTU值的变化。在此过程中发现,IPv6网络的PMTU的类型既有动态类型(Dynamic),又有静态类型(Static)。为此,针对IPv6静态PMTU值对报文传输的影响开展研究。
(1)实验过程
①设置RT_2接口GE_0/0和GE_0/1的MTU值为1360,PC_B接口GE_0/0的MTU值为1420,其余路由器接口的MTU值为1500,整个链路状况为1500→1360→1420。
②在发送端PC_A中分别设置其到接收端PC_B的数据链路的静态PMTU值为1380、1360、1300,图12所示为在PC_A中设置静态PMTU值为1380。
图11 链路1500→1360→1420,静态PMTU值为1380
图12 设置静态PMTU值为1380
③PC_A向PC_B发送4500字节数据,如图13所示。
图13 PC_A向PC_B发送4500字节数据
④数据传输完成后,在发送端PC_A处查看其到接收端PC_B的数据链路的PMTU值,在各个接口处抓包分析报文的发送过程。
图14 静态PMTU为1380时PMTU值
(2)结果分析
上述实验中,在发送端的静态PMTU值不同的情况下,数据丢包情况以及丢包率如表9所示。
表9 静态PMTU值对报文传输的影响实验结果
对发送过程进行抓包分析,发现发送端总是以静态PMTU的大小发送数据。当静态PMTU值为1380时,PC_A以1380的大小发送数据,转发路由器RT_2的接口GE_0/0处丢包,回复MTU值为1360的差错报文,但PC_A继续以1380发送,全部丢包;当静态PMTU值为1360和1300时,PC_A分别以1360和1300的大小发送数据,无丢包现象。
结论:当路由器配置了静态PMTU时,ICMPv6差错报文中的MTU值不会改变发送端PMTU值的大小,PMTU探测技术不再起作用。
本文利用H3C Cloud Lab平台对IPv6网络中的PMTU探测技术进行了深入研究。发现IPv6网络可以有效地支持PMTU探测技术,通过避免中间路由器多次分片来减少网络中报文碎片、减少路由器的负荷,从而提高网络传输效率。
实验结果表明,在IPv6网络的数据传输中,当路由器配置动态PMTU时,数据包的大小由PMTU值决定,PMTU值由路由器发送接口与链路中转发数据的最小MTU值决定,不受接收端链路状况的影响。
相比之下,当路由器配置静态PMTU时,PMTU探测技术不再起作用。因此,静态PMTU值不适合运用于动态网络中,在只有静态路由的网络中,配置一定的静态PMTU值可以提高链路层的传输效率。