H3C设备RIPv2动态路由配置与收敛排障实验

发布时间:2026/10/27 12:52:27
H3C设备RIPv2动态路由配置与收敛排障实验

1. 先把实验台搭明白,再谈协议

刚接触网络设备的朋友,十有八九第一个碰到的动态路由协议就是 RIP。原因很实在:它配置量小、命令几行就能跑通、抓包看得懂,不像 OSPF 那样一上来就要聊 LSA 类型和区域划分。但我也见过太多人,RIP 敲完network看到路由表里冒出来几条路由就以为学会了,结果一到真实环境,断个链路路由不收敛、掩码一改就不通、认证一加邻居就没了,最后只能把锅甩给"这协议太老"。RIP协议本身确实老,但它把动态路由最核心的那套逻辑——邻居怎么发现、路由怎么学、坏了怎么撤、环路怎么防——用最朴素的方式摊开给你看。搞懂这些,后面再去啃 OSPF、IS-IS 会轻松一大截。下面这套内容,是我带着新手在H3C设备(Comware 平台)上反复搭实验台踩出来的,从拓扑规划、命令写法、验证步骤到断链实测,全部可复现,同时也把那些文档里一句带过的坑掰开说清楚。

2. 实验环境和整体思路是怎么定的

2.1 为什么新手还是该先啃 RIP

在真实的生产网里,百来台设备的规模你去推 RIP,基本会被同事笑。收敛慢、跳数上限 15、只认跳数不认带宽,这些都是硬伤。但换到学习场景,RIP 的价值反而被放大了,因为它把"距离矢量"这件事做得极其纯粹:每台设备只知道"去某个网段要经过谁、要几跳",然后每 30 秒把整张表往外喊一遍。你不需要理解链路状态数据库、SPF 算法,就能直观看到路由是怎么从一端慢慢传到另一端的。我通常让新手先做一件事:配好三台设备,然后用display rip 1 route反复看,看"Time"这一列从 30 开始倒数,看一条路由的生命周期怎么走完。这种"看得见"的感觉,比背概念有用得多。

另外一点,RIP 是排障的绝佳训练场。它的报文结构简单到你可以用抓包工具完整读出来,哪些字段是掩码、哪个字段是下一跳、度量值第几位,一目了然。等到你去看 OSPF 的 LSA 细节,就不会因为"报文里到底带了什么"这类基础问题卡住。所以我给新手的建议是:RIP 别跳过,但要在心里给它划好边界——学机制、练排障用它,真上生产该用 OSPF 就别硬撑。

2.2 三台设备的最小拓扑与地址规划

拓扑不用复杂,三台三层设备串成一条线就够,再加两个模拟用户网段。我把这次实验的规划整理成下面这张表,你照着抄就行,注意我特意把所有内网网段都放在 10.0.0.0/8 这个大网段里,后面讲自动汇总的坑会用到这个布局。

设备接口IP 地址 / 掩码说明
R1GE1/0/110.1.12.1 / 255.255.255.252与 R2 互联
R1GE1/0/210.1.100.1 / 255.255.255.0模拟接入网段 A
R2GE1/0/110.1.12.2 / 255.255.255.252与 R1 互联
R2GE1/0/210.1.23.2 / 255.255.255.252与 R3 互联
R3GE1/0/110.1.23.3 / 255.255.255.252与 R2 互联
R3GE1/0/210.1.30.1 / 255.255.255.0模拟接入网段 B

互联链路用 /30 是有讲究的。点对点链路本来只需要两个地址,用 /30 可以省地址,同时也顺手把"网络地址和广播地址不能配在接口上"这个基本功练一遍。很多新手图省事,互联口直接配 /24,能通是能通,但以后做地址规划会被自己坑。实验阶段养成习惯,后面到项目上就不会手滑。

设备之间如果用真实网线直连,接口 down 会立刻触发路由撤销,收敛实验效果太"完美",反而看不出 RIP 慢的一面。所以我建议中间串一台二层交换机,或者至少在某一段用交换机过渡,这样拔掉远端那台设备的电源时,本地接口因为交换机还在,状态依然是 UP,路由只能靠计时器老化掉——这才是真实环境里 RIP 让人难受的地方。

2.3 命令风格与平台差异的取舍

