目录(?)[+]

 

以下内容摘自最新上市的“四大金刚”图书之一《Cisco路由器配置与管理完全手册》(第二版)(其它三本分别为《Cisco交换机配置与管理完全手册》(第二版)、《H3C交换机配置与管理完全手册》(第二版)和《H3C路由器配置与管理完全手册》(第二版)),目前这四本新书在各大网店中均有销售:http://item.jd.com/11273171.html http://product.dangdang.com/product.aspx?product_id=23270907

8.1.3 RIP路由更新机制

RIP协议有两种更新机制:一是定期更新,二是触发更新。“定期更新”是根据设置的更新计时器定期发送RIP路由通告。该通告报文中携带了除“水平分割”机制抑制的RIP路由之外本地路由器中的所有RIP路由信息。而“触发更新”则是RIP路由器仅在有路由表项发生变化时发送的RIP路由通告,仅携带本地路由表中有变化的路由信息。RIP路由器一旦察觉到网络变化,就尽快甚至是立即发送更新报文,而不等待更新周期结束。只要触发更新的速度足够快,就可以大大地防止“计数到无穷大”的发生,但是这一现象还是有可能发生的。

无论是定期更新,还是触发更新,RIP路由的更新规则如下

l  如果更新的某路由表项在路由表中没有,则直接在路由表中添加该路由表项;

l  如果路由表中已有相同目的网络的路由表项,且来源端口相同,那么无条件根据最新的路由信息更新其路由表;

l  如果路由表中已有相同目的网络的路由表项,但来源端口不同,则要比较它们的度量值,将度量值较小的一个作为自己的路由表项;

l  如果路由表中已有相同目的网络的路由表项,且度量值相等,保留原来的路由表项。

下面主要介绍RIP路由的定期更新机制。

1.RIP路由定期更新机制

RIP路由器总是会每隔30秒(这是默认值,可以修改,而且也可能与设置值有些偏差)通过UDP
520端口以RIP广播应答方式向邻居路由器发送的一个路由更新包,包中包括了本路由器上的完整的路由表(除了被“水平分割”机制抑制的路由表项),用来向邻居路由器提供路由更新,同时用来向邻居路由器证明自己的存在。RIP的路由表中主要包括“目的网络”、“下一跳地址”和“距离”这三个字段,参见图8-3。

如果一个路由器在180秒(这也是默认值,可以修改)内没有收到某个邻居路由器发来的路由更新,则这个路由器就会标记该邻居路由器为不可达路由器,使这个邻居路由器处于抑制周期。当路由器处于抑制周期内,它仍然用于向前转发数据包,但网络中的其它路由器不学习到达该路由器所连网络的路由信息,除非是一条更好的到达该路由器所连网络的路由信息,如本来是3跳,在抑制周期内学到了一条2跳的路由信息。但抑制周期过后,即使是差的路由信息也接受。

如果在连续的240秒(这也是默认值,可以修改)内还没收到这个路由器的路由更新,则本地路由器会在路由表中删除与该邻居路由器相关的路由表项。

由此可见,这个路由更新不仅影响着整个RIP网络中的路由器上最由表的更新和所有需要到达,或者经过该路由器的数据包路由,还影响着其它邻居路由器是否当它存在。试想一下,如果有一个数据包是要发送到连接某个某个RIP路由器的网络的一台主机上,但这台RIP路由器当时恰好出现了故障,没有这个路由器更新机制的话,其它路由器也就不知道它当前出现了故障,仍按原来的路由路径传输数据包,结果当然是数据包总是无法到达目的主机了,尽管可能经过多次尝试。

2.RIP路由定期更新机制解析示例

为了更好地理解RIP协议路由表的更新机制,下面以图8-6所示的简单的互连网络为例来讨论图中各个路由器中的路由表是怎样建立的。

图8-6 RIP路由表建立网络示例

(1)在一开始,所有路由器中的路由表只有自己所直接连接的网络的路由表项信息。但不是RIP路由表项,是直连路由表项,无需下一跳(用“--”表示),度量“距离”也均为0 ,各路由器的初始路由表如图8-7所示,均只有两条直连网络的路由表项。

(2)接下来,各路由器就会按设置的周期(默认为30秒)向邻居路由器发送路由更新了。具体哪个路由器会先发送路由更新,取决于哪个路由器先开了。现假设路由器R2先收到来自路由器R1和R3的路由更新,然后就更新自己的路由表,如图8-8所示。从中可以看出,它新添加了分别通过R1和R3到达10.0.0.0网络和30.0.0.0网络的路由表项,度量值均为1,因为它只经过了一跳。

图8-7 R1、R2和R3的初始路由表

(3)R2更新自己的路由表后,会把完整的路由表发给邻居路由器R1和R3。路由器R1和R3分别再进行更新。根据前面介绍的RIP路由表更新的规则可以知道,R1首先是把从R2上接收到的如果图8-8的路由表中,对每项度量进行加1,得到的路由表如图8-9所示。

  

图8-8  R2在路由更新后的路由表   图8-9  R1对收到的来自R2路由表进行度量加1后形成的路由表

(4)然后R1再把图8-9所示的路由表与自己原来的路由表(图8-6中的左图所示)进行比较,凡是新添加的,和度量值小于等于原来的路由表项均将更新,度量值更大的路由表项将忽略更新。经过行比较发现有两条新的路由表项,其目的网络分别为30.0.0.0和40.0.0.0,直接在路由表中添加。而原来已有的两条10.0.0.0和20.0.0.0表项,发现路由度量(“距离”)值1比原来的0还大,忽略更新,结果就得到R1更新后的路由表,如图8-10所示。

