网络层协议(4):动态选路

来源:互联网 发布:学java跟不上 编辑:程序博客网 时间:2024/06/06 21:43

在网络很小,且与其他网络只有单个连接点且没有多余路由时,使用静态选路的方法是可行的的。但是当我们遇到大的网络,通常使用的是动态选路。

当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态路由。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上一个进程称为路由守护程序(routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。这个程序根据它从相邻路由器接收到的信息,更新内核中的路由表。
动态选路并不改变我们在静态选路中所描述的内核在IP层的选路方式。这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由,网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中信息改变了,当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件的route命令。
正如前面所描述的那样,路由守护程序将选路策略(routing policy)加入到系统中,选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿(目的主机)存在多条路由,那么它(以某种方法)将选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或者电话线不好),他可以删除受影响的路由或增加另一条路由以绕过该问题。

在像Internet这样的系统中,目前采用了许多不同的选路协议。Internet是以一组自治系统(AS, Autonomous System)的组织方式,每个自治系统通常由单个实体管理。我们常常将一个公司或大学校园定义为一个自治系统。每个自治系统可以选择该自治系统中各个路由器之间的选路协议,这种协议我们称为内部网关协议IGP(Interior Gateway Protocol)。最常用的IGP就是选路信息协议RIP。

RIP:选路信息协议
RIP报文包含在UDP数据报中,下面来看看RIP报文的格式:

这里写图片描述

版本字段通常为1,如果使用第二版RIP,将此字段设置为2。紧跟在后面的20字节指定地址系列(地址族,address family)(对于IP地址来说,其值是2),IP地址以及相应的度量,RIP的度量是以跳计数的。采用这种20字节格式的RIP报文可以通告多达25条路由。上限是25是用来保证RIP报文的总长度为20*25+4=504,小于512字节。由于每个报文最多携带25个路由,因此为了发送整个路由表,经常需要多个报文。

让我们来看一下采用RIP协议的routed程序正常运行的结果,RIP常用的UDP端口号是520。
1.初始化:在启动一个路由守护进程是,它先判断启动了哪些接口,并在每个接口上发送一个RIP请求报文,要求其他路由器发送完整路由表。在点对点链路中,该请求是发送给其他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。这种请求报文的命令字段为1,但地址系列字段设置为0,而度量字段设置为16。这是一种要求另一端发送完整路由表的特殊请求报文。
2.接收到请求:如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。否则,就处理请求中的每一个表项:如果有连接到指明地址的路由,则将度量设置成我们的值,否则将度量置为16(度量16是一称为“无穷大”的特殊值,它意味着没有到达目的路由),然后发回响应。
3.接收到响应:使响应生效,可能会更新路由表,可能会增加新表项,对已有的表项进行修改,或是将已有表项删除。
4.定期选路更新:每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是广播形式的(如在以太网上),或是发送点对点链路的其他终点的。
5.触发更新:每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整的路由表,而只是需要发送那些发生变化的表项。
6.定时器:每条路由都有与之相关的定时器。如果运行RIP系统发现一条路在3分钟内未更新,就将该路由的度量设置为无穷大(16),并标注为删除。这意味着已经在6个30秒更新时间没有收到通告该路由器的更新了。再过60秒,将从本地路由表中删除该路由,以保证路由的失效已被传播开来。

RIP的度量是以跳(hop)计算的。所有直接连接接口的跳数为1。由于每个路由器都发送其路由表给邻站,因此,可以判断在同一个自治系统AS内到每一个网路的路由。如果在该AS内从一个路由器到一个网络有多条路由,那么路由器将选择跳数最小的路由,而忽略其他路由。跳数的最大值是15,这意味着RIP只能用在主机间最大跳数值为15的AS内,度量为16表示无路由到达该IP地址。

0 0