简介

当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上有一个进程称为路由守护程序(routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。路由守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表。

动态选路并不改变内核在IP层的选路方式。这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息改变了—当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件中的route命令。

正如前面所描述的那样,路由守护程序将选路策略(routing policy)加入到系统中,选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿存在多条路由,那么它(以某种方法)将选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或电话线路不好),它可以删除受影响的路由或增加另一条路由以绕过该问题。

在像Internet这样的系统中,目前采用了许多不同的选路协议。Internet是以一组自治系统(AS,Autonomous System)的方式组织的,每个自治系统通常由单个实体管理。常常将一个公司或大学校园定义为一个自治系统。NSFNET的Internet骨干网形成一个自治系统,这是因为骨干网中的所有路由器都在单个的管理控制之下。

每个自治系统可以选择该自治系统中各个路由器之间的选路协议。这种协议我们称之为内部网关协议IGP(Interior Gateway Protocol)或域内选路协议(intradomain routing protocol)。最常用的IGP是选路信息协议RIP。一种新的IGP是开放最短路径优先OSPF(Open Shortest Path First)协议。它意在取代RIP。另一种1986年在原来NSFNET骨干网上使用的较早的IGP协议—HELLO,现在已经不用了。

新的RFC[Almquist1993]规定,实现任何动态选路协议的路由器必须同时支持OSPF和RIP,还可以支持其他IGP协议。

外部网关协议EGP(ExterierGatewayProtocol)或域内选路协议的分隔选路协议用于不同自治系统之间的路由器。在历史上,(令人容易混淆)改进的EGP有着一个与它名称相同的协议:EGP。新EGP是当前在NSFNET骨干网和一些连接到骨干网的区域性网络上使用的是边界网关协议BGP(BorderGatewayProtocol)。BGP意在取代EGP1。

分类动态路由协议可以按工作原理,工作范围,是否携带掩码来划分2。

按工作原理分距离矢量协议:路由器依赖自己相邻的路由器学习路由。如RIP,EIGRP

链路状态协议:把路由器分成区域,收集区域内所有路由器的链路状态生成网络拓扑图,每个路由器根据拓扑结构计算出路由,如OSPF2.

按工作范围分IGP(InteriorGatewayProtocol):同一自治系统(使用相同路由协议的网络集合)内部交换路由信息,如OSPF

EGP(ExteriorGatewayProtocol):不同自治系统间交换路由信息,如BGP3.

按路由更新时是否携带子网掩码有类路由协议:已被淘汰,如RIPv1,即宣告时不支持可变长子网掩码,只使用默认的ABC三类IP的默认掩码;

无类路由协议:即宣告时支持可变长子网掩码,现在都是无类路由协议。

RIP协议概述RIP协议比较简单,容易实现,在网络拓扑比较稳定时,其工作特性比较理想。其缺点是,网络拓扑变化时,收敛较慢,可能出现路由不一致现象,从而引起数据包转发混乱,另外链路度量方式比较简单,不适宜在大规模的网络中运行。

RIP只使用“跳数”来决定到达远程网络的最佳方式,并规定源站和目的站之间经过的路由器最多为15个,如果路由器收到了路由更新信息,且把距离加1后等于16(意为无穷大),就认为该目的网络不可达。在小型网络中,RIP会运行良好, 但是对于使用慢速 WAN 链接的大型网络或者对于安装有大量路由器的网络来说,它的效率很低3。

分类RIP协议分为RIPv1和RIPv2两个版本,二者具有很多相同的功能。它们的区别在于:RIPv1是有类路由协议,该网络中的所有设备必须使用相同的子网掩码,RIPv1不发送带有子网掩码信息的更新数据,而RIPv2是无类路由协议,RIPv2在路由更新时携带子网信息;RIPv1不支持VLSM(VariableLengthSubnetMask,可变长子网掩码)和CIDR(ClasslessInter-DomainRouting,无类别域间路由),而RIPv2支持VLSM和CIDR;RIPv1采用广播更新,而RIPv2采用组播更新;RIPv1不提供认证,而RIPv2提供认证。

工作原理RIP协议每30秒向相邻路由器发送一次路由更新信息,同时监听来自网络中的相邻路由器的路由更新信息,从而实现对本地路由表的动态维护,以确保IP层发送数据时选择正确的路由。针对路由表中某一条路由信息,如果180秒内没有接收到新的关于它的路由更新信息,则将其标记为失效,即跳数值标记为16;再经过120秒后,如果仍然没有收到更新信息,则将该条失效信息删除。

RIP协议中对“距离”的定义为:从一个路由器到直接连接的网络的距离定义为1,从一个路由器到非直接连接的网络的距离定义为所经过的路由器数目加1。因此,这里的“距离”也称为“跳数”,因为每经过一个路由器,跳数就加1。

依据距离向量算法,当网络中的路由器收到相邻路由器的一个RIP报文后,执行如下操作:

先修改RIP报文中的所有条目,将“下一跳”字段中的地址都改为发出该RIP报文的路由器的地址,并将所有的“距离”字段的值加1。

对修改后的RIP报文中的每一个条目,重复以下步骤:若条目中的目的网络不在路由表中,则将该条目添加到路由表中。否则,若“下一跳”字段给出的路由器地址是相同的,则用收到的条目替换原路由表中的条目。否则,若收到的条目中的距离小于路由表中条目的距离,则进行更新。否则,什么都不做。

若超过3分钟还没有收到相邻路由器更新路由表的信息,则将此相邻路由器记为不可达的路由器,即将距离置为16(距离16表示不可达)3。