不同厂商的命令行长得不太一样,同一家的不同版本也有细微差别。我这次演示以 Comware 平台的写法为准,命令结构大概是"进系统视图 → 进接口配地址 → 进 RIP 视图宣告网段 → 接口下加认证"。你如果在别的平台上做,概念完全一致,命令名换一下而已:有的平台叫router rip,有的宣告命令叫network但接受通配符掩码。真正要记住的是动作顺序和每个动作的意图,而不是死记字符串。

还有个小习惯要提前养成:每次敲完配置,save之前先display current-configuration扫一眼,确认自己没在错误的接口上配了东西。我带过的人里,年轻的那批大多是"命令敲完就走",结果把 RIP 认证配到了对面的接口上,折腾半小时。这类问题跟你聪不聪明没关系,纯粹是流程没建立。

3. 配置之前必须吃透的几个机制

3.1 距离矢量的本质,就是一场传话游戏

"距离矢量"这四个字,很多人背得出,说不明白。我一般用传话来类比:R1 认识一个网段,它不告诉 R2 这个网段长什么样、中间有几条链路、带宽多少,它只告诉 R2 一句话——"我这儿有个网段,我过去要 1 跳"。R2 收到后加一跳变成 2,再传给 R3。整张网络的路由表就是这么一跳一跳垒起来的。所以 RIP 的路由信息本质上是一种"二手消息",R2 并不清楚 R1 后面到底什么情况,它只相信 R1 说的。

这种模式带来两个直接后果。第一,RIP 对网络拓扑没有全局认知,它没法像链路状态协议那样自己算最短路径树,只能相信邻居。第二,一旦某个邻居给的信息是错的(比如因为环路产生了假路由),错误会像谣言一样被继续传播,而且传播过程中度量值还在涨,需要机制去压制。理解了这一点,你再看水平分割、毒性逆转、触发更新这些词,就不会觉得它们是孤立的知识点,而是同一个问题在不同层面的补丁。

3.2 四个计时器:30、180、120 秒分别在管什么

RIP 的计时器是新手最容易记混的地方。我按"一条路由从出生到死亡"的顺序捋一遍:更新计时器,标准值 30 秒,设备每隔 30 秒把整张路由表往外发一遍;老化(超时)计时器,180 秒,也就是连续 6 个周期没收到某条路由的更新,就认为它不可达了,把它从路由表里拿掉,但还留在数据库里做"垂死挣扎";垃圾收集计时器,120 秒,路由被判定不可达之后再等 120 秒,才彻底删掉;抑制计时器,主要配合触发更新使用,防止因为一条路由反复振荡而导致全网频繁抖动。

在 Comware 平台上改这三个值的命令是timers rip 30 180 120,三个数字依次是更新、老化、垃圾收集。设备会做合法性检查,必须满足"更新 < 老化 < 垃圾收集"这种递进关系,你随便乱填会直接被告知参数非法。实验时我建议先按默认值跑一遍,观察display rip 1 route里的 Time 字段怎么倒数,等你对节奏有感觉了,再试着把更新周期改成 10 秒,看看断链后多久收敛,对比一下差别,印象会非常深。

3.3 水平分割、毒性逆转与触发更新,为什么必须动手验证

水平分割解决的是一个很朴素的问题:A 从 B 学到路由,就不该再原样告诉 B。不这么干的话,B 会以为自己那条路还能走 A,形成互相依赖。毒性逆转是水平分割的加强版,不是沉默,而是主动回一条度量值为 16 的更新,等于直接说"这条路从我这儿走不通了"。触发更新则是不等 30 秒周期,路由一变就立刻发出去。

这三样东西默认基本都开着,也正是因为默认开着,很多人从来没验证过它们到底有没有生效。我建议你做个实验:在两台设备之间的互联口上,先把水平分割关掉(接口视图下undo rip split-horizon),然后人为断开一个网段,观察对面设备的路由表有没有短暂出现度量值往上跳的情况。关掉和开启对比着看,那种"哦原来它在防这个"的感觉,比看十遍文档都管用。做完记得改回来,别把实验配置漏到下一轮。

3.4 度量值只有跳数,这意味着什么

