当前位置: 首页 > news >正文

示例化讲解RIP路由更新机制

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


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所示的简单的互连网络为例来讨论图中各个路由器中的路由表是怎样建立的。

10659021_1375057045DK83.jpg

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

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

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

10659021_13750570647Wc9.jpg

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

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

10659021_1375057085Lz5Y.jpg10659021_13750570988iT8.jpg

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

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

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

10659021_1375057114ll7n.jpg10659021_1375057161xGHh.jpg

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

     仍以图8-6为例,现在三个路由器都已经建立了各自的稳定路由表,假设R1路由器和网110.0.0.0)的连接线路断开了。此时R1可以立即发现,并更新自己的路由表,将到10.0.0.0的路由表项距离改为16(即不可达),并在30秒后将此路由更新信息发给R2。但是,R2R3得到的路由更新是“经过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””,一直如此反复,直到该路由表项的距离达到16R2R3才知道10.0.0.0网络是不可达的。

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

本文转自王达博客51CTO博客,原文链接http://blog.51cto.com/winda/1260108如需转载请自行联系原作者


茶乡浪子

相关文章:

  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • Apache Spark Streaming 使用实例
  • GUI鼠标相关设置
  • NS3编译运行
  • webx学习总结
  • C语言如何跨文件调用函数定义中声明的变量
  • 思科网真应用解决方案
  • 使用Spring+MySql实现读写分离(一)关于windows下安装mysql5.6
  • android检测当前网络是否可用
  • 查询mssql的死锁语句
  • PBR基于策略的路由
  • linux光盘镜像更换kernel,定制ks自动安装
  • C# System.Windows.Forms.WebBrowser中判断浏览器内核和版本
  • 3、python自动化运维——定制业务质量报表
  • ***详解账号泄露:全球约1亿用户已泄露
  • Apache的80端口被占用以及访问时报错403
  • Git的一些常用操作
  • HTML中设置input等文本框为不可操作
  • LeetCode算法系列_0891_子序列宽度之和
  • Nacos系列:Nacos的Java SDK使用
  • PHP的Ev教程三(Periodic watcher)
  • Python 反序列化安全问题(二)
  • Vim Clutch | 面向脚踏板编程……
  • 彻底搞懂浏览器Event-loop
  • 解析 Webpack中import、require、按需加载的执行过程
  • 应用生命周期终极 DevOps 工具包
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Python 之网络式编程
  • ​ssh免密码登录设置及问题总结
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (2022 CVPR) Unbiased Teacher v2
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (办公)springboot配置aop处理请求.
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (三)模仿学习-Action数据的模仿
  • (万字长文)Spring的核心知识尽揽其中
  • (转)c++ std::pair 与 std::make
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • ***原理与防范
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .form文件_SSM框架文件上传篇
  • .net的socket示例
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET使用存储过程实现对数据库的增删改查
  • .NET项目中存在多个web.config文件时的加载顺序
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [CISCN2019 华东北赛区]Web2
  • [hive]中的字段的数据类型有哪些