OSPF协议概述现在Internet已应用于军事,科技,教育,工农业等各个领域,发挥着越来越重要的作用,它标志着信息时代的兴起。Internet的重要基础是TCP/IP协议,该协议是计算机用于网络通信的标准,它是一个协议族,包含控制,传输,标识等各方面的子协议4。

TCP/IP协议中,寻找一台计算机到另一台计算机的路由是很重要的,一方面,要判断是否能找到路,~方面,找到路后找一条短的路(花费时间最小),再一方面,不能循环。最好还应该能动态处理路由变化,如:接口的uP和DOWN,时间花费的变网络结构的改变等。网络上的节点通常通过路由器与整个网络连续,需要知道到达网络的另一个节点的路由。当IP包要在网络上传送时,需要进行IP选路。

IP选路(路由):IP可以从上层的TCP、UDP、ICMP和IGMP协议中接收数据报(即在本地生成的数据报)进行发送,或者从一个网络接口接收数据报(待转发的数据报)进行发送。在发送之前,IP层都要查询在内存中的路由表来确定往那个网络接口发送数据报文。每当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么如果IP层被设置为路由器的功能,那么就对数据报进行转发;否则数据报被丢弃。然后发送ICMP报文给源主机通知目的地不可达,并且给出原因。

工作原理OSPF协议的基本思路如下:在自治系统中每一台运行OSPF的路由器收集各自的接口、邻接信息称为链路状态,通过Flooding算法在整个系统广播自己的链路状态,使得在整个系统内部维护一个同步的链路状态数据库,根据这一数据库,路由器计算出以自己为根,其它网络节点为叶的一根最短的路径树,从而计算出自己到达系统内部各可达的最佳路由。它处理在一个自治系统中,路由器的网络的路由表信息5。

OSPF路由协议是一种典型的链路状态(Link—state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个As中,所有的OSPF路由器都维护一个相同的描述这个As结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。

作为一种链路状态的路由协议,OSPF将链路状态广播数据包LSA(LinkStateAdvertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。

BGP协议概述BGP(Border Gateway Protoc01)边界网关协议是一种路由协议,用于交换因特网自治域系统间的路由信息,其主要功能是在系统之间交换网络可达信息(NetworkLayerReachableInformation,简称NLRI)。随着网络拓扑的日益复杂,多个自治域系统之间通信的要求越来越高,需要配置的策略越来越复杂,BGP协议已经成为因特网路由体系的重要组成部分。国际和国内许多的网络和电信设备供应商已经实现和配置BGP协议,用于支撑因特网运行,减少交换和路由设备的运行负荷6。

BGP协议是一种路径向量协议,在一定程度上综合了距离向量和链路状态算法的优点。BGP认为自治域内的路由选择由IGP完成,并不对自治域内的路由作任何假设。BGP不需要所有自治域都运行同样的内部路由协议,对底层的网络拓扑没有任何限制,通过BGP的Update消息交换的信息已经足够建立一个自治域连接图。有了自治域连接图,就能够消除路由环路,并在自治系统内应用路由策略。

BGP是一种不同自治系统的路由器之间进行通信的外部网关协议。BGP是ARPANET所使用的老EGP的取代品。RFC1267[Lougheed and Rekhter1991]对第3版的BGP进行了描述。RFC1268[Rekhter and Gross1991]描述了如何在Internet中使用BGP。下面对于BGP的大部分描述都来自于这两个RFC文档。同时,1993年开发第4版的BGP(见RFC1467[Topolcic1993])1。

工作原理BGP协议运行在TCP之上,使用TCP端口179作为它的传输端口。通过TCP建立可靠的传输机制,在BGP邻居(对等体)之间交换信息。在BGP的对等体交换信息之前,BGP首先建立邻居关系。BGP的对等体使用一个特殊的IP地址来配置,而不是动态发现BGP的邻居。建立邻居关系后,BGP使用周期的KeepAlive消息来确认BGP邻居的可访问性。BGP消息包括OPEN、UPDATE、NOTIFICATION和KEEPALIVE四种6。

BGP处于Idle状态,当收到bgpStart件,初始化所有BGP资源,初始化到对端的TCP接。当侦听到远端连接请求,转到Connect状态;

Connect状态下,若TCP连接成功,发送EN消息到对端,转到OpenSent。如果TCP连接败,转到Active状态;

在Active状态,BGP初始化TCP连接建立居关系,若连接成功,发送OPEN消息,转到enSent状态。若连接超时,到Connect状态;

在OpenSent状态,若收到BGP对等体发来确的OPEN消息,发送KEEPALIVE消息,转到enConfirm状态。若收到不正确OPEN消息,转Idle状态。若TCP连接断开,转到Active状态;

在OpenConfirm状态,若收到对端EPALIVE消息,到Established状态。若出现错,发送NOTIFICATION消息,改变状态到Idle;

在Established状态,BGP和对等体之间交UPDATE、NOTIFICATION和KEEPALIVE消息。出现错误,发送NOTIFICATION消息,转到Idle。

BGP邻居关系建立后开始交换完整的BGP由表,之后当路由有变化时发送路由更新操作即UPDATE消息。BGP不要求周期性地刷新路由,只有周期性的KEEPALIE信息在形成BGP邻关系的路由器之间发送,以保证BGP邻居关系维持。如果在。路由信息交换的过程中发生错误,其中的一台路由器向邻居发送NOTIFICATION消息指出错误的类型并关闭BGP连接。