ARTICLE DETAIL

资讯详情

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

RIPv2动态路由实验详解:从拓扑搭建到防环机制与排障实战

RIPv2动态路由实验详解:从拓扑搭建到防环机制与排障实战 1. 实验背景与整体设计思路1.1 为什么拿RIP开刀动态路由的入门必修课说起动态路由很多人第一反应是OSPF、BGP这些高端货RIP往往被当成老古董。但我在带网络实验课和做项目排障的过程中越来越觉得RIP是个被低估的教学工具。它简单到什么程度整个协议核心就一句话邻居之间定期互抄路由表谁跳数少就听谁的。但正因为简单它把动态路由的三大核心问题——度量值计算、路由交换机制、环路防护——全都暴露在了阳光下特别适合用来建立对动态路由的直觉。这次实验我选的是RIPv2不是RIPv1。原因很直接RIPv1是分类路由协议不支持子网掩码传递现代网络里VLSM可变长子网掩码和CIDR无类域间路由遍地都是拿RIPv1做实验容易让新手产生网络地址本来就该按类划分的错误认知。RIPv2虽然老了点但支持VLSM、支持组播更新、支持认证作为入门实验协议完全够用。这篇报告适合三类人看刚接触动态路由、想在模拟器里把RIP跑通的学生准备网络工程师认证、需要理解距离矢量协议细节的备考者以及工作中偶尔要维护老网络、需要快速回忆RIP配置和排障思路的从业者。我会把实验从拓扑设计到排障完整过一遍重点讲那些课本上不会写、但实操中一定会踩的坑。1.2 实验目标拆解不是配通就完事很多人做RIP实验配置完一看路由表里有了对端网段就觉得实验结束了。这次我给自己定的验收标准要严格得多拆开看有四个层面第一正确性。全网路由表完整且准确每个路由器都能学到所有非直连网段的路由条目且下一跳和度量值符合预期。这是底线。第二收敛性。模拟链路故障观察RIP完成路由重新计算的时间理解为什么RIP的收敛速度在动态路由协议里垫底。这一条能直接解释生产环境里为什么没人用RIP做核心路由。第三安全性。RIP没有原生的邻居概念任何能收到广播/组播报文的路由器都能参与路由交换。我要验证认证机制能否挡住非法邻居。第四对协议缺陷的认知。包括16跳上限、最大收敛时间、环路问题。知道一个协议有什么毛病比知道怎么配它更重要。2. 实验环境与拓扑搭建2.1 模拟器选型为什么我用的是GNS3而不是Packet Tracer做RIP实验模拟器无非三个选择Packet Tracer、GNS3、EVE-NG。我这次用GNS3不是因为它比别的强多少而是这个实验要验证的东西Packet Tracer基本给不了。Packet Tracer对RIP的支持是能用但它的路由表字段是简化过的看不到RIP特有的活动计时器细节也模拟不了真正的接口状态抖动带来的路由震荡。GNS3跑的是真实IOS镜像所有show命令的输出和真实设备一模一样排障思路可以无缝迁移到生产环境。EVE-NG也不错但网页交互在做抓包分析时不如GNS3的Wireshark联动方便。设备镜像我用的c3725IOS版本12.4。这个镜像对RIP实验来说性能绰绰有余而且对老手来说12.4的接口命名和路由表输出跟现在主流设备差异不大不会产生误导。2.2 拓扑设计与地址规划拓扑我搭了一个三路由器串行链路加一条冗余链路形成环路。为什么刻意做环路因为RIP的防环机制水平分割、毒性反转、触发更新只有在真实环路拓扑里才能讲清楚。没有环路的RIP实验就像没有故障的排障练习效果打折一半。设备连接关系是这样的R1的G0/0口连接一台PC模拟终端G0/1口连R2的G0/0G0/2口连R3的G0/0R2的G0/1口连R3的G0/1R3的G0/2口连接一台PC这样就形成了一个三角形环路。地址规划我遵循一个原则所有互连环路的掩码统一用30位终端网段用24位。这样设计的好处是30位掩码让每条链路严格只有两个可用地址避免歧义而且能直观展示RIPv2对VLSM的支持能力——R1学到R3下面的PC网段时前缀和掩码必须一起传过来。具体规划如下表设备接口IP地址掩码对端设备R1G0/0192.168.10.1255.255.255.0PC1R1G0/110.0.12.1255.255.255.252R2 G0/0R1G0/210.0.13.1255.255.255.252R3 G0/0R2G0/010.0.12.2255.255.255.252R1 G0/1R2G0/110.0.23.2255.255.255.252R3 G0/1R3G0/010.0.13.3255.255.255.252R1 G0/2R3G0/110.0.23.3255.255.255.252R2 G0/1R3G0/2192.168.30.1255.255.255.0PC3这套规划里最关键的是10.0.x.x网段的命名。10.0.12.0/30表示R1和R2之间的链路10.0.13.0/30表示R1和R3之间的链路10.0.23.0/30表示R2和R3之间的链路。看到网络号就能立刻反应出是哪条链路这在排障时非常省时间。做实验报告或者工程文档地址规划的可读性比什么都重要。2.3 接口基础配置地址配上去之前先把所有接口的协议状态确认清楚。我习惯用show ip interface brief快速过一遍确保所有接口都是up/up状态然后再配RIP。这一步别省很多路由学不到的问题根源其实就是接口没起来但新手往往直接怀疑RIP配错了。接口配置没什么特殊的唯一要提醒的是GNS3里默认接口都是开启的但如果你用的是Physical Router或者某些云主机镜像接口可能处于shutdown状态需要手动no shutdown。这个坑我在实验课上见过太多次了。3. RIP核心配置与原理验证3.1 最小化配置三条命令跑通全网RIP最让人舒服的一点就是配置极简。各路由器的RIP配置如下以R1为例R1(config)# router rip R1(config-router)# version 2 R1(config-router)# network 192.168.10.0 R1(config-router)# network 10.0.12.0 R1(config-router)# network 10.0.13.0 R1(config-router)# no auto-summary这里有两个关键点必须解释清楚。第一network命令后面跟的不是接口IP而是网段。路由器会把所有接口地址逐一比对只要某个接口的IP落在了network声明的网段里该接口就启用RIP开始收发路由更新。这种设计是RIP和其他动态路由协议最本质的区别之一OSPF用network声明区域EIGRP用network声明网段但RIP的network是接口级参与的开关。第二no auto-summary为什么必须写。RIPv2默认开启自动汇总如果不开这个命令R1会把10.0.12.0/30和10.0.13.0/30汇总成10.0.0.0/8通告出去。在实验拓扑里这不会导致完全不通但你会看到路由表里出现一堆不精确的条目比如R3学到的是10.0.0.0/8而不是细致的10.0.12.0/30。对于现代网络这种汇总行为在路由环路和次优路径上是隐患。所以在RIPv2配置里no auto-summary是标配。R2和R3的配置只改network声明即可逻辑完全一样。配置完成后等大概十几秒RIP的初始更新间隔是30秒内随机show ip route应该能看到非直连网段出现在路由表里。3.2 路由表解读度量值是怎么跳出来的RIP收敛后的路由表以R1为例应该是这个样子R1# show ip route Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area ... Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks C 10.0.12.0/30 is directly connected, GigabitEthernet0/1 C 10.0.13.0/30 is directly connected, GigabitEthernet0/2 R 10.0.23.0/30 [120/1] via 10.0.12.2, 00:00:12, GigabitEthernet0/1 R 192.168.30.0/24 [120/2] via 10.0.13.3, 00:00:22, GigabitEthernet0/2我来逐字段拆解这条路由条目[120/1]里的120是管理距离表示RIP路由的可信度1是度量值也就是跳数。R1到10.0.23.0/30要经过R2一台中间路由器所以跳数为1。192.168.30.0/24的度量值是2因为路径是R1→R3→PC3网段经过两台路由器。这里有个细节值得注意R1到达192.168.30.0/24其实有两条物理路径一条经R2再到R3跳数为2一条直接经R3跳数也为2。RIP在等度量值的情况下会保留先学到的那条这也暴露了RIP的一个典型弱点——它不关心链路带宽和延迟只数跳数。如果你在实际项目中试图用RIP做负载均衡会发现流量在两条不等价的链路上分配得很任性因为RIP根本不认识负载这个概念。再注意路由条目最后的时间戳00:00:12这是路由信息的年龄。RIP规定如果180秒内没有收到关于某条路由的更新这条路由的计时器超时会被标记为不可达再过60秒抑制时间耗尽就会从路由表里删除。这就是为什么RIP收敛慢——一个链路故障可能要几分钟才能反映到全网路由表上。3.3 环路防护机制实测水平分割和毒性反转RIP是距离矢量协议天然面临路由环路的威胁。我在拓扑里故意做了环路就是为了实测三种防环机制的表现。水平分割的规则一句话从哪个接口学到的路由不再从这个接口通告回去。这样能防止两台路由器之间互相教坏对方。我在R1上把10.0.12.0/30这条直连路由通告给R3之后R3绝不会把这条路由再从连接R1的接口通告回来避免了A告诉B、B又告诉A的死循环。验证水平分割的方法很直观在R1上关闭G0/2接口也就是R1到R3的直连链路然后立即show ip route观察10.0.12.0/30这条路由。你会发现它并没有消失因为还有其他路径可以学到。但如果网络中没有水平分割这条路由会在R1和R2之间反复通告度量值不断累加直到16跳。毒性反转是水平分割的加强版。它规定从某接口学到的路由在通告回去时把度量值设为16跳即不可达明确告诉上游这条路由已经废了。我在R2上故意shutdown了通向R3的接口然后立刻在R2上抓包查看它发给R1的更新报文能看到10.0.23.0/30以16跳的形式出现。这个设计非常巧妙——它不是在隐藏坏消息而是主动把坏消息以最明确的方式广播出去加速全网对故障的感知。触发更新解决的是计时器问题。RIP默认30秒周期性更新如果不做触发更新一个故障最多要等30秒才被邻居知道。而触发更新让路由器在路由表发生变化时立刻发送更新报文把收敛时间从分钟级压缩到秒级。我在GNS3里用Wireshark抓包对比了一下正常周期更新是30秒一个故障瞬间能看到立即发出的触发更新报文。需要说明的是这些机制在RIPv2里都是默认开启的不需要额外配置。但理解它们的工作原理是排障时判断路由表为什么会有这条条目的基础。比如你在路由表里看到一条16跳的路由第一反应不该是RIP坏了而应该是有设备在通告毒化路由说明上游链路确实出问题了。3.4 RIPv2与RIPv1的行为差异一个抓包的直观对比如果条件允许强烈建议在实验里把RIPv1和RIPv2各跑一遍对比它们的报文行为。我用Wireshark分别抓了两个版本的更新报文差异一目了然RIPv1的更新报文目标是255.255.255.255广播地址RIPv2的目标是224.0.0.9组播地址。这个差异在生产环境里影响很大广播会被所有设备处理组播只有加入该组播组的路由器才处理后者对无关设备的CPU打扰小得多。更重要的是报文内容里的子网掩码字段。RIPv1的报文中没有这个字段接收方只能根据IP地址的分类A类、B类、C类自己推断掩码这在有VLSM的网络里直接导致路由条目错误。RIPv2的每个路由条目都带32位掩码这也是我在拓扑里用30位掩码的原因——想验证RIPv2对VLSM的支持就得让网络里存在非分类的掩码看它能不能精确传递。我在R1上同时抓了两个版本的报文RIPv1的条目里10.0.12.0被当作B类地址处理掩码被推断为255.255.255.0或者默认的16位而实际上链路的掩码是255.255.255.252。这种错误在小实验里可能只导致路由表不优雅但在真实网络里就是路由黑洞。很多老工程师坚持在核心网络禁用RIPv1不是保守是血泪教训。4. 实验中的典型故障与排查思路4.1 现象一路由表里只有直连路由这是RIP实验里最常见的故障特点是配置完所有命令后show ip route里一个R开头的条目都没有。我的排查顺序是固定的一套按可能性从高到低排列第一步show ip interface brief检查所有接口状态。接口down是万恶之源我在GNS3里就遇到过镜像加载完成后接口处于shutdown状态的情况。第二步show running-config | section router rip看network声明。最容易犯的错是network后面写成了具体接口IP比如network 10.0.12.1。RIP的network必须声明网段写成主机地址后路由器比对接口地址时发现10.0.12.1这个地址刚好是我G0/1的地址可能碰巧也能工作但如果接口IP是10.0.12.2这样不在声明列表里的地址就会漏掉链路。严谨的写法是声明整个网段。第三步debug ip rip查看实时更新报文。这个命令能看到RIP: sending v2 update to 224.0.0.9 via GigabitEthernet0/1之类的输出如果某接口没有任何发送记录说明该接口没被network声明覆盖或者处于passive-interface状态。调试命令用完后一定记得undebug all关掉。debug ip rip在真实设备上会持续输出大量日志占用CPU资源实验做完不关会导致后续实验卡顿这在GNS3里尤为明显。4.2 现象二路由条目在16跳和正常值之间反复横跳这个故障有意思它出现在我把环路拓扑里某条链路做shutdown再no shutdown之后。路由表里10.0.23.0/30的度量值一会儿是2一会儿是16刷新频率非常高。排查发现这是RIP的计数到无穷大问题在作祟。当链路故障时相邻路由器会通告16跳的毒化路由但如果同时存在冗余路径其他路由器可能还在通告旧的有效路由导致路由信息在环路上反复震荡。RIP的机制是收到16跳的路由后路由器进入抑制状态holddown默认180秒在这段时间内不轻易接受关于该网段的新路由除非新路由的度量值更优。这个案例是个很好的教学点RIP的防环机制是组合拳而不是单兵作战。水平分割、毒性反转、抑制计时器、触发更新每个机制单独都有漏洞组合起来才能基本保证无环。但即使这样收敛时间依然可能长达180秒。如果这是一个OSPF网络收敛时间是秒级的如果是BGP取决于keepalive配置通常也不会超过分钟级。这就是为什么生产环境的核心层几乎见不到RIP。解决这个震荡问题的实操方案有两个如果只是实验环境把故障链路的接口彻底shutdown等路由表稳定后再恢复如果是生产环境最彻底的做法是换用支持快速收敛的协议。在RIP框架内做调整的空间非常有限因为计时器调太短会导致路由频繁震荡调太长又拖慢收敛本身就是个两难。4.3 现象三被动接口导致的路由学习不全配置RIP时经常有人顺手在接口模式下敲了ip rip passive然后发现某条链路上的路由始终学不全。我在实验里特意在R3的G0/0接口连接R1的那条链路上配置了被动接口观察效果。被动接口的核心逻辑是只接收RIP更新不发送RIP更新。在某些场景下这很合理比如一个连接了大量主机的接口没必要让主机参与路由协议只让它们被动接收即可。但如果在两台路由器之间的链路上误配了被动接口那端路由器就永远收不到这边的更新报文。排查这类问题我的经验是重点看两件事第一show ip protocols。这个命令会明确列出所有接口的RIP状态包括哪些是被动接口。一行一行看下来基本能定位是不是被动接口导致的单向学习问题。第二抓包确认报文方向。如果A收不到B的路由在A的入接口上抓包看有没有来自B的RIP报文。如果有报文说明B在正常发送问题在A的处理端如果没有报文看看B的接口状态和被动接口配置。这个故障的实验价值在于它能让你理解RIP的更新方向依赖关系。动态路由协议本质上是信使系统信使只单向跑信息自然传不过去。4.4 认证配置给RIP报文加一把锁RIPv2支持两种认证方式明文认证和MD5哈希认证。明文认证在生产环境基本是摆设因为抓包直接能看到密码。MD5虽然也不算强加密但至少不会明文泄露密钥而且能防止非法设备伪造RIP报文注入虚假路由。配置很简单接口模式下三行命令R1(config)# interface g0/1 R1(config-if)# ip rip authentication key-chain RIPKEY R1(config-if)# ip rip authentication mode md5 R1(config)# key chain RIPKEY R1(config-keychain)# key 1 R1(config-keychain-key)# key-string cisco123我的建议是做实验时至少配一台路由器上的一个接口然后把对端接口改成不认证或者密码不一致观察路由表的变化。你会看到认证失败后路由条目不会立刻消失而是等到老化计时器超时180秒后才被删除。这说明认证失败不是被实时拒绝而是收不到合法更新慢慢遗忘。这个认知对理解所有动态路由协议的被动失效机制都有帮助。认证配置有个隐藏的坑key chain名称和key编号必须一致。如果一边是key 1另一边是key 2即使密码字符串一样MD5认证也一样失败。这个坑很隐蔽因为配置检查时你往往只对比密码不会注意到编号差异。别问我怎么知道的。5. 实验数据记录与验证指标5.1 收敛时间实测数据实验做完我整理了一组核心验证数据。在环路的三角形拓扑中我模拟了三种故障场景记录路由表变化时间故障场景检测到故障时间路由表稳定时间总收敛时间R2–R3链路shutdown约3秒触发更新约65秒约68秒R1–R3链路shutdown约3秒触发更新约75秒约78秒R3整机掉电等待180秒老化超时约35秒约215秒第三行的数据特别值得讨论。R3整机掉电时R1和R2不会立刻收到任何更新报文只能靠路由老化计时器超时才能意识到R3不可达。180秒是RIP的老化超时值加上后续的刷新总收敛时间超过3分钟。如果这是生产网络业务早就中断了而且很多应用层协议超过30秒无响应就自行断开连接了。这就是RIP最致命的软肋。它不是不能工作而是在故障场景下的恢复速度完全不可接受。实验数据比任何理论描述都有说服力。为了对比我用同拓扑跑了OSPF同一套故障场景下收敛时间都在10秒以内。差距接近20倍。这份对比数据我建议每个做RIP实验的人都自己跑一遍眼见为实比背一万遍RIP收敛慢都管用。5.2 验证命令速查表实验中我用得最多的验证命令整理成一个速查表。每条命令的适用场景我都标了排障时按图索骥能省不少时间命令适用场景关键输出show ip route查看全表或某条路由协议代码、度量值、下一跳、时间戳show ip protocols查看协议全局配置定时器值、network声明、被动接口show ip rip database查看RIP的数据库内容路由来源接口、度量值debug ip rip动态观察报文收发发送/接收明细、接口信息show ip interface brief接口状态总览接口up/downdebug ip rip database跟踪路由数据库变化增删改条目明细这里要单独说一句debug ip rip database。它和debug ip rip是互补的前者看报文收发后者看路由表变化。在定位收到更新但没进路由表这类问题时组合使用这两条命令是最快的路径。收到更新说明报文层面正常没进路由表说明路由策略或度量值有问题两者一对照就能精确定位故障层次。5.3 抓包分析要点用Wireshark抓RIP报文时有几个细节新手容易忽视。第一RIP使用UDP端口520过滤表达式直接用udp.port 520。第二RIPv2的组播地址224.0.0.9在GNS3的抓包节点上能看到组播报文但如果你用的是普通交换机接口抓包记得先关闭IGMP snooping或者把端口配成组播侦听状态否则可能抓不到组播报文。报文结构上RIP Update报文的核心字段集中在IP Routing Table部分。每个条目包含地址族标识RIPv2里固定为2、路由标记、IP地址、子网掩码、下一跳、度量值。我在抓包时特意把路由标记字段翻了出来——RIPv2引入它本来是为了在外部路由导入时做标记的但绝大多数实现里它都是0很多教材也不讲知道它存在就行了。还有一个有意思的抓包细节RIP的响应报文Response里如果地址族标识是0xFFFF那这实际上是一个Request报文用于请求完整路由表。路由器启动时会对所有启用了RIP的接口发送Request邻居用Response回应。这个机制保证了新设备接入网络后能快速获取全网路由信息不用等30秒的周期更新。你可以触发一次看到完整的Request/Response交互过程。6. 实验复盘RIP在真实网络中的定位6.1 RIP的适用场景边界做完这个实验对RIP能不能用于生产环境这个问题我的答案是有条件的能但前提是你清楚它的边界在哪里。RIP适合的场景有小型网络一般指不超过15台路由器互联的网络对收敛时间没有严格要求的网络比如某些内部实验室网络、教学网络以及需要极简配置的临时网络。曾经有一个客户场景让我印象很深一个厂区的监控网络核心是三层交换机下面接了十几个二层接入中间用RIP做动态路由运行了好几年没有任何问题。原因就是网络结构稳定、路径单一、没有频繁的拓扑变化。但一旦网络规模超出这个范围RIP的短板立刻暴露。15跳限制意味着拓扑层级不能太深收敛时间以分钟计意味着链路故障期间业务中断时间不可接受度量值只看跳数意味着即使两条路径带宽天差地别RIP也会一视同仁。我在实验里用最后一组对比数据确认了OSPF在同拓扑下的收敛时间只有RIP的几十分之一这是压倒性的优势。6.2 从RIP实验迁移到真实排障思维这个实验给我最大的收获不是学会了三条配置命令而是建立了一套排障思维框架。第一层先确认物理和接口层再看协议层。路由学不到70%的情况是接口没起来剩下才是协议配置问题。实验里我故意制造了R3整机掉电这种极端故障就是为了验证当邻居彻底消失时RIP会怎样处理。答案是通过计时器超时慢慢遗忘而不是立刻报错。这种静默失效的特性排障时最容易误导人——你检查配置发现全部正确但路由就是消失了其实是邻居已经不在线很久了。第二层抓包永远是最底层的真相。配置检查能发现我写错了什么但只有抓包能发现我根本没发出去。很多路由协议的问题卡在配置层面永远找不到原因一抓包就清楚了。这次实验我抓了不下十次包每一次都定位到了新的细节。第三层计时器是动态路由的灵魂。RIP的失效机制、收敛时间、路由震荡全部由三个计时器更新、老化、刷新主导。理解了计时器就能理解为什么路由表里会出现16跳的条目为什么链路恢复后路由不会立刻回来。这些认知迁移到OSPF、EIGRP上同样适用只是计时器名字和默认值不同而已。6.3 一个值得反复做的扩展实验最后分享一个我做过多次、每次都有效果的扩展实验在RIP网络里加一条静态默认路由然后用 redistribute static 命令把它注入RIP。这个操作会引出一个教科书上很少讲透的问题——路由回灌。默认路由进入RIP后会以0.0.0.0/0的形式被通告到全网。但如果某个路由器上也配置了默认路由它收到来自邻居的默认路由更新时可能产生路由环路。我在实验里验证了RIP对默认路由的特殊处理当收到度量值为16的默认路由时路由器会立刻清除自己通过RIP学到的默认路由但不会影响本地静态配置的那条。这个扩展实验做完你对路由重分发、默认路由通告、防环机制的理解会加深一个层次。而且它在实际项目里有直接对应场景——分公司网络向总部通告默认路由用的就是这个机制。整个RIP实验做下来我最深的体会是一个协议的价值不在于它多先进而在于它能不能帮你建立对网络底层机制的直觉。RIP在这件事上做得比任何协议都好因为它足够简单简单到没有地方可以藏住问题。把这份实验报告里的每个环节都亲手跑一遍你收获的不只是RIP的配置能力更是一套遇到路由问题不慌不乱、按层排查的思维方式。
返回列表