RIP 的度量值就是跳数,直连网段算 0 跳(通告出去是 1 跳),每经过一台三层设备加 1,最大 15,16 就被视为不可达。这个设计放在今天看确实粗糙:一条千兆链路和一条百兆链路,在 RIP 眼里完全一样,都算一跳。这就导致在有多条路径的网络里,RIP 可能选一条拥塞的短路,而放着空闲的长路不走。

知道这个缺陷,配置的时候就要主动规避:不要让 RIP 承担多路径选优的活,实在有两条路又必须用 RIP,那就用偏移列表(offset-list)或者干脆调接口度量值来人为干预,别指望它自己算明白。我个人的原则是,RIP 只用来跑那些拓扑简单、链路单一、对收敛时间不敏感的场景,比如分支小站点互联、教学实验、某些老设备的兼容互联。超出这个范围,直接换协议,别跟它较劲。

4. 动手:三台设备跑通 RIPv2 的完整流程

4.1 基础配置与接口地址

每一步我都写清楚意图。先上 R1:

system-view sysname R1 interface GigabitEthernet1/0/1 ip address 10.1.12.1 255.255.255.252 undo shutdown quit interface GigabitEthernet1/0/2 ip address 10.1.100.1 255.255.255.0 undo shutdown quit

这里undo shutdown是显式打开接口,有些版本接口默认是开的,有些不是,养成写出来的习惯没坏处。接口地址配完,先在同网段内 ping 一下直连地址,确认二层通路没问题,再进下一步。

R2 和 R3 同理,按表格里的地址填。全部配完后,从 R1 ping 10.1.12.2、从 R2 ping 10.1.23.3,两段互联都能通,才说明底层没问题。这一步千万别跳过——我见过太多人路由协议配不明白,最后发现是网线插错了口,白白耗掉一下午。

4.2 启用 RIP 与 network 的写法陷阱

接下来宣告网段。R1 上:

rip 1 version 2 undo summary network 10.0.0.0 quit

注意network后面写的是10.0.0.0,不是10.1.100.0,也不是10.1.12.0。这是新手最容易写错的一行。RIP 的 network 命令按主类网络地址来宣告,10 开头的地址属于 A 类,主类网络就是 10.0.0.0/8。你在 RIP 视图里敲network 10.1.100.0,设备大概率会提示错误,或者有些版本会接受但行为不符合你的预期。想要精细控制哪些接口参与、哪些不参与,正确做法是用silent-interface把不想发报文的接口禁掉,而不是在 network 上做文章。

R2 上同样network 10.0.0.0一条就够了,因为它的三个接口地址都在 10.0.0.0/8 范围里。R3 也一样。这套写法最大的好处是简单,坏处是"一刀切"——所有 10 网段的接口全被拉进来了。如果你有一堆业务接口不想跑 RIP,那就得逐个silent-interface,这一点在规划时就要想清楚。

4.3 版本控制和自动汇总,两行命令决定成败

version 2这行必须敲。默认情况下很多平台跑的是版本 1,而 RIPv1 发出去的报文里不带掩码,接收方只能按主类网络推测。你要是配了 /30 互联地址或者做了子网划分,v1 直接就崩了。切到 v2 之后,报文里带掩码、带下一跳、支持组播(224.0.0.9)和认证,功能完整得多。所以我的习惯是:只要不涉及必须兼容的老设备,一律先用 v2。

undo summary是关闭自动汇总。这行在简单拓扑里可有可无,但一旦你的网络里有不连续子网,它就是救命的一行。举个典型场景:R1 后面挂 10.1.100.0/24,R3 后面挂 10.1.30.0/24,如果中间某台设备还有一条通往别的 10.x 网段的路,自动汇总可能把这些明细在边界上抹成一条 10.0.0.0/8,远处的设备拿到这条大网段后,去任何一个 10 开头的地址都往同一个方向扔,结果就是明明路由表里有条目,业务却不通。实验环境里我建议一律关掉汇总,养成把明细路由传清楚的习惯。

4.4 认证:一个字母都不能错

RIP 的认证是明文或 MD5,配在接口上而不是 RIP 视图里。这点很多人搞混:

interface GigabitEthernet1/0/1 rip authentication-mode md5 usual plain rip@2024 quit

