IPV6测试小结
关键词:
ipv4 ipv6 自动化
摘 要:
基于我司IPV6项目开发过程中,测试尽早参与,进行白盒测试,验证所有的IPV6接口是否完成既定的功能,在本次测试过程中遇到了各种问题,问题主要分成以下两大类:
1、IPV4和IPV6的区别。
2、需要支持的外部环境。
案例描述
1 、在IPV6测试过程中,遇到了好多问题,由于这种公有技术是没有需求文档的,只有RFC标准,在测试过程中,也花了很多时间去了解IPV6,下面我将从数据包封装,IP设置,网络协议,测试功能点以及依赖条件几个方便来总结。
IPV6和IPV4的数据包区别
IPV6和IPV4都是网络七层协议中的网络层,首先我们来看看IPV6和IPV4的数据报文格式如下:
(IPV4数据报文) (IPV6数据报文)对比如下:
1、 版本标识不同,抓包的时候可以通过过版本号来区分,IPV4和IPV6;
2、 对比IPV4,去除了首部长度,由于IPV4的首部有可选项导致IPV4的包头大小是不确定的,需要4个bit来说明IPV4报文的包头长度;而IPV6的报文包头是固定40字节的,所以这项就不需要了;
3、 通信分类字段用来标识对应IPv6的通信流类别,或者说是优先级别,占8个bit,类似于IPv4中的ToS(服务类型)字段。(PS所以老的NETCBB修改TOS的接口就不支持IPV6了,需要重新封装);
4、 标记那些需要IPv6路由器特殊处理(如一种非默认服务质量或实时服务)的信息包顺序,这是IPV6所特有的属性;
5、 IPV4和IPV6的最大包长不超过65535字节,但是两者是有区别的,IPV4的包长度是包含包头的,而IPV6的包长度在这里称为有效负荷长度是不包含包头的,但是包含扩展包头;
6、 下一报头,当IPv6没有扩展报头时,该字段的作用和IPv4的上层协议字段一样。当含有扩展报头时,该字段的值即为第一个扩展报头的类型。
7、 跳限制,转发数据报的每台路由器对该字段的值减1,若减为0则丢弃该数据报。改字段的作用和IPv4的寿命TTL相同;
8、 IPV4和IPV6的数据报文都包含源地址和目的地址,但是IPv4占32bit,IPv6占128bit,所以IPv4的地址数为2的32次方个,而IPv6的地址数为2的128次方个,可以得出的是IPv6的地址个数是IPv4的2的96次方倍;
9、 IPV6不采用IPV4中报头不定长的做法,而是将可选项信息放在了IPV6的扩展报头中,IPV6可拥有0个、1个或多个的扩展头,扩展头由前一段的next hdr标识。IPV6支持的扩展报头有:逐跳选项报头、路由报头、分片报头、目的选项报头、身份验证报头、封装安全有效载荷报头、移动性,由于每一个扩展头的内容可以决定是否处理下一个报头,所以扩展头出现的次序必须遵循一定的原则,一般来说会按照如下的顺序排列:1)IPV6头 2)逐跳选项扩展头 3)目的选项扩展头 4)路由扩展头 5)分片扩展头 6)身份认证扩展头 7)封装安全有效载荷扩展头 8)目的选项扩展头 9)上层应用头,除了目的选项扩展头外,其他扩展头只能出现一次
每个扩展头的含义如下:
1)逐跳选项扩展头,定义了转发路径中每个节点需要处理的信息
2)目的选项扩展头,目的节点需要处理的信息
3)路由扩展头,记录转发路径上路由节点的信息
4)分片扩展头,发送大于MTU的包,不同于IPV4,IPV6只在源节点进行数据的分片
5) 身份认证扩展头,确保数据来源于可信任的源点
6)封装安全有效载荷扩展头,可以有效避免在数据传输过程中被窃听、抓取内容等行为;
10、负载数据IPv4和IPv6相同都是上层数据。
2 IPV6和IPV4的IP区别
1、 从IPv6和IPv4的数据报文上来看区别最大的就是IP地址了,IPv4是32bit的,而IPv6是128位的,那我们来具体看看他们的区别:
IPv4地址IPv6地址
点分十进制表示(172.16.124.10)带冒号的十六进制表示,0压缩(2001::1)
分为A、B、C、D、E5类地址不分类
组播地址224.0.0.0/4组播地址FF00::/8(前八位全1)
广播地址(主机部分为全1)任意播(1、任意播不能用于源地址,只能做目的地址;
2、任意播地址不能指定给IPv6主机,而只能指定给IPv6路由器。)
默认地址0.0.0.0不确定地址::(0:0:0:0:0:0:0:0)
回环地址127.0.0.1回环地址::1(0:0:0:0:0:0:0:1)
公共地址可聚合全球单播地址FP==001
私网地址10.0.0.0/8 172.16.0.0/12 192.168.0.0/16站点本地地址FEC0::/48(1111 1110 11)
自动专用IP地址169.254.0.0/16链路本地地址FE80::/48(1111 1110 10)
上表从IP表达式,IP分类,组播地址范围,广播地址VS任意播,默认地址(初始地址),回环地址,公共地址(可聚合全球单播地址),私网地址(站点本地地址),自动专用IP地址(链路本地地址)来区分的;
但是IPv6内部也可以分类,分成单播地址,任意播地址,组播地址(IPv4地址也可以分成单播地址,广播地址,组播地址),下图为IPv6的内部分类图:
3 IPV6和IPV4的协议区别
从数据报文到IP格式,IPv4和IPv6都有较大的区别,那么其他对应的网络协议从支持IPv4和IPv6的情况有没有较大变化呢?下面我们罗列一下我司netcbb组件支持IPv6功能的协议,如下图所示:
上图我们通过TCP/IP四层模型我司常用的协议去分析了IPv4和IPv6的区别:
[if !supportLists]1) [endif]链路层中ARP和RARP只支持IPv4,IPv6把这部分功能集成到ICMPv6中了,ICMPv6是通过邻居发现协议(Neighbor Discovery)实现MAC地址查找的。
[if !supportLists]2) [endif]链路层中的PPPoE也区分了PPPoE和PPPoEv6两个版本。
[if !supportLists]3) [endif]网络层中IPv4和IPv6的区别上面介绍过了,从数据报文和IP表达进行区分。
[if !supportLists]4) [endif]传输层也分成UDP和TCP。
[if !supportLists]5) [endif]应用层的FTP&Telnet&HTTP&DNS只需要去修改对应的IP地址即可,DHCP区分成DHCP和DHCPv6两个版本。
4 IPV6测试点提取
5 IPV6环境准备
在网络组件测试过程中,我们设备很多时候都在扮演客户端角色,所以在IPv6涉及客户端和服务器测试时,是有环境依赖的,下面把所有的环境依赖给罗列出来。
被测系统要求:
1) [endif]被测系统内核需要支持IPv6功能,在整体编译时,开启IPv6选型即可;
2) [endif]需要busybox1.28版本的支持,老的busybox版本对DHCPv6兼容性不好,无法获取IPv6地址;
3) [endif]需要支持PPPoEv6的ppp (ppp-2.4.5交叉编译得到)和pppd(rp-pppoe-3.10交叉编译得到)文件。
4) [endif]需要支持DHCPv6的udhcpc6.script文件,将文件放入/etc/scripts/,不同的平台需要配置不同的路径,比如
hisi平台:
UDHCPC_CONF="/tmp/udhcpc6.conf$interface"
UDHCPC_CONF_DEBUG_USR_DIR="/usr/log/"
UDHCPC_CONF_DEBUG_WORK_DIR="/work/log/"
UDHCPC_CONF_DEBUG="udhcpc6.conf$interface"
RESOLV_CONF="/etc/resolv.conf"
高通平台:
UDHCPC_CONF="/data/config/etc/udhcpc6.conf$interface"
UDHCPC_CONF_DEBUG_USR_DIR="/data/config/etc/log/"
UDHCPC_CONF_DEBUG_WORK_DIR="/data/config/etc/log/"
UDHCPC_CONF_DEBUG="udhcpc6.conf$interface"
5. [endif]RESOLV_CONF="/data/config/etc/resolv.conf"
服务器要求:
1) [endif]需要搭建支持IPv6的PPPoEv6的服务器;
2) [endif]需要搭建支持IPv6的DHCPv6的服务器;
3) [endif]需要搭建支持IPv6的NTP服务器。
6 解决过程
1)从数据包封装,IP设置,网络协议去了解IPv6;
2)完成测试脚本开发;
3)完成依赖环境搭建(由于IPv6的环境搭建网上好多资料都是错的,下一篇案例我会介绍一下IPv6各个服务器的搭建过程);
7 总结
无