但凡学过网络的人第一个亲手配置的动态路由协议大概率都是RIP。这个实验我在模拟器上做过无数次也在真实设备上排过它的故障。说实话RIP在现网里已经很少见了但它的价值一点没打折——距离向量算法、水平分割、毒性反转、收敛计时器这些概念全是从RIP这儿长出来的。把RIP实验吃透后面学OSPF、IS-IS甚至BGP你会发现自己理解得特别快。这篇博文就是围绕RIP实验展开的完整实操记录。我会从协议原理讲起把实验拓扑、配置命令、验证方法、防环机制、故障排查全部过一遍最后给你一套可以直接照抄的完整配置。适合网络入门没多久、准备考HCIA或CCNA、或者想在模拟器里把路由协议真正搞懂的人看。不吹不黑这套实验做下来你对“路由是怎么学来的”“路由为什么会消失”“环路是怎么防住的”这三件事会有完全不一样的感觉。1. RIP协议原理与实验设计1.1 RIP的运行逻辑跳数就是度量值RIP全称是Routing Information Protocol是一种典型的距离向量协议。它的核心思想非常朴素把“到某个网段要走多少台路由器”作为选择路径的依据这个数字叫跳数。每经过一台路由器跳数加1从源到目的地最多允许15跳16跳就被判定为不可达。这个“16跳不可达”的设计当初就是为了防止路由环路无限循环。类比一下就是传话游戏每个人只能把消息传给邻居然后邻居再传给下一个邻居。如果传话没有上限一句话可能永远在圈里打转RIP用“跳数封顶”直接掐断了这个可能。RIP的工作方式也很有特点。每台运行RIP的路由器只和直连邻居交换路由信息而且一交换就是整张路由表。它没有全局拓扑的概念每台路由器都像井底之蛙只知道自己邻居告诉自己的事情。这种“道听途说”式的学习方式带来了两个天然问题一是收敛慢二是容易产生环路。所以RIP协议里才塞了一大堆防环机制后面的实验环节我会专门演示。1.2 为什么现在还要做RIP实验先回答一个很多人都会问的问题RIP都老掉牙了学它干嘛我的看法是RIP是理解动态路由协议的最佳入门教材。它足够简单——度量值只有一个维度跳数算法只有一种Bellman-Ford的分布式实现配置只有一条核心命令network。正因为简单你能清清楚楚看到路由协议工作的每一步什么时刻发更新包、更新包里带什么内容、收到之后怎么处理、路由失效后怎么删除。另外一个很实际的原因是很多厂商的认证考试依然把RIP作为必考点尤其是初级方向。而且在一些运维场景里你可能会碰到十年前部署的老旧网络设备上面跑的恰恰就是RIP。我就处理过一台工控网络的边缘路由器整个内网就靠RIPv2撑着。不熟悉RIP遇到这种活只能干瞪眼。1.3 实验拓扑设计与需求拆解做RIP实验我建议从最简单的三路由器串链拓扑开始先跑通基本路由学习再逐步加链路做防环和故障场景。下面这个拓扑是我反复用的标准结构R1的G0/0连接到R2的G0/0网段为10.0.12.0/24R2的G0/1连接到R3的G0/0网段为10.0.23.0/24R1和R3各自带一个Loopback接口作为终端网段分别为10.0.1.0/24和10.0.3.0/24三台路由器都运行RIP最终目标是R1和R3能互相学到对方的Loopback网段为什么要带Loopback接口因为Loopback接口不会down用来模拟终端网段最稳定不会像物理接口那样一碰线缆就出问题。如果你手头有真实的PC或者交换机也可以用VLAN网段替代但实验重点在路由协议本身所以Loopback是性价比最高的选择。这样设计的好处是结构清晰R1只能直接和R2说话R3也只能直接和R2说话R1要想到达R3的网段必须依赖R2的转发也就是经过两跳。这个“必须中间人转发”的场景恰恰是学习距离向量协议的关键。2. 实验环境准备与基础配置2.1 模拟器选择与设备镜像准备目前主流的网络实验环境有GNS3、EVE-NG、Cisco Packet Tracer还有华为的eNSP。做RIP实验这几款都能胜任但我的建议是优先GNS3或EVE-NG原因有两条一是它们跑的是真实设备镜像命令行为和真实设备完全一致二是它们支持抓包可以看到RIP报文的真实内容这一点对理解协议至关重要。Packet Tracer虽然上手最简单但它本质上是模拟器协议栈行为做了大量简化很多时候debug输出和真实IOS不一样。如果你是要备考或者随便玩玩PT也行但如果你想真正理解RIP的细节选GNS3加一个思科IOS镜像是最稳的。我用的是GNS3搭配c3745镜像内存压力小跑三台路由器非常流畅。EVE-NG也可以就是物理机要求稍微高一点。2.2 IP地址规划与接口配置先把三台路由器的接口IP配置好。地址规划如下表简单清楚后面所有配置都基于这个表设备接口IP地址对端设备接口R1G0/010.0.12.1/24R2 G0/0R1Loopback010.0.1.1/24—R2G0/010.0.12.2/24R1 G0/0R2G0/110.0.23.2/24R3 G0/0R3G0/010.0.23.3/24R2 G0/1R3Loopback010.0.3.1/24—接口配置命令如下以R1为例interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.0 no shutdown ! interface Loopback0 ip address 10.0.1.1 255.255.255.0R2和R3照葫芦画瓢就行。配完接口之后先不要急着配RIP老老实实用ping验证直连链路的连通性。这个习惯特别重要——路由协议是跑在IP网络之上的底层链路都不通协议学路由学得再好也是白搭。我见过太多人配完RIP发现路由不学习最后排查半天发现是接口没no shutdown或者地址掩码敲错了。2.3 RIP进程启动与network命令的本质接口通了之后就可以启动RIP进程了。三台路由器上的配置几乎一样区别只在于network声明的网段。以R2为例router rip version 2 network 10.0.0.0 no auto-summary这里有一个特别容易误解的地方network 10.0.0.0并不是“把10.0.0.0这个网段广播出去”它的真实含义是“在IP地址属于10.0.0.0主类网段的接口上启用RIP”。由于R2的G0/010.0.12.2和G0/110.0.23.2都属于10.0.0.0这个大网所以两个接口都会启用RIP都会收发路由更新。很多人在这儿栽跟头是因为他们以为network后面只能写主类网段。实际上在RIPv2里你可以在network命令后面写子网比如network 10.0.12.0这样只有匹配这个子网的接口会启用RIP控制更精细。我在真机上验证过这种做法是合法的而且在实际工程中比宣告整个主类网段更安全。no auto-summary这条命令也很关键。RIPv2默认自动汇总到主类边界如果不关掉R1的10.0.1.0/24传到R3时会变成10.0.0.0/8下一跳信息全乱了。实验环境里一定要加上这条工程上更是不用商量直接关。3. 核心实验操作与协议验证3.1 RIPv1与RIPv2的配置差异看懂版本才能选对命令在配置RIP时版本选择是第一道分水岭。RIPv1是有类路由协议它不携带子网掩码信息整个网络必须使用相同的掩码也就是不支持VLSM和CIDR这在现代网络里根本没法用。而RIPv2是无类路由协议更新报文里携带子网掩码支持VLSM、路由汇总和认证。因为RIPv1不带掩码所以它无法在可变长子网的网络里正确传递路由。比如R1的Loopback是10.0.1.0/24R3的Loopback也是10.0.1.0/24这种不同位长的子网RIPv1会在主类边界上强行汇总导致路由不精确。RIPv2就没有这个问题这也是实验里我强烈建议直接用version 2的原因。从配置上看差别就一行命令router rip version 2如果漏配version 2默认跑的是RIPv1两个版本之间不兼容路由学不到。这个坑我踩过不止一次每次排查半天到头来都是版本不匹配。建议配置完成后第一时间用show ip protocols确认当前运行的版本。3.2 用show和debug命令观察RIP的行为细节配置完成并等待大约30秒后三台路由器之间就应该互相学到路由了。这时用验证命令观察是实验最有意思的部分。在R1上执行show ip route rip可以看到类似下面的输出10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks R 10.0.23.0/24 [120/1] via 10.0.12.2, 00:00:12, GigabitEthernet0/0 R 10.0.3.0/24 [120/2] via 10.0.12.2, 00:00:12, GigabitEthernet0/0这里的[120/1]中120是RIP的管理距离1是跳数。10.0.3.0/24这条路由跳数是2说明要经过R2再到R3。后面那个00:00:12表示这条路由距离上次更新过了12秒如果这个时间超过180秒还没刷新路由就会被标记为不可达。show ip protocols是检查协议状态的首选命令。它会显示RIP进程配置了哪些network、运行的是哪个版本、路由计时器的默认值、以及当前有哪些邻居路由器在交换信息。如果想看到实时的更新报文可以用debug ip ripR1# debug ip rip RIP: sending v2 update to 224.0.0.9 via GigabitEthernet0/0 (10.0.12.1) RIP: build update entries 10.0.1.0/24 via 0.0.0.0, metric 1, tag 0 RIP: received v2 update from 10.0.12.2 on GigabitEthernet0/0 10.0.3.0/24 via 0.0.0.0, metric 2这段输出信息量很大。可以看到RIP每隔30秒向组播地址224.0.0.9发送一次更新R1通告自己的10.0.1.0/24网段跳数为1同时从R2学到10.0.3.0/24跳数为2。这种“发出什么、收到什么、跳数怎么变”的过程光看路由表是感受不到的用debug才能直观理解。3.3 RIP计时器与收敛过程的时间线观察RIP的收敛过程是一整套计时器在背后驱动理解这套机制排障时才能准确判断路由“消失”到底正不正常。默认的四个计时器如下更新计时器30秒定期发送路由更新失效计时器180秒超过这个时间没收到某条路由的更新就标记为不可达抑制计时器180秒标记不可达后进入抑制状态在这段时间内即使收到更好的路由也不采纳刷新计时器240秒超过这个时间直接从未知路由表中删除我实测过一个经典场景R2和R3之间的链路断开之后在R1上观察10.0.3.0/24这条路由的变化。链路刚断开时R1的路由表里依然显示10.0.3.0/24存在因为R1还没有感知到变化。大约30秒后R2在下一个更新周期里不再把这条路由通告给R1但R1依然保留旧路由。直到大约180秒后R1把这第三条路由标记为possibly down下一跳指向变得不可达。等到240秒这条路由才彻底从路由表中消失。这个“慢慢失效”的过程就是距离向量协议收敛慢的根源。如果你在排障时看到一条RIP路由还在但Ping已经不通了不要慌先算算时间线确认是否处于抑制期内。这时候强行清空路由表clear ip route *可以加速收敛但仅在实验环境里建议这么干生产环境要谨慎评估。4. 防环机制与故障排查实录4.1 三大防环机制的原理拆解距离向量协议最大的敌人就是路由环路。RIP靠几个机制组合拳来防环每个机制单独看都很简单组合起来却很精巧。第一个是水平分割。规则一句话从某个接口学到的路由不会再从这个接口通告回去。道理很直白你从邻居那儿听来的消息再原封不动告诉这个邻居除了让邻居困惑没有任何价值。在串行链路的拓扑里水平分割能直接拦住大部分单向环路。第二个是毒性反转。比水平分割更进一步从某接口学到的路由不仅不原样通告回去反而通告一条跳数为16的“毒化”路由回去明确告诉邻居“这条路已经不可达了”。这就像收到坏消息后主动回一封信说“我知道了这条路废了”。在实验里你可以用debug ip rip在链路故障时看到这种16跳的通告。第三个是触发更新。正常情况下RIP每30秒才发一次更新但拓扑一旦发生变化路由器不等计时器到期立即发送更新报文。这样能大大缩短环路的存活时间。不过触发更新只能加快通知速度不能彻底避免环路因为发送过程中报文可能丢失所以才需要前面两个机制兜底。4.2 在实验环境里复现计数到无穷要真正理解“环路有多可怕”建议把拓扑升级一下三台路由器两两互联形成一个三角形。配置好RIP让路由全部收敛然后在R2上关掉水平分割接口下配置no ip split-horizon再断开某条链路用debug观察跳数变化。这时候你会发现一个很有意思的现象路由的跳数不是立即变成16而是一跳一跳往上加。比如R1发出一条跳数1的更新给R2R2加1变成2传给R3R3又加1变成3传回R1R1再加1变成4传出去……就这样一圈一圈绕下去直到跳数超过15变成16不可达这个过程就是“计数到无穷”。在真实网络里这个循环会持续几十秒甚至几分钟期间数据包在网络里打转直到TTL耗尽才被丢弃。做这个实验的目的就是让你亲眼看到为什么RIP的防环机制如此重要也让你理解为什么OSPF要改用SPF算法、维护全网拓扑数据库。没有对比就没有伤害跑完这个实验再学OSPF你对“链路状态协议为什么先进”会有切身体会。4.3 常见问题排查速查表RIP实验里遇到的问题翻来覆去就是下面这几类。我整理了一张排查速查表碰到问题直接对着查效率最高现象可能原因排查命令路由完全不学习network漏配或写错网段show ip protocols、show run router rip路由学了一部分RIPv1/RIPv2版本不匹配debug ip rip看接收的更新版本路由学到的下一跳不对auto-summary未关闭show ip route观察主类汇总路由表有路由但Ping不通中间链路的掩码或接口配置错误ping逐跳、show ip interface brief路由时有时无网络不稳定触发更新频繁debug ip rip观察更新和失效日志链路断开后路由一直不消失处于抑制计时器时间窗内show ip route等待240秒或手动clear这里面最常见的是前两个。network漏配不用多说配完记得show ip protocols确认网段列表。版本不匹配这个坑要重点提一下很多人图省事只配了router rip没写version 2结果R1和R2之间永远学不到路由因为RIPv1广播更新到255.255.255.255RIPv2组播更新到224.0.0.9两者根本不互通。5. 实验进阶与经验沉淀5.1 被动接口与路由汇总把实验做成工程化配置基础实验跑通之后我建议你做两个进阶操作让配置更接近真实工程。第一个是被动接口。在实际组网中路由器连接终端PC的接口不需要运行RIP因为这些接口上不会有其他路由器。如果不做任何处理RIP会每30秒向这些接口发送广播或组播更新纯属浪费带宽和CPU还可能带来安全隐患。解决办法是在这些接口上配置被动模式router rip version 2 network 10.0.0.0 passive-interface Loopback0配置之后Loopback0接口不再发送RIP更新但依然可以接收路由、通告本地网段。在R3上执行show ip protocols你会看到Loopback0已经出现在被动接口列表里R1上依然能学到10.0.3.0/24这个网段说明网段照样被通告只是不主动发报文了。第二个是手工路由汇总。如果R3下面挂了多个连续的Loopback网段比如10.0.3.0/24、10.0.4.0/24、10.0.5.0/24RIP默认会每条路由单独通告路由表膨胀。在RIPv2里可以在接口上配置手工汇总interface GigabitEthernet0/0 ip summary-address rip 10.0.3.0 255.255.254.0这样R3通告出去的是一汇总路由10.0.3.0/23R1的路由表瞬间少了好几条条目。注意汇总网段必须连续且有规律工程上要规划好地址段。做这个实验时你可以对比汇总前后的show ip route输出效果非常直观。5.2 RIP的局限性它为什么被OSPF取代把实验做完你大概也感觉到了RIP的短板。我自己最大的两个感受是收敛太慢以及跳数限制太死。RIP的收敛时间理论上最快也要几十秒最慢可能到240秒这在现代网络里完全不可接受。一个链路故障如果导致业务中断五分钟业务方早就炸了。相比之下OSPF依靠SPF算法和链路状态数据库能在几秒甚至几百毫秒内完成收敛。跳数限制也让RIP无法应用于大型网络。15跳的硬限制意味着网络规模不能太深而且RIP做路径选择只认跳数不考虑带宽和延迟。跳数少但链路是低速专线和跳数多但链路是万兆光纤RIP一定会选前者这明显不科学。OSPF的度量值是基于接口带宽计算的cost就合理得多。但话说回来RIP依然有它存在的场景。比如非常小的分支机构网络几台路由器、几十个网段RIP配置简单、维护容易跑起来完全没问题。有些老旧设备也只支持RIP。所以别把RIP当成“过时垃圾”把它当成“特定场景的趁手工具”更合适。5.3 可复现的完整配置模板最后给出三台路由器的完整参考配置我自己实验环境里的版本直接抄就能跑通。R1interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.0 no shutdown ! interface Loopback0 ip address 10.0.1.1 255.255.255.0 ! router rip version 2 network 10.0.0.0 no auto-summaryR2interface GigabitEthernet0/0 ip address 10.0.12.2 255.255.255.0 no shutdown ! interface GigabitEthernet0/1 ip address 10.0.23.2 255.255.255.0 no shutdown ! router rip version 2 network 10.0.0.0 no auto-summaryR3interface GigabitEthernet0/0 ip address 10.0.23.3 255.255.255.0 no shutdown ! interface Loopback0 ip address 10.0.3.1 255.255.255.0 ! router rip version 2 network 10.0.0.0 no auto-summary配置完别急着走三步验证法收尾先在R1上ping 10.0.3.1确认全网连通再show ip route rip查看路由表和跳数是否符合预期最后在R1上traceroute 10.0.3.1看看路径是不是R1到R2到R3。三步全过这个RIP实验才算真正完成。我个人做这个实验最大的体会是RIP学得越细越能理解“协议是妥协的艺术”。它用最简单的信息交换方式解决了路由发现的问题又不得不用一堆机制来弥补自身的缺陷。每一条防环规则背后都对应着真实网络里血淋淋的教训。你在模拟器里复现的这些现象放到真实设备上原理一模一样。把这些机制搞懂以后不管是排OSPF还是BGP的障思路都会比别人清晰一截。