ARTICLE DETAIL

资讯详情

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

RIP动态路由实验详解:拓扑规划、配置命令与故障切换

RIP动态路由实验详解:拓扑规划、配置命令与故障切换 很多人第一次接触动态路由都是从RIP开始的。这个协议名字听着古老甚至被不少人戏称为“古董”但它在动态路由的教学体系里依然占据着不可替代的位置。尤其是当你亲手搭建起三台路由器看着路由表在没有人工干预的情况下自动学会了远端的网段那种感觉比背十遍理论都来得直观。这篇实验记录我就把整个RIP实验从拓扑规划到命令验证的完整过程拆开揉碎讲清楚包括我踩过的坑和事后才想明白的设计逻辑。先说这个实验是做什么的。RIPRouting Information Protocol是一种基于距离矢量算法的动态路由协议通过跳数作为度量值来选择路径每隔30秒向邻居广播一次完整路由表。它能解决静态路由在复杂网络里维护成本过高的问题也让路由表能够随着拓扑变化自动收敛。适合刚学完静态路由、想理解“动态”二字到底动态在哪儿的网络初学者也适合准备认证考试、需要把理论落地的考生。实验环境不用真机用思科的Packet Tracer或者GNS3都能跑成本几乎为零但收获是实打实的。1. 实验设计与拓扑规划1.1 动态路由选型为什么拿RIP开刀动态路由协议分成两大类距离矢量类和链路状态类。OSPF和IS-IS属于后者它们需要维护整个区域的拓扑数据库计算最短路径树原理复杂配置参数多新手一上来容易被各种区域、进程号、Router ID的概念劝退。RIP属于前者逻辑简单粗暴我告诉你我有哪些路由你也告诉我你有哪些路由大家互相学习跳数越少就越好。选RIP做第一个实验是因为它的工作模型和人类问路的思维特别像。你从A地到B地不确定怎么走就问旁边的人。旁边的人说“我认识路往东走3个路口到”另一个人说“跟我走我只需要过2个路口”。你当然选后者。RIP的每个路由器都是这样向邻居“问路”的然后选出跳数最少的路径放进自己的路由表。这个模型几乎不需要额外解释非常适合教学切入之后再往RIPv2的认证、汇总这些进阶特性延伸梯度很舒服。需要先说明一件事RIP这个实验本身并不难难的是理解它的计时器行为和防环机制。如果你在实验里只做到“配完能ping通”就收工那等于只看到了冰山一角。真正的价值在于制造故障观察路由表怎么变化看它怎么避免环路看它多久才能收敛。所以拓扑规划的时候我故意设计了环路结构而不是简单的直线串接。1.2 拓扑搭建与网段规划我用的是经典的“三台路由器围成三角形”结构R1、R2、R3三台设备两两之间用串行线缆连接。这样每个网段都同时有两个方向可以到达RIP需要在多条路径里选一条环路的可能性也天然存在后续验证防环机制正好派上用场。网段规划如下表所示设备接口网段接口IP邻居设备R1-Se0/0/010.0.12.0/2410.0.12.1R2-Se0/0/010.0.12.2R1-Se0/0/110.0.13.0/2410.0.13.1R3-Se0/0/110.0.13.3R2-Se0/0/110.0.23.0/2410.0.23.2R3-Se0/0/010.0.23.3R1-Loopback 0192.168.1.0/24192.168.1.1模拟终端网段R3-Loopback 0192.168.3.0/24192.168.3.1模拟终端网段每台路由器上各配置一个Loopback接口模拟最终的用户网段。用Loopback而不是直接接PC好处是可以随时用来做可达性测试而且它不会像物理接口那样因为线缆问题导致实验中断。R2没有Loopback纯粹作为中转节点这样R1和R3之间学到的远端路由必须经过R2中转或者经过另一条链路到达才能体现“选路”的过程。这里要提一个规划时容易忽略的点RIP在宣告网络时使用的是主类网络。也就是说10.0.12.0/24会被宣告成10.0.0.0这个A类网络192.168.1.0/24会被宣告成192.168.1.0这个C类网络。如果你用的网段是划分子网之后的特殊地址RIPv1可能会有问题。这也是实验里我直接用标准A类和C类地址规划的原因之一省得在版本差异上纠结。2. RIP工作机制与关键参数2.1 距离矢量算法跳数是如何计算的RIP的核心是Bellman-Ford算法每个路由器维护一张路由表表里的每一项包含目标网段、下一跳地址、到达目标所需的跳数。初始状态下每台路由器只知道自己的直连网段跳数为0。一旦启用RIP路由器就把自己的整张路由表封装在UDP报文端口520里发送给邻居同时接收邻居发来的路由表。当路由器从邻居那里收到一条路由信息比如“我能到达192.168.3.0/24跳数是1”它会在这个跳数基础上加1代表“经过你这个邻居需要多一跳”。如果这条路径比自己路由表里已有的路径跳数更少就用新的替换旧的并且把下一跳改成这个邻居。这个过程想成一个词“择优录取”。RIP的度量值就是单纯的跳数这导致了一个很有意思的局限性它完全不看带宽和延迟。同样是去192.168.3.0/24一条路径是经过千兆链路但跳数为2另一条是经过56K拨号线路但跳数为1RIP会毫不犹豫选择后者。这在真实生产环境里显然不合理但在实验环境里反而方便我们验证算法行为——不用关心链路速度只看跳数。另外RIP规定最大跳数是15跳数为16的网段被认为是不可达的。所以RIP只适用于小型网络这也是它被OSPF取代的根本原因。有一个概念必须区分清楚RIP维护的是路由表不是拓扑图。它只知道“下一跳是谁”不知道网络的完整拓扑。你可以类比成只认识自己小区门口那条路的人让他去一个陌生地址他只能问你走哪个方向、过几个路口却画不出城市地图。链路状态协议则不同它手里是整个城市的GPS地图。2.2 防环机制与计时器RIP不翻车的关键距离矢量协议最臭名昭著的毛病是路由环路。想象一下R1到达某个网段的路由突然失效了但它还没来得及通知R2R2还在按照旧的路由表把去往该网段的流量发给R1R1收到后发现这个网段不可达又把流量扔回给R2……两个路由器互相甩锅数据包在网络里死循环直到TTL耗尽被丢弃。RIP为了解决这个问题设计了几个配合使用的工具。第一个是水平分割Split Horizon核心原则是“从哪个接口学来的路由绝对不再从那个接口广播回去”。这就像你向A问路A告诉你怎么走你转身又把A告诉你的路线原封不动告诉AA肯定觉得莫名其妙。第二条是毒性逆转Poison Reverse比水平分割更强硬当某条路由失效时不沉默不语而是主动告诉邻居“这个网段现在跳数是16”相当于明确宣布“这条路走不通了”。配合触发更新Triggered Update路由表发生变化时立刻发送更新不用干等30秒的周期定时器。还有一个容易忽略的抑制计时器Hold-Down Timer。思科路由器上的默认值是180秒。当一条路由的跳数从比较小的值突然膨胀到16或者更大的值路由器会认为这条路由不稳定进入抑制状态。在抑制期内即使收到更好的路由信息也只记录但不更新路由表。这个机制的本意是防止抖动的路由导致路由表频繁震荡但代价就是收敛速度变慢。做实验时你会发现ping断了很久才恢复一部分时间就是被抑制计时器吞掉了。三条计时器的时间值得记清楚更新计时器30秒无效计时器180秒刷新计时器240秒。如果180秒内没有收到某条路由的更新这条路由被标记为不可达跳数变为16再等60秒也就是240秒整如果还是没有更新这条路由直接从路由表里被删除。我的实验里故意触发了一次链路故障后面专门观察了这三个时间节点的行为比单纯看书印象深多了。3. 实验配置全流程复盘3.1 接口IP与环回口的初始化配置无论用什么模拟器第一步都是把物理链路调通。我以思科IOS命令行作为示例Packet Tracer和GNS3里命令几乎通用。首先是给三台路由器的串行接口配置IP命令如下R1(config)#interface Serial0/0/0 R1(config-if)#ip address 10.0.12.1 255.255.255.0 R1(config-if)#no shutdown R1(config-if)#exit R1(config)#interface Serial0/0/1 R1(config-if)#ip address 10.0.13.1 255.255.255.0 R1(config-if)#no shutdown R1(config-if)#exit R1(config)#interface Loopback 0 R1(config-if)#ip address 192.168.1.1 255.255.255.0 R1(config-if)#exitR2和R3的配置是完全对称的只是IP地址换成自己对应接口的地址。这里有一个经典坑模拟器里串行接口默认是关闭的如果不打no shutdown物理层一直是down状态后面的RIP邻居关系根本建立不起来。我当时第一次做实验时排查了半天RIP为什么没有邻居最后发现是Serial口没开启这种低级错误各位务必避免。全部配完以后用show ip interface brief确认每个接口的状态和IP确保R1、R2、R3两两之间的直连网段都能互相ping通。如果这一步都没通后面RIP实验无从谈起。记住这个原则动态路由协议是建立在物理连通之上的先通底层再看路由。3.2 启用RIPv2并宣告直连网段RIP协议的启用在全局配置模式下输入router rip然后选择版本。为什么不直接用RIPv1RIPv1是有类路由协议在更新报文里不携带子网掩码遇到变长子网掩码VLSM环境会直接翻车而且用广播地址255.255.255.255发送更新效率低还不支持认证。RIPv2在报文中携带掩码改用组播地址224.0.0.9发送更新还支持明文和MD5认证。生产环境里如果还在用RIPv1基本都是历史遗留问题新实验一律RIPv2。宣告网段使用的是network命令。这里有一个新手最容易误解的地方network后面跟的不是你想“让RIP学习”的网段而是你想“让RIP在哪些接口上工作”的网段。RIP会在配置了该网段内IP的接口上发送和接收更新同时把这个接口所在的直连路由宣告出去。例如R1上宣告10.0.0.0所有IP地址落在10.x.x.x范围内的接口都会被激活包括Se0/0/0和Se0/0/1。完整配置如下R1(config)#router rip R1(config-router)#version 2 R1(config-router)#network 10.0.0.0 R1(config-router)#network 192.168.1.0 R1(config-router)#no auto-summary R1(config-router)#exitno auto-summary这条命令很重要。RIPv2默认仍然会自动在主类网络边界汇总路由。如果不关闭自动汇总当我们有多个子网都属于同一个主类网络时RIP只会广播汇总后的主类路由导致部分子网路由缺失。虽然我当前实验里每个主类网络下只有一个子网暂时看不出问题但养成写no auto-summary的习惯是必要的否则后续你在GNS3里模拟VLSM场景时会被坑得很惨。R2和R3的配置同理R2上要宣告10.0.0.0R3上要宣告10.0.0.0和192.168.3.0。3.3 路由表验证与端到端连通性测试配置完成后等待几秒钟在R1上执行show ip route你会看到类似下面的输出R1#show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP ... Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks C 10.0.0.0/8 is directly connected, Serial0/0/0 C 10.0.0.0/8 is directly connected, Serial0/0/1 R 192.168.3.0/24 [120/1] via 10.0.13.3, 00:00:12, Serial0/0/1方括号里的[120/1]就是RIP的管理距离和跳数。管理距离120是思科给RIP的固定值用来和OSPF的110、静态路由的1做优先级比较。这个数字决定了当同一个网段同时被RIP和静态路由知道时谁说了算。后面那个1就是跳数说明R1通过R3直连的路径到达192.168.3.0/24只需一跳。我这边的拓扑是三角形所以R1理论上应该有两条路径到达192.168.3.0/24一条是直接连R3跳数1另一条是经过R2中转跳数2。RIP显然会选择第一条。为了验证这一点可以在R1上执行show ip rip database这个命令会显示RIP数据库里所有已知的路由以及度量值包括未被选中放入路由表的备选路径。紧接着做连通性测试从R1 ping 192.168.3.1应该能通。还可以从R2 ping 192.168.1.1和192.168.3.1验证R2作为中转设备也学到了远端路由。如果ping不通优先检查两台路由器上的show ip route看目标网段是否出现在路由表里。通常问题都出在network宣告漏配或者接口没开启。4. 进阶验证故障切换与路由防环实验4.1 手动制造链路故障观察RIP收敛全过程单纯的“配完能通”只能算完成了一半。RIP实验的精髓在于制造故障看它怎么自愈。我把R1和R3之间的Se0/0/1链路手动shutdown掉然后观察R1的路由表变化。R1(config)#interface Serial0/0/1 R1(config-if)#shutdown此时R1失去了直连R3的那条链路它本来的两条到192.168.3.0/24的路径优选的那条断了。正常情况下RIP的触发更新会立刻告诉邻居这个变化。过几秒再查看R1的路由表会发现去往192.168.3.0/24的下一跳变成了10.0.12.2也就是R2跳数变成了2走的路径变成R1→R2→R3。这个过程不会瞬间完成。因为R1和R3之间断链后R1需要等其他路由器告知新的路径。如果R2已经学习到了192.168.3.0/24它会通过周期更新或触发更新发给R1。如果实验过程中发现切换非常慢往往是因为抑制计时器在作祟180秒内路由处于冻结状态。Debug时可以通过debug ip rip来实时查看RIP更新的收发情况输出格式类似R1#debug ip rip RIP: sending v2 update to 224.0.0.9 via Serial0/0/0 (10.0.12.1) RIP: build update entries 192.168.3.0/24 via 10.0.23.3, metric 2, tag 0 RIP: received v2 update from 10.0.12.2 via Serial0/0/0 192.168.3.0/24 via 10.0.23.3, metric 1, tag 0debug输出里能看到RIP是发往组播地址224.0.0.9的而且能看到跳数变化。我调试时还发现R2发给R1的更新里如果该路由是从R1学来的R2会带上16的跳数毒性逆转这正好验证了防环机制确实在工作。把接口重新no shutdown后R1又会自动恢复到原先的1跳直连路径整个过程不需要敲任何静态路由这就是“动态”二字的直观体现。这个故障实验强烈建议多做几遍每做一遍就顺手用show ip route记录路由表变化时间你会对RIP的计时器行为产生肌肉记忆。光靠看书背“30秒更新、180秒无效、240秒刷新”远不如自己亲眼所见来得深刻。4.2 开放RIPv2认证防止路由欺骗路由协议本身也有安全风险。如果没有认证机制任何一台接入网络的路由器都能伪装成邻居向其他路由器注入伪造的路由信息导致流量黑洞或路径劫持。RIPv2支持两种认证方式明文认证和MD5摘要认证。明文认证的密码直接在报文里传输抓包就能看到实验里演示可以生产环境千万别用。MD5认证把密码做摘要后携带在报文里安全性好得多。配置认证需要先定义密钥链Key Chain然后在接口上启用。以R1和R2之间的Se0/0/0接口为例R1(config)#key chain RIPKEY R1(config-keychain)#key 1 R1(config-keychain-key)#key-string cisco123 R1(config-keychain-key)#exit R1(config-keychain)#exit R1(config)#interface Serial0/0/0 R1(config-if)#ip rip authentication key-chain RIPKEY R1(config-if)#ip rip authentication mode md5 R1(config-if)#exitR2的对应接口也要配置完全相同的密钥链和密钥字符串否则认证失败RIPv2报文会被丢弃邻居关系断开。配置完成后可以发现路由表里的RIP条目开始老化并逐渐消失。原因很简单认证不通过更新收不到路由就到了180秒无效、240秒删除。这其实是排查“为什么直连链路没问题但路由突然消失”的经典场景之一。配置认证时要注意Packet Tracer和GNS3的行为略有不同。Packet Tracer虽然支持配置命令但对MD5认证的报文细节仿真得并不完美有时候能通有时候又出怪问题。GNS3用的是真实IOS镜像行为更接近真机。如果你在Packet Tracer里做认证实验遇到诡异现象换个模拟器试试别在环境问题上死磕。5. 常见问题与排查技巧实录5.1 常见问题速查表我在整个实验过程中陆陆续续踩了不少坑也帮别人排查过类似问题。整理成了一张速查表每个问题的现象、原因、排查手段都在里面直接照着对号入座就行。现象大概率原因排查命令解决办法路由表里只有直连路由没有RIP条目没有宣告network或宣告错主类网段show run | section router rip在RIP进程下补充正确的network命令对方能学到我的路由我学不到对方的RIP版本不匹配show ip protocols两端统一使用version 2ping目标地址不通但路由表显示有路由中间路由器的接口没开或链路downshow ip interface brief/show interfacesno shutdown并检查线缆类型子网路由只显示主类网段细节全部消失开启了自动汇总show ip protocols在RIP进程下输入no auto-summary路由表某些条目一直处于16跳链路环路或对方配置了毒性逆转debug ip rip检查物理拓扑确认没有形成环路配置认证后路由全部消失密钥链或认证模式两端不一致show key chain统一密钥字符串和MD5模式RIP路由和静态路由同时存在选择不符合预期管理距离不同show ip route确认管理距离RIP默认1205.2 几个值得单独拿出来说的坑第一个坑是network命令的误用。我当时图省事在R1上只敲了network 10.0.0.0没有宣告192.168.1.0。结果R1的环回口一直不出现在路由协议里R3上永远学不到192.168.1.0/24。检查了半天才意识到RIP的network既决定接口激活也决定路由宣告少一条就少一个网段。后来我总结的口诀是“这个路由器上有几个网段你就要宣告几个主类网络一个都不能省。”第二个坑更隐蔽R2作为纯中转路由器同样需要配置network 10.0.0.0但不需要配置其他网络。如果你在R2上忘了宣告R1和R3的更新根本不会经过R2转发因为RIP更新是通过接口发送的接口必须在network声明覆盖范围内才会发送和接收更新。中间路由器没宣告等于它的RIP进程在对应接口上是哑的邻居关系建立不起来。第三个坑来自模拟器的差异。Packet Tracer里的RIP和GNS3里的真实IOS在某些细节上有区别比如抑制计时器的触发条件、debug输出的详细程度等。我后来强烈建议有条件的人直接上GNS3配好路由器镜像后行为更真实debug输出也更丰富实验报告里写起来更有说服力。虽然Packet Tracer方便但它隐藏了太多实现细节容易让人产生“原来RIP这么简单”的错觉。6. 实验心得与后续扩展这套RIP实验做下来我最大的感触是理解一个协议不是背命令而是亲眼去看它失效、收敛、防环的过程。RIP虽然已经淡出了现代大规模网络的舞台但它作为学习路由协议的敲门砖价值无可替代。它把“路由信息交换”这件事以最朴素的方式呈现了出来一旦你弄懂了RIP再去学OSPF、BGP的时候会发现很多概念都是相通的。做实验时有几个习惯建议趁早养成。第一每次改完配置先show run截取配置文件保存下来方便后续回溯。第二多开几个终端窗口把debug ip rip同时开在相邻的路由器上两边对照着看更新报文比单看一边有效得多。第三实验做完主动把接口shutdown再恢复把故障切换的过程录制下来或截图留存这部分内容在汇报或写报告时是亮点。RIP实验之后你可以继续往两个方向深挖。一个是把拓扑换成OSPF看看链路状态协议是如何通过LSA泛洪和SPF算法构建最短路径树的对比一下收敛速度的差异。另一个是在RIP基础上引入路由重分发让RIP域和OSPF域互通你又会遇到管理距离、度量值换算等一系列新问题。每个方向都能折腾好几个小时但对网络的理解会越来越立体。最后说一句实验做不出来不要急着怀疑设备先按ping逐跳定位再检查路由表和协议配置90%的问题都出在这几处。
返回列表