APP下载

IPv6网络中一种基于路由协议的PMTU 发现机制*

2013-06-07程友清余少华

计算机工程与科学 2013年2期
关键词:路由表路由器报文

程友清,余少华

(1.华中科技大学计算机学院,湖北 武汉 430074);2.武汉邮电科学研究院,湖北 武汉 430074)

1 引言

2011年2月3日,全球互联网地址分配机构(IANA)宣布,全球IPv4 地址池已经耗尽,在2012年中国IPv4地址也将分配完毕,而随着物联网技术的快速发展,对IP 地址的需求增长更为迅速,因此IPv6技术实用化的进程会逐步加快。在中国,各大运营商已经陆续进行IPv6运营试点,从2010年开始,运营商选型测试开始要求设备厂商支持IPv6相关功能。

MTU(Maximum Transfer Unit)指的是网络某链路中的最大传输单元,是网络应用程序中封装分组的重要参数,也是网络优化的重要指标。不同网络传输介质限定的MTU 是不一样的。PMTU(Path MTU)是指网络端点之间的传输路径容许通过的最大传输单元值,一条网络路径的PMTU是组成该传输路径的所有链路MTU 的最小值。由于IPv6地址长度为16字节,造成IPv6的包头长度最少为40字节,占用有效载荷带宽,而且分片重组占用路由器的处理时间使转发性能下降。因此,IPv6网络系统一般不支持对IP 分组进行分片和重组功能,在IPv6 网络中,PMTU 探测显得尤其重要,它是优化网络传输性能的最重要方法。

2 IPv6网络现有PMTU 发现和路由机制

互联网工程任务组IETF 制定了一系列有关PMTU 探测的标准和建议,其中RFC1981[1]规定了IPv6 网络各个协议层间测量PMTU 的工作职能和范畴,但对具体探测算法没有做规定;RFC2923[2]对IPv6 网络实施PMTU 测量过程中TCP 层可能出现的问题制定了相应解决方案,这些问题包括路由黑洞效应、应答延迟效应以及最大传输单元确定等;另外,国内外很多学者也对PMTU 的探测算法进行了研究[3~5]。以上PMTU 发现机制实质都是从源主机到目的设备或主机逐步探测,没有本质上的改变。现在各设备厂商在实际的IPv6网络产品中仍然采用RFC1981中制定的PMTU 发现机制。

根据RFC1981标准,IPv6网络中在某一主机或设备向未知的目的端发送数据之前需要先进行PMTU 的探测过程。如图1 所示,源和目的之间的链路MTU 都不相同,源首先以本地链路的MTU 值尝试发送数据包,当第一跳路由器收到IPv6数据包时发现出接口链路MTU 比收到的数据包小的时候就发送ICMPv6类型2的包给源(包中携带允许的MTU 值),源端收到该ICMPv6包时则以新的MTU 的长度发送数据包到目的地;第一跳路由器将数据转发到下一个路由器,该路由器发现数据超长回应ICMPv6数据包,以此类推;最终源端探测出到目的地的PMTU 值,后面的数据就以PMTU 为最大长度进行发送。在实际的实现中源会保存本机到每个目的地的PMTU,该PMTU 条目会定期老化(例如2小时),在老化后如果源端需要向目的发送数据,则再发起PMTU 发现过程。

在IPv6网络中,IPv6 数据依据IPv6 路由表进行转发,路由转发表可以静态配置,也可由支持IPv6的动态路由协议RIPng[6]、OSPFv3[7]、BGP4+[8]、IS-ISv6[9]等学习生成。如图1所示,路由器R1和R2之间可以运行路由协议,R1学习到目的主机网段的路由,R2学习到源主机网段的路由。在目前的网络设备中,路由表都由路由前缀、前缀长度、下一跳IPv6地址、下一跳出接口组成。路由器接收到IPv6数据包后根据路由前缀、前缀长度查找路由表,根据查找到的出接口得到出接口链路的MTU 值,从而判断所接收的IPv6数据包是否超长,如果超长则丢弃数据并向源发送ICMPv6包超长包。

Figure 1 Typical PMTU discovery mechanism图1 现有PMTU 发现机制

3 一种基于路由协议的PMTU 发现机制

分析现有IPv6网络路由和PMTU 机制,我们发现可以扩展路由协议提出一种新的路径MTU发现机制。

该机制的原理如下:

