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组织的网站(http://www.tahi.org)上免费下载,运行在安装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。
模块名称 对应RFC
SPEC RFC2460 Internet Protocol, Version 6 (IPv6) Specification
RFC2464 Transmission of IPv6 Packets over Ethernet Networks
RFC5095 Deprecation of Type 0 Routing Headers in IPv6
ADDR RFC4862 IPv6 Stateless Address Autoconfiguration
ICMP RFC4443 Internet Control Message Protocol
ND RFC4861 Neighbor Discovery for IP version 6
PMTU RFC 1981 Path MTU Discovery for IP version 6
表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表项。
测试结果
测试结果如表2所示,5个模块的319个脚本全部通过,不存在失败或阻塞问题,通过率达
到100%。
模块 测试项总数
通过 失败 阻塞 通过率
SPEC 79 79 0 0 100%
ADDR 29 29 0 0 100%
ICMP 46 46 0 0 100%
ND 150 150 0 0 100%
PMTU 15 15 0 0 100%
总计 319 319 0 0 100%
表2 H3C MSR50测试结果
由此可以看出, H3C MSR50路由器在IPv6的核心协议栈的实现很完善,完整的支持IPv6
Core Protocol所涉及的RFC1981、2460、2464、4443、4861、4862、5095等标准,并提供了丰
富的配置命令,适用于不同的应用场景。
结语:IPv6的协议一致性测试,可使用Tahi IPv6 Ready协议一致性测试套进行。随着IPv6网
络的普及和相关应用的发展,IPv6系统的协议一致性测试愈加重要。除核心的5个基础协议模
块外,更上层的应用模块今后都将需要进行一致性测试,以保证设备支持IPv6协议的完善性。
思博伦通信的IPv6主要测试项目包括: