本章讨论动态选路协议,它用于路由器间的通信。我们主要讨论R I P,即选路信息协议(Routing Infromation Protocol),大多数T C P / I P实现都提供这个应用广泛的协议。然后讨论两种新的选路协议,O S P F和B G P。本章的最后研究一种名叫无分类域间选路的新的选路技术,现在I n t e r n e t上正在开始采用该协议以保持B类网络的数量。
动态选路
当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上有一个进程称为路由守护程序(routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。正如图9 - 1所示,路由守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表。动态选路并不改变我们在9 . 2节中所描述的内核在I P层的选路方式。这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息改变了—当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件中的r o u t e命令。正如前面所描述的那样,路由守护程序将选路策略(routing policy)加入到系统中,选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿存在多条路由,那么它(以某种方法)将选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或电话线路不好),它可以删除受影响的路由或增加另一条路由以绕过该问题。同自治系统之间的路由器。在历史上,(令人容易混淆)改进的E G P有着一个与它名称相同的协议:E G P。新E G P是当前在N S F N E T骨干网和一些连接到骨干网的区域性网
Unix选路守护程序
U n i x系统上常常运行名为r o u t e d路由守护程序。几乎在所有的T C P / I P实现中都提供该程序。该程序只使用R I P进行通信,我们将在下一节中讨论该协议。这是一种用于小型到中型网络中的协议。另一个程序是g a t e d。I G P和E G P都支持它。
选路信息协议
RIP报文包含中在UDP数据报中。这里只总结版本1,对于版本2参考tcp/ip(v1)。
命令字段为1表示请求,2表示应答。还有两个舍弃不用的命令( 3和4),两个非正式的命令:轮询( 5)和轮询表项( 6)。请求表示要求其他系统发送其全部或部分路由表。应答则包含发送者全部或部分路由表。版本字段通常为1,而第2版R I P将此字段设置为2。紧跟在后面的2 0字节指定地址系列( address family)(对于I P地址来说,其值是2)、I P地址以及相应的度量。在本节的后面可以看出, R I P的度量是以跳计数的。采用这种2 0字节格式的R I P报文可以通告多达2 5条路由。上限2 5是用来保证R I P报文的总长度为2 0×25 + 4 = 504,小于5 1 2字节。由于每个报文最多携带2 5个路由,因此为了发送整个路由表,经常需要多个报文。有一个注意点:跳数的最大值是1 5,这意味着R I P只能用在主机间最大跳数值为1 5的A S(自治系统)内。度量为1 6表示到无路由到达该I P地址。最大跳数为15限制了使用RIP网络的大小。
正常运行
让我们来看一下采用R I P协议的r o u t e d程序正常运行的结果。R I P常用的U D P端口号是5 2 0。
1)初始化:在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个请求报文,要求其他路由器发送完整路由表。在点对点链路中,该请求是发送给其他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。这种请求报文的命令字段为1,但地址系列字段设置为0,而度量字段设置为1 6。这是一种要求另一端完整路由表的特殊请求报文。
2)接收到请求。如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。否则,就处理请求中的每一个表项:如果有连接到指明地址的路由,则将度量设置成我们的值,否则将度量置为1 6(度量为1 6是一种称为“无穷大”的特殊值,它意味着没有到达目的的路由)。然后发回响应。
3)接收到响应。使响应生效,可能会更新路由表。可能会增加新表项,对已有的表项进行修改,或是将已有表项删除。
4)定期选路更新。每过3 0秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是广播形式的(如在以太网上),或是发送给点对点链路的其他终点的。
5)触发更新。每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整路由表,而只需要发送那些发生变化的表项。
每条路由都有与之相关的定时器。如果运行R I P的系统发现一条路由在3分钟内未更新,就将该路由的度量设置成无穷(16),并标注为删除。这意味着已经在6个3 0秒更新时间里没收到通告该路由的路由器的更新了。再过6 0秒,将从本地路由表中删除该路由,以保证该路由的失效已被传播开。
更新算法
RIP采用的是距离向量算法,是以最小的跳数为判定标准的。这里举个例子:
RIP存在的问题
RIP存在的一个问题就是当网络出现故障的时候,要经过较长的时间才能将此信息传送到所有的路由器。如下图:
如果网络1出现故障,然后R1更新自己的路由表,但是需要30秒之后才向R2发送,所以此时如果R2先发送了路由表过来的话,然们就会使得,需要很多次往返发送才能使R2得知网络1故障。