搜过“动态路由”这四个字的朋友应该发现了,现在页面里跳出来一堆东西:前端框架的所谓动态路由、各种网关设备的宣传词、还有咱们这行真正说的RIP(Routing Information Protocol,路由信息协议)。作为被RIP坑过、也靠RIP救过场的老网工,我先把话放这儿:RIP虽然老,但它恰恰是理解“动态路由”这四个字最好的切入点。这篇我就以RIP为主线,把动态路由从工作原理、协议细节,到真实配置和排障经验完整过一遍,适合刚入行的网络工程师、备考路由交换认证的人,以及还在维护老旧RIP网络、被各种诡异问题折腾的运维朋友。尽量用大白话讲,你看完应该能独立把一个小型多网段网络用RIP跑起来。
1. 动态路由到底解决什么问题:从静态路由痛点说起
1.1 先分清两个“动态路由”
前端的动态路由,讲的是页面路径和组件之间的映射关系,框架在运行时帮你切换视图。网络工程里的动态路由,讲的是路由器之间自动交换“到某个网段走哪条路”的信息,然后动态生成路由表。两者只是名字撞了,没有半点血缘关系。
咱们别被热搜词带偏了。这次要聊的是网络设备上的动态路由协议——RIP。它是动态路由家族里资格最老、设计最简单、也最容易踩坑的一个协议。
1.2 静态路由维护起来有多痛
在没有动态路由的时候,想让两台路由器后面的网段互通,只能在每台路由器上手工敲静态路由。三五台设备、四五个网段还能凑合,但只要拓扑稍微复杂一点,日子就难过了。
举个例子:公司有三个办公网段、两条出口链路、一台核心路由器加两台接入路由器。你要做的是逐台设备把路由条目敲进去,而且出口链路一主一备时还要写浮动静态路由,靠不同管理距离控制切换。这还不算最恶心的,真正头疼的是加新链路:重新规划网段、逐台补路由、测试、写文档,一晚上就没了。一旦某条链路down了,静态路由不会自己消失,数据包还是会往那条断路上塞,业务中断半天,查下来发现就是一条静态路由没删干净。
动态路由干的事就是把这个手工过程自动化:每台路由器定期向邻居宣告“我这边有哪些网段”,同时接收邻居的路由信息,自己算出一张路由表。链路断了,邻居之间自动收敛,坏路由会被踢掉,好路由会被接上。这就是动态路由能活到今天、并且越活越复杂的根本原因——它把“跟随拓扑变化”这件事从人肉运维变成了协议自动完成。
1.3 距离向量算法:RIP的核心思路
RIP用的是一种叫距离向量(Distance Vector)的算法,很多人上学时听过Bellman-Ford方程,但实际工作里不需要背公式,理解它的工作方式就够了。
每台运行RIP的路由器,都只掌握自己到各个网段的“跳数”和“下一跳”。它每隔30秒把自己的整张路由表复制一份,发给直连邻居。邻居收到后,把里面的度量值加1,也就是“经过我再到对方要多一跳”,然后存进自己的路由表,再继续向下游传递。这个行为很像一条消息在村里传话:“我听说去D村有三条路,其中一条只要两跳。”每个人都只跟邻居说,但消息最终会扩散到全网。
这个设计的好处是极其简单。路由器不需要维护复杂的邻居状态机,不需要像OSPF那样理解整网拓扑,跑起来几乎不占CPU和内存。缺点也很明显:它只知道“跳数”,不知道带宽、延迟、负载,所以选路非常“天真”。明明有一条高速专线绕了两跳,另一条56K拨号链路就一跳,RIP会毫不犹豫选后者。这是所有距离向量协议的通病,在RIP身上表现尤其突出。
2. RIP的几条命根子:跳数、计时器与防环机制
2.1 为什么最大跳数是15,16表示不可达
RIP的度量值就是跳数(hop count)。一台路由器收到邻居的路由条目,如果原度量是2,它就会存成3,表示“从我这到目标网段要经过3台路由器”。
这里有个老网工都知道的死规矩:RIP的最大有效跳数是15,16跳被定义为不可达。为什么要卡在15这个数字?因为距离向量算法存在一个臭名昭著的问题——计数到无穷(count to infinity)。如果不给距离设上限,两个邻居之间互相传播一条坏路由,跳数会无限增加,永远收敛不了。设个16上限,就意味着任何路由的度量一旦到16,立即判定为不可达,协议在数学上保证能停下来。
代价也很实在:RIP网络的有效直径被限制在15台路由器以内。放到今天的网络环境里,一个稍微大点的园区网可能就超过这个规模,更别提城域网和骨干网了。所以RIP注定只能活在小规模网络里。
2.2 每一台路由器都在“广播自己的路书”:周期更新与计时器
RIP的报文封装在UDP里,端口号520,抓包时看到这一点基本就能确认是RIP。RIPv1用广播地址发送,RIPv2用组播地址224.0.0.9。配置好之后,网络里每台路由器都会每隔30秒周期性地把自己的路由表发出去,就像每家每户定时向外递一份自己的“路书”。
除了30秒的更新周期,协议内部还有几个计时器协同工作。最常用的理解方式是三条:更新计时器(每30秒发一次)、超时计时器(如果180秒内没收到某条路由的刷新,就把它标记为不可达)、刷新计时器(再过一段时间彻底删除这条路由)。不同厂商的默认值略有差异,比如思科经典的默认值是更新30秒、失效180秒、抑制180秒、刷新240秒,华为VRP也有类似机制,但具体数值和命名不一样。如果你同时对接多厂商设备,计时器不一致会导致误判,这点排障时要格外留意。
理解这些计时器,你就能明白RIP的一个致命弱点:收敛慢。一条路由从出现故障到全网彻底把它忘掉,最坏情况下要用“更新周期+超时时间+刷新时间”的量级来计算。这也是为什么现代网络里RIP基本退居二线,但在老网络和实验室里依然能见到。
2.3 防环三板斧:水平分割、毒性反转、触发更新
距离向量协议最怕的是环路。数据包在路由器之间来回绕圈,TTL耗尽才被丢弃,这就是网络工程师的噩梦。RIP准备了几个经典机制来对抗环路。
第一招是水平分割(Split Horizon)。规则很简单:从某个接口学到的路由,不能再从同一个接口发回去。翻译成人话就是,你从邻居老王那儿听到的消息,别原封不动说给老王听。这条规则能挡住大多数直接环路。但物理拓扑只要稍微绕一点——比如三角组网,R1从R2学到坏路由,再通过另一条物理链路把这条坏路由传回R2——水平分割就管不住了。
第二招是毒性反转(Poison Reverse)。当一条路由失效时,主动把它改成16跳再发回给上游,相当于“我明确告诉你这条路断了,你也别再用”。它比单纯的不发消息更主动,能让邻居更快删除坏路由。
第三招是触发更新(Triggered Update)。正常情况下路由表每30秒才刷一次,但拓扑一旦发生变化,路由器立刻发更新报文,不用干等下次周期,能显著缩短故障扩散时间。
这几招合在一起,RIP才勉强压住了环路问题。但前提是你得理解它们在什么场景下会失效,否则若干台设备一配错,照样环路满天飞。
2.4 RIPv1、RIPv2、RIPng:三个版本怎么选
RIP在漫长历史里演化出了三个主要版本,很多刚接触的人容易搞混。
RIPv1是最老的那个,属于有类别路由协议(classful)。它不携带子网掩码,只认ABC类主类网段,所以没法支持VLSM和CIDR。它用广播发送报文,没有认证能力,安全性基本为零。今天如果谁还在新网络里配RIPv1,那基本是为了兼容某台上古设备,否则没有任何理由选它。
RIPv2是现在唯一值得在IPv4网络上使用的版本。它改成了无类别路由协议(classless),报文里携带子网掩码,支持VLSM和CIDR,能把非常具体的子网路由广播出去。发送方式换成组播224.0.0.9,减少了广播对无关设备的干扰。认证方面支持明文和MD5,至少能挡掉一些手滑的配置错误。一句话:新配置RIP,必须version 2。
RIPng是IPv6版本,端口换成521,组播地址是FF02::9,工作机制跟RIPv2类似。但它只解决IPv6环境下的简单路由需求,实际部署中如果你已经上OSPFv3或者对网络可靠性有要求,RIPng基本可以忽略。
| 版本 | 报文发送 | 子网掩码 | VLSM/CIDR | 认证 | 适用场景 |
|---|---|---|---|---|---|
| RIPv1 | 广播 | 不携带 | 不支持 | 无 | 几乎淘汰 |
| RIPv2 | 组播224.0.0.9 | 携带 | 支持 | 明文/MD5 | 小型IPv4网络 |
| RIPng | 组播FF02::9 | 携带 | 支持 | 无(依赖IPsec) | IPv6边缘场景 |
3. 实操配置RIP:一套双厂商对照的演练
3.1 组网规划与地址设计
我先说一组最简单但覆盖了RIP核心要点的拓扑:三台路由器串成一条链,左侧挂PC1网段,右侧挂PC2网段,中间互联走30位掩码。
设备命名和接口规划如下:
| 设备 | 接口 | IP地址 | 用途 |
|---|---|---|---|
| R1 | GE0/0/0 | 192.168.10.1/24 | 接PC1网段 |
| R1 | GE0/0/1 | 10.0.12.1/30 | 连R2 |
| R2 | GE0/0/0 | 10.0.12.2/30 | 连R1 |
| R2 | GE0/0/1 | 10.0.23.1/30 | 连R3 |
| R3 | GE0/0/0 | 10.0.23.2/30 | 连R2 |
| R3 | GE0/0/1 | 192.168.30.1/24 | 接PC2网段 |
用这个拓扑去理解RIP的宣告范围正好合适:每个网段该由哪台路由器宣告,全网怎么互通,一目了然。
3.2 华为VRP侧配置:三台路由器的完整命令
华为VRP上配置RIP非常直接,在系统视图下进RIP进程,然后宣告主类网段。
以R1为例:
interface GigabitEthernet0/0/0 ip address 192.168.10.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 10.0.12.1 255.255.255.252 rip 1 version 2 undo summary network 10.0.0.0 network 192.168.0.0R2、R3类似,只要把没宣告的网段补进去就行。R2的配置:
rip 1 version 2 undo summary network 10.0.0.0R3的配置:
rip 1 version 2 undo summary network 10.0.0.0 network 192.168.0.0配置完等个几十秒,正常的话,用以下命令能看到RIP学到的路由:
display rip 1 route display ip routing-table protocol rip这里有个必须提醒的坑:华为RIP的network命令只认主类网络号,不能精确到某个具体接口的网段。你写了network 192.168.0.0,路由器上所有属于192.168.0.0/16的接口都会参与RIP,没得商量。如果一台路由器上面挂着多个192.168.x.x网段,你想只宣告其中一个,那RIP做不到这么精细,这是设计如此,不是你配置错了。
3.3 思科IOS侧配置对照
思科IOS的配置逻辑几乎一致,只是命令风格不同:
router rip version 2 no auto-summary network 10.0.0.0 network 192.168.0.0看到区别了吗?思科写的是no auto-summary,华为写的是undo summary,但意思一样:关闭RIPv2的自动聚合功能。如果不关,路由器会把子网路由汇总成主类网络再发出去,比如192.168.10.0/24和192.168.30.0/24可能被聚合成192.168.0.0/16发布,导致下游设备无法精确选路。
验证命令也不难记:
show ip route rip show ip protocols debug ip rip3.4 配置时容易忽略的细节
我配置RIP这些年,几乎每批新人都会在下面几个地方翻车,这几点值得单独拿出来说。
第一,接终端的接口别发RIP报文。PC和服务器没必要收RIP广播,而且收到后如果系统里装了路由服务,还可能出幺蛾子。路由器的接入侧接口应该设置成被动接口(passive-interface),意思是这个接口只接收RIP报文,不主动发送。交换机上如果收到大量组播,也可能吃掉不少CPU资源。
第二,不要把RIP声明到不需要的网段上,尤其是设备私网管理地址、环回口等。等你看到RIP路由表里多出来一堆莫名其妙的路由,想再收回去就得逐个接口加过滤规则,那才是真麻烦。
第三,抓包验证是排障利器。在互联接口上用Wireshark抓包,能看到每30秒一个UDP 520的RIP报文。报文里面每条路由的地址、掩码、度量写得清清楚楚。只要你会看这个包,RIP的问题基本就解决了一半。
4. 真实环境里的RIP排障记录与避坑经验
4.1 版本不匹配导致的路由表震荡
我处理过最典型的RIP故障,是一台老设备跑RIPv1,新接入的交换机跑RIPv2,两边明明物理链路都通,但路由表里就是看不到对方。RIPv1用广播,RIPv2用组播224.0.0.9,两边听不见对方说话,各学各的。
更阴险的是,某些设备默认开启“兼容模式”,能收广播也能收组播,但发送还是按自己配置的版本走。这就造成一种很怪的现象:A能学到B的路由,B学不到A的路由,业务单向通。排查这种问题,最直接的办法就是看两边的version配置,统一成version 2。另外注意,RIPv1和RIPv2混跑时,RIPv1不携带掩码,学到的主类路由可能跟你预期完全不一样,容易产生次优路由甚至环路。所以生产环境里我坚决不建议RIPv1和RIPv2长时间混跑。
4.2 学不到路由:一套从物理层到RIP层的排查路线
RIP学不到路由,90%的情况逃不出下面这几个原因。我把它整理成固定排查顺序,你照着走就行。
第一,确认链路和接口状态。interface up/up是基础,IP地址必须同网段且能互ping。第二,确认RIP宣告范围。华为和思科的network都是主类网段,检查设备的接口地址是不是落在已宣告的网段里。第三,确认版本一致。RIPv1和RIPv2互不兼容,有认证就还要核对密码和认证方式。第四,确认被动接口。如果接口被设成passive-interface,它就只收不发,可能造成单向学习。第五,确认中间有没有ACL或防火墙挡掉UDP 520。很多企业网会把组播和UDP 520一起过滤掉,RIP请求和响应全被丢弃,但你从设备上看路由协议进程一切正常。第六,用抓包软件在接口上抓包,看看有没有周期性的RIP报文。有请求没响应,多半是邻居没配置完整或者被ACL挡了;连报文都没有,先查宣告和版本。
这一套走下来,九成故障都能定位。剩下的那一成,多半是路由被16跳堵死,或者策略路由在里面捣乱,那就要看具体环境了。
4.3 环路与收敛慢:两个实际案例复盘
讲一个让我印象深刻的三角组网案例。R1和R3直连,同时R1通过R2也能到达R3,网络拓扑是个三角形。R3上挂着业务网段,正常时R1学到这条路由有两条路径,直连一跳,绕R2两跳,等价走哪条都行。某天R1到R3的直连链路闪断,R1立刻把那条跳数1的路由标记为不可达。可R2那边还保留着从R1学来的旧路由,并不知道R1-R3已经断了,继续把“R3业务网段”这条消息发给R1。R1收到后更新自己的路由表,跳数变成2,再通过触发更新传回R2。R2又把跳数改成3发回给R1……两边来回改跳数,从2变成3再变4,直到累计到16才彻底判定不可达。
这就是教科书里的“计数到无穷”在现实里发生了。水平分割在这张拓扑里管不住,因为R1从R2学到的坏消息是通过另一个接口传回R2的。幸好底层有触发更新和毒性反转兜底,才没让环路无限延续。
另一个我常提到的事实是RIP的收敛速度。一个坏路由从被检测出来到全网彻底遗忘,在默认计时器下走完“超时+抑制+刷新”的流程,几十秒是常态,慢的时候能到几分钟。这个窗口里流量会一直往黑洞里灌。所以但凡业务对切换时间有要求,RIP都不是一个好选择。那些说“反正网小、跑RIP没事”的人,多半没经历过全网路由表集体震荡的深夜。
4.4 混合路由协议时的管理距离陷阱
一个不太被注意、但实际环境里经常踩的坑,是RIP和静态路由或其他动态协议并存时的优先级问题。不同厂商对路由协议的管理距离定义不一样:华为VRP默认静态路由60、RIP 100、OSPF 10;思科默认静态路由1、RIP 120、OSPF 110。
这意味着如果你在设备上同时配了一条静态默认路由,又从RIP学到了同样的路由,静态路由会胜出,RIP学到的条目不一定能进路由表。很多工程师配完RIP后发现业务没按预期走,查了半天路由表,发现RIP条目根本没被选中,甚至完全不显示。遇到这种情况,先看管理距离,别急着怪RIP没工作。
5. 我的一点选型体会
说句实在话,现在让我规划一个新网络,首选肯定不是RIP。哪怕是小型网络,OSPF的收敛速度、精细选路和扩展性都比RIP好太多。RIP在今天真正的价值,一是兼容老旧设备和历史遗留网络,二是作为学习动态路由原理的最低门槛。
如果你的网络规模就十台设备以内、网络直径不超过15跳、没有专业网管团队盯着,而且设备老得跑不动OSPF,那RIP还能凑合用。反过来,只要网络上了规模、有冗余链路、业务对切换时间有要求,我劝你趁早规划迁移到OSPF或IS-IS。跨域互联这种场景直接用BGP,别拿RIP去硬顶。
我自己每次在实际网络里碰到RIP,心里反而踏实。它问题就那么几个,把版本、宣告范围、防环机制全部过一遍,基本都能收场。学RIP最大的收益不是学会这个协议本身,而是通过它把距离向量算法、路由环路、收敛时间这些概念彻底想通,再看OSPF的区域和LSA、BGP的路径属性,都是顺水推舟的事。如果你也在维护这类老网络,我最后建议你一条:先在实验室把RIPv2配通、抓包看出UDP 520的报文内容,再动手改生产环境。抓包那一眼,比看十篇文档都管用。