尧图精选

RIP动态路由详解:距离矢量原理、防环机制与实验配置

🕒 发布时间:2026/10/2 14:22:55 📁 来源:尧图网络
刚接触网络的时候我干过一件蠢事办公室里串了三台路由器每台后面挂着两个网段我那会儿一条一条敲静态路由敲得还挺开心觉得路由表是自己的杰作。结果没过两周中间一条链路老化闪断我跑到机房一查流量全断了——因为静态路由不会自己坦白你写的那条下一跳路由还躺在路由表里装死直到下一跳不可达才知道出事了。从那以后我老老实实补了动态路由的课学的第一个协议就是 RIP。今天这篇文章就围绕动态路由里的 RIP 展开从工作原理、防环机制到 Cisco 和华为设备上的实操配置再到我这些年踩过的坑一次讲透。如果你正在备考网络认证、刚接手一张小网络或者只是想把距离矢量这个概念彻底弄明白这篇应该能帮上忙。1. 项目概述与核心需求解析1.1 先澄清一个概念网络动态路由不是前端路由搜索动态路由的时候你会发现大量结果来自前端圈子什么 Vue 动态路由、权限路由、菜单路由生成那是根据用户角色动态注册页面路由的事跟网络层的路由八竿子打不着。网络里的动态路由指的是路由器之间通过协议自动交换可达性信息自己算出一条去往远端网段的路。两者重名但解决的问题完全不同前端关心页面跳转和权限网络关心数据包怎么从 A 设备走到 B 设备。这篇文章只聊后者也就是网络层的动态路由协议 RIP。这个区分不是抬杠而是真有人搞混过。项目标题里同时出现动态路由和RIP大概率是指网络领域的 Routing Information Protocol。所以我先把方向钉死后面所有内容都基于这个语境。1.2 RIP 到底是什么、能解决什么问题RIP 全称 Routing Information Protocol路由信息协议诞生于上世纪八十年代是互联网早期就开始使用的动态路由协议属于距离矢量Distance Vector家族。它的核心行为很朴素每台路由器定期把自己的完整路由表打包通过 UDP 520 端口发给邻居邻居收到后在自己的路由表里把到达各个目的网段的路径加一跳再转发给下一批邻居。就这么一轮一轮地传话整个网络里每台路由器最终都知道去往每个网段该往哪个方向走。它解决的痛点就是我在开头说的静态路由困境。静态路由是你手工告诉路由器去 192.168.10.0/24 走 10.0.0.2链路断了它也不改动态路由则是路由器之间互相通知某条路径失效后经过一段收敛时间全网会自动换路。对于几十台设备以内、拓扑变化不频繁的小型网络RIP 够用且简单到让人感动——配置就两三条命令不依赖复杂的区域划分没有花里胡哨的数据库逻辑一眼到底。1.3 哪些场景还在用 RIP哪些人适合读这篇别被老字吓到RIP 至今没有彻底退场。很多企业内部的小型分支网络、部分老旧设备改造前的存量环境、物联网网关之间的互联甚至一些实验室测试网络里RIP 依然是活着的协议。它也是 Cisco CCNA、华为 HCIA 等认证课程里距离矢量协议的典型教材因为理解了 RIP你就理解了路由环路、水平分割、毒性反转这些概念后续学 OSPF、EIGRP 会轻松很多。适合读这篇的人我大致分三类一是刚学网络的小白需要把动态路由概念落地二是要考试、背配置命令的考生需要一个完整的实验案例作参照三是工作中偶尔要维护老网络想知道 RIP 出问题时怎么定位的工程师。我不会堆一堆教科书理论每部分都会尽量带上实际操作的体会和排错记录。2. 动态路由与 RIP 的核心原理拆解2.1 为什么动态路由必要静态路由的三宗罪静态路由不是没有优点它不占带宽、不耗 CPU、确定性极强安全上也比动态协议可控。但在一个稍复杂的网络里它有三宗罪第一配置量大。每台路由器上每个远端网段都要手工写一条设备一多、网段一多工作量指数上升而且极容易笔误写错下一跳。第二无法感知拓扑变化。链路断了静态路由不会自动切换到备用路径需要管理员手工干预或者借助其他机制配合。第三对网络管理员要求高。你必须对整个网络拓扑了如指掌才能正确规划静态路由。而动态路由协议的理想状态是你只告诉路由器接口上都跑 RIP它自己就能发现邻居、交换信息、算出路由。代价是协议本身要消耗带宽和计算资源但它换来的是自动化和自愈能力。RIP 就是把这个代价压到极低的方案低到几乎可以忽略不计。2.2 距离矢量算法路由靠听说距离矢量这个词拆开就是距离加方向。每台路由器不掌握全网完整地图它只知道自己到每个目的地的距离多少跳以及应该把包交给哪个邻居方向。所以这种算法有一个很形象的外号routing by rumor路由靠传言。具体的计算模型是贝尔曼-福特算法。一句话概括如果邻居告诉你它到某个网段距离是 N 跳那你就认为自己经过这个邻居到达该网段的距离是 N1 跳。假如同时有好几个邻居都说了那就取最小值也就是最优路径。这就是距离矢量。这里有个关键点路由器转发给邻居的不是路径的详细描述而是能到达哪些网段 各自跳数的结果。至于这些网段在这条路径上经过了哪些路由器当前路由器并不完全清楚它只信任邻居给出的数字。这种信任模型简单高效但也为后面路由环路的产生埋下了伏笔。2.3 跳数度量与 15 跳天花板RIP 的度量标准是跃点计数也就是跳数。每经过一台路由器跳数加 1。到达目的网段的跳数越小路径越优。这个度量只用了一个维度的信息不考虑带宽、延迟、负载所以在 RIP 眼里一条 56K 拨号链路和一条万兆光纤只要跳数相同地位就完全一样。这在设计上就是有意的取舍保持极简。极简的代价就是那面著名的15 跳墙。RIP 规定跳数达到 16 就视为不可达等于无穷大。换句话说一个数据包在网络里最多穿越 15 台运行 RIP 的路由器再远就找不到路了。这也天然限制了 RIP 只能用在中小型网络。设计这个上限本身是为了解决计数到无穷的问题——环路存在时跳数会一直累加总得有个天花板让它停下来16 就是这个天花板。2.4 RIPv1 和 RIPv2 到底差在哪RIP 有两大版本很多人配置时栽跟头就是栽在版本差异上。RIPv1 是 1988 年随 RFC 1058 发布的属于有类别路由协议报文里不携带子网掩码直接用广播地址 255.255.255.255 发送并且默认开启自动汇总。这意味着它不支持可变长子网掩码和 CIDR一旦你的网络里划分了不连续的子网RIPv1 就会出问题。RIPv2 则是 RFC 2453 定义的支持无类别路由报文中携带子网掩码支持 CIDR 汇总更新地址改成了组播 224.0.0.9并且增加了明文和 MD5 认证能防止恶意或误配置的路由器注入假路由。还是同一个距离矢量算法但实用性和安全性提升了一个档次。实际项目中除非遇到只支持 v1 的远古设备否则一律建议启用 RIPv2并关闭自动汇总。我后面所有配置也都会基于 v2 展开。RIPv2 在兼容模式下能接收 v1 的更新但反过来 v1 设备收不到 v2 的组播报文混跑版本经常导致路由学不全这一点排错时一定要先想到。2.5 三大计时器与收敛慢的原罪RIP 的周期性行为靠一套计时器驱动理解这套计时器你才能解释为什么 RIP 收敛这么慢。更新计时器Update默认 30 秒。每台运行 RIP 的路由器每隔 30 秒周期性地把路由表发出去。为了避免全网设备同时发包造成拥塞实际发送时刻会加一个小的随机抖动但考试和调试时你就按 30 秒记。失效计时器Invalid默认 180 秒。如果一条路由连续 180 秒没有收到更新就标记为可能失效。注意这里只是标记路由可能还在路由表里。抑制计时器Hold-down默认 180 秒。一旦路由被标记失效或者收到更差的度量值进入抑制状态在此期间即使收到更好的路由也暂时不接受防止抖动导致的路由震荡。刷新计时器Flush默认 240 秒。如果失效路由在 240 秒内仍然没有收到有效更新就从路由表里彻底删除。把这几个数字串起来你就能算出一条路由真正从链路断了到全网删除最长可能要三到四分钟。这在今天的网络里几乎不可接受也是 RIP 被边缘化的核心原因。但理解这个过程对学习更复杂的协议很有价值因为任何动态路由协议本质上都是在发现快和防抖稳之间找平衡RIP 选择了极端的简单和极端的小心翼翼。3. 环路是怎么形成的RIP 靠什么保命3.1 从计数到无穷说起路由环路是距离矢量协议最怕的问题。设想一个最简单的场景路由器 A 和 B 之间有一条链路B 通过这条链路从 A 学到去往某个网段的路由。某天链路断了A 发现自己这边到该网段不可达但它还没来得及通知 BB 却按照 30 秒一次的周期把自己的路由表发了过来里面赫然写着该网段距离 1 跳。A 一看哦原来还有路通过 B 去2 跳。然后 A 再把这条路由通告回去B 一算通过 A 去是 3 跳。于是两个路由器互相鼓励谁来都不肯删这条路由跳数一路飙升这就是经典的计数到无穷问题。如果没有上限这个数字会永远增长。有了 15 跳天花板它最多增长到 16被判定为不可达环路才慢慢消除。但问题是这个过程可能非常慢因为要等 30 秒更新周期一轮一轮地叠加。真实网络里光靠跳数上限去等环路消失是让人抓狂的体验。所以 RIP 设计了一套组合拳来预防和抑制环路。3.2 水平分割与毒性反转第一招是水平分割Split Horizon规则就一句话从哪个接口学到的路由绝对不要从这个接口再通告回去。还是上面的场景B 从 A 学到了目标网段那么 B 就不会再把这个路由通告回 A。这样 A 就收不到 B 那份虚假的鼓励链路断了以后A 只能老老实实把路由删掉环路从源头被掐断。第二招是毒性反转Poison Reverse它是水平分割的一个变种。规则是从接口 X 学到的路由往接口 X 通告时不是不说而是直接通告成跳数 16也就是不可达等于明确告诉邻居这条路没了。这比单纯沉默更主动因为沉默在有些实现中会被误解为这条路还是好的只是我没说而明确的16 跳是一份清晰的路由毒化通告。我在实验里验证过两者的效果差异。纯水平分割时断链后邻居靠失效计时器慢慢删路由启用毒性反转后收到毒化通告的邻居几乎立刻就能把对应路由标记为不可达收敛速度快了一截。所以在多数支持 RIP 的设备上默认就启用了水平分割毒性反转也建议打开。3.3 抑制计时器与触发更新第三招是抑制计时器Hold-down。当路由器收到一条路由的更新发现度量值比自己现有记录更差或者路由被标记失效它就会进入抑制状态。在抑制期间即使来了一个貌似更好的替代路由它也不急着更新。这么做是为了防止网络上已经发生环路时新接收的好路由其实是过期的坏消息从而造成路由表的来回震荡。第四招是触发更新Triggered Update。平时 RIP 是 30 秒周期更新但一旦检测到拓扑变化比如某条链路 down 了路由器不等下一个周期立刻主动向所有邻居发送更新。这相当于把坏消息第一时间广播出去让全网尽早开始收敛。触发更新和抑制计时器配合是 RIP 对抗慢收敛的重要武器。3.4 这些防环机制怎么协作单独看每一招都有盲区。水平分割防住了从哪来回哪去的环路但如果网络拓扑超过三台设备环路可能绕一圈从另一条路径回来水平分割就管不住了。这时抑制计时器兜底让路由器在怀疑期里保持冷静。毒性反转和触发更新则是把信息传递的速度提上来缩短坏消息抵达全网的时间。把这四招看成一套纵深防御水平分割负责预防最常见的双向环路毒性反转负责主动声明故障触发更新负责加速传播抑制计时器负责抑制震荡。理解这个组合思路比死记概念更有用。因为这套思路在 OSPF、EIGRP 里以不同形式依然存在比如 EIGRP 的 DUAL 算法就是为了更彻底地消除环路而设计的。4. 实操配置三台路由器带你跑通 RIP4.1 实验拓扑与 IP 规划纸上谈兵没什么意思我们直接上手。我用三台路由器组成一个链状拓扑模拟小企业两个站点加一个核心节点的场景。设备型号不影响配置逻辑Cisco 的 iosv 或华为的 AR 系列都可以关键在于理解命令背后的意图。规划如下R1 的 G0/0 接口10.0.12.1/30连接 R2G0/1 接口192.168.1.1/24模拟办公网段 A。R2 的 G0/0 接口10.0.12.2/30连接 R1G0/1 接口10.0.23.2/30连接 R3。R3 的 G0/0 接口10.0.23.3/30连接 R2G0/1 接口192.168.3.1/24模拟办公网段 B。我故意让办公网段分布在链型拓扑两端中间用公网风格的地址互连这种不连续子网结构最能暴露 RIP 自动汇总的问题非常适合演示。前期的接口 IP 配置大家都会我直接从进入路由进程开始讲。先说明所有配置前请确认接口 IP 和 up 状态没问题否则 RIP 配了也是白配。4.2 Cisco IOS 下的配置流程Cisco 路由器上进入全局配置模式启用 RIP 的完整命令如下R1(config)# router rip R1(config-router)# version 2 R1(config-router)# no auto-summary R1(config-router)# network 10.0.0.0 R1(config-router)# network 192.168.1.0 R1(config-router)# passive-interface g0/1 R1(config-router)# exit逐条解释一下意图。version 2明确启用 RIPv2避免默认的兼容模式带来不确定行为。no auto-summary关闭自动汇总这样 192.168.1.0/24 就不会被汇总成 192.168.0.0/16 广播给邻居——在 RIPv2 下默认其实是关闭的但显式写出来能防止你在某些特殊配置组合下被坑。network命令是配置 RIP 最关键也最容易误解的一步。它后面跟的是网络号作用是匹配本路由器上所有接口地址属于该网络范围的接口在这些接口上启动 RIP。注意 Cisco 的 network 命令匹配的是有类网络边界你写network 10.0.0.0那么所有 10.x.x.x 的接口都会启用 RIP你写network 192.168.1.0匹配的就是这个子网范围。它不是告诉你我要通告这个网段吗其实也对——凡是被通告的网段必然是你启用了 RIP 的接口所在的网段。passive-interface g0/1把连接办公网段的接口设置为被动模式。被动接口只接收路由、不发送路由更新也不会和其他路由器建立邻居关系。这个操作是为了防止 RIP 的组播报文白白送到交换机下面的终端设备既浪费带宽又让用户终端莫名其妙收到路由更新引发安全风险。R2、R3 的配置类似把对应的直连网段写进去即可R2(config)# router rip R2(config-router)# version 2 R2(config-router)# no auto-summary R2(config-router)# network 10.0.0.0 R2(config-router)# exitR2 两边接口都属于 10.0.0.0 这个大网段所以一条network 10.0.0.0就覆盖了两个参与 RIP 的接口。R3 则和 R1 一样R3(config)# router rip R3(config-router)# version 2 R3(config-router)# no auto-summary R3(config-router)# network 10.0.0.0 R3(config-router)# network 192.168.3.0 R3(config-router)# passive-interface g0/1 R3(config-router)# exit4.3 华为 VRP 下的配置对比华为设备的命令风格和 Cisco 有明显差异但思路一致。华为进入华为的 VRP 系统后配置 RIP 的命令如下[R1] rip [R1-rip-1] version 2 [R1-rip-1] network 10.0.0.0 [R1-rip-1] network 192.168.1.0 [R1-rip-1] silent-interface GigabitEthernet0/0/1 [R1-rip-1] quit几个差异点要注意。华为的rip命令后面默认跟进程号单进程时通常就是 1Cisco 不显式写进程号。华为的network命令同样匹配接口地址范围但它不像 Cisco 那样严格按有类边界理解写network 10.0.0.0会匹配所有 10.0.0.0/8 范围内的接口。被动接口在华为里叫silent-interface作用一样但思科里你写接口名华为里要写完整的接口类型加接口编号。华为没有显式的no auto-summary因为华为 RIPv2 默认就不做自动汇总这一点省事。但如果你在旧版本或者特殊配置里看到诡异的汇总现象仍然要查一下 display rip 里的汇总配置项。4.4 路由验证怎么确认协议真的跑起来了配置完成后别忘了验证。很多人配完不看状态就走结果排错排到怀疑人生。Cisco 这边我建议依次运行这几条命令show ip protocols show ip rip database show ip route rip debug ip ripshow ip protocols能看到全局 RIP 配置版本号、三个计时器的当前值、启用了 RIP 的接口列表、被动接口列表。这是排错的第一站。show ip rip database显示的是 RIP 从邻居学到的路由数据库注意它和路由表还不完全一样数据库里的路由经过度量比较后才会被安装进路由表。show ip route rip直接过滤出路由表里来自 RIP 的路由最直观。debug ip rip则是实时打印路由更新的收发情况能看到报文来自哪个接口、携带哪些网段和度量值这是定位为什么学不到路由的杀手锏。华为端对应的命令分别是display rip 1、display rip 1 route、display ip routing-table protocol rip和debugging rip 1。验证的时机也很讲究因为 RIP 是 30 秒周期更新建议配置后等待一分钟左右再看路由表。如果三台设备都配置正确你会看到 R1 的路由表里出现去往 192.168.3.0/24 的路由来源是 RIP度量值是 2 跳——从 R1 到 R3 中间隔了 R2两跳这是符合预期的。5. 常见问题与排查技巧实录5.1 版本不匹配导致路由学不到我见过最多的问题就是实验网络里一台设备默认用 RIPv1另一台配了 RIPv2结果两边都显示 RIP 在运行但建立不了正常的信息交换。原因很简单v1 用广播 255.255.255.255 发送v2 用组播 224.0.0.9 发送v1 路由器根本不理会组播报文而 v2 路由器在默认兼容模式下虽然能接收广播但版本差异还是会造成行为混乱。排查的时候先看show ip protocols确认每台设备实际运行的版本。如果发现不一致统一改成 RIPv2并确认所有设备都配了version 2。这里有个实操心得即使全部用 v2有些型号设备在接口模式下还会存在ip rip send version 1之类的老配置残留所以show running-config里也要扫一眼接口下的 RIP 配置。我建议把版本一致性列为 RIP 排错的默认第一项检查。5.2 不连续子网与自动汇总的坑第二个高频坑就是自动汇总导致的路由假象。场景就是我 4.1 节设计的拓扑办公网段 192.168.1.0/24 和 192.168.3.0/24 被中间的 10.0.0.0 网段隔开这就是不连续子网。如果 RIPv1 或启用了自动汇总的 RIPv2 在运行R1 会把 192.168.1.0/24 汇总成 192.168.0.0/16 传给 R2R3 也会把 192.168.3.0/24 汇总成同样的 192.168.0.0/16 传回。R2 收到两条都是到 192.168.0.0/16的路由度量值还一样等价的它就会随机选一条转发导致发往 R1 网段的流量可能被送到 R3全网出现严重的次优路径甚至黑洞。解决方法是保证 RIPv2 下执行no auto-summary。配置完以后用show ip route看路由表确认出现的是 192.168.1.0/24 和 192.168.3.0/24 这样的明细路由而不是被汇总成 192.168.0.0/16。这个坑特别隐蔽因为路由表现象上有路由但路由是错的不实测流量根本发现不了。我自己的习惯是凡是用了 RIPv2 的场合no auto-summary必须写否则不做后续排错。5.3 被动接口别让 RIP 报文广播到主机侧第三个问题看似不是故障但属于隐患。有些人配 RIP 时图省事把所有接口都启用了 RIP结果用户终端所在的交换机接口收到一堆组播路由更新。终端网卡看到这些报文会直接丢弃表面上没故障但实际上浪费了带宽而且理论上恶意终端还能监听甚至伪造 RIP 报文影响路由表风险不小。正确做法就是我在配置里演示的 passive-interface / silent-interface只在设备互连的接口上参与 RIP面向终端的接口全部沉默。验证时show ip protocols里会列出被动接口确认它不在主动发送更新的列表里就算到位。这里还有个附加技巧对于 RIPv1 这种广播型协议被动接口也顺带避免了广播风暴放大器的问题对老设备尤其友好。5.4 路由环路的实际排查思路万一你在实验里真的制造出了环路比如故障注入导致水平分割失效怎么定位我的排查顺序是这样的先show ip route看目标网段路由的下一跳是否在物理拓扑上绕圈然后traceroute看数据包的实际转发路径如果发现包在几台设备之间来回跳且不断循环那基本就是路由环路。接着从show ip protocols确认水平分割状态从debug ip rip看更新报文的传播方向找出是哪台设备把路由通告回来源接口。修复的方法并不复杂确保水平分割和毒性反转开启必要时用 access-list 结合 RIP 的 distribute-list 过滤异常的路由通告。但在生产网络里我更推荐直接上show logging很多设备的 RIP 状态变化和环路警告会记录在日志里。这套排查思路并非 RIP 专属你以后用 OSPF 遇到路由震荡流程基本上是相通的。5.5 常见问题速查表把上面的实战问题汇总成一张表方便大家直接对着查现象可能原因验证命令解决方案路由学不到或学不全RIP 版本不一致show ip protocols全网统一 version 2明细路由变成汇总路由自动汇总未关闭show ip route执行 no auto-summary终端侧收到路由更新未配置被动接口show ip protocols接口设为 passive / silent路由在设备间来回震荡水平分割未生效debug ip rip确认默认配置必要时手动关闭再开启断链后路由删除极慢计时器未收敛show ip protocols检查抑制计时器必要时调整参数邻接设备收不到任何报文network 命令漏配接口show ip protocols确认 network 覆盖所有互连接口这种速查表放在手边比临时翻手册好用得多。我用这张表帮同事解决过好几回RIP 学不到路由的问题基本都是前三行列的情况。6. 聊聊 RIP 的现状与我的实操体会写了这么多最后说点掏心窝的话。RIP 作为动态路由协议确实老了收敛慢、度量单一、15 跳限制任何一条都让它很难在现代大中型网络里挑大梁。我现在的生产项目里主路由协议基本是 OSPF 和 BGPRIP 更多出现在老旧网络的维护清单和教学实验台上。但如果你问我值不值得学我的答案非常明确值得而且最好是认真学。RIP 是距离矢量协议的样板间贝尔曼-福特算法、水平分割、毒性反转、抑制计时器、计数到无穷这些概念在 RIP 里以最朴素的形式出现理解了它们再看 OSPF 的 SPF 算法、EIGRP 的 DUAL 算法你会知道它们在解决什么问题、为什么那样设计。很多工程师一说动态路由就直接上 OSPF遇到环路和收敛问题却讲不清原理就是因为跳过了距离矢量这一课。我个人的实操习惯是凡是实验性质的网络、临时互联的测试环境只要设备不多、拓扑简单我仍然愿意用 RIPv2 快速打通。两条 network 命令搞定比搭 OSPF 的区域和进程快得多。当然前提是记得关自动汇总、记得配被动接口、记得统一版本——这三件事做好了RIP 在它适用的半径内其实相当皮实。如果你刚配完 RIP 发现路由表空空的先别怀疑协议难度按我第 5 节的排查顺序走一遍八成是版本或者 network 命令的问题。等哪天真到了生产网络需要挑大梁的场合你会感谢自己当年把 RIP 这个老古董的每一个细节都啃明白了。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →