RIP路由协议及工作原理

RIP(Routing information Protocol,路由信息协议)是应用较早、使用较普遍的内部网关协议(Interior Gateway Protocol,IGP),适用于小型同类网络的一个自治系统(AS)内的路由信息的传递。RIP协议是基于距离矢量算法(Distance Vector Algorithms,DVA)的。它使用“跳数”,即metric来衡量到达目标地址的路由距离。文档见RFC1058、RFC1723。它是一个用于路由器和主机间交换路由信息的距离向量协议,目前最新的版本为v4,也就是RIPv4。

至于上面所说到的“内部网关协议”,我们可以这样理解。由于历史的原因,当前的 INTERNET 网被组成一系列的自治系统,各自治系统通过一个核心路由器连到主干网上。而一个自治系统往往对应一个组织实体(比如一个公司或大学)内部的网络与路由器集合。每个自治系统都有自己的路由技术,对不同的自治系统路由技术是不相同的。用于自治系统间接口上的路由协议称为“外部网关协议”,简称EGP (Exterior Gateway Protocol);而用于自治系统内部的路由协议称为“内部网关协议”,简称 IGP。内部网关与外部网关协议不同,外部路由协议只有一个,而内部路由器协议则是一族。各内部路由器协议的区别在于距离制式(distance metric, 即距离度量标准)不同,和路由刷新算法不同。RIP协议是最广泛使用的IGP类协议之一,著名的路径刷新程序Routed便是根据RIP实现的。RIP协议被设计用于使用同种技术的中型网络,因此适应于大多数的校园网和使用速率变化不是很大的连续线的地区性网络。对于更复杂的环境,一般不使用RIP协议。

1. RIP工作原理

RIP协议是基于Bellham-Ford(距离向量)算法,此算法1969年被用于计算机路由选择,正式协议首先是由Xerox于1970年开发的,当时是作为Xerox的“Networking Services(NXS)”协议族的一部分。由于RIP实现简单,迅速成为使用范围最广泛的路由协议。

路由器的关键作用是用于网络的互连,每个路由器与两个以上的实际网络相连,负责在这些网络之间转发数据报。在讨论 IP 进行选路和对报文进行转发时,我们总是假设路由器包含了正确的路由,而且路由器可以利用 ICMP 重定向机制来要求与之相连的主机更改路由。但在实际情况下,IP 进行选路之前必须先通过某种方法获取正确的路由表。在小型的、变化缓慢的互连网络中,管理者可以用手工方式来建立和更改路由表。而在大型的、迅速变化的环境下,人工更新的办法慢得不能接受。这就需要自动更新路由表的方法,即所谓的动态路由协议,RIP协议是其中最简单的一种。

在路由实现时,RIP作为一个系统长驻进程(daemon)而存在于路由器中,负责从网络系统的其它路由器接收路由信息,从而对本地IP层路由表作动态的维护,保证IP层发送报文时选择正确的路由。同时负责广播本路由器的路由信息,通知相邻路由器作相应的修改。RIP协议处于UDP协议的上层,RIP所接收的路由信息都封装在UDP协议的数据报中,RIP在520号UDP端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它路由器。通过这种方式,达到全局路由的有效。

RIP路由协议用“更新(UNPDATES)”和“请求(REQUESTS)”这两种分组来传输信息的。每个具有RIP协议功能的路由器每隔30秒用UDP520端口给与之直接相连的机器广播更新信息。更新信息反映了该路由器所有的路由选择信息数据库。路由选择信息数据库的每个条目由“局域网上能达到的IP地址”和“与该网络的距离”两部分组成。请求信息用于寻找网络上能发出RIP报文的其他设备。

RIP用“路程段数”(即“跳数”)作为网络距离的尺度。每个路由器在给相邻路由器发出路由信息时,都会给每个路径加上内部距离。在如图9-31中,路由器3直接和网络C相连。当它向路由器2通告网络142.10.0.0的路径时,它把跳数增加1。与之相似,路由器2把跳数增加到“2”,且通告路径给路由器1,则路由器2和路由器1与路由器3所在网络142.10.0.0的距离分别是1跳、2跳。

图9-31  RIP工作原理示例

然而在实际的网络路由选择上并不总是由跳数决定的,还要结合实际的路径连接性能综合考虑。在如9-32所示网络中,从路由器1到网络3,RIP协议将更倾向于跳数为2的路由器1->路由器2->路由器3的1.5Mbps链路,而不是选择跳数为1的56Kbps,直接的路由器1->路由器3路径,因为跳数为1的56Kbps串行链路比跳数为2的1.5Mbps串行链路慢得多。

图9-32   路由选择不仅限于“跳数”考虑的示例

2. 路由器的收敛机制

任何距离向量路由选择协议(如RIP)都有一个问题,路由器不知道网络的全局情况,路由器必须依靠相邻路由器来获取网络的可达信息。由于路由选择更新信息在网络上传播慢,距离向量路由选择算法有一个慢收敛问题,这个问题将导致不一致性产生。RIP协议使用以下机制减少因网络上的不一致带来的路由选择环路的可能性。

