互操作性测试研究――BGP4+测试
互操作性测试就是检测在不同厂商生产的设备之间能否实现正确的通信交互的测试方法。由于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(Multiprotocol Extentions for BGP4)。在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(Multiprotocol Reachable NLRI)属性和MP_UNREACH_NLRI(Multiprotocol Unreachable NLRI)属性。这两个属性是可选非传递的,不支持多协议扩展的BGP发言者可以忽略这两个属性中携带的信息并且不转发这些信息。MP_REACH_NLRI属性详细定义了所使用的网络层协议的类型、下一跳长度和地址、子网接入点信息和NLRI信息。如果在UPDATE消息中使用了MP_REACH_NLRI属性,就不需要原来的IPv4的NEXI-HOP属性了。而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是抽象意义上的互操作性测试工具。
3 测试BGP4+
3.1 BGP4+的形式化定义
图2是完整的BGP4+互连行为有限状态机,可以看到,在BGP4+对等体完全建立连接之前要经历的状态包括:Idle、Connect、Active、OpenSent、OpenConfirm和Established。
在BGP4+的有限状态机中,导致状态变迁发生的是BGP的输入输出事件,RFC4271中规定的输入输出事件包括Administrative事件、Timer事件、TCP连接事件和BGP消息事件,其中每类事件又包括必选事件和可选事件,具体事件如表1所示。
3.2 测试例的生成与应用
在对BGP4+进行互操作性测试的研究中,首先通过有限状态机对其进行形式化描述,然后运用了参考文献[6]中提出的测试例生成算法来生成测试例,其算法思想如下:
(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+互操作测试例。
评论