IPv6协议一致性测试
发布时间:2010年02月05日
∙
o分享
∙推荐
∙打印
∙收藏
文/黄哲
导言
IPv6测试首先需要关注在各个协议模块的一致性测试和性能规格测试,其次是各种应用组网和互通测试,尤其是关注过渡技术是否能满足当前IPv6与IPv4网络并存时期的需求。本文将针对IPv6设备的协议一致性测试,介绍其测试特点、测试环境搭建、测试脚本执行,以及测试结果的分析,帮助读者有效的进行相关测试,从而选择符合协议标准的IPv6设备。
IPv6一致性测试的特点
作为一个新的协议族,IPv6相对IPv4的主要变化首先在于网络层基础协议,包括地址、ND 协议等;其次各路由协议也都提供了IPv6的版本;在链路层、应用层也配合地址的变化做了相应的修改;并且新增了隧道、NATPT等过渡技术。
相对IPv4而言,IPv6协议一致性测试的特点在于首先要考虑数据平面的模块测试,而其中的报文处理、ICMP和ND模块为重点和难点,且这些模块的RFC都在不断的更新过程中,一些功能有了相应的变化,典型的例子就是0型路由扩展头在最新的RFC5095中被废弃。因此在协议一致性测试中,需要及时的关注协议的更新。
测试工具
Tahi IPv6 Ready协议一致性测试套是目前认可度最高、最被广泛使用的IPv6协议一致性测试工具,可以在Tahi组织的网站()上免费下载,运行在安装FreeBSD 系统的PC上,截至目前的最新版本是4.0.5。通过该测试的设备,可以获得IPv6论坛(IPv6 Forum)的IPv6 Ready Phase2的金牌认证。
Tahi IPv6 Ready测试套是一种基于脚本开发的一致性测试工具,分为3个层次,如图1
所示,分别为底层的FreeBSD操作系统、居中的测试平台、以及最上层的测试脚本集。
图1 Tahi IPv6 Ready测试套架构
测试内容
Tahi IPv6 Ready测试脚本集包含了网络层和应用层常见的需要一致性测试的模块,包括基础协议、IPsec、MIPv6、DHCPV6、SIP、IKE等,其中IPv6 Core Protocol为核心模块,是IPv6一致性测试最基础的部分,在目前的IPv6 Ready一致性测试中,通常只选用此部分进行测试,其他模块由于目前缺少用户需求,因而极少有设备支持,所以在现有情况下很少进行测试。
IPv6 Core Protocol测试集可以分为5个模块:SPEC、ADDR、ICMP、ND、PMTU,与RFC的对应关系如表1。
表1 模块与RFC对应列表
测试环境
使用Tahi IPv6 Ready测试套进行IPv6一致性测试时,测试环境包括三个部分:测试仪器、被测设备、控制台。分别对应下面拓扑图中的FreeBSD系统的PC、H3C MSR50路由器、控制台PC。
图2 测试拓扑
如图2所示,运行测试脚本的FreeBSD系统需要提供两块网卡,而被测设备MSR50提供两个以太网接口,两者之间建立两条直连以太链路。在这两条链路上所使用的IPv6地址前缀分别为3FFE:501:FFFF:100::/64 和 3FFE:501:FFFF:101::/64,并采用EUI64格式生成接口ID。
在MSR50和FreeBSD上,应当只运行基础的IPv6协议栈,并尽可能关闭其他一切非必要的模块,例如路由、STP等,避免无关的报文影响测试脚本的判断。
测试过程
协议一致性测试属于黑盒测试的一种,它只对协议实现的外部可观察行为(即报文的格式、内容、时间等)进行测试,其测试过程原理可以用如图3的测试状态机来描述。
图3 测试状态机
S0:初始状态 S1:接收报文后的状态 S2:验证报文正确后的状态
E1:接收一个报文 E2:验证报文正确 E3:验证报文错误 E4:丢弃该报文
以图4中,SPEC模块的测试例#13中对于未知类型扩展头的测试执行为例来介绍。脚本执行是命令行形式的文本界面,脚本构造正确或异常报文与设备进行交互,同时将收发的报文内容以文字描述形式输出在文字界面上。
图4 测试脚本执行界面
在这个测试过程中,脚本向被测设备MSR50发送含有未知类型扩展头的请求报文,MSR50收到请求后,状态由S0变为S1,然后判断报文存在错误,回复差错消息,则此脚本的执行获得预期结果。最后是状态复位动作,设备重新回到状态S0,单个测试例的执行过程结束。
在5个模块的一致性测试过程中,均是根据此原理与过程进行。
1)SPEC模块的测试:分为IPv6报文基本头检查、扩展头处理,以及转发和以太层封装几个层次。覆盖了IPv6在传输层以下各个头部的所有细节字段。
图5 IPv6报文头部
测试脚本在报文的IPv6基本头部或扩展头部设置正确或错误的值,检查MSR50路由器在报文转发过程中,是否能检查出错误所在,并做响应处理,例如是正常转发,或是丢弃并触发ICMPv6差错消息等。
2)ADDR模块的测试:检查设备在配置地址后是否正确的进行通过NS/NA检测报文交互,判断地址的可用性;以及对交互报文的合法性检查。
图6 DAD过程
当MSR50配置新地址时,会发送DAD NS报文,测试仪针对收到的DAD NS,会做响应的回复,当回复的NA报文合法时,MSR50会报地址冲突;当回复的NA报文存在非法字段时,MSR50新配置的地址能够生效,并正确用于转发。
3)ICMP模块的测试:验证ICMPv6的报文封装格式、设备在处理错误报文时所触发的差错消息、以及信息查询消息。
图7 ICMP差错消息的触发
脚本构造Echo Request给MSR50进行转发,并在报文中设置HopLimit字段为1、未知类型的扩展头等错误场景,MSR50能识别检测到报文错误,并回复ICMP的超时、参数错误等差错消息。
4)ND模块的测试:测试内容包括地址解析、邻居不可达检测、邻居状态机、路由器和前缀发现、重定向功能四个部分,以及交互的NS/NA/RS/RA/Redirect报文的有效性验证。
图8 邻居状态机
脚本主要围绕着邻居状态机制,通过发送NS/NA/RS/RA/Redirect报文,验证MSR50上的邻居状态是否能正确切换。
5)PMTU模块的测试:包括了动态PathMTU表项的生成,并根据PathMTU表项进行本地发包的分片。
图9 动态PathMTU与报文分片
脚本构造ICMP TooBig消息给MSR50,然后通过检查MSR50发送的分片大小来验证MSR50是否生成正确的动态PathMTU表项。
测试结果