两端互联的两个接口都要配,且模式、密码必须完全一致。MD5 模式下如果密钥 ID 用 rfc2082 方式,还要保证 ID 对得上。我踩过的坑是:一端配了simple明文认证,另一端配的md5,结果两边都在发报文,但接收端校验失败直接丢弃,display rip 1 neighbor里什么都看不到,路由当然也学不到。排查这种问题时,先怀疑认证,不要一上来就怀疑链路。

还要提醒一点,plain后面跟的密码在display current-configuration里会显示出来,实验无所谓,真实环境建议用cipher形式,或者至少别把密码写得太"有意义"。

4.5 验证命令一条一条过

配置完别急着 ping,先把这几条命令过一遍,养成"用眼睛确认协议状态"的习惯。

第一条display rip 1,看进程的基本信息:版本、是否使能、汇总状态、定时器当前值。第二条display rip 1 interface verbose,看每个接口的 RIP 状态、认证方式、水平分割是否开启。第三条display rip 1 neighbor,看邻居有没有起来,这一列是判断"报文到底通没通"的最直接证据。第四条display rip 1 route,看学到的路由、下一跳、度量值、老化倒计时。

正常跑起来后,在 R1 上应该能看到 10.1.23.0/30 度量值为 1、10.1.30.0/24 度量值为 2,Time 那一列在 30 秒内循环倒数。如果某条路由的 Time 一直停在某个值不动,说明那条路由已经不再收到更新,正在老化,这时候就要去查对端为什么停发。

5. 收敛实验:拔线、关接口,看 RIP 怎么反应

5.1 断链之后到底要等多久

这是整个实验最有价值的一环。先在 R1 上持续观察display rip 1 route,然后在 R3 上把 GE1/0/2 接口shutdown,模拟接入网段 B 掉线。你会看到 R2 很快就把 10.1.30.0/24 的度量值改成 16(不可达),然后 R1 收到这条更新,也把路由置为不可达,再过一段时间彻底删除。这个过程在有触发更新的时候很快,通常几秒之内完成。

但如果断的不是接口,而是中间那台设备断电、而本地接口因为串了台交换机依然保持 UP,情况就不一样了。R1 完全不知道对面出事了,只能死等 180 秒老化时间。这 180 秒里,所有去往 10.1.30.0/24 的流量都会被黑洞掉。这也是我一直强调"实验要串交换机"的原因——只有亲眼看到流量被黑洞三分钟,你才会真正理解为什么生产环境里 RIP 不受待见。

5.2 路由环路的复现和抑制

环路实验建议在最后做,因为它容易把表搞乱。做法是:在两个方向上把水平分割和毒性逆转都关掉(undo rip split-horizon、undo rip poison-reverse),然后断开中间某条链路,观察两边路由的度量值是否出现"你加一跳我加一跳"的来回爬升,一直爬到 16 才停。这个现象就是经典的计数到无穷。

看完之后把两个功能打开,再复现一次,你会发现度量值不会再往上爬了,因为对端明确告诉你"从我这儿走不通"。这个对比做完,你对"协议为什么需要这些机制"就不会再有疑问。做完实验记得把这些接口配置清理干净,别留个undo在配置里,将来别人接手会一脸问号。

5.3 抓包和调试怎么看

在不方便抓包的环境里,用设备自带的调试也能看报文:

terminal monitor terminal debugging debugging rip 1 packet

然后你会看到收发报文的记录:源地址、目的地址、报文类型(Request 还是 Response)、携带的路由条目数。看到目的地址是 224.0.0.9 说明是 v2 的组播更新,看到 255.255.255.255 说明是 v1 的广播。这个信息非常有用,可以直接判断两端的版本是否匹配。

调完之后务必执行undo debugging all,这条命令是保命的。我见过有人在现网设备上开着debugging rip 1 packet忘了关,结果 CPU 被调试输出拖垮,业务直接受影响。实验设备无所谓,但习惯要从一开始就养成:开调试之前先想好什么时候关。

6. 常见问题与排查速查

6.1 邻居起不来,先看这三层

