ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RIP路由协议实验详解:从配置命令到防环机制与收敛排错

RIP路由协议实验详解:从配置命令到防环机制与收敛排错 如果你在网上搜“RIP 实验”大概率会翻到一堆“照着敲命令”的教程router rip、network 192.168.1.0然后show ip route看有没有 R 条目完事收工。但我在带新人时发现真正能讲清楚“RIP 为什么要这么设计”的人很少。这篇文章我想从一个老网络工程师的角度把 RIP 实验从头拆到尾不只告诉你命令怎么敲更要讲清楚每个设计背后的动机以及那些教材上不会写、只有实际动手才会踩到的坑。RIPRouting Information Protocol是最典型、也最老牌的距离向量路由协议三十多年过去它仍然是网络工程课程里绕不开的第一个动态路由实验。这个实验适合三类人正在备考网络认证的学生、刚入行的网络运维新人、以及想系统补一遍路由协议原理的开发或测试同学。做完这个实验你对“动态路由到底在干什么”会有一个非常直观的体感这个体感比背一百条命令都值钱。1. 先把RIP说清楚为什么一个三十多年的老协议至今还是必做实验1.1 RIP到底是怎么“走路”的RIP 的核心思想用一句话概括就是每台路由器只告诉邻居“我知道哪些网段、到我这里要多远”然后邻居根据这些信息决定自己怎么走。它不需要知道全网的拓扑结构不需要知道路径上经过哪些路由器只需要维护一张“目的网段 下一跳 跳数”的表。这个算法在教科书上叫 Bellman-Ford在工程圈里更常用的叫法是“距离向量算法”。你可以把它理解成小镇问路你不知道火车站具体怎么走但你邻居告诉你“先到邮局邮局到火车站还有 3 公里”于是你就记下“火车站 邮局方向距离 3 你到邮局的距离”。每一台路由器都这么干路由信息就沿着网络一点一点传开了。关键点在于RIP 的每一次通告都带着“我目前的路由表”而不是“我看到的具体拓扑”。这带来一个天然优势实现简单、占用资源少、任何一台普通路由器都能跑。但也埋下一个著名的隐患路由器过于信任邻居如果邻居传了一条错误路由错误会被一路放大这也就是后面要讲的“计数到无穷”问题。1.2 这个实验能让你带走什么很多新手做完 RIP 实验最大的感受是“就这几条命令而已”。但实际这个实验的真正价值不在命令而在三件事理解分布式路由收敛的真实过程。RIP 收敛很慢慢到你能肉眼观察到一个坏消息是怎么在网络里“蔓延”的这种慢本身就是最好的教学素材。相比之下 OSPF 秒级收敛你还没来得及看过程就已经结束了。建立“控制平面”和“数据平面”的区分意识。路由协议跑的是控制平面它只负责在路由表里写条目数据平面负责真正转发。做实验时反复切换show ip route和抓包视角能帮你把这个抽象概念焊死在脑子里。理解距离向量协议的通病环路、慢收敛、跳数限制。这些坑不是 RIP 独有的EIGRP 作为“高级距离向量协议”也有类似的逻辑只是用 DUAL 算法解决了部分问题。所以别觉得 RIP 老就轻视它。它就像学编程先学冒泡排序一样算法本身不实用但它把“循环、交换、比较”这些基本概念讲透了。1.3 RIPv1、RIPv2、RIPng 别混为一谈做实验之前先明确一点我们说的“RIP 实验”基本就是指 RIPv2。三个版本差异很大特性RIPv1RIPv2RIPng地址类型IPv4IPv4IPv6是否支持 VLSM/无类路由不支持支持支持更新报文发送方式广播 255.255.255.255组播 224.0.0.9组播 FF02::9传输层协议UDP 520UDP 520UDP 521认证能力无明文 / MD5自带 IPsec 扩展自动汇总强制有类汇总默认有类汇总可关闭不支持传统自动汇总RIPv1 是纯有类协议它不携带子网掩码所以无法支持变长子网掩码和 CIDR。只要网络里出现不连续子网RIPv1 基本就废了。RIPv2 在报文里加上了子网掩码字段还引入了组播更新和认证这才是真正可以在生产环境里“勉强一用”的版本。实验里所有路由器都应该显式指定version 2并用no auto-summary关掉自动汇总否则你会在不知不觉中踩到有类汇总的坑。2. 搭实验环境模拟器选型、拓扑设计与地址规划2.1 模拟器怎么选EVE-NG、GNS3 还是 Packet Tracer做 RIP 实验不需要真机模拟器完全够用因为 RIP 的实现太成熟了不存在模拟器“模拟得不真实”的问题。我个人的推荐顺序是EVE-NG我最常用。拓扑拖拽直观集成 Wireshark 抓包跑思科 IOL 镜像非常稳定。缺点是初次安装略折腾需要准备镜像文件。GNS3灵活度高可以混合真机、虚拟机社区资料多。缺点是拓扑大一点时 CPU 占用很高抓包配置稍微麻烦。Packet Tracer新手友好命令提示完善但它不是真实 IOS部分 debug 命令和细节行为跟真机有差异。如果你手边只有 PT做基础实验没问题但我不建议用它来验证“防环策略”这类需要观察报文细节的内容。我建议直接上 EVE-NG 或者 GNS3加载 c7200 或 IOL 镜像。理由很简单RIP 实验最有价值的环节是抓包观察更新报文这两个平台的抓包体验远好于 PT。2.2 一个三台路由器的标准拓扑地址怎么分实验拓扑越简单越好但也不能简单到只剩两台路由器否则你看不到“中间人转发路由”的过程。我常用的拓扑是三台路由器链式互联模拟一个总部加两个分支的简化结构[Lo0:192.168.1.1/24] [Lo0:192.168.3.1/24] | | [R1] --- [R2] --- [R3] Gi0/0 10.0.12.1/30 Gi0/0 10.0.23.3/30 Gi0/1 10.0.12.2/30 Gi0/0 10.0.23.2/30地址规划如下设备接口IP 地址用途R1Gi0/010.0.12.1/30连接 R2 互联地址R1Loopback0192.168.1.1/24模拟业务网段 AR2Gi0/010.0.12.2/30连接 R1 互联地址R2Gi0/110.0.23.2/30连接 R3 互联地址R3Gi0/010.0.23.3/30连接 R2 互联地址R3Loopback0192.168.3.1/24模拟业务网段 B注意两个细节互联地址用 /30。点对点链路只需要两个可用地址/30 是最紧凑、最规范的选择也方便以后扩展。业务网段用 Loopback 模拟。环回口永远是 up 的不会受物理链路波动影响适合作为稳定路由源。如果你想更贴近真实环境可以在 R1 和 R3 后面各接一台 PC 或 VPCS把网关指向路由器接口测试ping的效果是一样的。2.3 基础配置先把接口点亮在敲 RIP 之前先把所有接口 IP 配好确保直连能通。这个步骤最容易丢三落四尤其是忘记no shutdown导致后面排错排了半天发现是物理接口 down。! R1 interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.252 no shutdown ! interface Loopback0 ip address 192.168.1.1 255.255.255.0R2、R3 同理把表格里的地址填进去。配完之后在 R1 上先ping 10.0.12.2R2 上ping 10.0.23.3确认直连链路都通再进入下一步。我见过太多人一上来就配 RIP配完发现不通结果第一步就输在接口没起来。3. 动手配置RIP从宣告网段到路由表出现“R”条目的全过程3.1 最简配置四条命令启动 RIP在每台路由器上执行以下配置! 每台路由器都执行注意网段按各自接口调整 router rip version 2 no auto-summary network 10.0.0.0R1 还需要额外宣告业务网段R1(config-router)# network 192.168.1.0R3 同理R3(config-router)# network 192.168.3.0R2 只需要宣告 10.0.0.0因为它的两个接口都在 10 网段里。配完之后等几秒在 R1 上执行R1# show ip route你应该能看到类似这样的输出R 192.168.3.0/24 [120/1] via 10.0.12.2, 00:00:12, GigabitEthernet0/0看到开头的R就知道这是 RIP 学来的路由[120/1]里 120 是 RIP 的管理距离1 是到达目标网段的跳数。R1 到 192.168.3.0 需要经过 R2 一台路由器所以跳数是 1不是 0——这一点经常有人搞混直连路由的跳数才是 0RIP 学来的路由跳数至少是 1。3.2 network 命令的有类怪癖新手最容易困惑的是network命令为什么不能直接写network 10.0.12.1或者network 10.0.12.0因为 RIP 的network命令本质是“匹配接口”而不是“宣告精确网段”。它采用有类匹配规则你写network 10.0.0.0它会把路由器上所有属于 10.0.0.0/8 的接口全部激活到 RIP 进程中你写network 192.168.1.0它匹配的是 C 类主类网 192.168.1.0/24恰好和你的实际子网一致。如果你试图写network 10.0.12.0 0.0.0.3这种带通配符的形式IOS 会直接报错或忽略因为 RIP 不支持 OSPF 那种 wildcard 写法。这一步理解到位后面看别人配置就不会一头雾水。3.3 验证命令怎么用五条命令看懂 RIP 全貌配置完成不等于实验完成验证才是重头戏。建议按以下顺序操作show ip route看路由表里有没有 R 条目确认是否学到目标网段。show ip protocols看 RIP 进程状态包括版本、计时器、已宣告的网络、路由源。如果这里没有出现邻居地址说明邻居关系根本没建立。show ip rip database看 RIP 数据库比路由表更详细会列出每条路由的来源接口和度量。debug ip rip实时查看 RIP 更新报文的发送和接收过程。注意生产环境慎用实验环境随便开。show ip interface brief确认所有接口状态和 IP 地址正常这是排错第一步。R1# show ip protocols Routing Protocol is rip Sending updates every 30 seconds, next due in 10 seconds Invalid after 180 seconds, hold down 180, flushed after 240 Redistributing: rip Automatic network summarization is not in effect Maximum path: 4 Routing for Networks: 10.0.0.0 192.168.1.0 Routing Information Sources: Gateway Distance Last Update 10.0.12.2 120 00:00:04看到Sending updates every 30 seconds和Routing Information Sources里有对端地址说明 RIP 已经正常工作了。3.4 把链路断开再看收敛到底有多慢RIP 实验最值得体验的环节就是观察它的“慢”。在 R2 上把 Gi0/1 接口shutdown然后在 R1 上计时观察! R2 interface GigabitEthernet0/1 shutdown你会发现R1 路由表里的 192.168.3.0/24 条目不会立刻消失而是继续存在一段时间。要等到失效计时器默认 180 秒到期后再经过抑制计时器默认 180 秒最终在刷新计时器默认 240 秒到时后彻底删掉。这漫长的几分钟就是距离向量协议“坏消息传得慢”的真实写照。你可以临时把计时器调小快速复现整个过程R1(config-router)# timers basic 5 20 20 30注意三台路由器的计时器必须保持一致否则会出现更新不同步的问题。演示完记得改回默认值。这个体验比任何教科书都直观为什么生产网络不用 RIP就凭这个收敛速度就够了。4. 想让实验更有含金量RIP的计时器、防环机制与路由汇总4.1 四个计时器是怎么配合的RIP 的收敛行为由四个计时器控制理解它们才能理解 RIP 的“心情”计时器默认值作用更新计时器 Update30 秒周期性向邻居发送完整路由表更新失效计时器 Invalid180 秒路由超过 180 秒没有收到更新标记为可能失效抑制计时器 Holddown180 秒标记为失效后暂时不接受关于该路由的更新防止路由抖动刷新计时器 Flush240 秒超过 240 秒仍无更新从路由表中彻底删除该路由四个计时器配合的逻辑是默认每 30 秒收到一次更新如果连续 6 个周期没收到180 秒就认为路由可能失效进入抑制状态抑制期内即使收到一个看似更优的新路由也不轻易采纳直到 240 秒彻底放弃。这个设计在今天看来很笨拙但在当年链路不稳定、设备性能弱的背景下它是防止网络振荡、避免路由频繁翻覆的务实选择。实验里你可以用timers basic调整这些值观察不同参数下收敛速度的变化这比死记默认值有用得多。4.2 防环三件套水平分割、毒性反转、触发更新距离向量协议最大的敌人是路由环路。RIP 防环靠三个机制实验里建议配合debug ip rip逐一观察水平分割Split Horizon从某个接口学到的路由不再从这个接口通告回去。因为邻居自己知道这条路由你把同样的路由再发给它毫无意义反而可能让它误以为存在一条新路径。Cisco 路由器默认开启水平分割这也是为什么你在 debug 输出里看不到“把刚收到的路由又发回去”的原因。毒性反转Poison Reverse当一条路由失效时路由器以跳数 16不可达的形式通告给邻居明确告诉对方“这条路断了”。它比单纯不通告更主动能加速坏消息的传播。默认情况下 Cisco IOS 在部分接口上会结合水平分割使用实验里你可以关闭水平分割no ip split-horizon后观察两者行为的差异。触发更新Triggered Update正常情况下 RIP 每 30 秒发一次完整路由表但链路状态发生变化时路由器会立即发送更新不用等下一个周期。你可以在 R2 上 shutdown 一个接口立刻看 debug 输出会发现马上就有更新报文发出。这三个机制合在一起能有效缓解但无法根治环路问题。RIP 最终防线是 15 跳上限和 16 跳代表不可达——当错误路由在几台路由器之间互相传递、跳数不断增长时到 16 就会被当作不可达路由丢弃这就是“计数到无穷”的收场方式。4.3 路由汇总从有类自动汇总到手动汇总RIP 在默认情况下会在主类网络边界自动汇总。举个例子如果 R1 同时连接 192.168.1.0/24 和 192.168.2.0/24 两个网段在没有执行no auto-summary的情况下RIP 通告给邻居的是聚合后的 192.168.1.0/16而不是两个精确网段。这在连续子网场景下问题不大但一旦网络里存在不连续子网自动汇总就致命了。想象一下R1 后面有 172.16.1.0/24R3 后面有 172.16.3.0/24中间隔着 10 网段。如果两台路由器都各自把 172.16.1.0 和 172.16.3.0 汇总成 172.16.0.0/16 通告给 R2R2 就彻底懵了——同一条路由来自两个方向它不知道该往哪边走结果就是丢包。所以实验里一定要执行no auto-summary让 RIPv2 通告精确子网。如果想要手动汇总可以在接口下配置R2(config)# interface GigabitEthernet0/0 R2(config-if)# ip summary-address rip 192.168.0.0 255.255.252.0手动汇总能减少路由条目、隐藏局部网络抖动但要确保被汇总的子网都在同一个出接口方向可达否则会造成路由黑洞。4.4 给RIP加认证RIPv2安全配置很多人不知道 RIPv2 是支持认证的。在实验里加上 MD5 认证能直观感受“路由协议也不能裸奔”的道理。配置如下在 R1 和 R2 上分别定义密钥链key chain RIPKEY key 1 key-string cisco123然后在互联接口上启用认证interface GigabitEthernet0/0 ip rip authentication key-chain RIPKEY ip rip authentication mode md5两边密钥不一致时路由更新会被直接丢弃路由表里立刻丢失从对端学到的条目。这个实验做完你会对“协议安全”有更具体的认识——攻击者如果能在链路中伪装一台路由器发送虚假 RIP 更新整个路由表都可能被污染认证就是第一道防线。5. 我在实验里踩过的坑版本不一致、静默接口、路由回灌5.1 版本不一致导致路由表“时有时无”这个坑我印象太深了。有一回做实验R1 和 R3 都配了version 2R2 因为当时图省事没敲 version 命令保持默认配置。结果 R1 能学到 192.168.3.0/24R3 却学不到 192.168.1.0/24路由表出现单向缺失。原因在于 Cisco IOS 的默认行为是发送 RIPv1 报文但可以同时接收 RIPv1 和 RIPv2 报文。也就是说R2 默认对外发的是 RIPv1R1 那边配置了version 2后只接收 RIPv2自然就丢弃了 R2 发来的 RIPv1 更新而 R2 自己却能接收 R1 发来的 RIPv2 更新所以形成了单向路由。从此我养成了一个习惯所有路由器显式配置版本绝不依赖默认值。每一台都敲version 2或者在接口下手动指定interface GigabitEthernet0/0 ip rip send version 2 ip rip receive version 2排查这个问题时debug ip rip是最快的手段。看到报错信息反复提到 version mismatch基本就能定位。5.2 passive-interface 忘了配业务网段被无意义通告拓扑里 R1 的 Loopback0 模拟业务网段这个接口本身不需要向外发送 RIP 更新因为它是一个终端网段没有其他路由器需要从它这里学习路由。但如果我不在 RIP 进程里把它设成被动接口路由器还是会周期性地向这个接口对应方向发送更新报文。在真实网络里如果这个接口连接的是 PC 所在的三层交换机或终端大量广播/组播的 RIP 更新报文会白白占用带宽还可能被安全设备记录成异常流量。配置方法router rip passive-interface Loopback0注意passive-interface只是禁止发送路由更新不影响接收。但 Loopback0 本身没有邻居接收也没有意义纯属节省资源。5.3 路由回灌与环路计数到无穷有一段时间我在研究帧中继环境下的 RIP 行为在实验里关闭了物理接口的水平分割结果很快就看到一条路由的跳数在几台路由器之间“涨”上去直到 16 跳变成不可达。这就是典型的路由回灌R3 把 192.168.3.0/24 通告给 R2R2 又把它通告给 R1如果 R1 再把这个路由通告回 R2R2 看到“咦有个新来源说去 192.168.3.0 只要 2 跳”它可能采纳并继续传播跳数越涨越高。最终 RIP 靠 16 跳上限止损但它消耗了相当长一段时间期间网络质量已经受到严重影响。这个实验不一定容易复现但你只要理解了“水平分割为何必要”以后在任何路由协议里看到split horizon选项都不会觉得它可有可无。5.4 排查链路从路由表缺失到抓包定位遇到“RIP 路由学不到”的问题我建议按这个顺序排查show ip interface brief确认接口都 upIP 地址无误。show ip route确认直连路由正常排除接口配置问题。show ip protocols确认 RIP 进程里宣告了正确网段版本和计时器一致。debug ip rip确认是否收到更新、有无版本/认证不匹配的报错。抓包分析在 EVE-NG 里右键接口启动 Wireshark过滤udp.port 520看更新报文是否到达对端。抓包这一步很多人会跳过但它恰恰是区分“路由器配置错误”和“链路/邻居问题”的黄金手段。RIP 报文里直接写着源路由器的路由表一眼就能看出对端到底在通告什么、有没有把你要的网段发出来。6. 实验做完了把RIP放进更大的图景里看6.1 RIP、OSPF、EIGRP 的取舍做完 RIP 实验建议顺手把 OSPF 和 EIGRP 的配置也过一遍三张表放在一起看路由协议的演进脉络一下就清晰了特性RIPOSPFEIGRP算法类型距离向量链路状态高级距离向量度量跳数开销带宽延迟等复合度量带宽延迟等收敛速度慢秒级~分钟级快秒级快秒级是否携带子网掩码RIPv2 支持支持支持防环机制水平分割、毒性反转、最大跳数SPF 算法天然无环DUAL 算法、可行后继协议开销低较高中等适用规模小型网络中大型企业网中大型但思科私有OSPF 之所以能成为企业网主流核心在于它把“全网拓扑”装进了每台路由器的 LSDB 里用 SPF 算法计算最短路径天然避免了环路的反复试探。EIGRP 则是在距离向量基础上加入了 DUAL 算法通过记录“可行后继”实现快速收敛但它属于思科私有协议跨厂商环境用不了。6.2 现实里还有 RIP 吗每次带实验课都有人问“既然 OSPF 这么强RIP 是不是该从教材里删掉了”说实话生产环境里 RIP 确实很少见但它并没有完全绝迹一些超小型网络、分支机构或老旧设备互操作场景设备性能太弱跑不动 OSPFRIP 反而是最稳的选择。部分厂商的默认路由下发场景会用到 RIP比如出口路由器收到一条默认路由想告诉内网所有路由器用 RIP 的default-information originate一条命令就能搞定。嵌入式网络设备、IoT 网关、部分私网场景还有 RIP 的身影因为它协议栈简单、报文轻量、实现代码少。大量网络仿真和教学环境里RIP 依然是讲“动态路由第一课”的标准教材。它的历史地位无法替代。就像你不会用冒泡排序做生产系统排序但绝不能不会写冒泡排序。6.3 下一步可以玩什么做完基础 RIP 实验后续还有几个方向值得延伸路由重发布把 OSPF 路由重发布进 RIP或反过来观察两种协议之间如何交换路由你会碰到“度量转换”的问题。默认路由注入用default-information originate让 RIP 向全网通告默认路由配合出口路由器做简单的内网上网实验。RIPng切到 IPv6 环境配置ipv6 router rip报文端口变成 521组播地址变成 FF02::9核心逻辑完全一致正好巩固“协议与地址族解耦”的概念。FRR 实战在 Ubuntu 上装 FRRouting用真实 Linux 机器跑 RIP跟思科路由器对接体验生产级开源路由协议栈。我个人在实际操作中最深的体会是RIP 实验的“慢收敛”不是缺点而是最好的老师。那几分钟的路由失效等待让我第一次理解了分布式算法里“收敛”二字的真实分量。后来看 OSPF 秒级收敛、看 BGP 的路径属性都能从 RIP 实验里找到对应的直觉基础。所以别急着抄命令交差把每条更新报文翻出来看几遍把每个计时器的变化亲手调一遍这个实验才真正做完。
返回列表