(1)路由协议在路由信息报文中携带路由MTU,路由协议从某一接口收到报文后比较路由信息的MTU 和该接口的MTU 值,取其中比较小的MTU 作为该路由的MTU 值,该MTU 值保存在路由信息表中,并将MTU 值向邻居通告,使路由MTU 在网络中传递;

(2)第一跳路由器在收到数据包后查找路由表得到到目的端的路由条目,用该路由条目的MTU值与包长度相比较,小则发送ICMPv6包超长信息(MTU 值为路由MTU 值)给源端,源端之后再用学到的MTU 值作为PMTU 进行数据发送。

3.1 路由协议的扩展

以下通过对RIPng路由协议和路由转发表的扩展来描述本文提出的基于路由协议的IPv6路径MTU 发现机制。

RFC2080中定义了如图2所示的RIPng报文格式,RIPng的请求(request)报文和响应(report)报文传输都采用该报文格式,通过命令字的值来区分报文类型。RIPng报文中携带的路由条目格式如图3所示,由IPv6路由前缀、路由标签、前缀长度(掩码长度)、路由度量值(跳数)组成,RFC2080中规定路由标签可以用来标识路由条目是RIPng外部路由还是内部路由,也可以将该域用作其他用途,但同一网络中各RIPng设备需要保持一致。

Figure 2 RIPng packet format图2 RIPng报文格式

Figure 3 RIPng route information packet format图3 RIPng路由信息报文格式

由以上描述可见,RIPng支持路由MTU 的扩展可以有两种方式:(1)重用路由条目报文中路由标签域,2字节长度可以表示最长65 535字节长度的MTU;(2)将路由条目报文进行扩展,增加4字节MTU 域,如图4所示。在路由标签域已被使用的时候建议使用方式(2),在路由条目表示的是下一跳(路由度量为0xff)时该域可以不添加。

Figure 4 Extension of RIPng route information packet format图4 RIPng路由条目报文扩展

路由协议进行扩展之后,路由表转发表也需进行扩展,扩展后的路由转发表结构中增加了路由MTU 字段。扩展后的路由条目所包含的主要信息如下:

RIPng处理响应(report)报文时需要对代表路由MTU 值的域进行解析,并比较该MTU 值与下一跳出接口的MTU 值,较小者记录到路由转发表中作为该路由的MTU 值;当一台路由器从不同的邻居学习到同一网段的路由时,通过比较这些路由的路由度量值和MTU 值,得到最佳路由。

如上所述,最佳路由选择算法如下:

当RIPng路由器将自己的直连路由通告出去时,则将该直连接口的IPv6 MTU 值封装到报文的MTU 域中发送;当RIPng 路由器将学习到的最佳路由传递出去时,则将该路由条目中的MTU值封装到报文的MTU 域中发送。

以上以RIPng协议为例描述了对IPv6 路由协议的扩展,以支持MTU 的学习,OSPFv3、BGP4+、IS-ISv6路由协议的扩展方法类似。

3.2 新的路径MTU 发现机制

如3.1节所描述,通过路由协议的扩展,路由器可以学习到各个网段的路由MTU 值。基于路由协议扩展的PMTU 发现机制过程如下:

(1)主机通过接收第一跳路由器的路由器通告消息,记录到第一跳路由器链路的MTU 值;

(2)源主机向某一无PMTU 记录的目的地址发送IPv6数据时,以到第一跳路由器的MTU 值为最大包长发送数据包;

(3)第一跳路由器接收到数据包,根据目的IPv6地址查找路由转发表得到路由的MTU 值,该MTU 值与包长度比较,包长大于路由MTU时,第一跳路由器返回包超长ICMPv6包(包中携带路由MTU 信息);

(4)源主机接收包超长ICMPv6消息,记录到目的地址的PMTU 值,之后主机到该目的地址的数据最大长度都以该PMTU 值发送。

以上步骤中,(1)、(2)、(4)与现有PMTU 发现机制一致,对主机的PMTU 实现机制可以不用做改变。

3.3 新的PMTU 发现机制的兼容性

网络中路由器等设备通常由不同的厂商提供,并且现网已经有IPv6的实验网络在运行,因此本文提出的基于路由协议的PMTU 机制需要解决兼容问题。本文主要考虑以下两种情况:(1)同一路由协议支持MTU 扩展设备与不支持MTU 扩展设备间的兼容;(2)不同路由协议域之间的互通,例如RIPng支持扩展、BGP不支持扩展。