l              记数到无穷大机制

RIP协议允许最大跳数为15。大于15的目的地被认为是不可达。这个数字在限制了网络大小的同时也防止了一个叫做“记数到无穷大”的问题。

记数到无穷大机制的工作原理如下(如图9-33所示):

图9-33  路由器收敛机制示例

(1)现假设路由器1断开了与网络A相连,则路由器1丢失了与网络A相连的以太网接口后产生一个触发更新送往路由器2和路由器3。这个更新信息同时告诉路由器2和路由器3,路由器1不再有到达网络A的路径。假设这个更新信息传输到路由器2被推迟了(CPU忙、链路拥塞等),但到达了路由器3,所以路由器3会立即从路由表中去掉到网络A的路径。

(2)路由器2由于未收到路由器1的触发更新信息,并发出它的常规路由选择更新信息,通告网络A以2跳的距离可达。路由器3收到这个更新信息,认为出现了一条通过路由器2的到达网络A的新路径。于是路由器3告诉路由器1,它能以3跳的距离到达网络A。

(3)在收到路由器3的更新新后,就把这个信息加上一跳后向路由器2和路由器3同时发出更新信息,告诉他们路由器1可以以3跳的距离到达网络A。

(4)路由器2在收到路由器1的消息后,比较发现与原来到达网络A的路径不符,更新成可以以4,跳的距离到达网络A。这个消息再次会发往路由器3,以此循环,直到跳数达到超过RIP协议允许的最大值(在RIP中定义为16)。一旦一个路由器达到这个值,它将声明这条路径不可用,并从路由表中删除此路径。

由于记数到无穷大问题,路由选择信息将从一个路由器传到另一个路由器,每次段数加1。路由选择环路问题将无限制地进行下去,除非达到某个限制。这个限制就是RIP的最大跳数。当路径的跳数超过15,这条路径才从路由表中删除。

l              水平分割法

水平分割规则如下:路由器不向路径到来的方向回传此路径。当打开路由器接口后,路由器记录路径是从哪个接口来的,并且不向此接口回传此路径。

Cisco可以对每个接口关闭水平分割功能。这个特点在“non broadcast mutilple access”(NBMA,非广播多路访问)环境下十分有用。在如图9-34所示网络中,路由器2通过帧中继连接路由器1和路由器3,两个PVC都在路由器2的同一个物理接口(S0)中止。如果在路由器2的水平分割功能未被关闭,那么路由器3将收不到路由器1的路由选择信息(反之亦然)。用“no ip split-horizon”接口子命令可关闭水平分割功能。

图9-34  水平分割法原理示例

l              破坏逆转的水平分割法

水平分割是路由器用来防止把一个接口得来的路径又从此接口传回导致的问题的方案。水平分割方案忽略在更新过程中从一个路由器获取的路径又传回该路由器。有破坏逆转的水平分割方法是在更新信息中包括这些回传路径,但这种处理方法会把这些回传路径的跳数设为16(无穷)。通过把跳数设为无穷,并把这条路径告诉源路由器,有可能立刻解决路由选择环路。否则,不正确的路径将在路由表中驻留到超时为止。破坏逆转的缺点是它增加了路由更新的的数据大小。

l              保持定时器法

保持定时器法可防止路由器在路径从路由表中删除后一定的时间内(通常为180秒)接受新的路由信息。它的思想是保证每个路由器都收到了路径不可达信息,而且没有路由器发出无效路径信息。例如在图6-32所示网络中,由于路由更新信息被延迟,路由器2向路由器3发出错误信息。但使用保持计数器法后,这种情况将不会发生,因为路由器3将在180秒内不接受通向网络A的新的路径信息,到那时路由器2将存储正确的路由信息。

l              触发更新法

有破坏逆转的水平分割将任何两个路由器构成的环路打破,但三个或更多个路由器构成的环路仍会发生,直到无穷(16)时为止。触发式更新法可加速收敛时间,它的工作原理是当某个路径的跳数改变了,路由器立即发出更新信息,不管路由器是否到达常规信息更新时间都发出更新信息。

3. RIP报文格式

如图9-35所示为RIP信息格式。各字段解释如下:

Command:命令字段,8位,用来指定数据报用途。命令有五种:Request(请求)、Response(响应)、Traceon(启用跟踪标记,自v2版本后已经淘汰)、Traceoff(关闭跟踪标记,自v2版本后已经淘汰)和Reserved(保留)。

Version:RIP版本号字段,16位。

Address Family Identifier:地址族标识符字段,24位。它指出该入口的协议地址类型。由于 RIP2版本可能使用几种不同协议传送路由选择信息,所以要使用到该字段。IP协议地址的Address Family Identifier为2。

图9-35  RIP协议信息格式

Route Tag:路由标记字段,32位,仅在v2版本以上需要,第一版本不用,为0。用于路由器指定属性,必须通过路由器保存和重新广告。路由标志是分离内部和外部 RIP 路由线路的一种常用方法(路由选择域内的网络传送线路),该方法在 EGP或IGP都有应用。