用同样的方法可以得出R3在收到R2路由更新后的路由表如图8-11所示。但RIP路由协议存在一个问题,那就是网络收敛比较慢,当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器,而且中间有许多是无效路由更新。

 

图8-10 R1在收到R2路由更新后的路由表   图8-11 R3在收到R2路由更新后的路由表

仍以图8-6为例,现在三个路由器都已经建立了各自的稳定路由表,假设R1路由器和网1(10.0.0.0)的连接线路断开了。此时R1可以立即发现,并更新自己的路由表,将到10.0.0.0的路由表项距离改为16(即不可达),并在30秒后将此路由更新信息发给R2。但是,R2从R3得到的路由更新是“经过R2到达10.0.0.0网络的距离为2”,明显度量值更小,于是R2将此路由表项更新为“经过R3到达10.0.0.0的距离为3”,然后再通过路由更新发给R3,此时R3的路由表中更新为“经过R2到达10.0.0.0网络的距离为4”。R3再通过路由更新发给R2信息,结果是““经过R3到达10.0.0.0网络的距离为5””,一直如此反复,直到该路由表项的距离达到16,R2和R3才知道10.0.0.0网络是不可达的。

为了解决这一不足,产生了水平分割技术,就是同一路由表项更新不再从接收该路由表项的接口发送出去,具体将在本章后面介绍。下面再具体介绍RIP路由的收敛机制。

(转)示例化讲解RIP路由更新机制的更多相关文章

  1. HCNA Routing&Switching之RIP防环机制

    前文我们了解了RIP的基础概念.RIP的特点.RIP报文格式.RIP度量以及RIP配置认证等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/150085 ...

  2. CCNA的RIP路由学习

    rip(routing infomation protocol,路由信息协议) ,是一个纯粹的距离矢量路由选择协议,RIP每隔30s就将自己完整的路由选择表从所有激活的接口上送出.RIP只将跳计数作为 ...

  3. quick-cocos2d-x的热更新机制实现

    quick-cocos2d-x的热更新机制实现 0 依赖 这里说的热更新,指的是客户端的更新. 大致的流程是,客户端在启动后访问更新api,根据更新api的反馈,下载更新资源,然后使用新的资源启动客户 ...

  4. ospf的路由更新和撤销总结

    首先ospf 的报文有:hello报文,主要作用ospf 邻居建立及维护.dd报文,主要作用主从选举,序列号主从的确认,mtu的协商(可选).lsr 报文,主要作用向邻居请求lsa.lsu报文,主要作 ...

  5. Hibernate Validation使用示例及讲解

    Hibernate Validation使用示例及讲解 时间 -- :: ITeye-博客 原文 http://wdmcygah.iteye.com/blog/2174680 主题 Java 在项目开 ...

  6. 左右JAVA示例代码事件分发和监督机制来实现-绝对原创有用

    文章标题:左右JAVA示例代码事件分发和监督机制来实现 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy201 ...

  7. quagga源码学习--BGP协议路由更新

    BGP的核心就是交换路由,所以关键的部分还是在路由的更新与撤销上面,这之间包含了冗长的属性,community等等处理过程,不做详述. bgp_read函数是路由更新的事件处理函数,在收到BGP_MS ...

  8. 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  9. zookeeper 节点启动时的更新机制

    使用zk的应用节点和zk数据本身的同步,当系统启动时使用zk配置的信息和zk本身存储不一致, 此时应存在一个更新机制将应用配置数据和zk数据更新一致. 启动时更新拉取zk配置中心的更新本地数据,以zk ...

随机推荐

  1. 使用SQL Server 发送邮件

    在很多数据分析和集成的场景下,我们需要了解数据库中关键的脚本或者job的执行情况.这个时候邮件提醒是一种比较不错的通知方式.本文从零开始,一步一步的介绍如何使用SQL Server来发送邮件. 环境: ...

  2. Django中的枚举类型

    一.枚举类型示例 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等.Python 的原生类型(Built-in types)里并没有专门的枚举类型 ...

  3. python编写知乎爬虫实践

    爬虫的基本流程 网络爬虫的基本工作流程如下: 首先选取一部分精心挑选的种子URL 将种子URL加入任务队列 从待抓取URL队列中取出待抓取的URL,解析DNS,并且得到主机的ip,并将URL对应的网页 ...

  4. redis bitcount variable-precision swar算法

    花了不到一周的时间看完了一本reids设计与实现的书,感觉整体的设计有些地方的确很巧妙,各个结构之间联系的非常紧密,但是很简单,逻辑性的没有太多,但是学到了一个bitcount计数1的方法比较巧妙,记 ...

  5. iOS-swift-协议和拓展

    1 协议(protocol) 使用关键字 protocol 创建协议. protocol ExampleProtocol { var simpleDescription: String { get } ...

  6. JAVAEE——spring01:介绍、搭建、概念、配置详解、属性注入和应用到项目

    一.spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还 ...

  7. 如何将mysql数据导入Hadoop之Sqoop安装

    Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle , ...

  8. Linux 中最常用的目录及文件管理命令

    一.查看文件的命令 对于一个文本文件,在linux中有多种查看方式来获知文件内容,如直接显示整个文本内容.分页查看内容.或者只查看文件开头或末尾的部分内容.在linux可以用不同的命令来实现. 1. ...

  9. PHP提取字符串中的所有汉字

    <?php $str = 'aiezu.com 爱E族, baidu.com 百度'; preg_match_all("#[\x{4e00}-\x{9fa5}]#u", $s ...

  10. Visual Studio Debugger中七个鲜为人知的小功能

    Visual Studio debugger是一个很棒的调试工具,可以帮助程序猿们快速地发现和解决问题.这里给大家简单介绍一下VS调试工具中的七个鲜为人知的小功能. 1.    一键跳转到指定语句 调 ...