Figure 5 Routing protocol compatibility schematic diagram in new PMTU mechanism图5 新PTMU 机制各协议兼容性示意图

对于第一种情况,扩展后的路由协议提供网络管理机制,网络管理员通过配置命令控制协议是否使能路由MTU 扩展功能。如果对端设备不支持路由MTU 扩展,则本端设备也关闭扩展功能(协议包中不会携带MTU 域),此时网络中仍然采用RFC1981的机制进行PMTU 发现,不影响网络的正常运行。

对于第二种情况,因为网络规划的原因,一个网络可能划分成多个路由域,各个域运行不同的路由协议,可能有的域路由协议支持路由MTU 的扩展,其他的域则不支持。如图5所示,RIPng域和OSPFv3域支持路由MTU 扩展,BGP4+域则不支持(因R3不支持)。在网络中为了实现全网连通,各路由域需要互相导入路由(即路由的重分配)。例如,R2左侧接口运行RIPng、右侧接口运行BGP4+,在RIPng协议配置重分配BGP 路由功能,则RIPng域可以导入BGP4+域的路由。同样地,BG4+也可以导入RIPng 的路由。通过路由重分配各路由协议域的路由互相导入,R1可以学习到主机2的路由。R2上使能某一路由协议的路由MTU 功能后,路由表中会记录路由MTU值,而其他未使能路由MTU 扩展的协议学习到的路由的MTU 值记为0。R2上BGP4+未支持路由MTU 功能,从R3学习到路由的MTU 值都记为0,RIPng 重分配BGP4+路由时若发现路由MTU 为0,则取路由出接口的链路MTU 值记为该路由的路由MTU 值(即R2和R3间链路的MTU),之后R1就会学习到该条路由的MTU。

通过上述兼容方式,图5中主机1向主机2发起PTMU 探测时,主机1第一个探测包以与R1间的链路MTU 1 500为包长发送;R1查找路由表得到路由MTU 1 300并通过ICMPv6包回应给主机1;R3查找路由表发现路由出接口的MTU 值比包小,则将1 200回应给主机1;因R4在OSPFv3域已经学习到了主机2的路由MTU 1 000,R4将路由MTU 值通过ICMPv6包直接返回给主机1;主机1完成PTMU 的探测过程。总共只进行三次PMTU 探测,而RFC1981的方式则需五次探测。

3.4 新的IPv6PMTU 发现机制性能分析

3.4.1 理论分析

路由协议的扩展需要在协议包中增加MTU域,在协议包中每条路由会增加四字节的网络带宽,但在网络拓扑稳定的情况下,路由协议并不需要频繁地进行路由通告(BGP 协议在拓扑稳定的情况下进行一次路由交互就完成路由的学习,ISIS和OSPF则由域中指定路由器定时发出协议包刷新路由);而RFC1981中的PMTU 探测机制每一台端点主机或设备都需要在网络中进行PMTU 探测(即使到同一目的地,在PTMU 老化后还需再次进行PMTU 探测),探测包会占用较多的网络带宽,网络两端端点越多,则网络中PMTU 探测的探测包所占用的带宽就越多。因路由协议MTU 扩展带来的额外带宽占用与路由规模有关,RFC1981中PMTU 探测带宽占用与网络中端点数目有关,而路由规模与端点数目没有必然的关系,实验部分将不做带宽占用比较。

在网络直径为L 且每节点平均传输延时为T ms的情况下,采用RFC1981的方法最大会有L 次探测、(L+1)*L/2*Tms的连接建立时延;而采用本文提出的新的PMTU 探测机制,最多有一次探测,2*T ms的时延,即网络规模增大不会带来探测次数和时延的增大。实验部分将主要对同一网络环境中两种方式的探测次数和连接时延进行比较。

3.4.2 仿真实验

本文采用ns2 仿真工具[10]进行拓扑模拟实验。实验网络为线性网络,网络节点之间的链路MTU 在500~2 000 随机产生、传输时延在1~5 ms随机产生,网络中间节点模拟距离向量动态路由协议,在仿真网络的两端节点模拟IPv6主机的行为(两端主机模拟TCP连接)。实验过程中改变模拟网络中节点数目,记录PMTU 探测次数和TCP连接建立时延。实验数据如表1所示。

Table 1 Simulation test result used by ns2simulator表1 ns2网络仿真数据

仿真实验结果表明,本文提出的基于路由协议的算法在探测次数和连接时延上都大大优于传统的PMTU 探测机制。

