ARTICLE DETAIL

资讯详情

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

RIP动态路由实验全解析:从拓扑配置到收敛时间实测

RIP动态路由实验全解析:从拓扑配置到收敛时间实测 做网络实验这么多年我一直觉得“动态路由让路由器自己商量着走”这件事特别有意思。刚学路由的时候我总在想网络里那么多网段路由器怎么知道不直连的那部分长什么样难道真的靠人去一张张填静态路由表吗直到我完整配完一次RIP看到三台路由器在几十秒内自动交换路由信息、把彼此不直连的网段学得明明白白才真正理解了“互通”这两个字的分量。这篇文章是我最近做的一个RIP网络互通实验的完整复盘。我会从拓扑设计开始把RIP的工作机制、三台路由器的逐条配置、验证方法和故障排查过程都展开讲最后附上我实测的收敛时间。适合正在学路由协议、准备网络实验报告或者想在模拟器里完整练一遍RIP但不想只看官方文档的同学。整篇内容以思科IOS风格为主顺带提一下和华三、华为配置的差异尽量让你看完能直接在模拟器里复现。1. 三个网段、三台路由器实验拓扑设计的思路1.1 明确任务让PC1和PC2自动找到彼此实验目标很朴素让左边的PC1192.168.1.10能访问右边的PC2192.168.4.10中间隔着三台路由器全程不手工配置静态路由只靠RIP协议完成路由学习。拓扑我设计成这样设备接口IP地址网段PC1eth0192.168.1.10/24192.168.1.0/24R1GigabitEthernet0/0192.168.1.1/24192.168.1.0/24R1GigabitEthernet0/110.0.12.1/3010.0.12.0/30R2GigabitEthernet0/010.0.12.2/3010.0.12.0/30R2GigabitEthernet0/110.0.23.2/3010.0.23.0/30R3GigabitEthernet0/010.0.23.3/3010.0.23.0/30R3GigabitEthernet0/1192.168.4.1/24192.168.4.0/24PC2eth0192.168.4.10/24192.168.4.0/24为什么设备互联拿/30网段用户侧拿/24/30只有两个可用地址正好给链路两端用模拟的就是生产环境里点对点链路的做法也让地址规划更干净。用户侧/24则是为了给PC和后续扩展留余地。PC1访问PC2的流量路径是PC1 → R1 → R2 → R3 → PC2一共跨了三个网段、经过两台中间路由器RIP正好派上用场。1.2 为什么选RIP而不是OSPF或者直接静态路由很多朋友会问现在企业网里谁还用RIP确实生产环境主流是OSPF、IS-IS这类链路状态协议RIP更多出现在教学和实验里。但我恰恰认为第一个动态路由实验应该选RIP。原因有三。第一RIP的配置命令最少一个router rip加两条network语句就能跑起来新手不会被复杂参数劝退。第二RIP是典型的距离矢量协议它把“路由度量”“计时器”“水平分割”“环路避免”这些核心概念全部暴露在表面学RIP等于把动态路由最底层的那套逻辑看了一遍。第三正因为RIP收敛慢、跳数限制明显你才能直观感受到动态路由的边界在哪里回头学OSPF时容易形成对比。如果用静态路由这个拓扑要写四条静态路由加四条反方向默认路由网络再扩一点就难以维护。RIP的价值就是让路由器自己发现邻居、自己传递路由、自己处理链路故障这是理解“网络互通”本质的最佳入口。2. 动手前必须搞懂的RIP消息流转逻辑2.1 距离矢量协议是怎么“传话”的RIP属于距离矢量Distance Vector协议它工作的方式用一句话概括每台路由器只告诉直连邻居“我能到哪些网段”邻居在自己的路由表里把跳数加1然后继续告诉它的邻居。用个通俗类比村里传消息每个人只往相邻人家跑一趟说自己知道哪些新闻收到消息的人在自己的记事本上加一笔“这消息是从谁那儿听来的”。RIP路由表的本质就是这张“传了几手”的记事本每一项都包含目标网段、下一跳、跳数。跳数就是距离下一跳就是“我从哪个邻居听来的”。这个机制决定了RIP路由器不需要了解全网拓扑它只需要维护一张“到目标网段该往哪个方向走”的表。优点是实现简单缺点是每个节点都只掌握局部信息链路一复杂就容易产生环路所以才需要后面讲到的水平分割和16跳防护。2.2 30秒周期、触发更新和十六跳边界RIP有几组关键参数做实验前必须背下来。更新报文默认每30秒发一次RIPv1用广播发送RIPv2用组播地址224.0.0.9发送底层承载在UDP 520端口。失效计时器默认180秒也就是连续6个周期30秒 x 6没收到某邻居对某条路由的更新这条路由就被标记为不可达。删除计时器在思科上是240秒路由被标记为不可达后还要再等一段时间才会被彻底清掉。跳数上限是15第16跳视为不可达路由会被无情丢弃。除了周期更新RIP还有触发更新机制当接口状态变化、路由新增或失效时路由器不等30秒立刻把变化的路由通告给邻居。这个机制在后面收敛实验里能看到明显作用。十六跳限制是RIP最著名的边界。别小看这个限制它本身就是为了防环哪怕协议状态混乱一条路由也不可能无限在环路里传下去最多传到第15跳就被丢弃。这也决定了RIP只能用在“网络直径不超过15跳”的小型网络里。2.3 RIPv1和RIPv2的差异为什么实验选v2很多人刚学RIP时不知道版本差异直接在模拟器里配学不到路由还一脸懵。我先给你一张对比表特性RIPv1RIPv2报文是否携带子网掩码不携带携带支持VLSM/CIDR更新方式广播255.255.255.255组播224.0.0.9认证不支持支持明文/MD5认证自动汇总强制开启默认按设备版本而定建议显式关闭主类网络边界支持只能按有类地址处理支持无类路由RIPv1不携带掩码这意味着如果网络里存在不连续子网比如10.0.12.0/30和10.0.23.0/30被192.168网段隔开RIPv1会丢失细节路由直接学错。所以实验直接用v2实践中我也没有见过谁还在新部署RIPv1的。但v1和v2之间不能互相正常传递路由这是后面第五章排错时要讲的坑之一。3. 逐台设备配置命令逐条拆解不藏着掖着3.1 R1的完整配置我用的模拟器环境是思科IOS命令风格一路写下来。R1的完整配置如下enable configure terminal interface GigabitEthernet0/0 ip address 192.168.1.1 255.255.255.0 no shutdown exit interface GigabitEthernet0/1 ip address 10.0.12.1 255.255.255.252 no shutdown exit router rip version 2 network 192.168.1.0 network 10.0.0.0 no auto-summary passive-interface GigabitEthernet0/0 end wr逐条解释几个容易误解的点。version 2是指定RIP版本不写的话默认可能是v1或者按厂商默认行为走。版本不一致是后面排错的重点。network 192.168.1.0这条命令的真实含义不是“我要通告192.168.1.0这个网段”而是“我要在IP地址属于192.168.1.0这个主类网络的接口上启用RIP”。R1的G0/0地址是192.168.1.1/24属于C类主类网络192.168.1.0所以这个接口开始收发RIP更新。network 10.0.0.0同理它匹配的是R1上所有属于10.0.0.0/8这个主类网络的接口也就是G0/1。注意这里写的是主类网络号不是精确掩码这是思科RIP的一个经典设计也是新手最容易晕的地方。no auto-summary用来关闭自动汇总。旧IOS版本里RIPv2默认开启自动汇总跨主类网络通告时会丢掩码细节建议在配置里显式写上这条避免模拟器或真实设备默认行为不同带来隐性差异。passive-interface GigabitEthernet0/0的意思是连接PC的接口不发送RIP更新报文但依然接收RIP路由。PC既没跑RIP也没必要收到一堆组播更新这能减少无意义的流量。R1和R3各有一个直连PC的接口都应该配。3.2 R2和R3的配置越简单越容易忽略细节R2不连接任何用户网段只需要在两个链路接口上跑RIPenable configure terminal interface GigabitEthernet0/0 ip address 10.0.12.2 255.255.255.252 no shutdown exit interface GigabitEthernet0/1 ip address 10.0.23.2 255.255.255.252 no shutdown exit router rip version 2 network 10.0.0.0 no auto-summary end wrR2只写了一条network 10.0.0.0因为两个接口都在同一个主类网络10.0.0.0/8里一条命令全部启用。很多人在这一步会纠结10.0.12.0/30和10.0.23.0/30明明是不同网段怎么就一条network搞定了这正是“有类匹配”的语义只要接口IP落在10.0.0.0/8这个大范围内就会被RIP启用。如果你只想让某个具体子网参与RIP思科IOS也支持精确匹配写法是network 10.0.12.0 0.0.0.3后面的0.0.0.3是通配符掩码。这个进阶写法在需要精细控制时非常好用。R3的配置和R1镜像注意它的PC接口是G0/1enable configure terminal interface GigabitEthernet0/0 ip address 10.0.23.3 255.255.255.252 no shutdown exit interface GigabitEthernet0/1 ip address 192.168.4.1 255.255.255.0 no shutdown exit router rip version 2 network 192.168.4.0 network 10.0.0.0 no auto-summary passive-interface GigabitEthernet0/1 end wr到这里三台设备配置完毕。检查一下所有互联地址都启动了RIP两台边界路由器R1、R3的用户侧接口设为被动不对外发更新。这时候可以进入验证阶段了。3.3 厂商差异提醒同样的network命令语义可能不同我最早在这个地方吃过亏拿着思科的配置思路去配华为模拟器结果路由怎么都学不到。华为VRP上的RIP也写network但不同版本的匹配行为有区别有的按主类网络匹配有的支持网段加反掩码精确匹配。华三设备的RIP配置里network后面也可以带反掩码来控制接口范围。所以你如果是在eNSP或者华三模拟器上做实验最好不要机械照搬思科命令。核心思路是一样的network指定的范围用来匹配本地接口匹配上的接口才会启用RIP。具体写法一定以你手头平台的手册为准。做实验之前花五分钟查下命令格式比踩坑后再绝望地翻文档省时间得多。4. 验证互通路由表、调试信息和端到端Ping三层检查4.1 路由表RIP到底学到了什么配置完成后在R1上执行show ip route rip预期能看到一条RIP学来的路由R 192.168.4.0/24 [120/2] via 10.0.12.2, 00:00:05, GigabitEthernet0/1拆解一下这条输出R代表这条路由来源是RIP[120/2]里120是RIP的管理距离2是跳数via 10.0.12.2说的是下一跳地址也就是R2的G0/0后面是学到这条路由后经过的时间和出接口。注意下一跳是10.0.12.2不是10.0.23.3。R1并不直连R3R1只能把去往192.168.4.0/24的报文交给R2由R2继续转发。这是理解“下一跳”概念的好例子下一跳永远是本地直连能到达的那个邻居而不是最终目标。在R2上执行同样的命令应该看到两条RIP路由R 192.168.1.0/24 [120/1] via 10.0.12.1, 00:00:07, GigabitEthernet0/0 R 192.168.4.0/24 [120/1] via 10.0.23.3, 00:00:07, GigabitEthernet0/1R2到两个用户网段都是一跳因为两段都直连在R2的邻居上。在R3上则能看到反向的192.168.1.0/24跳数为2。三台设备路由表都齐全说明RIP更新正常。4.2 用show ip protocols核对运行参数光有路由还不够我习惯再执行一次show ip protocols确认RIP进程的参数Routing Protocol is rip Sending updates every 30 seconds with /-50%, next due in 12 seconds Invalid after 180 seconds, hold down 0, flushed after 240 seconds Redistributing: rip Default version control: send version 2, receive version 2 Interface Send Recv Triggered RIP Key-chain GigabitEthernet0/0 2 2 Automatic network summarization is not in effect这里能确认几件事更新周期是30秒失效计时器是180秒版本是v2自动汇总关闭接口列表展示了哪些口在跑RIP。排错时第一件事就是打开它看版本是不是一致、接口是不是只启用了预期的那几个。有时候路由学不到看这里一眼就露馅了。4.3 端到端Ping和Traceroute真正的“互通”路由表有路由只代表“方向知道”不代表应用层能通。从PC1发起的端到端测试才是最终裁判。PC1 ping 192.168.4.10 192.168.4.10 icmp_seq1 ttl61 time2.047 ms 192.168.4.10 icmp_seq2 ttl61 time1.923 ms能通。同时可以在PC1上做traceroute观察实际路径PC1 traceroute 192.168.4.10 1 192.168.1.1 2 10.0.12.2 3 10.0.23.3 4 192.168.4.10路径正是设计时的预期PC1的网关R1然后R2然后R3最后PC2。这里有个细节很值得注意ttl61因为PC1到PC2跨了三台路由器初始TTL是64经过3个路由器后剩余61正好证明报文走了3跳。这个数字可以作为验证“确实经过了三层转发”的佐证。4.4 用debug ip rip看报文交换过程验证类命令还有一个大招debug ip rip。它能实时打印RIP更新报文的收发情况适合观察协议行为。在R1上开启后能看到类似输出RIP: sending v2 update to 224.0.0.9 via GigabitEthernet0/1 (10.0.12.1) RIP: build update entries - network 192.168.1.0 metric 1 RIP: received v2 update from 10.0.12.2 on GigabitEthernet0/1 192.168.4.0 via 10.0.12.2 metric 2sending行说明R1往10.0.12.2方向发了更新里面带着192.168.1.0/24这条路由received行说明R1从10.0.12.2收到了包含192.168.4.0/24的更新度量是2。两边一来一回动态路由的“对话”过程尽收眼底。注意debug输出比较占用CPU资源实验做完记得用undebug all关掉。模拟器上开着没事真实设备上长期开debug是要被运维骂的。5. 故障复盘我在实验里踩过的几个坑5.1 版本不匹配路由学不到问题出在version第一次做实验时我配置完R1后自信满满地show ip route rip结果一行都没有。物理链路都是通的怎么回事我先在R1上debug ip rip看到了这么一条RIP: received v1 update from 10.0.12.2 on GigabitEthernet0/1问题一下就清楚了R2上启用的RIP是v1R1上指定的是v2。RIPv1的报文用的是广播地址RIPv2用的是组播224.0.0.9而且两者报文格式不同v2默认不处理v1的更新。排查思路建议按这个顺序先ping邻居确认二层三层通再看show ip protocols核对版本最后用debug ip rip看报文到底收没收到、是什么版本。版本不匹配在模拟器里特别容易遇到因为很多模拟器模板默认版本不一样。解决方式也很简单统一version 2就行。5.2 自动汇总把子网细节吞了这个坑比较隐蔽。某次我在R1上看到学来的路由是R 10.0.0.0/8 [120/1] via 10.0.12.2, 00:00:13, GigabitEthernet0/1而不是期望的10.0.23.0/30。原因就是R2启用了自动汇总R2从右侧接口学到10.0.23.0/30后在跨主类网络向R1通告时把它汇总成了10.0.0.0/8。自动汇总的本质是按A/B/C类主类网络边界折叠路由。在这个简单拓扑里也许不影响最终互通因为去往10.0.23.2的报文会被10.0.0.0/8这条汇总路由覆盖下一跳还是正确的R2。但一旦网络里出现不连续子网比如一端的10.0.12.0/30和另一端的10.0.23.0/30被一个192.168网段隔开自动汇总就会把两侧路由折叠成同一条10.0.0.0/8近端路由器不知道具体网段细节直接黑洞。我现在的习惯是所有RIP配置一律显式写上no auto-summary。这不是可选项而是应该写进配置模板里的标准动作。5.3 passive-interface不是小事一开始我也偷懒觉得PC接口跑RIP也无所谓反正PC又不处理组播。直到看到R1的G0/0接口也在不断发送组播更新才意识到这样既浪费链路资源又让终端网段的广播域里充斥着路由协议报文。更重要的一点如果网络拓扑有环路风险没有任何防护的RIP更新报文会在环路里反复转发和重复处理。虽然RIP本身有16跳限制兜底但这种无意义的报文循环还是能避免就避免。passive-interface的语义要记清楚接口只接收RIP更新不发送RIP更新。像R1和R3直连PC的接口绝对应该配置成被动模式。R2两个接口都连着路由器一个都不能被动否则RIP关系就断了。5.4 水平分割和十六跳RIP的防环底线RIP防环靠的是几个机制的组合。水平分割是最基础的一条从某个接口学到的路由不再从那个接口通告回去。也就是说R1从G0/1学到192.168.4.0/24后不会再把这条路由从G0/1发回给R2。这避免了两台路由器之间形成“你告诉我、我再告诉你”的无限循环。我在实验里专门做过对比把R2接口下的ip split-horizon关闭思科接口默认为启用过一会儿再show ip route rip能看到R2把从R1学到的192.168.1.0/24又原样通告回R1R1也照单全收路由表里出现本不该出现的环路路径。这个现象非常直观建议你也动手看一眼。毒性反转是另一道防线路由失效时不是沉默不语而是以16跳即无穷大的度量主动通告给邻居相当于大声喊“这条路断了”。配合16跳上限RIP把环路问题控制在了物理层面可终止的范围内。理解了这些机制你就明白为什么RIP设计得这么保守——它用简单粗暴的方式换来了在小型网络里的可靠性。6. 实测收敛时间RIP到底有多“慢”6.1 实验方法人为制造故障看路由表变化“收敛”指网络拓扑发生变化后所有路由器重新达成一致路由视图所需的时间。这个指标对动态路由协议至关重要。我在R1上做了这样的测试先让R1持续ping PC2192.168.4.10同时开另一个终端窗口反复带时间戳执行show ip route 192.168.4.0。然后回到R3把直连PC2的G0/1接口执行shutdown立刻观察R1上这条路由的变化时间。R1# show ip route 192.168.4.0 % Network not in table从关闭接口到R1删除路由整个过程大概在3到5秒内。这个结果比不少人的预期快原因在于R3的直连接口down掉后触发了RIP触发更新机制立即以不可达度量通告给R2R2又转发给R1。链路正常时的周期更新虽然是30秒但故障场景下靠触发更新能大大缩短感知时间。6.2 非直连故障才是真正的“慢”我又做了第二个测试让R2和R3之间的链路模拟故障但不是直接shutdown而是把R3的G0/0接口配成down状态类似对端设备故障、中间链路中断但本端接口没感知的场景。这种情况下R1收不到任何主动通告只能干等失效计时器。结果很清楚R1需要在180秒失效计时器到时后才把192.168.4.0/24标记为不可达再等一段时间思科是240秒才彻底删除。整个过程长达3分钟以上这意味着在这段时间里发往PC2的流量要么走一条已经失效的路径要么被丢弃重传。两组数据放在一起看RIP的脾气就很明显了直连故障它还能靠触发更新快速反应但非直连故障、链路静默中断这类场景它只能依靠漫长的计时器兜底。收敛速度分钟级这就是为什么生产网络宁可选择配置更复杂的OSPF或IS-IS也不愿意用RIP扛主要业务。6.3 这个实验结果对选型有什么启发做完这轮实测我的体会是RIP不是“不能用的老古董”而是“要看场景的协议”。在一个网络直径很小、拓扑简单、故障容忍度不高的环境里RIP完全能胜任。但它对链路故障的反应速度决定了它不适合作为核心网络协议。学习层面则完全相反。RIP把所有动态路由的关键概念压缩到了一个近乎透明的容器里你把自动汇总打开看看子网细节怎么丢把水平分割关掉看看环路怎么出现把版本改成v1看看邻居怎么失联再测一次收敛时间感受算法和计时器如何相互作用。这些实验做一遍对路由协议的理解比死记OSPF的LSA类型深刻得多。做完这个实验我最大的感受是动态路由的乐趣不在于敲命令而在于亲眼看到路由表自己变完整、又自己变透明的那种“协议在活着”的感觉。建议你在模拟器里把每个机制都手动开关一遍——关掉自动汇总看看子网细节禁用水平分割看看环路改个版本号看看邻居失联再测一次收敛时间。这套流程走下来你对RIP、对距离矢量协议的理解会比单纯看任何教材都扎实。
返回列表