《TCP/IP协议族》(英文版)第13章路由协议(RIP,OSPF和BGP)所谓“互联网络”(internet)是指由路由器连接而成的多个网络的组合体。
当数据报从一个源端传送到一个目标端时,可能需要通过很多个路由器才到达与目标网络连接的路由器。
路由器的作用是从一个网络中接收数据包(packet,分组),然后将它传送给另一个网络。
一个路由器通常与几个网络连接,这样,当它收到一个数据包时,应该将数据包转发给哪个网络呢?路由器是按最佳化原则进行判定:哪个可用的路径是最佳路径?人们用metric来表示通过某个网络时所指定的“成本”(cost,代价)。
一个特定路由的总metric,等于包含了该路由的多个网络的metric之和。
路由器根据最短(最小)的metric 来选择路由。
分配给每个网络的metric取决于协议的类型。
某些简单的协议,如“路由信息协议”(RIP),将每个网络同等处理,即通过每个网络的cost是一样的,或者说都是一个“跳数”(one hop count)。
所以如果一个数据包通过10个网络才到达目标端,其总cost就是10个“跳数”。
其他协议,如“开放最短路径优先协议”(OSPF),则允许管理员根据所需的服务类型,为通过一个网络指定cost。
通过某个网络的路由可以具有不同的cost(metric)。
例如,如果所需的服务类型是“最大吞吐量”(throughput),一条卫星链路就比一条光纤链路具有更低的metric。
另一方面,如果所需的服务类型是“最小延迟”,一条光纤链路就比一条卫星链路具有更低的metric。
OSPF允许每个路由器根据所需的服务类型拥有几个路由表。
其他协议定义metric的方法则完全不同。
在“边缘网关协议”(BGP)中,评定的标准是可以由管理员设置的所谓“策略”(policy)。
“策略”定义了应该选择的是哪个路径。
不管metric是如何确定的,路由器在准备转发数据包时,都必须使用路由表。
路由表应为数据包规定最佳路径。
不过,路由表可以是静态的,也可以是动态的。
“静态路由表”是那种不经常变化的路由表。
而“动态路由表”是那种当互联网络中的某处出现变化时能自动更新的路由表。
今天,互联网络需要的是动态路由表。
这种路由表要求互联网络出现变化时即被尽快更新。
例如,当某个路由关闭(down)时,需要进行更新;而当一个更好的路由建立后,也需要进行更新。
各种路由协议都是为了动态路由表的需要而制定的。
一个路由协议是一组规则和程序的组合,用于使互联网络中的路由器们相互告知有关的变化情况。
它使路由器们共享它们所掌握的互联网络或相邻路由器的情况。
这种信息的共享使得旧金山市的某个路由器可以知道德克萨斯州的网络出现故障了。
路由协议还包含了将从其他路由器接收的信息综合起来的处理程序。
13.1 内部和外部路由今天,一个互联网络可能很大,以致一个路由协议无法完成为所有路由器更新路由表的任务。
为此,需要将一个互联网络分为若干“自治系统”(autonomous systems,AS)。
一个“自治系统”是指由同一个管理员管理的一组网络和路由器。
自治系统内部的路由称为“内部路由”,自治系统之间的路由称为“外部路由”。
每个自治系统都可以选择一个内部路由协议来处理该自治系统内部的路由。
但是,自治系统之间的路由通常只能使用一个外部路由协议来处理。
现在使用的内部和外部路由协议很多。
本章只介绍最常用的几种。
下面讨论两个内部路由协议(RIP和OSPF)和一个外部路由协议(BGP)。
RIP和OSPF可用于自治系统内部路由表的更新。
BGP可用于为连接自治系统的各个路由器进行路由表更新。
图13.2中,路由器R1,R2,R3和R4使用一个内部路由协议和一个外部路由协议。
其他路由器只使用内部路由协议。
细实线表示使用内部路由协议的各路由器间的通信连接。
虚线则表示使用外部路由协议的各路由器间的通信连接。
13.2 RIP(路由信息协议)路由信息协议是一个用于自治系统内部的所谓“内部路由协议”。
它是一种非常简单的协议,基于所谓“距离向量路由”(使用Bellman-Ford算法来计算路由表)技术。
在本节中,我们首先研究RIP所应用的“距离向量路由”的原理,然后讨论RIP协议本身。
距离向量路由在“距离向量路由”中,每个路由器都定期地和其相邻的路由器们共享它们对整个互联网络掌握的情况。
理解这一算法的工作原理有三个关键,如下:1、共享整个自治系统的情况每个路由器都和其相邻的路由器们共享它们对整个互联网络掌握的情况。
开始时,一个路由器掌握的情况可能是很少的,便是它知道多少并不重要;它发送它所知道的所有情况。
2、只和相邻的路由器共享每个路由器只向相邻的路由器发送自己掌握的情况。
它通过自己的所有端口发送自己知道的所有情况。
3、定期地共享每个路由器都定期地(如每隔30秒)向相邻的路由器发送自己掌握的情况。
术语“距离向量”起源于定期信息发送,一个报文包含有成对的列表(V,D),这里的V表示目的地(叫做向量),D是到达那个目的地的距离。
注意距离向量是以第一人称报告路由的,即我们把一个路由器送来的通告看成它在说:“我可以到达距离为D的目的地V”。
(《计算机网络——习题与解析》P183)路由表每个路由器都保持一张路由表,表中为路由器知道的每一个目标网络设置一条记录。
该记录由目标网络的IP地址、到达目标的最短距离(用“跳数”表示)和下一跳(为了到达最后目标应将数据包转送给它的下一个路由器)三个部分组成。
跳数是指数据包到达最后目标所进入的网络数目。
路由表中还含有诸如该记录最后更新时间等其他信息。
示例如下:RIP更新算法路由表根据收到的RIP响应报文(message)进行更新。
以下是RIP所使用的更新算法:接收:一个RIP响应报文1.为每个advertised(被发布)的目标增加一个跳数值;2.对每个advertised的目标重复以下步骤:1.如果(目标不在路由表中)1.将advertised的信息添加到路由表中。
2.否则1.如果(下一跳字段相同)1.用advertised的记录替换表中的记录2.否则1.如果(advertised跳数小于表中的跳数)1.把它加到路由表中2.否则2.什么都不做3.返回在图13.3中,一个路由器从路由器C处收到一个RIP报文。
该报文列出了目标网络及其相应的跳数。
要求更新算法,第一步是将跳数加1,然后将这个更新了的RIP数据包与原来的路由表比较。
结果是产生了一个使用到达每个目标最新跳数的路由表。
对Net1,因为没有新信息,所以Net1的记录保持不变。
对Net2,表中的信息和报文中的信息确定是同一个“下一跳”(路由器C)。
虽然路由表中的跳数(2)小于报文中的跳数(5),按算法还是选择了从报文中接收来的跳数,因为原始的值来自路由器C。
这个值现在无效了,因为路由器C正在宣告一个新值。
Net3是一个新增的目标。
对Net6,RIP数据包含有一个较低的跳数,于是该值出现在新路由表中。
Net8和Net9保留原来的值,因为报文中对应的跳数并无任何改进。
路由表的初始化将一台路由器刚加入到网络中时,它使用自己的配置文件来初始化自己的路由表。
此路由表只含有直接连接的网络和跳数(初始值均为1)。
“下一跳”字段则为空白。
图13.4表示了一个小自治系统中各初始的路由表。
更新路由表每个路由表都使用上述的RIP更新算法,根据所接收的RIP报文进行更新。
图13.5表示了上面那个自治系统的最新路由表。
RIP报文格式重复·命令(8位)规定报文类型:请求(1)响应(2)·版本(8位)规定RIP版本,此处为版本1(还有版本2)·协议族(16位)规定所用协议族。
TCP/IP为2。
·地址(14字节)规定目标网络的地址。
IP只用四个字节,其余均填上0。
·距离(32位)规定了从advertising路由器到目标网络的跳数。
注意:每个目标网络均重复报文的一部分(阴影部分)。
我们将它称为“一条记录”。
请求和响应RIP使用两种报文:请求和响应请求请求报文是由刚启动的路由器发出,或者由某些记录已超时的路由器发出。
请求可以是针对部分记录,也可以是针对全部记录。
响应响应可以是solicited或unsolicited的。
所谓“solicited响应”只能答复一个请求。
它含有相应请求中规定的目标的信息。
而所谓“unsolicited响应“则是每隔30秒定时发送,含有整个路由表的信息。
下图是由一个RIP响应报文发布的有关三个网络的信息。
RIP中的定时器(Timers in RIP)RIP使用三个定时器来支持它的操作:·定期(periodic)定时器25~35秒更新计时器·过期(expiration)定时器180秒路由限时器·垃圾搜集(garbage collection)定时器120秒路由清除计时器“定期”定时器“定期”定时器控制“定期更新报文”的发布。
虽然协议规定这个定时器必须设置为30秒,这个工作模型实际使用的是一个25~35秒之间的随机数,以防止由于路由器同时更新而在互联网上形成同步从而导致过载。
每个路由器都有一个定期定时器,它被随机地设置为25~35之间的某个数,采用倒计数制。
当计数值为零时,更新报文就被发出,然后定时器又被随机地设置一次。
如果RIP使用其他附加的定时方法来发送更新信息(如“触发更新”,见下),定期定时器的工作并不受影响。
定期更新报文按原定时间间隔发出,与其他定时系统的更新报文互不相干。
“过期”定时器过期定时器决定了路由的有效性。
如果一个路由器接收到某个路由更新信息,过期定时器将被设置为180秒(专为此特定路由)。
每次收到该路由的最新的更新信息,定时器就被复位。
在通常情况下,更新信息是30秒出现一次。
但是,如果互联网络上出现问题,在所规定的180秒时间内没收到更新信息,该路由的跳数就被设置为16(表示目标是不可到达的)。
每一个路由都有它自己的过期定时器。
“垃圾搜集”定时器当与某个路由有关的信息变成无效时,路由器并不立即从其路由表中清除该路由,而是以metric值16继续发布该路由。
同时,一个称为“垃圾搜集定时器”的定时器被设置为120秒(专为此路由)。
当计数值变成0时,该路由才从路由表中被清除。
这个定时器使相邻的路由器们可以在某个路由被清除前便知道该路由已经失效了。
慢收敛(Slow Convergence)使用RIP时遇到的一个问题是“慢收敛”问题,这意味着在互联网络中某处的改变非常缓慢地传递到该互联网络的其他部分。
例如,假设图3.10中的网络1中发生了某种改变,路由器R1立即自我更新。
但是,因为每个路由器每隔30秒才发送其定期更新报文,这意味平均需要15秒(在0~30秒范围内平均)的时间才能到达R2。