互操作性测试研究——BGP4+测试
2011-05-14丁雪莲
丁雪莲
(内蒙古财经学院 计算机信息管理系,内蒙古 呼和浩特 010070)
互操作性测试就是检测在不同厂商生产的设备之间能否实现正确的通信交互的测试方法。由于BGP4+[1]是下一代互联网中重要的域间路由协议,因此对它展开互操作性测试对于验证下一代互联网络产品在真实网络环境中的互连互通能力具有十分重要的意义,对于路由设备与软件开发商在对产品进行调试、验证和改进等方面也有着非常重要的作用。
由于互操作性测试对于产品的推广应用具有非常重要的意义,因此,国内外有许多研究机构在从事互操作性测试的研究工作,例如:日本的TAHI计划研发了IPv6协议的互操作性测试系统。德国的JOIN(Join Open InterNetworks)工程,建立了互操作性测试实验网络。美国 New Hampshire大学的 IOL(Interoperability Lab)专门成立IPv6小组进行IPv6相关协议的测试研究工作,在其网站上可以免费下载到用于测试 BGP4+、OSPFv3、RIPng等路由协议的互操作测试套件。国内的清华大学、中科院计算所、中国科技大学、兰州大学、上海交通大学等多所高校也成立了IPv6实验室在从事这方面的研究。
在互操作性测试例的生成算法研究方面,国内外有许多相关的文献,例如,参考文献[2]中提出了一种生成互操作性测试例的算法,但是这种算法的缺陷是只能处理两个内部消息交互的情况;参考文献[3]中研究了在互操作性测试生成过程中如何避免状态爆炸的问题;参考文献[4]中提出了一种基于有向图的测试序列生成算法可以满足互操作性测试的最小完全覆盖准则。但目前关于互操作性测试工具的开发研究方面的文献并不多见。
1 BGP4+协议与BGP4的不同
随着下一代互联网络协议IPv6的部署,原来只能支持IPv4的边界网关协议BGP4已经不能满足实际的应用需要,为了使BGP4能够支持IPv6,IETF组织修订完成 了 RFC2858(MultiprotocolExtentionsforBGP4)。 在BGP4+中,IETF定义了一个特殊属性——MP-BGP(Multi-Protocol BGP)来携带IPv6的路由信息,使得 BGP4+既可以运行在IPv4网络上也可以运行在IPv6网络上。
在BGP4协议的消息属性中有三部分与IPv4的信息相关,分别是:NEXT-HOP、NLRI和 AGGREGATOR属性。假设任何BGP发言者都有一个IPv4地址,那么要使BGP4能够支持多网络层协议的路由只需要加入两个功能把特定的网络层协议分别与NEXT-HOP和NLRI关联起来。因此,IETF在修订后的BGP4+中增加了MP_REACH_NLRI(MultiprotocolReachableNLRI)属性和MP_UNREACH_NLRI(MultiprotocolUnreachableNLRI)属性。这两个属性是可选非传递的,不支持多协议扩展的BGP发言者可以忽略这两个属性中携带的信息并且不转发这些信息。MP_REACH_NLRI属性详细定义了所使用的网络层协议的类型、下一跳长度和地址、子网接入点信息和NLRI信息。如果在UPDATE消息中使用了MP_REACH_NLRI属性,就不需要原来的IPv4的NEXIHOP属性了。而MP_UNREACH_NLRI属性相对简单得多,如果在UPDATE消息中使用了MP_UNREACH_NLRI属性就不需要携带其他的路径属性了。RFC1771规定UPDATE消息中必须包含强制属性,否则就发送NOTIFICATION消息,但是RFC2858中增加的这两个属性无形中改变了这一规定。BGP4+中还增加了对这两个新属性的错误处理,而且还采用了BGP能力通告协议[5],该协议定义了BGP4+的OPEN消息的可选属性中可以采用BGP能力通告,用来决定在BGP连接建立时是否与对等体使用多协议扩展传递路由信息,否则将无法获知其他对等体是否能支持这一扩展。如果双方都支持这一扩展,它们转发的UPDATE消息就可以携带IPv6网络层可达信息。BGP4+的这种扩展机制是向后兼容的,支持这种扩展的路由器能够与不支持这种扩展的路由器完全交互。
2 测试体系结构
在对BGP4+进行互操作性测试的过程中选用的体系结构如图1所示。在该互操作性测试体系结构中,IUT(被测实现)A 和IUT B分别代表了两个进行互操作的产品实现;网络协议分析仪由装有Ethereal协议分析软件的PC机来代替,它可以捕获在IUT A和IUT B之间传递的内部消息,并对捕获的信息进行观察和分析,但是不能对这些消息进行更改,这样可有效地减少外界环境对被测系统的干预,并能体现IUT A和IUT B之间能否进行互操作的真实情况;测试器A和测试器B是抽象意义上的互操作性测试工具。
图1 互操作性测试体系结构
3 测试BGP4+
3.1 BGP4+的形式化定义
图2是完整的BGP4+互连行为有限状态机,可以看到,在BGP4+对等体完全建立连接之前要经历的状态包括:Idle、Connect、Active、OpenSent、OpenConfirm 和 Established。
图2 BGP4+连接建立过程
在BGP4+的有限状态机中,导致状态变迁发生的是BGP的输入输出事件,RFC4271中规定的输入输出事件包括Administrative事件、Timer事件、TCP连接事件和BGP消息事件,其中每类事件又包括必选事件和可选事件,具体事件如表1所示。
表1 BGP4+协议事件列表
3.2 测试例的生成与应用
在对BGP4+进行互操作性测试的研究中,首先通过有限状态机对其进行形式化描述,然后运用了参考文献[6]中提出的测试例生成算法来生成测试例,其算法思想如下:
(1)初始的全局状态 gs_i=(1,a);
(2)输 出 符 号 向 量 WΦ{(nil,uin)},WΦ={UΦ1,UΦ2, …,UΦk}表示对应于某一外部输入的输出符号向量,U是输出向量,nil表示空;
(3)初始互操作测试套 TrΦ=nil,Tr表示变迁集合;
(4)gs_i.Si=1;gs_i.Sj=a;
(5)外部输入符号V;
(6)Callinteraction_sequence (uin,2,a, (1,a),v,“(nil,uin)”),为递归调用子函数,功能是只要以 a为初态的变迁存在内部输出该函数就会调用自己以生成从初始状态gs_i到输入v的下一个状态gs_n的交互序列;
(7)输出符号向量 WΦ{(nil,uin),(U,nil)};
(8)全局终态 gs_n=(2,b);
(9)得到互操作测试套:TrΦ=(1,a)-V/((nil,uin),(U,nil))(2,b)。
以图3的BGP4+消息交换实例来说明测试例(Idle,Active)——start-a/{(nil,Open), (nil,Open), (nil,KeepAlive),(nil,NotiFMsg),(close,nil)}→(Idle,Idle) 的生成方法。 在BGP4+的有限状态机中,初始IUT A和IUT B的状态分别 是 Idle 和 Active, 即 gs_i=(Idle,Active)、gs_i.Si=Idle、gs_i.Sj=Active。WΦ⇔{(nil,Open)},TrΦ=nil。经过多次 Call interaction_sequence函数的调用,使得两个被测实现IUT A 和 IUT B 经 过 变 迁 start-a/{(nil,Open)、 (nil,Open)、(nil,KeepAlive)、 (nil,NotiFMsg)、 (close,nil)} 最 终 到 达gs_n=(Idle,Idle)状态。运用这个方法自动生成了10个BGP4+互操作测试例。
图3 BGP4+消息交互
对于协议中无法抽取规范的形式化描述的测试内容则需要给出测试目的和测试内容,根据RFC协议标准的内容手工抽取测试例。首先,在详细阅读RFC协议标准并充分理解的基础上,对协议进行测试项目的划分;然后,根据不同的测试项目确定该项目中的测试目的和测试内容;最后,针对不同的测试目的设计适当的测试配置和测试数据。表2是一个采用手工抽取的测试例的实例,表中列出了测试目的、测试配置、测试步骤以及预期的测试结果和测试判定。被测系统如图4所示。
图5是使用Ethereal捕获到的在Cisco 1721和模拟路由软件Zebra-0.95之间传递的BGP4+的OPEN消息,其中Hold Time的实际值为180 s,符合预期结果。因为协议规定通信双方的Hold Time以时间短的一方作为最终协商结果,因此,测试例的最终结果为PASS。
运用这些测试例对BGP4+协议的实现进行了互操作性测试,下面以Linux下的Zebra-0.95为例,列举了部分对协议可选项处理情况的测试例列表及测试结果,如表3所示。
随着IPv6协议簇的广泛应用,对实现了IPv6协议簇的相关产品的测试是保证它们能正确在网络中工作的关键。BGP4+作为IPv6协议簇中重要的路由协议,对它的测试有助于进一步完善IPv6协议簇。因此,作为最基本和最重要的域间路由协议,测试BGP4+协议实现的互操作性具有重要的应用价值。这些研究工作的结果将会使下一代互联网具有一个更为稳定和坚实的基础。
表2 测试例的例子
图4 测试列系统结构
图5 捕获数据包的解码结果
表3 测试例列表
本文首先对BGP4+与BGP4的区别进行了分析,然后介绍了BGP4+互操作性测试的体系结构,最后详细讲解了生成BGP4+互操作性测试例的方法及运用这些测试例对BGP4+协议实现,如在Linux环境下对Zebra-0.95进行互操作性测试所发现的问题。后续的工作包括开发通用性强的互操作性测试工具以及在提高差错覆盖率方面进一步研究新的测试例生成算法。
[1]RFC 2858: multiprotocol extensions for BGP-4.June,2000.
[2]SHIN J,KANG S.Interoperability test suite derivation for the ATM/B-ISDN signaling protocol[J].IWTCS Proceedings of the IFIP TC6 11th International Workshop on Testing Communicating Systems, 1998: 313-330.
[3]KANG S, SHIN J, KIM M.Interoperability test suite derivationfor communication protocols[J].Computer Networks, 2000,32(3):347-364.
[4]林华辉,赵保华,屈玉贵.基于有向图的最小完全覆盖互操作测试序列生成算法[J].中国科学技术大学学报,2006,36(2):225-229.
[5]RFC 2842: Capabilities adveritsement with BGP-4, May,2000.
[6]KANG S,KIM M.Interoperability test suite derivation for symmetric communication protocol[C].Proceeding FORTE X/PSTV XVII′97, 1997, 107:57-72.