ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RIP路由协议详解:从距离向量原理到实操配置与排错

RIP路由协议详解:从距离向量原理到实操配置与排错

1. 为什么还要聊RIP:一个被低估的“网络入门教科书”

刚入行做网络运维那会儿,我接手过一个很小的办公网络改造项目。整个网络就三台路由器、五个网段,客户预算有限,设备也是老型号。当时我第一反应是用OSPF,毕竟“主流嘛”,结果配置到一半发现那几台设备的OSPF实现有兼容性问题,邻居关系死活起不来。折腾了大半天,最后换成RIP,十几分钟就跑通了。那次经历让我重新审视这个被很多人当成“过时技术”的协议。

RIP,全称Routing Information Protocol,中文叫路由信息协议。它是最早一批被广泛使用的内部网关协议之一,核心逻辑简单到可以用一句话概括:每个路由器把自己知道的路由信息告诉邻居,邻居再告诉邻居的邻居,跳数少的路径就是好路径。它解决的是同一个自治系统内部、多台路由器之间如何自动交换路由、自动选路的问题。你不需要手动写一堆静态路由,路由器之间自己会“聊天”,聊着聊着整张网络的地图就拼出来了。

这篇文章适合谁看?如果你是刚接触网络工程的学生或者转行者,RIP是理解动态路由原理的最佳切入点,它的机制透明、报文结构简单,学懂了RIP再去看OSPF、IS-IS会轻松很多。如果你是有一定经验的运维,手头偶尔会遇到小型网络、实验环境或者老旧设备,RIP依然是一个低成本、低门槛的可用方案。我下面会从设计思路、核心机制、实操配置、问题排查几个维度,把RIP彻底拆开讲清楚,包括那些文档里不会写、只有实际配过才知道的细节。

2. RIP的整体设计思路与核心机制拆解

2.1 距离向量:一个“口口相传”的选路逻辑

RIP属于距离向量协议,这个“距离向量”四个字拆开看就是它的全部秘密。“距离”指的是到目标网络的代价,RIP用跳数来衡量,直连网络跳数为0,经过一台路由器跳数为1,以此类推。“向量”指的是方向,也就是下一跳是谁。每个路由器维护一张路由表,表里记录的就是“去某个网段,距离是几跳,从哪个接口/下一跳出去”。

它的工作方式很像一个村子里传消息。每家每户只知道隔壁邻居的情况,然后定期互相通报“我听说村东头那口井离我3步远”。消息一层层传开,最终所有人都知道了井的位置,而且会选那个“听说距离最短”的路线。这种机制的好处是不需要全局视野,每台路由器只跟邻居打交道,实现起来非常轻量。坏处也很明显:消息传得慢,而且容易出现“谣言”——也就是路由环路。

RIP规定,跳数16代表不可达。这个数字不是随便定的,它实际上给RIP网络划了一条硬性边界:任何一条路径最多只能有15跳。超过15跳的网络,RIP就认为到不了了。这个设计在当时是为了防止计数到无穷大,但也直接限制了RIP只能用在小型网络里。你想想,一个超过15台路由器串联的网络,末端设备根本没法通信。所以RIP的定位从一开始就很明确:小型、扁平、结构简单的网络。

2.2 两个版本的选择:v1和v2差在哪

RIP有两个主要版本,RIPv1和RIPv2。很多人配的时候不假思索用v2,但未必清楚为什么要用v2。我整理了一个对比表,这几个差异点直接决定了你在什么场景下该选哪个版本。

特性RIPv1RIPv2
子网掩码不支持,按主类网络支持VLSM,携带掩码
更新方式广播(255.255.255.255)组播(224.0.0.9)
认证无支持明文和MD5认证
下一跳字段无有,可指定优化路径
路由标记无有,可用于策略

最关键的是子网掩码这一条。RIPv1是有类路由协议,它不携带掩码信息,接收方只能按照A/B/C类网络的默认掩码去理解。这意味着你如果在一个C类网络里划分了多个子网,RIPv1根本区分不了。比如192.168.1.0/24再切成/26的子网,RIPv1会全部当成192.168.1.0/24处理,直接乱套。RIPv2携带掩码,支持VLSM和CIDR,这是它最核心的升级。