3.4.3 实际应用

以上提出的新的PMTU 发现机制已经在本文作者参与开发的路由器上实现,并搭建拓扑进行了实验(如图6所示),在网络中用SmartBits6000加背景流量和导入路由、使用N2X 仪表N5541A仿真IPTV 业务。

Figure 6 Actual equipment test topology图6 实际设备测试拓扑

实验过程中统计了R4路由器中RIPng路由协议在运行过程中CPU 时间占用和内存资源占用情况,发现路由协议的扩展对路由器设备的CPU 资源占用没有增加、对内存资源的占用稍有增加(每条路由增加路由MTU 值存储的4字节内存占用),路由协议的扩展对同等规模的路由表的学习计算速度没有任何影响。即对于路由协议的扩展没有增加路由协议的时间和空间复杂度,扩展是可行的。实验数据如表2所示。

拓扑实验结果表明,采用新的机制时,连接到网络中的主机最多只需要进行一次PMTU 探测过程,在图6 所示的拓扑情况下,现在通用的RFC1981PMTU 路径发现机制需要五次才能完成探测,多带来10ms的IPTV 点播延时。在实际网络中网络节点会更多,带来的时延会更大。

Table 2 Complexity comparation result of routing protocol表2 路由协议扩展前后复杂度比较

4 结束语

本文通过分析现有IPv6 网络中现有的PMTU 发现机制和路由算法,提出了一种IPv6 网络中基于路由协议的PMTU 发现机制。通过对路由协议进行扩展,在原有的路由信息中携带路由的MTU 值,使路由的MTU 在网络中传递,执行PMTU 探测的主机最多只需要向其第一跳路由器发送一次探测包。本文提出的PMTU 探测机制只需要对网络设备端的路由协议做一定的扩展,主机端机制不用改变。在实际设备上进行拓扑及业务仿真测试的实验结果表明,该机制可行,与现在最常用的PMTU 机制相比,该机制对探测次数及探测带来的连接时延有非常大的改善(探测次数与网络规模无关且最多探测一次、连接时延也只是第1跳路由器转发时延的两倍),因此具有创新性和实用价值。

[1]McCann J,Deering S,Mogul J.RFC1981-Path MTU discovery for IP version 6[EB/OL].[1996-08-15].http://www.ietf.org.

[2]Lahey K.RFC2923-TCP problems with path MTU discovery[EB/OL].[2000-09-17].http://www.ietf.org.

[3]Christenson N.Different MTUs in the network,sendmail performance tuning[EB/OL].[2004-03-05].http://www.sendmail.org.

[4]Huang Yong-feng,Zhang Ke.A hierarchical path MTU discovery method based on empiristic data[J].ACTA Electronica Sinica,2007,35(10):1865-1869.(in Chinese)

[5]Meng Xuan-jun,Tang Xiao-chun.Analyzing and researching on path MTU discovery algorithm[J].Science Technology and Engineering,2009,9(24):7395-7398.(in Chinese)

[6]Malkin G,Minnear R.RFC2080-RIPng for IPv6[EB/OL].[1997-03-05].http://www.ietf.org.

[7]Coltun R,Ferguson D,Moy J,et al.RFC5340-OSPF for IPv6[EB/OL].[2008-10-10].http://www.ietf.org.

[8]Rekhter Y,Li T,Hares S,et al.RFC4271-A border gateway protocol 4 (BGP-4)[EB/OL].[2006-05-16].http://www.ietf.org.

[9]Hopps C.RFC5308-Routing IPv6 with IS-IS[EB/OL].[2008-10-10].www.ietf.org.

[10]Fall K.The ns manual[EB/OL].[2011-04-20].http://www.isi.edu/nsnam/ns/doc.

附中文参考文献:

[4]黄永峰,张珂.基于经验值的分层PMTU 探测算法[J].电子学报,2007,35(10):1865-1869.

[5]孟选军,汤小春.PMTU 探测算法分析与研究[J].科学技术与工程,2009,9(24):7395-7398.

猜你喜欢

路由表路由器报文
基于J1939 协议多包报文的时序研究及应用
买千兆路由器看接口参数
维持生命
路由器每天都要关
CTCS-2级报文数据管理需求分析和实现
基于OSPF特殊区域和LSA的教学设计与实践
浅析反驳类报文要点
无线路由器的保养方法
ATS与列车通信报文分析
基于新路由表的双向搜索chord路由算法