当前位置:文档之家› RIP协议详解

RIP协议详解

路由信息协议(RIP)。

RIP协议是网络中最为简单的协议,RIP协议是用来散发与路由器相关的网络信息的。在最基本的层面上,路由器需要知道能够达到什么网络以及到这些网络的距离有多远。RIP协议就做这件事情。RIP协议仍是目前被广泛应用的协议。

许多人咒骂RIP协议,说它汇聚的速度太慢,没有可伸缩性和不安全,因为RIP协议的身份识别只有明文的方式,而且这个协议还受到了Split-horizon的影响。这些情况都是真实的。但是,这个协议仍然是非常有用的。我们希望这篇文章能说明这些问题,帮助你理解这个应用最广泛的内部网关协议之一。

RIP协议有两种版本:第一版(RIPv1)和第二版(RIPv2)。RIPv1的功能非常有限,因为它不支持CIDR(无类域间路由选择)地址解析。这就意味着这个协议只是一个有类域协议,你不能把24掩码网络分成更小的单位。另外,RIPv1还使用广播发送信息。这就意味着主机不能忽略RIP广播。请记住,每次发出广播时,广播域中的每一台主机都将收到一个中断,并且必须要要处理这个数据包以便确定这个数据包是不是它关心的东西。RIPv2使用多播技术。这个技术在以后的讲座中再介绍。现在,你们仅需要知道主机在无需处理这个数据包的情况下就可以知道是否可以忽略这个多播包。

请记住,我们曾经说过RIP是一种距离向量协议。这里提到的距离指的是RIP协议中的跳数,而向量指的是目的地。其它距离向量协议也许使用其它规则来对各向量进行度量,如BGP协议中的AS-PATH。这两种版本的RIP协议都是每隔30秒钟向UDP端口520发送一次信息。但是,它们发送什么信息呢?如果你推测是“它们的路由信息”,你就猜对了。RIP能够发送有关它可以到达的网络的具体信息,并且把自己作为一个默认的网关播出(目的地为0.0.0.0,度量值

/metric 为1)。

RIPv2数据包有自己的报头,同许多其它协议一样。请注意,RIP协议是在UDP协议之上的,因此,它实际上是一个应用层协议。每一个RIP数据包都包含一个指令、一个版本编号和一个路由域。然后后面是最多25条路由信息(一个数据包内)。

RIP数据包的指令

一个RIP指令可以是一个请求或者是一个应答。当主机(无论是一台Unix 服务器还是一台路由器)第一次启动时,主机都需要获得一些路由信息。这时会发出“请求”指令。向网络广播包含请求指令的数据包。“应答”是另一种常见的RIP指令。它用于回答一个请求,或者仅是简单的每隔30秒发布一次的广播。

版本号

版本号为一或二,指令此数据包的RIP协议版本。

路由域

RIP协议中的一个路由域是一种用于具体说明路由实例的识别符。同一个网络中可以存在一套以上的RIP实例,可以具体指定一个信息仅仅是发送给一个具体域中的人员的。

RIP数据包的其它部分

在路由域之后,真正的RIP路由信息就开始了。一个数据包最多可以包含25个路由条目。每个路由条目需要包含如下信息:

•网络地址:识别目标子网地址的开始点。

•子网掩码:说明这个网络有多大。

•下一跳IP地址:也就是能够让你到达目的地的路由器。

•度量值:这个网络的跳点距离有多少。

RIP协议的一个重要的特点是它能够告诉你它从其他路由器那里了解到的的有关目标网络的情况。你可能听说过这类被称为“传闻路由(routing by rumor)”的路由协议。它的工作方式是,在一台路由器广播RIP 数据包之前把尺度域(metric field)的值加一。例如路由器A告诉你你能够经过它通过两跳达路由器B,那么,你就知道路由器A和路由器B能够直接对话,因为它们之间的距离只有一个跳点。所以,路由器A同路由器B一样在同一个广播域中有一个链路。但是,你却没有。

当这个尺度,或者跳数,达到16的时候,说明你就遇问题。16这个数字在RIP协议中意味着无穷大。无穷数等于16是一种用来停止度量值无限增大的机制。之所以这样设计由于“传闻路由”的工作原理。这个问题讲起来有点复杂。但是,请你耐心看一下下面这个三个路由器的例子:

路由器A知道它通过路由器B能够在2跳之内可以达到路由器C。你头脑中的画面可以是一条直线,路由器B在中间,路由器A和C在两端。现在,由于路由器B与路由器C有直接的连接,因此,当路由器C出故障的时候它将会知道。但是,当路由器B有机会告诉路由器A有关路由器C出故障的事情之前,路由器A发出了一个RIP更新信息。这个信息包括“我能够在2跳之内可以达到路由器C”。路由器B当然会相信路由器A,这就意味着路由器B相信路由器A能够达到路由器C。当然,路由器A是不能到达路由器C的,因为它的路径要经过路由器B。但是,路由器B并不知道这种情况,因为RIP协议中的惟一信息是下一跳地址,也就是路由器A。最后,当路由器B发送它的下一次更新的时候,它将包括通向路由器C的路由,这个路由现在是3跳。路由器A相信路由

器B,因为路由器B毕竟是通向路由器C的惟一通道。这种事情经常发生,我们的跳数达到了16。这个路由将被放弃,而不会永远继续下去。

这个问题如何解决呢?使用距离向量协议可没有办法。当我们告诉我们的邻居有关这个世界的情况时,我们没有提供有关每一个网络的详细信息,这样刚才那种计算无穷数的事情就可能发生。链路状态协议向全部路由器提供整个网络的状况因此可以避免了这种问题的发生。“水平分割”是帮助避开这个问题的另一种方法。但是,这种方法本身也存在瑕疵。

Split-horizon意味着我们要跟踪更新信息发进来的端口,关注可能与之发生冲突的其它路由器发来的更新信息。换句话说,路由器纪录一条路由信息发送出去时使用的接口,当从这个接口收到到到同一目标的路由更新信息时,它会了解这是自己刚发出去的信息被其它路由器回传了回来,从面一定程序上避免问题,但是,当涉及到更多的路由器的时候,上面介绍的情况仍会存在。这种例子会变得更加复杂。但是,如果你对RIP协议感兴趣,你可以试着设计出一种环境,在这种环境中即使具有Split-horizon功能的路由器仍会出现计算无穷数的现象。

RIP协议的最后一个“问题”就是聚合的速度慢。这是真的,主要是因为每次更新间隔的30秒等待时间。但是,在小机构中,这没什么大关系。RIPv2几乎能够在所有的硬件上运行,甚至在你买来支持宽带网连接的廉价的“家庭路由器”上也可以运行。即使你没有专门把RIP协议用作一个IGP协议,了解这个协议仍然是有用的,因为主机也可以使用这个协议作为手工设置一个默认的网关的替代方法。最后,即使你的机构很小,全部使用静态路由就够用,RIPv2也会给你带来更多的方便。

小结

相关主题