一种面向IPv6的网络拓扑发现系统的设计
2013-04-29曾满江
曾满江
摘要:作为网络管理的基本功能,在IPv6网络中研究拓扑发现具有重要意义。首先对比分析了IPv6与IPv4网络在拓扑发现的差异,从地址空间、双栈共存、隧道网络等几个方面具体分析了在IPv6网络中进行拓扑发现需要解决的问题,结合IPv6网络自身的特点,研究了进行IPv6拓扑发现需要掌握的关键技术,针对这些差异,给出了相应的拓扑发现解决方案。
关键词:拓扑发现;隧道;双栈;IPv6
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)07-1521-03
当前使用的IPv4网络在可扩展性、信息安全、服务质量、物联网等端到端通信方面受到诸多制约,随着全球范围开展的下一代互联网的部署,许多在当前互联网条件下存在的问题都将迎刃而解。完全地取代IPv4网络是一个曲折而漫长的过程,中国虽然在高校部署了全球最大的IPv6实验网络,在目前的应用来看,它仍然只是IPv4网络的一种复制,并没有很精彩的应用吸引眼球。无可否认的是,IPv6取代IPv4是大势所趋,关于下一代互联网的研究正成为一个新的研究热点。
作为网络管理中的一项基本功能,拓扑管理实现网络拓扑的自动发现,流量监控,定期更新,设备管理等功能。由于IPv6网络采用全新的地址空间,子网空间巨大,而且没有在IPv4网络中定义的ARP、RARP概念。在IPv4下所使用的窮举法拓扑发现算法并不适用于IPv6网络。
同时,针对IPv6的SNMP标准化工作尚未完成,支持IPv6的MIB对象比较少,许多字段目前还是不可访问的(not-accessible)。针对这些问题,需要探索一种行之有效的针对IPv6的拓扑发现算法。
当前,国内外对IPv6网络拓扑发现的研究比较少。相关文献中,法国ORIA-INRIA实验室的I.Astic等提出了分层拓扑发现结构。该算法的中心思想是通过子网代理发送一组多播地址来发现子网内所有节点的地址信息和主机信息,通过管理中心来处理本地代理送来的子网信息,由traceroute6来实现对骨干网络的结构识别,进而分析出全网的拓扑结构。贝尔实验室的Daniel G等人提出了一种基于源路由的拓扑发现思想,对6Bones网络进行了大规模探测。Lorenzo Colitti等人提出了采用最大MTU和注入IP欺骗包的方法,该方法通过IP欺骗包的来判断是否存在隧道,判断隧道两端节点信息。
以上方法针对IPv6拓扑发现的普遍问题,给出了相应的解决办法,在IPv6拓扑发现的探索中具有借鉴意义,但由于研究人员研究的出发点、侧重点不同,在一定条件下是有效的,但是在当前日趋复杂的IPv4/IPv6混合的网络中不具有通用性。分层算法侧重于局域网的管理,但是无法适用于分布式网络,而且在每一个子网需要配置一个代理,实现较为复杂;源路由拓扑发现思想属于实验性质,并没有发展为有效的拓扑管理,并且无法管理不支持源路由功能的路由器,不具备通用性;IP欺骗包算法侧重于隧道网络,对其他网络情况没有涉及。
本文以某高校校园网中存在的路由、交换设备为实验对象,分析了IPv6网络管理中的实际问题及涉及的关键技术,提出了一种行之有效的拓扑管理的系统架构。
1 IPv6拓扑发现关键技术
1.1 本地节点发现技术
在IPv4 网络环境中,网络拓扑发现一般通过ping遍历子网空间,通过多线程发送ICMP请求发现在线的主机。对于一个C类子网来说,采用异步方式探测只需要几秒钟时间,也不会给网络带来负担。而IPv6网络,探测一个子网需要发送264个ICMP请求,这对网络和程序本身来说都是不可接受的。
在RFC3513中定义了一组多播地址可以用来解决子网节点的探测问题。如表1所示。
[多播地址\&描述\&FF01::1\&所有本地接口地址\&FF01::2\&本地接口所有路由地址\&FF02::1\&所有本地链路地址\&FF02::2\&本地链路所有路由地址\&FF05::2\&本地站点所有路由地址\&]
对于目标地址为FF02::1的包,本地链路内所有节点(包括路由器、主机)都会接收并响应;对于目标地址为FF02::2的包,本地链路内所有路由器都会接收并响应。通过对这两个多播地址发送ping6请求,即可区分本地链路内的主机和路由器。
具体算法描述如下:
1) 向ping6 FF02::1 发送ICMPv6 Echo Request报文;
2) 根据收到的ICMPv6 Echo Reply 应答,将所有节点存入节点表中;
3) 向ping6 FF02::2 发送ICMPv6 Echo Request报文;
4) 根据收到的ICMPv6 Echo Reply 应答,将所有节点存入路由器表中;
5) 从节点表中取出不属于路由器表中的项,加入到主机表中。
6) 对节点表中的设备异步读取MIB信息,将有响应的设备存入交换机表。
此时得到的地址都是本地链路地址,本地链路地址无法与其他子网区分和通信,需要将本地链路地址转换为全球单播地址。方法是根据无状态自动分配地址的工作原理进行节点的全局地址配置。无状态自动分配地址通过路由器定期发出包含子网前缀宣告,主机在收到宣告后根据子网前缀和本身的接口标识完成全局地址的配置过程。在获得设备的本地链路地址后,模拟路由器以FF02::2为目的地址发送请求报文,获得路由器宣告报文,解析得到的宣告报文即可获得本地链路的子网前缀,将子网前缀与接口标识进行拼接则可得到设备的全球唯一单播地址。
1.2 骨干网拓扑发现
网络层拓扑发现主要是对IPv6网络中的路由器连接关系进行判断,对存在的匿名路由器进行识别与合并, 从而形成最接近实际的网络结构。
在骨干网拓扑发现中,可行的办法是通过Traceroute6工具进行拓扑探测,traceroute6是一种用来进行网络测量的工具,利用ICMPv6超时消息来发现从源地址到目的地址之间通过哪些路由器, traceroute6的结果中相邻的两跳路由器之间肯定是直接相连的。算法描述如下:
1) 读取路由器IP地址列表
2) 对于列表中的每一个地址
①向该地址traceroute
②将traceroute返回的连接关系存入ConnectList
3) 整理结果
在实际的拓扑发现过程中,存在匿名路由器的问题,即相同匿名接口被当做不同的实际接口处理,造成拓扑更为复杂。在一个校园网中,网络规模不大,匿名路由器现象并不多,在本系统的实际环境中简化了设计,忽略了匿名路由器的存在。当探测对象是大规模的网络环境时,必须考虑匿名路由器的问题。
1.3隧道发现
目前主要使用的隧道方式有6over4和6to4隧道,传输过程中,IPv6数据包用隧道源IPv4地址的报文进行二次封装,经过IPv4骨干网后,由另一端双栈路由器去掉IPv4报文,继续转发IPv6报文。隧道发现模块的功能就是对这样的双栈路由器进行识别,进而判断存在双栈的路由链路上是否为隧道。
1.3.1双栈识别
在获得了骨干网的每一条路径后,首先对骨干网中的每个节点进行判断是否为双栈节点,如果是双栈节点则继续判断是否存在隧道。
在判断是否为双栈的过程中,可通过SNMP分别读取IPv6和IPv4地址下的MAC地址,记为
算法的具体描述如下:
1) 分别读取路由器链表Router4List和Router6List;
2) 依次对Router6List链表中的元素读取ipv6NetToMediaPhysAddress,记录
3) 依次对Router4List链表中的元素读取PhysAddress, 记录
4) 交叉比对
1.3.2 隧道识别
当一个IPv6数据包经过隧道时,IPv6数据包会被封装到IPv4数据包中,封装后的数据包会附加上IPv4包头。所以,如果检测到数据包的这种长度变化,就能判断隧道的存在。
一般IPv6隧道将附加20B的IPv4报头,GRE隧道附加24B或28B的IPv4报头。假设一条链路的两个端点分别为R1和R2。如果R1和R2之间不存在隧道,它们之间转发的最大IPv6数据包长度为默认的1280B。如果存在隧道,那么能转发的IPv6最大数据包长度则为{1500-20,1500-24,1500-28}。所以只需向目标节点发送超大报文,导致路由器对报文进行强制分片,对接收到的报文进行大小分析,当MTU∈{1480,1476,1472,1280}中某个值时,即可判断该链路为隧道链路。
2 结论
IPv6网络将解决IPv4网络中暴露的诸多问题,但在全面推进的过程中也有重重困难。由于协议结构的变化,关于IPv6 SNMP标准化工作没有完成,网络管理工作在IPv6网络中需要重新研究。该文分析了在IPv6网络中进行拓扑发现的新问题,根据IPv6网络的特点,引入了新的思路和方法以适应这样的变化。在某高校的实验网络环境中能较好地适应,但介于当前实验条件,以及IPv6 SNMP MIB定义不完整的限制,IPv6的链路层拓扑发现尚待进一步研究。
参考文献:
[1] Daniel G W,Fangzhe C,Ramesh Vet al.Topology Discovery for Public IPv6 Networks[J].ACM SIGCOMM Computer Communications Review,2003;33(3);59-68.
[2] 宫晨,朗昕培,陈英,等. IPv6骨干网络拓扑发现[J].计算机科学,2006, 33( 4) : 29-31.
[3] 杨国正,陆余良,夏阳. IPv6网络拓扑发现技术研究[J] .计算机工程,2007,33(2): 99-101.
[4] 岑贤道,安常青.网络管理协议及应用开发[M].北京:清华大学出版社, 1998,20-25.
[5] 李玉鹏,王换招,田海燕,等.基于SNMP和Java的网络拓扑发现[ J]. 计算机工程与应用, 2004,(5 ): 152-154.
[6] 杨柳,李振宇,张大方,等.冗余最小化IPv6拓扑发现方法[J].计算机研究与发展,2007,44(6):939-946
[7] 林之光,李英壮.一种改建的基于SNMP的网络拓扑发现算法[J].中国海洋大学学报,2008,30(5):171-174.
[8] 杨国正,陆余良,夏阳,等.匿名路由器对抽样网络拓扑的影响分析 [J] .计算机工程,2009,35(16): 104-106.