尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

RIP实验全解析:从基础配置到防环机制实测

RIP实验全解析:从基础配置到防环机制实测 RIP实验是我一直觉得被低估的一堂网络实验课。很多人一听到RIP协议第一反应就是“老古董”“生产环境早不用了”这话放到现在的现网里基本没毛病OSPF和BGP才是主流。但如果你真的想把动态路由、路由环路、收敛时间、防环机制这些概念吃透RIP实验是绕不开的一课。它结构简单、报文清晰、行为直观而且收敛慢这个“缺点”反而让它成了最适合做“看得见的协议”的教学工具。这篇内容我按自己当年完整搭RIP实验的过程来写拓扑用三台路由组成的环网从基础配置一直做到抓包、防环实测和排错复盘适合正在准备CCNA/HCIA认证、或者单纯想把距离矢量路由原理搞明白的朋友看完照着敲一遍收获会很大。1. 为什么我推荐先做RIP实验而不是直接学OSPF1.1 RIP到底解决什么问题RIPRouting Information Protocol路由信息协议是最经典的距离矢量路由协议核心逻辑一句话就能讲完每台路由器只把自己的“路由表”定期告诉直连邻居邻居收到后加上一跳的度量值再继续告诉它的邻居。这个过程很像一个村子里大家靠口口相传“去镇上的路怎么走”每个人不掌握全局地图只知道下一跳该往哪走。放在真实网络里路由器不可能天然知道所有网段的路由静态路由又只能在拓扑规模小、链路固定的场景下用。RIP解决的就是“让路由器之间自动交换路由信息、自动计算最优路径”这个基础问题。虽然它的设计目标在今天显得朴素最大跳数15、30秒更新一次、收敛分钟级但正是这种朴素让它的每一步行为都可以被拆开观察。1.2 RIP实验的天然优势看得见的收敛我见过不少新人一上来就学OSPF对着DR/BDR、区域类型、LSA类型背得昏天黑地问他“OSPF为什么比RIP收敛快”只能答出“因为有触发更新和增量更新”再往下问就卡住了。这就是没做过RIP实验的后果没有对照组你对收敛、环路、路由度量这些概念的体感是空的。RIP实验最好的地方在于它把“路由协议到底在干什么”这件事完全摊开在你面前。每30秒发一次完整路由表断一条链路后要等180秒失效计时器路由表里会出现诡异的16跳条目这些都是真实的、可复现的。你亲手做完一遍再去学OSPF的hello机制、LSA老化、SPF计算就能非常清楚地知道OSPF到底优化了什么RIP的哪些痛点被解决掉了。2. 实验拓扑设计与版本选择2.1 环形拓扑设计说明我做RIP实验反复调整过几次拓扑最终固定下来的是三台路由器组成的环形结构。环形的意义在于任何一个目的网段每台路由器都有两条以上可达路径这样你才能观察路由表如何选路、链路断开后路径如何切换、以及环形拓扑下经典的“计数到无穷”问题。具体拓扑如下R1Serial1/0连R2Serial1/1连R3另外挂了两个Loopback口模拟终端网段用192.168.1.0/24和192.168.2.0/24。R2Serial1/0连R1Serial1/1连R3Loopback0为172.16.2.1/24。R3Serial1/0连R2Serial1/1连R1Loopback0为172.16.3.1/24。三条串行链路分别用10.0.12.0/24、10.0.23.0/24、10.0.31.0/24。这样规划的好处很直接R2和R3学习R1的192.168.1.0/24时直连走一条路经过另一台路由器绕行又是另一条路能清晰看到度量值变化。所有Loopback口模拟的是终端网段这是做动态路由实验的惯用做法避免真的去接PC和交换机简洁又不失真实性。2.2 RIPv1还是RIPv2很多教程默认拿RIPv1做实验理由是“RIP本来就只有v1”我实际做下来强烈建议从RIPv2起步原因主要有三个。第一RIPv1是有类路由协议报文里根本不携带子网掩码几个不同子网在同一条路由里传播时会被自动汇总成有类网络很多路由故障恰恰就是汇总导致的新手容易一头雾水。第二RIPv1用广播255.255.255.255发送更新不仅浪费带宽还无法跨网段传递子网信息在实验里抓包分析也不够直观。第三RIPv2支持明文和MD5认证这在实际组网里很有用也是RIP实验里可以单独拿出来玩的一个点。两者的宣告方式都是network命令但RIPv2能精确携带掩码实验观察价值高得多。如果你时间充裕可以在同一拓扑上先把RIPv2跑顺再重置成RIPv1对比路由表的变化那个对比过程会深刻得多。2.3 接口IP与回环网段规划这个拓扑的IP规划表如下设备接口IP地址用途R1Serial1/010.0.12.1/24连接R2R1Serial1/110.0.31.1/24连接R3R1Loopback0192.168.1.1/24模拟终端网段R1Loopback1192.168.2.1/24模拟终端网段R2Serial1/010.0.12.2/24连接R1R2Serial1/110.0.23.2/24连接R3R2Loopback0172.16.2.1/24模拟终端网段R3Serial1/010.0.23.3/24连接R2R3Serial1/110.0.31.3/24连接R1R3Loopback0172.16.3.1/24模拟终端网段我在实际配置时踩过一个不算坑的坑串口默认是shutdown状态每次做完实验保存配置下次打开如果忘了no shutdown邻居关系半天起不来白白浪费排查时间。所以先把所以接口的物理状态确认好再动路由协议这是最基本的操作纪律。3. 环境搭建与原理解读3.1 模拟器怎么选RIP实验对模拟器的要求很低但不同选择体验差别还是明显。Cisco Packet Tracer胜在入门简单、硬件要求低适合第一遍照着教程敲命令但它的协议细节模拟不完全抓包功能也比较弱很多报文字段和真实设备有出入。GNS3按真机镜像跑边角行为都接近真实设备还能直接把链路桥接到Wireshark抓包是RIP实验的最佳选择就是初始搭建稍微折腾一点。EVE-NG更像一个集中式的实验平台可以网页访问多台虚拟设备适合一次性搭一个稍大的拓扑然后反复复用。如果你手头一台真机Cisco路由器都没有也没关系。用装了FRR的Linux虚拟机同样可以做RIP实验配置思路完全一致只是命令风格略有差异。实验的目标是掌握原理不是背厂商命令这个心态很重要。3.2 三步完成RIP基础配置配置RIP的完整套路其实只有三步启动进程、指定版本、宣告网段。以R1为例R1(config)# router rip R1(config-router)# version 2 R1(config-router)# network 10.0.0.0 R1(config-router)# network 192.168.0.0 R1(config-router)# no auto-summary启动进程用全局配置router rip然后version 2把协议版本切到RIPv2network 10.0.0.0意思是“所有IP落在10.0.0.0这个有类网络内的接口都激活RIP”这样R1的三个串口全部参与RIP。network 192.168.0.0则把两个Loopback口所代表的192.168.1.0/24和192.168.2.0/24都宣告进去。R2和R3的配置同理R2(config)# router rip R2(config-router)# version 2 R2(config-router)# network 10.0.0.0 R2(config-router)# network 172.16.0.0 R2(config-router)# no auto-summaryno auto-summary这一条在RIPv2下非常关键它会关掉有类网络的自动汇总让路由条目以精确的掩码形式传播。我见到太多人实验做完路由表里出现一条172.16.0.0/16半天不知道从哪来的一查就是auto-summary在搞鬼。3.3 network宣告为什么是“有类”的这是RIP新手最容易困惑的地方。明明是RIPv2时代了network后面明明可以写任何子网为什么很多文档仍然推荐写有类网络关键在于RIP协议设计早期就是有类的network命令的历史语义就是“按类宣告”。你写network 192.168.1.0还是network 192.168.0.0最终生效的都是按有类网络匹配。也就是说只要接口IP在这个有类网段里哪怕你只写了其中一个子网所有同类的接口都会被激活。反过来如果你想精确控制某个子网不参与RIP仅仅靠network命令较难做到这时就需要被动接口或分发列表配合。我做实验时习惯在network命令里直接写有类网络同时心里清楚这条命令的粒度就是“类”不是“子网”。这个认知能帮你省掉很多后续排错时的疑惑。4. 协议行为实测路由表、报文与计时器4.1 验证路由表与协议状态配置完成后先不用急着抓包第一步用show命令确认协议和邻居状态。我固定的验证顺序是三连show ip protocols看协议配置show ip route看路由表show ip interface brief看接口状态。在R2上执行show ip route正常情况下能看到这些条目R2# show ip route 172.16.0.0/24 is subnetted, 1 subnets C 172.16.2.0/24 is directly connected, Loopback0 10.0.0.0/24 is subnetted, 3 subnets C 10.0.12.0/24 is directly connected, Serial1/0 C 10.0.23.0/24 is directly connected, Serial1/1 R 10.0.31.0/24 [120/1] via 10.0.12.1, 00:00:18, Serial1/0 192.168.0.0/24 is subnetted, 2 subnets R 192.168.1.0/24 [120/1] via 10.0.12.1, 00:00:05, Serial1/0 R 192.168.2.0/24 [120/1] via 10.0.12.1, 00:00:05, Serial1/0R开头的都是RIP学习来的路由[120/1]里的120是RIP的管理距离1是跳数。192.168.1.0/24是从R1直连接口学来的跳数是1。再看R2怎么到达R3的环回172.16.3.0/24它是通过Serial1/1直连学到的跳数1同时理论上也能经过R1绕行到达但那条路径跳数是2被优选路径取代了所以不会出现在路由表中。show ip protocols会显示更详细的协议行为Routing Protocol is rip Sending updates every 30 seconds, next due in 8 seconds Invalid after 180 seconds, hold down 180, flushed after 240 Redistributing: rip Automatic network summarization is in effect Maximum path: 4看到这个输出你就会理解RIP的一切行为都和这几个计时器绑定30秒周期更新180秒判定失效240秒彻底从路由表清除。4.2 抓包拆解RIP报文做RIP实验不抓包等于只看了一半。我习惯把三台路由器的某条链路桥接到一台普通交换机再把电脑接到同一台交换机上用Wireshark抓包。比较推荐的抓法是在R1和R2之间的链路上抓能同时看到R1发出的周期更新和R2发出的响应。由于RIPv2使用组播地址224.0.0.9发送周期更新Wireshark的抓包过滤器可以直接写成udp port 520。抓下来的报文结构非常清晰IP层目的地址是224.0.0.9UDP端口是520RIP层里能看到Command2表示ResponseVersion2然后是一条条路由条目。每条条目占20字节包含AFI地址族标识IP为2、路由标记、IP地址、子网掩码、下一跳和度量值。比如R1通告192.168.1.0/24时会这样RIP Message Command: Response (2) Version: RIPv2 (2) Entry 1: Address Family: IP (2) Route Tag: 0 IP Address: 192.168.1.0 Subnet Mask: 255.255.255.0 Next Hop: 0.0.0.0 Metric: 1注意这里有一个很容易被忽略的细节RIP报文里并没有“邻居”这个概念路由器不维护邻居状态它只是每30秒无脑往外发报文然后默默收别人的报文。这意味着RIP的收敛速度天然就慢因为它不是靠Hello检测邻居而是靠“超时没等到更新才判定邻居失效”。4.3 计时器实验从30秒到5秒RIP的默认计时器组合是更新30秒、失效180秒、抑制180秒、刷新240秒。生产环境里不建议乱改但实验里改小计时器能让收敛观察从“分钟级”缩到“秒级”非常方便教学和演示。在R1上执行R1(config-router)# timers basic 5 30 30 60这样更新周期变成5秒。改完以后用show ip protocols再看更新间隔已经变了。这时候你就能很明显地观察到断一条链路后最多几十秒路由表就完成重新收敛而不像默认配置那样要熬三分钟。需要强调的是这个实验最好“只在自己搭的实验环境里改”而且要把所有路由器的计时器保持一致。我曾经故意只改一台设备的计时器结果它的路由表一直在震荡学到的路由一会儿消失一会儿出现。原因并不复杂不同路由器更新频率完全不同步RIP又没有握手协商机制自然乱套。做这个实验的收获不只是学会了timers basic命令而是真正理解了为什么RIP在现网里被嫌弃慢慢等180秒刷新这对实时业务来说确实是灾难。5. 防环机制实测RIP最值得动手的部分5.1 水平分割与毒性反转距离矢量协议最大的隐患就是环路RIP的防环机制值得一个一个验证。水平分割是最基础的一条原则从某个接口学到的路由不能从这个接口再通告回去。这个机制很像一个人告诉你“邻居家今天有聚会”你不会转身再把同样的话原封不动告诉这个邻居因为对方本来就比你更清楚。在Cisco设备上RIP默认开启水平分割show ip interface可以看到R2# show ip interface Serial1/0 Serial1/0 is up, line protocol is up Split horizon is enabled验证水平分割生效可以这样操作在R2的Ethernet口接一台主机然后抓R2发给R1的RIP报文你会发现从R1学来的路由条目并没有被原样通告回R1。毒性反转略有不同它不是完全不发而是把原本应该通告回去的路由标记为16跳即不可达再发出去相当于明确告诉邻居“这条路不能走”。这两种机制的方向完全相反但目标一致尽快让错误的路径信息在网络里传播受限。5.2 触发更新与抑制计时器触发更新是RIP里为数不多带有“现代感”的机制。正常情况下RIP每30秒发一次完整路由表但在链路状态发生变化时路由器会立刻发送更新不等下一个周期。我把R2连接R3的接口shutdown后R2马上向外通告了关于172.16.3.0/24的更新而不是干等30秒这就是触发更新在起作用。抑制计时器则是RIP对“劣化路由”的一种防御策略。当一个路由条目在抑制期内收到比当前度量更差的信息时路由器不会立即采纳而是进入抑制状态等一段时间再更新。这像什么就像一个公司里已经有消息说“某个供应商靠谱”突然来了一个负面消息你不会当场拍板换供应商而是先稳住过段时间再看后续情报。我实测时看到的一条经典现象是链路断了以后路由表里那条坏路由并没有立刻消失而是继续存在一段时间然后才显示为16跳最后被彻底删掉。这个“延迟消失”的过程就是抑制计时器在起作用。5.3 计数到无穷实验计数到无穷是RIP最著名的“理论事故”亲手做出来比看十遍教材都管用。实验环境我放在环形拓扑里的一个独立网段上思路是让某个网段只在一个方向上有真实来源然后切断来源观察这条路由在环里的跳数如何一轮一轮增长直到顶到16跳变成不可达。具体过程大致是这样R1上有一个Loopback99模拟10.99.1.0/24R2从R1学到这个网段跳数1R3从R2再学到跳数2。然后我把R1的Loopback99shutdownR1失去了直连路由但它仍然有可能从R2或R3重新学到一条关于10.99.1.0/24的“二手信息”并在此基础上继续对外通告跳数就会从1变2、2变3。在我把计时器改成5秒后观察时间会明显缩短你能看到这样一条路由的跳数一路爬升最后停在16跳成为一个不可达条目。这里有一个非常现实的实验提醒如果你怎么等跳数都不增长先检查自己是不是忘了关水平分割。默认开启水平分割会极大阻碍计数到无穷的发生这也是为什么很多教材里的环路实验需要故意关闭split-horizon才能复现。我在实验里明明确认了这一点才理解教材上的环路图为什么都画成那种形状。5.4 断链收敛实测场景防环机制单独测完我建议做一个综合的收敛实验收尾。场景是R2访问R3的Loopback 172.16.3.0/24初始情况下R2和R3直连这条路由在R2上的跳数是1。先把R3连R1的接口shutdown这时R3到R1的所有路由都只能绕行R2R2到172.16.3.0仍然是1跳不受影响但R1到172.16.3.0变成2跳需要等待触发更新和周期更新把新状态传到全网。然后shutdown R2连R3的接口两边的直连全部断了R2看172.16.3.0只剩下一条绕行路径R2到R1再到R3跳数变成2。最后把R1连R3的接口也shutdown整个网络里没有任何路径能到达172.16.3.0了R2上的这条路由会经历跳数增加、变成16跳、最后被刷新的完整过程。这个过程做下来你对“收敛”二字的理解会和之前完全不同。它不是瞬时完成的而是一系列计时器、防环机制、触发更新交织作用的结果。尤其值得观察的是在链路故障发生后中间会有一段“旧路由还在用”的窗口期这就是RIP在生产环境里不可用的核心原因。6. RIPv2进阶特性实验6.1 无类路由与VLSM验证RIPv2区别于RIPv1最重要的一点就是报文中携带掩码这让变长子网掩码在RIP网络里成为可能。为了验证这一点我在R1上额外加了一个Loopback2和Loopback3分别配置成10.10.10.1/25和10.10.10.129/25这两个子网都属于10.10.10.0这个网段但掩码是25位。在RIPv2正常工作的前提下R2的路由表里能同时看到10.10.10.0/25和10.10.10.128/25两个独立条目。但如果同一拓扑换成RIPv1这两个条目大概率会被汇总成一个10.10.10.0/24甚至更粗的10.0.0.0/8导致路由不可达。这就是RIPv2支持VLSM的直观证明。我建议每个做RIP实验的人都亲手配一次这个验证过程因为“无类路由”这个抽象概念必须在路由表里看到精确掩码才算真正理解。6.2 路由认证配置RIPv2认证是一个常被忽略、但实验起来很有意思的点。认证要在接口下配置而不是在router rip进程里。以R2和R3之间的链路为例在两个设备上分别配置先是R2R2(config)# key chain RIPKEY R2(config-keychain)# key 1 R2(config-keychain-key)# key-string cisco123 R2(config)# interface Serial1/1 R2(config-if)# ip rip authentication key-chain RIPKEY R2(config-if)# ip rip authentication mode md5R3的Serial1/0做相同配置。配置完成后再看R2和R3之间的路由更新它们就会使用MD5摘要进行认证。做这个实验的时候我故意把R1的认证配置成明文模式R2那边还是MD5结果两边什么路由都学不到了。抓包一看报文还在发但认证字段不匹配接收方直接丢弃更新。真正的生产环境里RIP认证有一堆细节值得注意明文认证的密码会直接在报文里可见Wireshark一抓就暴露了所以能上MD5就上MD5密钥链里可以配置多把密钥滚动切换时把所有设备的新密钥都先配好再切换旧密钥不然会瞬间断路由。这些经验属于文档不写、但上线时要命的细节。6.3 手动汇总与被动接口RIPv2支持在接口下手动汇总这个特性在控制路由表规模时很实用。我在R1上先把192.168.1.0/24和192.168.2.0/24汇总成192.168.0.0/16然后在R1连接R2的串口下配置R1(config)# interface Serial1/0 R1(config-if)# ip summary-address rip 192.168.0.0 255.255.0.0配置完后去R2上看路由表原来两条192.168.x.0/24条目变成了一条192.168.0.0/16。这大大减少了路由条目数量代价是路由粒度变粗一旦拓扑里出现不连续的子网汇总可能把细路由遮住。实验里可以尝试在不同接口上汇总观察路由表变化。被动接口的处理更有意思。RIP的被动接口不会发送路由更新但仍然能接收更新。很多排错场景里有人把某个接口设置成被动接口以为路由就学不到了结果发现路由表还在变就是这个机制在作怪。我在实验时把所有Loopback口都设置成被动接口让它们只作为终端网段被通告而不去主动发送RIP报文R1(config-router)# passive-interface Loopback0 R1(config-router)# passive-interface Loopback1这个配置在理论上很简单但它反映了一个重要的组网理念动态路由协议的参与面要尽量收敛不需要交换路由信息的接口就不要让它在协议里乱说话。这样既能减少不必要的流量又能避免误通告管理网段。7. 常见故障与排查思路7.1 路由学不到怎么办做RIP实验遇到最多的故障就是“明明配置了network怎么对端路由表里什么都没有”。按我的经验排查顺序应该是接口物理状态、IP连通性、network宣告、版本一致性、访问控制。先show ip interface brief确认所有接口都是up/up串口忘了no shutdown是低年级事故但发生率极高。再用ping验证直连IP能通直连都不通就别谈路由协议了。network宣告排查时用show ip protocols看接口有没有被包含进RIP进程如果Router rip进程里显示的接口列表里少了某个接口八成是network没写全。版本一致性也很常见一台设备version 1另一台version 2两台根本说不上话RIPv1的广播报文RIPv2能收但解析行为不一样RIP的debug信息会告诉你收到了版本不匹配的报文。最后还有一个我踩过的坑如果中间串了一台三层交换机记得检查交换机上是否有ACL把UDP 520端口给deny了。实验环境可能没这问题但扩展到真实环境时安全策略永远是排在第一位的怀疑对象。7.2 路由环路与震荡路由环路的典型表现是跳数持续增长最后停在16跳。排查环路的常规动作是看路由表里有没有来自“非最优邻居”的条目。在环形拓扑里如果你看到某个条目一会儿跳数是1一会儿跳数是2大概率是周期更新还没完全同步等两个更新周期再看就稳定了。如果环路持续不消检查水平分割是否被意外关闭。Cisco设备上默认开启水平分割但有些配置模板或老版本IOS行为可能不同。另一个需要留意的场景是多厂商设备混跑不同厂商对RIP默认计时器的实现细节可能存在差异这会导致收敛节奏不一致进而出现临时环路。实验里要模拟多厂商就用GNS3同时跑思科和H3C镜像观察到的现象会很有意思。7.3 版本不匹配RIPv1和RIPv2混跑是一个复杂的兼容性话题。我做过一个测试R1用RIPv2R2用RIPv1R1发送的组播RIPv2报文R2能收到但R2处理时因为报文格式不一样它只认里面的有一部分信息学习出来的路由往往带着错误掩码甚至干脆学不进来。反过来R2用v1广播R1用v2接收R1能解析v1报文但同样可能因为掩码缺失产生问题。最稳妥的生产配置是全网明确指定版本并确保所有设备一致。做实验时用show ip protocols一眼就能看出每台设备的版本排查版本问题是最快的。7.4 debug与抓包排错高招RIP排错最强大的工具是debug ip rip输出直观到我觉得比OSPF的debug友好得多。典型输出长这样RIP: sending v2 update to 224.0.0.9 via Serial1/0 (10.0.12.1) RIP: build update entries 192.168.1.0/24 via 0.0.0.0 metric 1, tag 0 192.168.2.0/24 via 0.0.0.0 metric 1, tag 0 RIP: received v2 update from 10.0.12.2 via Serial1/0 172.16.2.0/24 via 0.0.0.0 metric 1看到sending和received两条日志就说明报文收发链路是通的。如果只看到sending没看到received重点检查对端有没有把报文发回来。如果received报文里有metric 16的条目说明对端在向你通告一条毒化路由。debug输出里如果冒出一堆“version”相关提示版本不一致基本实锤。抓包排错和debug结合使用效果达到最佳先看Wireshark有没有报文确认底层连通性再看报文的来源和目的地址确认协议是不是在网络里正常传播最后看RIP payload里的条目内容核对掩码、度量、下一跳字段是否正确。三看做完RIP层面的故障基本都能定位。我个人在实际操作中最深的体会是RIP这类老协议虽然离生产环境越来越远但它恰恰是把“动态路由协议怎么回事”讲得最通透的教材。把RIP实验完整做一遍你再看OSPF和BGP时会完全不慌因为收敛、防环、度量、报文交互、计时器这些底层概念全部有了具象的支撑。最后分享一个小技巧做完这套实验后不要急着拆拓扑把TAR改成OSPF比较它们在同一个环形拓扑下断链后的收敛速度差异以及路由表条目和报文格式的区别。这个延伸实验比单独学任何协议都更能帮你建立一整张路由协议的知识网络。
返回列表