1 引言
随着计算机网络的迅猛发展,网络规模越来越大,网络也越来越复杂。传统的网络管理方式已不能满足新的需求。因此,传统网络管理效率低下,就成为当前急需解决的问题。网络的核心是路由,通过对路由的分析,能够获得大量关于网络的信息。因此,路由监测已成为网络运行和管理的重要研究内容。
通过一个具有部分路由器功能的监测代理,捕获整个网络的路由信息。通过路由信息就能分析整个网络的动态性。这里主要研究边界网关协议BGP(border gateway protocol)网络拓扑动态重构及网络稳定性。网络拓扑变动直观反映了BGP动态性,通过网络拓扑的变化能够清晰的获得故障信息,从而能及时排除故障。通过路由信息,实现了实时、动态的网络拓扑构造算法,并通过图形化的方式显示。
2 BGP域间路由监测
从管理范畴角度看,Internet由不同的自治系统(Autonomous System,AS)构成。自治系统指相对独立的网络,在一个自治系统内有自主的路由策略。这些AS可能分别隶属于不同的Internet服务提供商(Internet Service Provider,ISP),而不同的ISP可能重组成新的ISP,从而形成动态的管理组织结构。在AS内部,通过域内路由协议(InteriorGateway Protocols,IGP)管理调度路由,如OSPF、IS-IS和RIP等;在AS之间通过公共网络访问点(Network Access Point,NAP)和边界网关协议交换路由信息。BGP与IGP最明显的不同在于BGP允许每个AS按自己的路由策略选择、通告和接受路由,为路由选择提供了灵活机制。然而,为了实现这种灵活的路由机制,BGP协议的配置也十分灵活以适应各种复杂的任务,但这种灵活性也容易在配置中造成错误。一些小的本地错误配置可能造成网络中断,甚至影响整个Internet的连接。因此对于AS问路由策略的监视和验证是十分必要的。
BGP-4是一个集距离向量算法和链路状态算法于一身的协议,通过分析路由交互信息,特别是Update帧中的AS Path属性,可以得到从观测点到目的网络的AS序列。将这些序列整合,可得到关于整个网络的拓扑。另外,BGP-4是一个动态的路由协议,除了在初始情况下交互全部的路由表,BGP-4会以增量的方式发送路由变化信息。这些信息都通过Update帧发送给邻近的BGP-4 Router。通过动态的信息分析,可动态实时分析整个BGP网络。
为研究BGP网络的动态行为,首先要对BGP路由进行监测。传统基于路由表下载的路由监测加重了路由器和网络的负载,有着很大的缺陷。为解决路由监测问题,提出一套基于路由交互的域间路由监测方法,基于该方法对网络和路由器造成极小负载的前提下,采集BGP路由信息,通过该信息分析BGP的动态行为。通过Zebra建立一个监测代理,连接BGP网络中的一台边界路由器,这样,该监测代理就能接收到路由交互报文,这样,可监测和分析BGP网络的动态性。通过生成BGP网络的拓扑,实现对BGP网络的整体观测,以及对自治系统间路由变化的监测。
3 Zebra简介
Zebra是一种TCP/IP路由软件,它支持BGP-4、BGP-4+、OSPFv2、OSPFv3、RIPv1、RIPv2和RIPng。它符合GNU的GPL标准,可运行于Linux和其他Unix变体系统。Zebra套件是由Kunihiro Ishiguro和Yoshinari Yoshikawa于1996年开发的。目前,Zebra套件主要由IP Infusion公司负责维护。Zebra利用模块法管理各种协议,可根据网络求需要激活或停止协议。
Zebra的特点如下:
(1)模块化 Zebra使用多线程方式可使其容易升级和维护。某一协议模块的升级不会影响其他协议模块的运行。
(2)高速 Zebra具有比传统路由软件更高的包转发速度。
(3)可靠性 Zebra本身具有较高的可靠性。某一模块的失效不会影响到其他协议模块的执行。
Zebra的系统结构:传统路由软件多采用单线程方式提供所有路由协议的功能。Zebra则完全不同,它采用一组守护进程共同维护路由表。如ripd守护进程处理RIP协议,ospfd用于支持ospf的守护进程,BGPd用于支持BGP-4。同时为了管理内核路由表,用守护进程zebra管理内核路由表。图1所示为Zebra的系统结构。
这种多进程方式带来了可扩展性、模块化和易维护性。同时也带来多个配置文件和接口。每一个守护进程都有自己的配置文件和终端接口。当配置一个模块时需要在Zebra配置文件上进行配置。当配置BPG网络时就需要配置BGP模块的文件,这给用户的使用带来问题,为解决此问题,Zebra提供一个称为vryshell的集成用户接口脚本。Zebra的内核模式采用多线程方式。
4 使用Zebra建立BGP监测代理
使用Zebra建立BGP监测代理的步骤。Zebar的安装:
(1)解压软件包:#tar zxvf zebra-0.94。解压后会出现zebra-0.94目录,进入zebra-0.94目录;
(2)运行./configure进行配置;
(3)运行make;
(4)运行make install;
这时在/usr/local/sbin看到有BGPd、ospf6d、ospfd、ripd、ripngd、zebra6个文件。同时/usr/local/etc目录中会出现BGPd.conf.sample、BGPd.conf.sample2、ripngd.conf.sample、ospfd.conf.sample、ospf6d.conf.sample、zebra.conf.sample、ripd.conf.sample7个文件;复制zebra.conf.sample为zebra.conf,不要自定义文件名,因为启动zebra时系统要查找zebra.conf文件,将其他的*.conf.sample也复制成*.conf文件,Zebra的各进程有各自的终端接口,这样zebra的所有端口都可以使用telnet localhost<端口号>进入。
在/etc/services文件中添加如下内容:
5 BGP监测
基于路径的AS级拓扑发现算法,其拓扑信息来自于BGP更新消息及BGP路由表。从BGP路由表中可获得路径属性,包括AS路径(AS path)、下一跳(Next Hop)、起源(Origin)。其中,AS path属性被BGP用来确保无环路环境;下一跳属性说明了用于去往目的地的下一跳IP地址;起源属性定义路径信息的起源,它可以是下列3个值之一:(1)IGP,说明路由在起始AS的内部,在BGP表中用"i"表示;(2)EGP,说明路由通过外部网关协议而学到,在BGP表中用“e”表示;(3)不完全,说明路由起源未知或通过别的方法学到,该条路径可能不完整,在BGP表中用“?”表示。
以下是BGP路由表的一个片断,其中由符号“*”标记的每1行,代表1条记录。记录的1l列Network指出目的IP,该列的值或者为一个单独的IP地址(如126.0.0.0)或者为一个网段的IP地址,包括掩码(如128.0.0.0/3)。第2列NextHop指明AS路径中第1跳的IP地址。第3列Metric LocPrfWeight是该条路径的权值。第4列Path即为从源IP(198.32.162.100)到目的IP的AS路径。路径结尾的字符“i”,“e”和“?”即为起源属性。“*”标记后紧跟着“>”标记,表明该条路径是最优路径,其他的为合法路径。
基于路径的AS级拓扑发现算法的基本思路,即获取BGP路由表,通过分析得到AS路径的相关信息。从而构造AS级骨干网拓扑,进一步获取BGP更新消息,不断修改完善拓扑结构。图2所示为BGP拓扑实例。
AS1表示AS号为AS1的router,其余类推。其中Zebra是配置了Zebra软件的、逻辑上相当于一个AS的router。它和AS1的speaker交互操作。图2中虚线表示在zebra的router的BGP路由表中一条路由记录中的AS_PATH中的AS号。通过图2可以获得图3所示的拓扑信息。
按上述方式就可以逐步发现拓扑关系,但还没有明确该拓扑图中各个AS对应的BGP router的IP。对路由表中的每一行,均存在一个prefix和as_path,其中as_path是一个数组,如图2的每一个虚线内所列;其中在as_path中第1个AS号永远是neighbor,也就是图2中的AS1。而最后一个则为和prefix对应的AS号。
通过这种方式,实现了BGP拓扑信息的获取,具体软件结构如图4所示。实现的界面如图5所示。
6 结语
提出了BGP路由监测策略,将一个具有部分路由器功能的监测代理连接到网络中的一台BGP边界路由器上,通过两者之间的BGP协议交互,监测代理可捕获关于整个网络的路由信息。由于监测代理不能进行包的转发,且不主动发送路由信息,因此不能对网络和路由器造成太大的负担。该策略能够有效监测全网的路由变化情况,并通过可视化的手段创建了良好的人机交互界面。