另一个容易被忽略的是组播更新。RIPv1用广播,网络里所有设备(包括不跑RIP的)都得处理这个包,浪费资源。RIPv2用224.0.0.9组播,只有加入这个组的RIP设备才会接收。在稍微大一点的网络里,这个差异对设备CPU的影响是实打实的。至于认证,如果你在一个不太受控的环境里跑RIP,明文认证至少能挡住误配置,MD5认证能挡住恶意注入,这个后面实操部分我会给具体配置。

2.3 定时器体系:RIP的心跳与节奏

RIP靠四个定时器维持运转,理解这四个定时器是排查RIP问题的基础。很多人配完RIP发现路由时有时无,八成是定时器没搞明白。

**更新定时器(Update Timer)**默认30秒。每30秒,路由器会把自己的完整路由表从所有启用RIP的接口发出去。注意是完整路由表,不是增量。这是RIP收敛慢、开销大的根本原因之一。一个几百条路由的表,每30秒全量广播一次,在低速链路上是很可观的流量。

**超时定时器(Timeout Timer)**默认180秒,也就是6个更新周期。如果一条路由180秒没收到更新,就标记为不可达,跳数设为16。这里有个细节:标记为不可达之后,路由并不会立刻删除,而是进入“垃圾回收”状态。

**垃圾回收定时器(Garbage Collection Timer)**默认120秒。路由被标记不可达后,还会在表里保留120秒,期间继续以跳数16的形式通告出去,目的是确保邻居都知道这条路由已经失效了。120秒之后才真正从路由表里删掉。

**抑制定时器(Holddown Timer)**默认180秒。当收到一条路由的跳数变大(比如从2跳变成5跳)时,路由器不会立刻更新,而是进入抑制状态,在180秒内不接受关于这条路由的任何更新,除非收到跳数更小的。这个机制是为了防止路由抖动导致的不稳定。

注意:这四个定时器的值在同一个RIP域内必须一致,否则会出现路由更新不同步、邻居关系异常等问题。我见过有人只改了一台设备的定时器,结果整张网络的路由像抽风一样忽上忽下。

3. RIP实操配置:从零跑通一个三路由实验环境

3.1 实验拓扑与地址规划

光讲理论没意思,我直接带你把一个最小可用的RIP网络搭起来。拓扑很简单:三台路由器R1、R2、R3串联,R1和R2之间是10.0.12.0/30,R2和R3之间是10.0.23.0/30,R1后面挂一个192.168.1.0/24的网段,R3后面挂一个192.168.3.0/24的网段。目标是让192.168.1.0/24和192.168.3.0/24能互通。

地址规划如下:

  • R1:G0/0接192.168.1.1/24,G0/1接10.0.12.1/30
  • R2:G0/0接10.0.12.2/30,G0/1接10.0.23.2/30
  • R3:G0/0接10.0.23.3/30,G0/1接192.168.3.1/24

这个拓扑里,R1到192.168.3.0/24的路径是R1→R2→R3,跳数为2。R3到192.168.1.0/24也是2跳。都在15跳限制之内,完全没问题。

3.2 基础配置与RIPv2启用

先配接口地址,这个不展开。重点看RIP部分。以R1为例,配置命令如下:

R1(config)# router rip R1(config-router)# version 2 R1(config-router)# no auto-summary R1(config-router)# network 192.168.1.0 R1(config-router)# network 10.0.0.0

这里有几个关键点必须说清楚。version 2指定用RIPv2,no auto-summary关闭自动汇总。自动汇总是个坑:RIP默认会把子网路由汇总成主类网络再通告出去。比如你有一个172.16.1.0/24的路由,自动汇总后会变成172.16.0.0/16通告出去。在跨主类网络边界的时候,这个行为会导致路由黑洞。我建议不管什么场景,先把no auto-summary加上,除非你有明确的汇总需求。

