
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模拟接入网段 AR2GE1/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最大 1516 就被视为不可达。这个设计放在今天看确实粗糙一条千兆链路和一条百兆链路在 RIP 眼里完全一样都算一跳。这就导致在有多条路径的网络里RIP 可能选一条拥塞的短路而放着空闲的长路不走。知道这个缺陷配置的时候就要主动规避不要让 RIP 承担多路径选优的活实在有两条路又必须用 RIP那就用偏移列表offset-list或者干脆调接口度量值来人为干预别指望它自己算明白。我个人的原则是RIP 只用来跑那些拓扑简单、链路单一、对收敛时间不敏感的场景比如分支小站点互联、教学实验、某些老设备的兼容互联。超出这个范围直接换协议别跟它较劲。4. 动手三台设备跑通 RIPv2 的完整流程4.1 基础配置与接口地址每一步我都写清楚意图。先上 R1system-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/24R3 后面挂 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 rip2024 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 度量值为 2Time 那一列在 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 的实验不要只做一遍。第一遍照着敲第二遍不看文档自己敲第三遍故意把某一步配错然后自己排出来。第三遍才是真正长本事的环节因为真实世界里你遇到的从来不是怎么配而是为什么配了不通。