静态路由把人烦疯之后为什么还会回头研究RIP我最早接触RIP是被逼的。那时候帮一家公司维护一个二十几台设备的办公网络总部加三个分支机构用的还是老一套华为和思科混搭的设备。一开始图省事全上静态路由一条一条配配完还要写文档记录生怕哪天下班之后某个维护兄弟改错了网段。结果后来真的出事了一条专线半夜闪断备用链路带过来的网段没写静态路由第二天早上一堆人上不了内网OA。我凌晨三点爬起来查路由表那一刻脑子里只有一个念头——要是当初用了动态路由根本不需要我动手。从那之后我重新把学习重心放回动态路由协议上而这一切的起点正是很多人嫌它老土的RIP。RIP全称Routing Information Protocol路由信息协议是目前公认的使用最广泛、历史最久的动态路由协议之一。虽然现在生产环境里OSPF和BGP才是主角但RIP在入门学习、小型网络和兼容老旧设备这些场景下依然有一整套值得吃透的逻辑。这篇文章我就把自己从配静态路由翻车到系统学完RIP、再回到生产环境用它解决实际问题的完整思路写下来里面包含命令、机制、坑点和选型判断希望对正在从静态路由往动态路由过渡的同行有点用。1. 静态路由把人难住之后RIP解决的是哪一层的痛点1.1 动态路由真正解决的问题不是少敲几条命令很多人觉得动态路由就是替代手敲静态路由省事而已。这个理解太浅了。静态路由最大的问题不是配置量而是它不具备感知网络变化的能力。链路断开、设备重启、路径拥塞静态路由表不会自己更新你必须人为判断哪里出了故障、该把流量引到哪条备份链路上再手动修改配置。如果是几条链路还好一旦网段数量上去这个脑力负担会非常重。RIP这类动态路由协议做的事情本质上是把路由表的维护和收敛从人脑转移到了路由器之间的协作上。每一台运行RIP的路由器周期性把自己已知的路由信息通告给邻居同时接收邻居的通告然后根据某种度量标准metric决定把哪条路由放进路由表。链路断了、邻居路由消失了这种变化会被协议自动感知并在一定时间内完成全网路由表的重新收敛。这里要说清楚RIP追求的从来不是最优路径而是够用且能自愈。它不像OSPF那样通过复杂的SPF算法计算最短路径树而是采用最简单直接的思路——用跳数hop count衡量路径长短选跳数最少的那条路。1.2 RIP在网络工程师学习路径里的准确定位RIP在网络技术体系里的地位有点像汽车驾驶里的手动挡。你说现在自动挡都普及了手动挡还有什么用但你要考驾照、要理解变速箱和发动机配合的逻辑手动挡就是最好的教学工具。RIP是距离矢量协议的代表理解了RIP你后面学EIGRP、BGP都会轻松很多因为这几个协议在路由通告、度量计算、防环机制这些层面思路是一脉相承的。另外一点很实际在很多老旧网络、教育实验网、某些工业生产内网里RIP并没有完全退休。我遇到过一些还在稳定运行的老设备它们支持的动态路由协议里只有RIP最可靠其余协议因为设备代码太老反而容易出兼容性bug。这时候懂RIP就变成了一个能解决实际问题的技能而不是书本上的概念。1.3 RIP能干什么、不能干什么先摆清楚一个协议学了半天最怕不知道它的边界。RIP的边界非常清晰适合小型网络直径最多跳数被限制在15跳以内第16跳视为不可达配置简单没有复杂的区域、邻居关系、DR/BDR选举这些概念收敛慢依赖周期性更新和超时计时器通常需要几十秒到几分钟才能完成全网收敛不适合高可靠性核心网如果链路越多、越复杂RIP的更新开销和收敛慢的问题会被放大我见过有人拿RIP去跑一个几百台设备的大网结果路由表震荡不断链路切换半天都缓不过来最后不得不全网迁到OSPF。这就是没搞清楚协议边界导致的——工具没选对不是工具本身不行。2. RIP核心机制拆解距离矢量、跳数与防环自救的完整逻辑2.1 距离矢量算法的本质把我不知道的路变成我听邻居说的路RIP用的是距离矢量Distance Vector算法这个名字很多人背过但真正理解的不多。我用一句话概括每台路由器不掌握全网的拓扑图它只知道我要去某个网段该往哪个邻居方向走经过多少跳。类比一下就像你在一个陌生的城市问路。你不需要知道整座城市的街道地图你只需要知道遇到路口往左还是往右、大概再走几个路口能到。每个你遇到的本地人邻居路由器告诉你他那边的情况你就组合出了一个方向他们也在向你打听去其他地方的路。这就是距离矢量——信息全靠邻居间的口口相传而不是自己绘制全图。RIP通告的内容很简单目标网段前缀掩码、metric到达该网段的跳数、下一跳通常是通告者的接口地址。收到通告后路由器会检查这个网段是否在路由表里如果不在加入路由表metric收到的跳数1如果在且新metric更小替换为更优路径如果在且新metric相同或更大但通告者正好是现有路径的下一跳则以新metric为准更新防止链路变化后还沿用旧信息这套逻辑单独看很容易理解但麻烦在于口口相传会带来一个经典问题如果某个网段断了信息在邻居间传着传着会不会永远找不到尽头这正是RIP设计的精彩之处也是它后续各种机制要解决的核心矛盾。2.2 跳数上限15和计数到无穷RIP最著名的两个数字RIP规定一条路由的metric取值范围是1到1516代表不可达。也就是说一个数据包在网络里最多经过15台路由器中转超过这个数字就被认为目的不可达。为什么是这个数字从工程角度看这是为了限制信息传播环路带来的无限循环问题。如果不设上限假设一条路由在R1和R2之间互相通告、形成环路metric就会不断增加R1告诉你这条路由是5跳R2告诉你是6跳R1再告诉你是7跳……永远没有尽头这就是计数到无穷Count to Infinity问题。RIP的解法很朴素把16定为无穷大一旦metric增长到16就判定路由不可达从路由表中删除。这种设计带来两个后果第一网络规模被死死限制在15跳内所以RIP天然与大规模网络无缘第二在没有额外防环机制的情况下当一个真实链路断开后路由信息还是会在环路上来回倒腾很多轮直到metric增加到16才彻底消除这个过程需要很长时间——往往是几十秒到几分钟这就是收敛慢的根源之一。2.3 四大防环机制记住它们等于看透了RIP的一半既然距离矢量协议天生有环路的毛病RIP就得靠外部机制打补丁。这四个机制我在实际项目中都分别遇到过对应的坑逐一说明水平分割Split Horizon从某个接口学习到的路由不再从该接口回通告给同一个邻居。这个规则堵住了最常见的两人环形拓扑A告诉B有一条路B不会把这条路再原封不动告诉A。因为A本来就知道这条路你再说回去没有意义反而可能形成错误环路。毒性逆转Poison Reverse直接在通告中包含这条路不可达的信息把metric设为16明确告诉邻居这条路由已经死了别往这个方向发了。它比单纯不通告更有效因为它消除了一条路由突然消失后邻居还在盲目依赖它的时间窗口。触发更新Triggered Update正常情况下RIP每30秒通告一次全部路由。触发更新则是当路由发生变化时立即发送更新报文不用等30秒周期。这个机制能显著缩短故障后的收敛时间但它只能保证你尽快告诉邻居真正完成全网收敛还要等所有路由器都收到并处理。抑制计时器Hold-down Timer当某条路由的metric增加或者变为16/从通告中消失在180秒内除非收到来自其他方向的、metric更小的更新否则不轻易改变这条路由的状态。这个机制防止了路由一下被标不可达、一下又恢复的震荡但也因此牺牲了收敛速度。这四个机制叠加之后RIP在小型网络里基本能保证链路断了最坏情况下几分钟内全网路由表稳定不会无限循环下去。代价就是收敛慢这是所有距离矢量协议的天性不是bug是设计取舍。2.4 计时器和更新报文30秒周期里的全部细节RIP的更新方式很规律由三个计时器支撑这个名字叫周期更新的东西在实际排错中特别重要更新计时器Update Timer默认30秒路由器每30秒向所有启用了RIP的接口发送完整路由表失效计时器Invalid Timer默认180秒如果180秒没有收到某个邻居的任何更新就认为该邻居失效把从它学到的路由标记为不可用清除计时器Flush Timer默认240秒在失效标记后继续等待60秒到240秒时把这些路由从路由表彻底删除看到这里就明白了一台路由器掉电后其他路由器最多等180秒能判定它失效等到240秒才能彻底清理路由。这就是RIP收敛慢在每个具体数字上的体现。所以RIP的设计者后来推出了触发更新试图减少这个等待窗口但在真实网络中触发更新报文不可靠可能丢包周期更新依然是保底手段。3. 从RIPv1到RIPv2再到RIPng二十多年协议演进的三个关键节点3.1 RIPv1的往事有类地址时代的老古董RIPv1诞生于1980年代末那时候IP地址还是标准的A/B/C类划分没有VLSM可变长子网掩码、CIDR无类域间路由这些概念。RIPv1的通告报文里没有掩码字段路由器只能根据IP地址的前缀位去猜这个网段的掩码。比如你看到一个10.0.0.0网段的通告默认猜它是A类地址的标准掩码255.0.0.0。这带来一个实际问题如果你在RIPv1网络里划分了不标准的子网比如把192.168.1.0/24又划分成两个/25RIPv1是区分不出来的它会把子网信息搞乱。此外RIPv1使用广播地址255.255.255.255发送更新报文所有同网段的设备都要接收和解析既浪费带宽又效率低在早期链路窄、设备性能弱的条件下还不算大问题放到今天就是灾难。所以RIPv1那套东西现在基本只存在于教材里实际设备配置时基本不会再用。但搞懂它有历史意义你会明白为什么后来RIPv2要把VLSM支持和组播更新加进去。3.2 RIPv2的升级VLSM、认证和组播三大革新RIPv2是1994年推出的修订版本它解决了RIPv1几乎所有的硬伤。关键变化有三个第一通告报文里显式携带子网掩码支持VLSM和CIDR。你可以放心地在一个RIP网络中混合使用/24、/25、/30等不同掩码的子网路由器不会再猜错。第二更新报文从全网广播改成组播发送目标地址224.0.0.9。只有启用了RIP的设备会监听这个组播地址其余设备不会被打扰带宽消耗也明显下降。第三支持明文密码和MD5认证。在扩接外部网络时你可以为RIP更新报文加认证避免非信任设备注入伪造的路由信息。这个在真实网络里很重要——我之前就见过有人往测试网段里顺手接了一台配置了错误RIP的设备结果全网路由表混乱。如果有认证这种事根本不会发生。RIPv2还支持将特定接口配置为被动接口Passive Interface只接收不发送更新这对保护主机网段、减少广播风险非常有用。3.3 RIPngIPv6时代的路由信息协议到了IPv6时代RIP也推出了对应的新版本叫RIPngRIP Next Generation。它基于RIPv2的逻辑但为适应IPv6做了几个调整使用IPv6组播地址FF02::9发送更新而不是224.0.0.9通告内容是IPv6前缀和前缀长度使用链路本地地址Fe80::开头的地址作为下一跳端口从UDP 520变为UDP 521RIPng本身使用场景很少因为IPv6网络里大家更倾向于用OSPFv3或者静态路由。但在一些特定的低复杂度IPv6环境中RIPng依然是一个不可忽视的备选。它的配置思路和RIPv2一脉相承学会RIPv2之后RIPng只是换个地址格式而已。4. 手把手配置RIP从拓扑搭建到命令验证的完整过程4.1 一套适合动手练习的拓扑与地址规划我先给出一套最常用的三路由器拓扑方便跟着往下配。路由器分别叫R1、R2、R3互联链路使用/30子网回环地址用来模拟终端网段。R1Loopback0为192.168.1.1/24G0/0连接到R2的G0/0网段10.0.12.0/30R2Loopback0为192.168.2.1/24G0/0连接R1为10.0.12.2/30G0/1连接R3为10.0.23.0/30R3Loopback0为192.168.3.1/24G0/1连接R2为10.0.23.2/30这个拓扑覆盖了三节点串行互联的场景既能验证RIP的逐跳转发也能在后面排错时模拟一条链路断了路由如何沿着另一条路径收敛的典型问题。4.2 Cisco IOS下的RIP配置命令与含义以Cisco IOS为例配置RIPv2的步骤如下R1(config)# router rip R1(config-router)# version 2 R1(config-router)# network 192.168.1.0 R1(config-router)# network 10.0.0.0 R1(config-router)# no auto-summary这里有个容易被新手忽略的重点network命令后面跟的是主类网络号classful network不是精确的子网号。在Cisco IOS的RIP配置里network 10.0.0.0的意思是在所有属于10.0.0.0这个主类网络的接口上启用RIP。R2上的network 10.0.0.0和network 192.168.2.0同理。注意这里不能用network 10.0.12.0 0.0.0.3这种带反掩码的写法那是OSPF的语法。RIP的network命令不支持精确匹配子网只接受分类网络。这个差异是我见过很多人配置失败的原因。no auto-summary非常重要。RIPv2默认在通告路由到跨主类网络边界时会自动汇总成主类网络比如把192.168.1.0/24汇总成192.168.1.0这是RIPv1的行为。在一些有连续子网的场景里自动汇总会导致路由信息不精确所以最好显式关闭。R2和R3的配置完全同理只需要把接口所在的主类网络都加进去。配置完成后每个路由器上执行show ip route能看到类似下面这样以R开头的路由条目R 192.168.3.0/24 [120/2] via 10.0.23.2, 00:00:17, GigabitEthernet0/1这个条目里的[120/2]是RIP的两个关键参数120是管理距离Administrative Distance表示RIP路由的可信度2是metric表示到达192.168.3.0/24需要跳2跳。这个数字就是判断路径好坏的依据。4.3 验证与排错三件套show、debug和抓包配置完有没有生效不能只看配置要用验证命令确认。我最常使用的三件套show ip protocols查看RIP进程的运行状态包括版本号、计时器数值、通告的网段、被动接口等show ip route rip只显示RIP学习的路由条目方便聚焦排查debug ip rip实时打印RIP更新报文的收发过程debug ip rip是最直观的配置完RIP后你会看到这样的输出RIP: sending update to 224.0.0.9 via Ethernet0/0 RIP: build update entries network 192.168.1.0 metric 1 RIP: received update from 10.0.12.2 network 192.168.2.0 metric 1第一次看到这种输出时你会切身体会到路由器在周期性地通告路由不是抽象概念而是实打实发生的报文交互。验证完毕记得及时关闭debug用undebug all因为debug在真实设备上会大幅拉高CPU负载。4.4 华为设备上的RIP配置对照国内华为设备也用得很多配置逻辑和思科一样只是命令略有差异。我以华为AR系列为例给出对照[R1] rip 1 [R1-rip-1] version 2 [R1-rip-1] network 192.168.1.0 [R1-rip-1] network 10.0.0.0 [R1-rip-1] undo summary华为版的network命令可以写精确网段用起来比思科的宽松一些。查看路由则用display ip routing-table或者display rip 1 route。5. 我在生产环境里踩过的RIP坑故障排查全链路复盘5.1 案例一启用RIP后办公网PC突然无法访问服务器有一次我给一个公司分支网络启用RIPv2替代静态路由后业务方很快反馈部分PC无法访问内部服务器。我当时第一反应是RIP路由没学全但一查路由表每条路由都在问题就显得很奇怪。后来排查到接口层级发现有问题的PC所在交换机上连了一台非RIP设备——那台设备的网关正好也在RIP通告的网段里。RIP的更新报文是组播的交换机默认会把组播报文泛洪到同一VLAN的所有接口。那台非RIP设备收到更新后虽然没有运行RIP协议但它会对路由信息做处理某些设备默认开启重定向ICMP导致它错误地向客户端通告自己是一个可用的路由器。客户端一旦把默认网关指向这台幽灵设备流量就发到了错误的位置。这个案例给我的教训是启用动态路由前必须先梳理整个二层广播域的成员。RIP更新报文虽然不再是广播但组播在很多情况下也会被交换机泛洪到非成员端口。解决办法是启用被动接口passive-interface把所有连接终端的接口都设为只接收不发送从源头避免终端网段收到RIP更新报文。5.2 案例二一条测试链路误接全网路由表出现环路第二次踩坑是更经典的水平分割没挡住的故事。当时我们网络里有一台测试路由器同事为了调试方便把它同时接入了两台上游路由器。这台测试设备上我忘记配置任何防环策略默认RIP。问题很快爆发测试设备从上游R1学到一条到某业务网段的路由又从上游R2学到同一网段的另一条路由它把两条都收下然后统一通告回去。R1接收到来自测试设备的更新后发现咦这条路由的metric怎么比我自己还大按RIP逻辑它不会替换自己原来的路由但会记录下存在另一条路径。而R2那边也收到了测试设备发来的反向通告误以为可以通过测试设备更短地到达业务网段于是把路由替换成下一跳指向测试设备。结果业务流量在上游路由器和测试设备之间来回跳TTL耗尽被丢弃业务中断。解决方式分两步先切断测试设备的接入让全网路由表重新收敛再在测试设备上添加出接口的ip rip poison-reverse策略确保任何情况下都不会把听来的路由原样说回去。这个案例让我深刻意识到所有防环机制都只是概率性防护不是绝对隔离。只要网络里出现额外连接例如两台路由器之间有多条物理链路但只配了一个RIP进程环路就有可乘之机。这也是后来很多工程师在核心网络拒绝RIP的原因——收敛慢容忍不了协议本身的脆弱性更无法接受。5.3 案例三RIPv1和RIPv2混跑导致部分路由静默丢失还有一次遇到的是版本兼容问题。一个分支网络的旧设备只支持RIPv1新加入的设备默认开了RIPv2。RIPv1用广播发送更新RIPv2用组播发送更新两者互相听不懂。从现象上看就是部分网段的路由时有时无非常零散。排查时我打开show ip route rip发现缺少几条远端分支路由同时在RIP配置模式里改了版本后路由表立刻补齐了。RIPv2路由器能处理RIPv1的广播报文兼容模式但RIPv1路由器完全收不到RIPv2的组播报文。解决方案很简单要么全网统一用RIPv2推荐要么在Cisco设备上用ip rip v1-compatible让RIPv2同时使用广播发送。不过后者只是在过渡期临时方案长期混跑始终是隐患。5.4 案例四30秒更新报文的带宽与CPU代价最后想谈谈RIP更新的资源开销。很多人觉得RIP那么轻量肯定不耗资源。但在一个路由条目很多几百条的网络里每30秒就要把整张路由表广播给所有邻居一次这个开销会集中体现在设备CPU和链路带宽上。我曾在业务高峰期观察过一台低端路由器在收到几百条RIP更新时CPU利用率会冲到60%以上而同期同链路的OSPF设备CPU负载几乎可以忽略。RIP的更新机制是全量路由表周期发送不像OSPF那样只有链路状态变化时才发送增量LSA。所以对性能敏感的场景RIP并不是一个真正的轻量协议——它在路由量小的时候轻量路由量一大就开始笨重。后来我用的方案是把RIP的更新计时器调大比如从30秒调整到90秒timers basic 90 180 300 300。但这里有个代价——收敛时间也会相应变长因此只适合那些对网络变化不敏感的业务网段核心链路绝不能这样干。6. RIP和OSPF、EIGRP到底怎么选一张表看清楚各自的适用边界6.1 三种协议的核心差异对照只要讨论动态路由RIP几乎必然要和OSPF、EIGRP拉出来对比。我把实际使用中最关键的几个维度列成了一张表对比维度RIPOSPFEIGRP算法类型距离矢量链路状态高级距离矢量度量标准跳数15跳上限带宽延迟Cost复合度量带宽延迟负载可靠性收敛速度慢秒级到分钟级快秒级快秒级网络规模小直径≤15大支持区域划分中到大更新方式周期全量更新事件触发增量更新事件触发增量更新厂家兼容性全兼容开放标准全兼容CISCO私有配置复杂度极低较高区域、邻居中从这张表能看出RIP唯一真正占优的是配置简单和全兼容其他方面几乎都是短板。OSPF是大型网络的默认选择EIGRP在纯思科环境里表现很出色但非思科设备不支持生态受限。6.2 什么场景下我应该认真考虑用RIP尽管选型上有那么多更强的替代品我在下面几种场景里依然会认真用RIP小规模分支网络整网不超过10台路由器网段数少。RIP的简单性会成为最大优势配置和维护成本远低于OSPF老旧设备兼容某些老型号路由器可能不支持OSPF的完整功能但RIP一定支持学习和培训作为距离矢量协议的入门模板RIP是最容易理解、最容易观察行为的协议临时网络快速搭建比如展会网络、临时项目组网络需要快速互通RIP配置一次即可自动发现比逐条配静态路由省时间6.3 什么场景千万不要用RIP反过来我在下面这几种场景中毫不犹豫地排除RIP核心骨干网或数据中心网络收敛慢、跳数限制、更新开销这几个短板都是致命的任何要求秒级切换的语音、视频业务承载网链路断开后RIP需要几十秒以上才能恢复转发通话和视频会直接中断超过15跳的广域网RIP会在设计上直接拒绝传递远端路由有严格安全性要求的网络RIP报文的认证机制虽然有但在实际自动化操作中极易被绕过整体安全性不如OSPF的区域隔离设计6.4 一个折中思路静态路由RIP混合使用在实际项目里我经常用静态路由RIP的混合模式。比如总部核心网段之间用静态路由或OSPF保证稳定接入分支的网段启用RIP自动学习避免每条分支链路变动都要手工改总部路由。这个模式的好处是RIP管理的范围小路由条目少即使触发更新频繁也不会影响全网稳定性同时分支设备的配置极简——两条network命令即可。坏处是RIP的快收敛加分优势在被限制的范围里才能发挥得够好任何超出范围的网段增长都必须提前规划。7. 关于RIP我最后想分享的几句实在话如果你问我学了RIP到底值不值我会说看目的。如果是为了CCNA考试、为了理解动态路由的底层逻辑、为了应对老旧设备RIP必须吃透。如果是为了搭一个生产网络上最稳定的路由体系RIP大概率不会是我的首选但它仍然是一块很好的试金石——它帮你理解所有动态路由协议共有的问题比如环路、收敛、度量、防环这些底层逻辑在OSPF和BGP里依然存在只是被更复杂的机制包装起来了。我建议每一个网络工程师都亲手配一遍RIP看一遍debug ip rip的输出再亲手制造一次人为环路观察它是如何恢复的。这个过程比背一万道选择题都管用——因为你真的理解了路由协议是怎么工作的之后再看OSPF的区域、BGP的AS路径都会有豁然开朗的感觉。最后留一个实操小技巧无论是在思科还是华为设备上配置RIP时别忘了把连接终端的接口设置为被动接口。一个接口发送RIP更新报文看似无伤大雅但在VLAN泛洪的场景下它可能把一个本不该参与路由的设备卷进来到时候排错排到怀疑人生。先把这个习惯养成RIP的坑就已经绕开了一大半。