邻居起不来是最常见的问题,排查顺序我固定为三层。第一层是链路:接口是不是 UP、IP 是不是同网段、能不能 ping 通。ping 不通就别往下看了,先解决二层三层连通性。第二层是协议:display rip 1 interface verbose看接口有没有被拉进 RIP,是不是被silent-interface禁掉了,版本号两端是否一致。第三层是认证:模式、密码、密钥 ID 三项必须完全一致,任何一项不同都表现为"发了但收不到"。

还有一种隐蔽情况是中间有防火墙或者 ACL 拦了 UDP 520。RIP 走的是 UDP 520 端口,v2 用组播 224.0.0.9,如果中间设备没放行组播,报文根本到不了对面。这种问题用display rip 1 statistics看收发计数最直接——发送计数在涨、接收计数不动,基本就是被拦了。

6.2 路由学到了但业务不通

路由表里有条目,ping 却不通,这种情况我遇到最多的原因是下一跳不可达或者回程路由缺失。RIP 是单向学路由的,R1 学到了 R3 的网段,不代表 R3 也学到了 R1 的网段。你只在一边配了 network 或者只在一边做了宣告,就会出现"我能去你不能回"的半通状态。排查方法是两端的display rip 1 route都看一遍,确认双向都有明细路由。

另一个原因是自动汇总导致的掩码错误。看到路由表里出现一条 /8 或者 /16 的大网段,而你的实际网段是 /24,那基本就是汇总在作怪。关掉汇总(undo summary)之后再看,明细路由应该就出来了。这类问题在有类网络边界上特别容易发生,做地址规划的时候尽量避开不连续子网,能省掉很多麻烦。

6.3 掩码相关的坑,一个比一个隐蔽

/30 互联地址在 RIPv1 下是必崩的,因为 v1 不带掩码,接收方按主类算,10.1.12.0/30 会被理解成 10.0.0.0/8 的一个子网,行为完全不可控。解决办法只有一个:用 v2 并且关掉汇总。

还有一种情况是接口地址配了非标准掩码,比如 /25、/26 这种,v1 同样处理不了。所以只要你做了任何子网划分,v2 就是必须的,没有商量余地。我个人的建议更激进一点:只要网络里有任何一台设备跑 RIP,就全网统一 v2,别搞混合,混合环境下的行为差异极难排查。

现象最可能的原因快速验证处理方式
邻居表为空版本不一致 / 认证不匹配看两端display rip 1 interface verbose统一版本,核对认证模式与密码
发送计数涨、接收计数不涨中间设备拦截 UDP 520 或组播display rip 1 statistics放行 520 端口与 224.0.0.9
路由表出现大网段自动汇总未关闭对比明细路由与实际网段undo summary
断链后长时间不收敛接口未 down,等 180 秒老化观察 Time 字段倒数缩短计时器或改用触发更新
单向通一侧未宣告网段两端都看路由表补齐 network 配置
度量值一直爬升到 16水平分割/毒性逆转被关闭检查接口配置恢复默认开启

6.4 一个容易被忽略的细节:优先级

RIP 学到的路由默认优先级是 100,静态路由是 60,直连是 0。这意味着如果你同时配了静态路由和 RIP,静态会优先生效。这个特性在做路由备份时很有用:平时用静态,静态失效了 RIP 顶上。但反过来说,如果你发现"明明 RIP 学到了路由,转发却不走它",先去看看是不是有一条静态路由压在上面。这种问题不复杂,但不知道优先级这回事的人,能查很久。

7. 几条配置习惯上的经验

save之前一定display current-configuration过一遍,重点看三个地方:接口下有没有多余的undo、RIP 视图里的 network 是不是写成了具体子网、认证是不是配在了正确的接口上。这三处是我这些年见过出错频率最高的地方,而且都不是概念问题,纯粹是手滑。

实验配置一定要能一键清干净。我习惯在实验开始前先reset saved-configuration把设备恢复出厂,或者至少把 RIP 进程用undo rip 1整个删掉重来。最怕的是上一轮实验残留的半截配置,让你在新实验里看到一堆莫名其妙的现象,然后开始怀疑自己对协议的理解。

最后说个对新手最实用的建议:RIP 的实验不要只做一遍。第一遍照着敲,第二遍不看文档自己敲,第三遍故意把某一步配错,然后自己排出来。第三遍才是真正长本事的环节,因为真实世界里你遇到的从来不是"怎么配",而是"为什么配了不通"。