IP Address:目标IP地址字段,IPv4地址为32位。

Subnet Mask:子网掩码字段,IPv4子网掩码地址为32位。它应用于IP地址,生成非主机地址部分。如果为0,说明该入口不包括子网掩码。也仅在v2版本以上需要,在RIPv1中不需要,为0。

Next Hop:下一跳字段。指出下一跳IP地址,由路由入口指定的通向目的地的数据包需要转发到该地址。

Metric:跳数字段。表示从主机到目的地获得数据报过程中的整个成本。

http://blog.csdn.net/lycb_gz/article/details/1612254

RIP路由协议及工作原理的更多相关文章

  1. RIP路由协议:基础设置/通信练习/兼容问题

    RIP工作原理 首先路由器学习到直连网段 路由器开始运行RIP,当路由器的更新周期30秒到了的时候,会向邻居发送路由表 Metric:度量值,衡量一条路由好坏的值.发送路由表时Metric值会加1 学 ...

  2. LVS-DR工作原理图文详解

    为了阐述方便,我根据官方原理图另外制作了一幅图,如下图所示:VS/DR的体系结构: 我将结合这幅原理图及具体的实例来讲解一下LVS-DR的原理,包括数据包.数据帧的走向和转换过程. 官方的原理说明:D ...

  3. LVS-DR工作原理

    我们都知道LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,其中DR模式意为Direct Routing(直接路由).对于LVS-DR,你到底了解到什么程度?本文通过一个实例场景,详细介绍 ...

  4. DDNS 的工作原理及其在 Linux 上的实现--转

    http://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/index.html DDNS (Dynamic DNS) 扩展了 DNS 将客 ...

  5. LVS集群之工作原理和调度算法(2)

      LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...

  6. lvs、nginx、HAProxy、keepalive工作原理

    1. lvs.nginx.HAProxy.keepalive工作原理 1.1. 前言 遇到了负载均衡和高可用选型问题,我觉的有必要好好理解下lvs,nginx,haproxy和keepalive的区别 ...

  7. CentOS 6.5环境下heartbeat高可用集群的实现及工作原理详解

    Linux HA Cluster高可用服务器集群,所谓的高可用不是主机的高可用,而是服务的高可用. 什么叫高可用:一个服务器down掉的可能性多种多样,任何一个可能坏了都有可能带来风险,而服务器离线通 ...

  8. LVS负载均衡机制之LVS-DR模式工作原理以及简单配置

    本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR:如有汇总不当之处,请各位在评论中多多指出. LVS-DR原理: LVS的英文全称是Linux Virtual Server ...

  9. DHCP及DHCP多作用域服务器工作原理

    一.DHCP服务是什么 DHCP称为动态主机配置协议.DHCP服务允许工作站连接到网络并且自动获取一个IP地址.配置DHCP服务的服务器可以为每一个网络客户提供一个IP地址.子网掩码.缺省网关.一个W ...

随机推荐

  1. CentOS与RedHat的关系

    一.CentOS 与 RedHat 的关系 RedHat 在发行的时候,有两种方式:二进制的发行方式以及源代码的发行方式.无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布.但如果你 ...

  2. lame,把ios录音转换为mp3格式

    在ios设备中进行录音,录音文件的格式为caf.但这种格式在很多设备中没法播放.为了适应终端的播放功能,特将caf转换为mp3格式文件来使用. 在录制caf文件时,需要使用双通道,否则在转换为MP3格 ...

  3. 支付宝对账单下载Java正式商户调用

    package code; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...

  4. Linux系统/boot目录破损无法启动怎么办

    linux系统中的/boot目录存放着系统开机所需要的各种文件,其中包含内核.开机菜单及所需配置文件等等.但是当不小心删除了/boot目录里的某些文件或者干脆整个/boot目录都不见了的情况下,该如何 ...

  5. (原创)拨开迷雾见月明-剖析asio中的proactor模式(二)

    在上一篇博文中我们提到异步请求是从上层开始,一层一层转发到最下面的服务层的对象win_iocp_socket_service,由它将请求转发到操作系统(调用windows api),操作系统处理完异步 ...

  6. (原创)如何使用boost.asio写一个简单的通信程序(二)

    先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...

  7. linux如何查看一个进程的堆栈

    转自:http://blog.csdn.net/nanjingligong/article/details/8624739 方法一:pstack pidNAME       pstack - prin ...

  8. android category

    本章节翻译自<Beginning-Android-4-Application-Development>,如有翻译不当的地方,敬请指出. 原书购买地址http://www.amazon.co ...

  9. Python模块学习——tempfile

    主要有以下几个函数: tempfile.TemporaryFile 如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择.其 ...

  10. nginx源码分析:module机制

    根据nginx官方文档,添加一个module的介绍,当我们需要添加一个module时,需要以下操作: 1.为该module新建一个目录. 2.添加一个config文件,一个module核心代码源文件. ...