,
(安徽三联学院 计算机工程学院,安徽 合肥 230601)
Internet广泛应用的今天,网络拓扑日趋复杂.为了达到快速完成拓扑的目的,动态路由协议被广泛应用在网络拓扑上.这包括了内部网关协议(例如OSPF),和外部网关协议(例如BGP).这些动态路由协议的应用大大方便了工程项目的实施.但是,由于网络状态不确定的诸多原因.这些网络时常会出现频繁掉线和路由反复重新计算的问题,也就是路由震荡.
路由震荡使得路由链路信息在全网范围内呈周期性地不断更新.这些链路信息不断地被广播或撤销,占用了大量的网络资源.由于,频繁地使用迪杰斯特拉最短路径算法更新路由表,这也加重了路由器CPU的负担.超负荷时,会导致路由计算错误和网络频繁丢包.
路由振荡的原因主要分为两个方面.一个是因为链路状态的变化而造成的路由信息的改变.在这种情况下,从链路中断到新路由信息建立往往需要几秒到几十秒的时间.针对骨干网,这样的问题的发生将极大地影响实时多媒体业务的质量.另一个路由振荡的问题主要归结于网络设计的不严谨.这是会出现大量的同值选路情况,或者存在大量的路由环路,或者路由状态更新振荡的情况.
BGP协议作为外部网关协议(EGP),区别与内部网关协议(IGP)例如,OSPF、RIP等,在于BGP协议基于TCP协议,其着重与最佳路由的选择和控制路由的传播.BGP底层是基于TCP协议的,其网络监听端口号为179,由于采用了可靠的TCP协议,从而保证了BGP协议的可靠性.BGP协议主要针对域间路由选择,这对协议的稳定性提出非常高要求,因此需要TCP协议的高可靠性来保证这一稳定性的要求.BGP的相互对等域之间在逻辑上是连通的.BGP协议在执行更新过程时,只发送已经更新过的路由信息,这样就很大程度上减少了因传播路由信息而占用的带宽,因此适用于Internet上频繁路由信息的传播.
BGP是一种基于距离矢量算法的路由协议,因此,在设计上解决了发生环路的问题.在自治域之间,BGP使用自治域的路径信息来标记经过的AS,如果遇到AS号是本地的路由则丢弃,这就解决了域间产生环路的问题.对于环路的产生,BGP在AS内不学习到的路由不会在这个AS中转发.
BGP的扩展性也面临几个问题.例如路由条目过大、路由振荡、IBGP的Full-Mesh等,这些现象会导致路由器处理速度的下降.而且随着路由条目增多、网络规模增大,相应的配置和管理的工作也就随之变得更复杂.
解决路由振荡问题的传统方法基本上分为静态分析方法和动态适应方法两类.静态分析法指的是对各个自治域的路由策略进行集中分析,进而发现其中的路由策略冲突并加以解决的方法[1].
1) 面向全局的路由策略自动分析系统
系统由RPSL、路由策略分布式注册系统和RPSL工具组成.RPSL是一种抽象的描述语言,被使用在通用路由策略中.管理员在实施路由策略时,将RPSL描述的路由策略集中到路由策略分布式注册系统中.分析汇总的路由存在的策略冲突则交由RPSL工具处理.由于没有强制地对 IRR 进行策略注册,实际使用中,路由的不稳定性仍然不断增强,所以效果并不理想.在业务领域,网络路由策略一般不开放,甚至公开,路由策略很快被淘汰,或者与现有的路由策略不兼容,导致IRR操作不完善,也不能保证内容的完整性.
2) 路由策略约束
为了保证路由的稳定性,可以使用路由策略对路由的选择加以限制,同时对路由策略加以条件约束.把自治系统之间的关系划分为业务关系,对等关系和客户关系.路由的基本原理是,当有多条路由时,它将选择自治系统中的广播路由.当自治系统中没有路由时,自主系统提供的路由被选择.此时,可以看出AS通知路由的24优先级是最低的.
尽管静态分析方法在理论层面是有效的,但是这需要能事先收集到所有自治域的路由策略配置,这样会暴露各个自治域的路由策略,因此实际应用中这种方法并不可行.
动态适应法是监控BGP路由协议的运行全程,实时动态发现并解决BGP路由策略冲突的方法[1].文献[2]不需要新的动态自适应方法来向BGP消息中添加附加信息,这不违反BGP自主灵活路由策略.该方法能够有效地解决BGP路由策略的冲突问题.BGP路由策略冲突是由于路径局部优先级值的不合理分配造成的.这是这个问题的根本原因.当BGP协议运行时,动态调整路径的本地优先级,以调整路由选择中每个备选路径的优先级,有效地解决BGP路由策略的冲突.因此,实现了路由冲击抑制的目的.
在实际工程应用中,控制路由震荡主要采取路由震荡抑制(Route Flap Damping)的方法:当运行BGP协议的路由器收到E-BGP路由信息时,设定一个处罚值,而每一次路由震荡都能促使该路由的处罚值增大,而当路由趋于稳定时,处罚值也会在一定时间范围内随之减小;当处罚值大于已设定的抑制限制值时,路由器就不再在网络上广播发送该路由信息,而当处罚值变化到小于重用限制值时,路由器会在网络上重新向外广播发送该路由信息.该方法主要针对E-BGP邻居.这样,当网络内发生路由振荡时,与之相连的网络可以通过路由震荡抑制方法有效地防止冲击影响各个网络.
设路由控制路由震荡参数为x1,x2,…,xn,其满足f(x|θ1,θ2,…,θk)震荡样本,假设总体的k阶原点矩μk存在,则对所有的j,0 (1) (2) (2)中,g代表函数系数.当k=1时,我们通常可以用震荡样本均值出发对未知参数进行估计;如果k=2,可以由一阶、二阶原点矩出发估计未知参数. 设x1,x2,…,xn是来自正态总体x~N(μ,σ2)的n个随机样本,用定义的符号,θ1=μ,θ2=σ2.则有: (3) 解出μ与σ2就得到矩估计: (4) 可以得BGP路由震荡工程调整参数: (5) OSPF路由协议是一种链路状态路由协议,运行OSPF的路由器根据自身的和邻居路由器传播过来的链路状态信息生成路由表[3].在OSPF路由域中的每台路由器上都存有一个链路状态数据库(LSB),数据库中存有OSPF有关整个路由域的链路状态信息(LSA).当网络拓扑发生改变时,路由器之间通过互发和广播的方式实现链路状态数据库的动态同步.根据链路状态表,路由器以自身为源、以相关的路由器为目的,按照最小生成树算法,创建一棵最短路径树,并根据最短路径树计算出OSPF路由表,从而实现各区域间互联互通. 对于各类允许多址访问的网络,若有两台(包括两台)以上的路由器,那么OSPF就需要选举出“指定路由器”(DR)和“备份指定路由器”(BDR).DR负责广播网络的LSA,BDR则作为DR故障时替代工作的路由器.这一概念的引入,对于减少多址访问网络上路由器间的邻接关系的数量有帮助.OSPF协议将网络自治系统划分成若干区域来管理,这些区域之间间相互传送是抽象了的路由信息,这样可以减少对网络的带宽的占用. 对于OSPF路由震荡,由于路由器之间的传输信息是基于局部邻接关系的.链路的更新信息仅由邻居接收并由邻居转发,不直接传递到同一域中的其他路由器.因此,OSPF路由振荡可以从基于计时器的全网络抑制转变为本地链路振荡抑制.根据这一思路,在算法层面采用基于惩罚机制的路由振荡抑制算法.算法的核心思想是:链接的每个振荡将被记录为坏记录,并且将添加一定的惩罚值.如果惩罚值超过某一阈值,则链路将被抑制.被抑制的链路信息将不转发,不参与最短路径重计算.当链路稳定时,链路的惩罚值随时间而减小.当惩罚值降低到重用阈值时,链路抑制被解除[4].该算法通过记录历史振荡动作来增加惩罚值,从而抑制不稳定链路,从而屏蔽路由振荡的源. 1) OSPF网络优化(以H3C路由器为例) a.先使用ospf-network-type命令,配置OSPF 网络类型.然后使用ospf-dr-priority选举优先级,并用peer-ip-address配置NBMA网络邻居. b.使用ospf cost 命令,配置OSPF接口开销及使用bandwidth-referencep配置参考带宽使用ospf timer 命令,配置OSPF报文定时器和邻居失效时间.报文定时器的默认值如表1. c.使用default-route-advertise命令. 表1 报文定时器的默认值表 d.使用default-route-advertise命令,配置缺省路由引入到OSPF路由区域. 2) 检测报文并对故障处理 在实际工程应用中,可以利用路由器上的debugging ospf event工具,并打开OSPF event调试开关,来检测OSPF报文的收发是否正常.从而发现和确认路由震荡的故障.然后采取下列故障处理步骤: 1. 查看邻居接口所在网段是否一致; 2. 查看相邻各接口的优先级是否存在非零值; 3. 查看每个路由器的route id是否互不相同; 4. 查看各接口的时钟间隔等参数是否保持一致; 5. 查看接口的认证信息是否保持一致; 6. 查看ospf报文是否能正确接收; 经过上述处理步骤的检查和调试,基本能够发现和抑制常见的OSPF路由震荡,恢复网络性能. 为了保证本文提出的GP与OSPF动态路由震荡及其解决方法的有效性,进行仿真试验分析,利用SSFNet模拟器进行仿真.SFNet模拟器分为五个重要组成部分,即包括事件、进程、实体、出口通道、进口通道五部分. SSFNet模拟器通过发生时间控制,对数据流进行模拟并进行处理.事件是对模拟对象的定义,进程是对仿真过程的描述.实体即产生模拟的实际物体,包括参数、测试性能等,出口通道与入口通道即为仿真模拟信息流的出口通道与入口通道.其SSFNet模拟器结构如图1所示. 图1 SSFNet模拟器结构 根据图5SSFNet模拟器结构图,可将SSFNet模拟器结构分为三层,即SSF层、SSFnet层、DML层,其中SSFnet层是SSFNet模拟器的核心结构层. 1)SSF层为离散事件的模拟程序,主要包括out channel,inChannel,Entity以及Event,process五个类,通过接口信息进行工作. 2)SSFnet层是SSFNet模拟器的核心结构层,进行大范围的网络仿真,并对IP包级别的细粒度提供数据支持.利用独立链路层及物理层协议,为模拟器提供参数模拟,特别是在SSFOS框架下,建立主机节点的软件配置,实现模拟器的模拟. 3)DML层是网络配置文件,与服务系统,为模拟器提供网络运行环境已经网络运行保障. BGP与OSPF动态路由震荡及其解决方法仿真试验,BGP动态路由震荡检测部分,试验过程如下: 1)保证动态路由震荡检测系统平稳运行; 2)信息发布页面显示“运行正常”; 3)SSFNet模拟器运行正常; 4)检查所有外部硬件设备运行正常; 5)空运行一组参数,判断软件运行是否正常,若正常进行BGP动态路由震荡检测,若不正常,对动态路由震荡检测系统与SSFNet模拟器通信协议、信息发布页面、软件的操作性进行检查,发现错误及时更正,并再进行一次空数据的运行,并判断数据的正常性,直至数据完成正常,进行下一步操作; 6)调用相关试验参数,设置BGP的工作频率; 7)安装BGP动态路由震荡接收频率识别装置,对震荡接收频率进行输出; 8)定义一个假设在节点M为最佳的路径,从动态路由一段Po变成Pn.设Pn的优先级明显高于Po; 9)运行测试节点v向定义节点u进行动态路由的通告,路由发生变化,路由Po的相对Pn发生改变; 10)获取测试节点v促使路由Po的相对Pn发生改变,即震动的频率. 利用提出的BGP与OSPF动态路由震荡及其解决方法以及常规的BGP与OSPF动态路由震荡及其解决方法分别进行1至10操作,得出试验结论,见4.5试验结果分析. BGP与OSPF动态路由震荡及其解决方法仿真试验,OSPF动态路由震荡检测部分,试验过程如下: 1)保证动态路由震荡检测系统平稳运行; 2)信息发布页面显示“运行正常”; 3)SSFNet模拟器运行正常; 4)检查所有外部硬件设备运行正常; 5)空运行一组参数,判断软件运行是否正常,若正常进行BGP动态路由震荡检测,若不正常,对动态路由震荡检测系统与SSFNet模拟器通信协议、信息发布页面、软件的操作性进行检查,发现错误及时更正,并再进行一次空数据的运行,并判断数据的正常性,直至数据完成正常,进行下一步操作; 6)调用相关试验参数,设置OSPF的工作频率; 7)安装OSPF动态路由震荡接收频率识别装置,对震荡接收频率进行输出; 8)构建OSOF路由的4个测试节点,编如路由AS系统中,即AS1、AS2、AS3、AS4; 9)利用策略冲突检测工具对AS1、AS2、AS3、AS4初始状态进行记录,并重复AS1、AS2、AS3、AS4频率数值; 10)在接入OSPF动态路由的前提下,对不同方法,进行AS1、AS2、AS3、AS4节点数据的重复检查,并获得震荡数值; 利用提出的BGP与OSPF动态路由震荡及其解决方法以及常规的BGP与OSPF动态路由震荡及其解决方法分别进行1至10操作,得出试验结论,见4.5试验结果分析. 经BGP动态路由震荡检测与OSPF动态路由震荡检测,完成BGP与OSPF动态路由震荡及其解决方法仿真试验.并对仿真试验结果进行输出,利用SSFNet模拟器出口通道与入口通道DML层是网络配置文件,连接数据处理软件,进行结果数据的输出,其BGP与OSPF动态路由震荡及其解决方法仿真试验结果如图2所示. 图2 BGP与OSPF动态路由震荡及其解决方法仿真试验结果 图2中(a)图代表BGP动态路由震荡检测结果,(b)图代表OSPF动态路由震荡检测结果,试验图表中,横坐标代表BGP与OSPF的工作频率,纵坐标代表BGP与OSPF的动态路由震荡频率.分析BGP与OSPF动态路由震荡及其解决方法仿真试验结果得出如下结论. 1)提出的BGP与OSPF动态路由震荡及其解决方法较常规BGP与OSPF动态路由震荡及其解决方法有效. 2)在低频阶段,提出的BGP与OSPF动态路由震荡及其解决方法动态路由震荡倾向更小. 3)从整体上看,提出的BGP与OSPF动态路由震荡及其解决方法较常规BGP与OSPF动态路由震荡及其解决方法,动态路由震荡倾向降低45.25%.能够解决BGP与OSPF动态路由的震荡问题. 虽然,动态路由协议具有操纵灵活,部署方便的特点.但是,随着互联网规模扩大,拓扑日趋复杂,内部链路变化和外部的扩展因素等诸多原因,都会导致路由震荡的发生.对于BGP路由协议,可以通过动态调整本地优先值来解决BGP路由策略冲突.对于OSPF协议可以通过引入惩罚机制屏蔽震荡源.路由震荡可以通过抑制的方法来防御对网络的影响.试验数据表明,可以基于惩罚机制抑制震荡链路和在外部加速路由收敛.从而逐步恢复网络状态.2 OSPF协议及路由震荡解决
2.1 OSPF路由协议简述
2.2 OSPF路由震荡的解决方式
2.3 OSPF路由震荡工程应用的解决方法
3 仿真试验
3.1 仿真试验模拟器的选择
3.2 BGP动态路由震荡检测
3.3 OSPF动态路由震荡检测
3.4 试验结果分析
4 结论