network命令的作用是:告诉RIP在哪些接口上启用RIP,同时把这些接口所在的网段通告出去。注意network后面跟的是主类网络地址,不是子网。比如你写network 10.0.0.0,它会匹配所有10.x.x.x的接口。这个设计经常让新手困惑,为什么我写10.0.12.0不行?因为RIP的network命令是按主类网络匹配的,10.0.12.0属于A类网络10.0.0.0,你得写10.0.0.0。

R2和R3的配置类似,R2需要network 10.0.0.0,R3需要network 10.0.0.0和network 192.168.3.0。

3.3 验证与调试:怎么看RIP到底跑没跑起来

配完之后别急着说“好了”,得验证。我常用的几个命令:

R1# show ip route R1# show ip protocols R1# debug ip rip

show ip route看路由表里有没有RIP学到的路由,RIP路由前面会标记R。正常情况下,R1应该能看到192.168.3.0/24,下一跳是10.0.12.2,度量值是2。

show ip protocols看RIP的运行状态,包括版本、network宣告了哪些、定时器值、当前有哪些邻居。这个命令能快速确认配置有没有生效。

debug ip rip是实时调试,能看到RIP报文的收发情况。这个命令在实验环境里很好用,但在生产环境慎用,因为RIP每30秒一次全量更新,debug输出会刷屏,严重时可能把设备CPU打满。我一般只在排查问题时临时开,看完立刻no debug all。

实操心得:如果你发现路由学不到,先检查两边的version是否一致。RIPv1和RIPv2默认是不兼容的,v1收不了v2的报文,v2虽然能兼容v1的接收,但发送行为不同。我遇到过好几次一边配了v2一边没配,结果死活不通的情况。

4. RIP的典型问题与排查技巧实录

4.1 路由环路:RIP最经典的“鬼打墙”

路由环路是距离向量协议的先天缺陷。我举个典型场景:R1通告了一个192.168.1.0/24,R2学到了。突然R1的192.168.1.0/24接口down了,R1把这条路由标记为16跳。但在R1发出更新之前,R2的更新先到了,R2说“我这儿到192.168.1.0/24是2跳”。R1一听,哎?R2能到?那我把下一跳改成R2,跳数变3。然后R1再告诉R2“我这儿是3跳”,R2改成4跳……两个人互相骗,跳数一路涨到16才发现不对。这就是计数到无穷大。

RIP用了几个机制来缓解这个问题。水平分割:从某个接口学到的路由,不再从这个接口发回去。毒性逆转:从某个接口学到的路由,从这个接口发回去时把跳数设为16,明确告诉对方“此路不通”。触发更新:路由发生变化时立刻发送更新,不等30秒周期。抑制定时器:前面提过,防止抖动。

这些机制在大多数情况下能解决问题,但不是100%。我的经验是,在RIP网络里,尽量避免设计环形拓扑。如果物理上必须有环,确保水平分割和毒性逆转都开启(默认是开的),并且控制好定时器。真遇到环路,debug ip rip会看到跳数疯狂增长,这时候最快的办法是shutdown出问题的接口,等网络稳定后再逐步恢复。

4.2 常见问题速查表

我把这些年遇到的RIP问题整理成了一张表,方便你对照排查。

现象可能原因排查方法解决方式
邻居学不到路由version不一致show ip protocols统一改为version 2
部分路由学不到auto-summary导致汇总show ip route看是否有主类路由加no auto-summary
路由时有时无定时器不一致show ip protocols对比统一定时器值
跳数异常增长路由环路debug ip rip观察检查拓扑,启用水平分割
认证失败认证模式或密钥不匹配debug ip rip看认证错误统一认证配置
接口没启用RIPnetwork命令网段不对show ip protocols按主类网络重新宣告

4.3 认证配置:别让RIP裸奔

RIPv2支持认证,这在稍微正规一点的环境里是必须的。配置不复杂,但有几个细节容易踩坑。

R1(config)# key chain RIP_KEY R1(config-keychain)# key 1 R1(config-keychain-key)# key-string MyPassword123 R1(config)# interface G0/1 R1(config-if)# ip rip authentication mode md5 R1(config-if)# ip rip authentication key-chain RIP_KEY

注意认证是配在接口上的,不是配在router rip下面。而且两边的key chain名字可以不同,但key-string必须一致,key number也必须一致。我见过有人key number一边写1一边写2,结果认证死活过不去。另外,MD5认证的密钥是区分大小写的,复制粘贴的时候注意别多带了空格。

提示:如果你在接口上配了认证,但邻居没配,邻居会收不到你的更新,你也会收不到邻居的更新。debug ip rip会显示“authentication failure”。这时候要么两边都配上,要么两边都去掉。

5. RIP的适用边界与替代方案思考

5.1 什么时候该用RIP,什么时候不该用

RIP不是万能的,它的适用场景非常明确。适合用的场景:网络规模小(路由器数量个位数)、拓扑扁平(没有复杂冗余)、对收敛速度要求不高、设备性能有限。比如小型办公室、实验室环境、教学演示、临时网络。这些场景下RIP配置简单、排错直观,性价比很高。

不适合用的场景:超过15台路由器的网络、需要快速收敛的生产网络、有大量子网需要精确控制的网络、对带宽敏感的低速链路。这些场景下应该考虑OSPF或者IS-IS。OSPF收敛快、支持区域划分、没有跳数限制,是更现代的选择。

我个人的判断标准很简单:如果一张拓扑图你画出来觉得“这网络真小”,用RIP;如果画出来觉得“还挺复杂”,别犹豫,上OSPF。强行在复杂网络里用RIP,后期维护成本会高得让你怀疑人生。

5.2 RIP的“遗产”价值:为什么还值得学

虽然RIP在实际生产中用得越来越少,但它的学习价值一点没减。RIP把动态路由的核心概念——距离向量、度量、定时器、水平分割、路由环路——用最朴素的方式呈现出来。你学懂了RIP,再去看OSPF的LSA、SPF算法,会发现很多概念是相通的,只是实现更复杂。

而且,RIP的报文结构简单,抓包分析非常直观。用Wireshark抓一个RIP包,你能清楚看到Command、Version、Address Family、IP Address、Metric这些字段。这种“看得见摸得着”的体验,对理解路由协议的工作方式帮助很大。我带新人的时候,第一个实验永远是RIP,不是因为它有用,而是因为它能让人真正理解“路由是怎么学来的”。

5.3 从RIP到OSPF:迁移时的注意事项

如果你手头有一个跑RIP的网络,想迁移到OSPF,有几个坑得提前知道。第一,不要同时跑两个协议还指望它们自动互通。RIP和OSPF之间需要做重分发,而重分发如果没控制好,很容易产生次优路径甚至环路。第二,迁移要分阶段。先在核心设备上启用OSPF,把RIP的边界逐步收缩,最后再彻底关掉RIP。第三,注意管理距离。RIP的默认管理距离是120,OSPF是110。如果同一台设备同时学到同一条路由,OSPF会优先。这个特性可以利用,但也可能让你困惑为什么RIP的路由突然不见了。

我自己的做法是,迁移前先把RIP网络的所有网段整理清楚,在OSPF里规划好区域,然后一台一台设备切换。每切一台,验证一遍路由表和连通性。整个过程可能慢,但稳。网络改造这事儿,快就是慢,慢就是快。

最后分享一个我在实验环境里常用的小技巧:如果你只是想快速验证一个RIP配置,可以用GNS3或者EVE-NG起三台虚拟路由器,配置脚本提前写好,一次性粘贴。RIP的配置量很小,三台设备五分钟就能跑起来。但记得,实验环境里随便折腾,生产环境里动RIP之前,先把配置备份了,把回退方案想好了。我踩过的最大的坑,就是在没有备份的情况下改了一台核心设备的RIP配置,结果network命令写错了一个网段,整张网络的路由瞬间消失。那次之后,我养成了改任何路由协议配置前先show run备份的习惯。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进