
1. 为什么还要聊RIP一个被低估的“网络入门教科书”刚入行那会儿带我的师傅扔给我一台旧路由器和一张拓扑图说“先把这几个网段跑通再说”。我当时满脑子都是OSPF、BGP这些听起来更“高级”的词觉得RIP这种老掉牙的协议早就该进博物馆了。结果师傅一句话把我噎回去“你连距离矢量是怎么回事都说不清楚配什么OSPF”这句话我记了很多年。RIPRouting Information Protocol路由信息协议确实是距离矢量路由协议里最经典、最简单的一个实现但它的价值恰恰在于“简单”二字。它把动态路由最核心的几个概念——度量值、周期性更新、水平分割、路由毒化、触发更新——全都用最直白的方式摆在你面前。你把这套东西吃透了再去看OSPF的链路状态数据库、BGP的路径属性会发现很多设计思路其实是一脉相承的。这篇文章适合谁看如果你是刚接触网络工程的学生、准备考网络方向认证的初学者或者工作中偶尔要碰小型网络配置的运维人员那RIP绝对值得你花时间动手跑一遍。它不需要你理解复杂的SPF算法也不需要你背一堆LSA类型一台支持RIP的路由器或者一台装了路由模拟软件的电脑就能开干。我会从协议原理讲到实操配置再把我这些年踩过的坑和排查思路一并倒出来尽量让你看完就能自己搭一个能跑起来的小网络。需要先说明一点RIP分v1和v2两个版本v1是有类路由协议不支持变长子网掩码更新报文里连子网掩码字段都没有v2是无类路由协议支持VLSM和CIDR还加了认证机制。现在实际环境里基本只用v2v1更多是出现在教材里。所以下面的内容除非特别说明默认讲的都是RIPv2。2. 协议核心机制拆解距离矢量到底在“矢量”什么2.1 度量值与跳数为什么16跳就等于不可达RIP用跳数Hop Count作为度量值这个选择非常朴素数据包从源到目的经过多少个路由器跳数就是多少。直连网络跳数为0经过一个路由器跳数为1以此类推。这里有个关键设计——最大跳数限制为1516被视为无穷大不可达。为什么是15因为RIP是周期性全量更新每30秒把整张路由表发给邻居。如果网络直径太大路由收敛会慢到无法接受而且距离矢量协议天生有“计数到无穷”的问题。把上限压到15相当于给坏消息的传播设了一个天花板坏消息最多传15次就能被判定为不可达不至于无限循环下去。你可以这样理解跳数就像寄快递的中转站数量中转站越多丢件和延误的概率越大。RIP直接规定“超过15个中转站就别寄了”虽然粗暴但在小型网络里够用。注意跳数不考虑链路带宽。一条10G的直连链路和一条1M的串口链路在RIP眼里跳数都是1。所以RIP选路选的是“经过路由器最少”的路径而不是“最快”的路径。这是它和OSPF最本质的区别之一。2.2 周期性更新与路由表维护30秒一次的“广播”RIP路由器默认每30秒向所有启用RIP的接口发送一次完整的路由表更新。这个更新是全量的不是只发变化的部分。收到更新的邻居会根据“距离矢量算法”决定是否更新自己的路由表。具体判断逻辑是这样的假设路由器A从邻居B收到一条去往网络N的路由度量值为d。A会做几件事把d加上自己到B的跳数通常是1得到d1。如果自己的路由表里没有去往N的路由直接加入下一跳指向B度量值为d1。如果已经有去往N的路由比较新旧度量值。如果新度量值更小替换如果相同可以等价负载均衡取决于实现如果更大忽略。如果下一跳就是B无论度量值变大变小都更新——这条规则很关键后面讲路由毒化时会用到。这种“邻居告诉我什么我就信什么再转发给其他邻居”的模式就是距离矢量的核心。每个路由器只知道“往哪个方向走、大概多远”不知道全网拓扑。这跟链路状态协议每个路由器都有一张全网地图是完全不同的思路。2.3 水平分割与路由毒化防止环路的两道闸门距离矢量协议最大的风险就是路由环路。举个经典场景路由器A和B互相连接A告诉B“我能到网络N距离1跳”B记下来。然后B又告诉A“我能到网络N距离2跳”。如果N突然断了A会从B那里学到“B能到N距离2跳”于是A以为自己还能通过B到达N把度量值改成3再告诉B。B又改成4……这就是计数到无穷。RIP用了几个机制来堵这个漏洞水平分割Split Horizon从某个接口学到的路由不再从这个接口发回去。A从B学到的路由不会再告诉B。这直接切断了最简单的双向环路。路由毒化Route Poisoning当一条路由失效时路由器不是直接删除而是把它标记为16跳不可达并继续发送出去。邻居收到16跳的更新后也会把这条路由标记为不可达。这样坏消息能快速传遍全网而不是等30秒超时。毒性逆转Poison Reverse水平分割的加强版。从某个接口学到的路由从这个接口发回去时明确标记为16跳。相当于告诉邻居“你别从我这儿走这条路了它不通”。这比单纯不发更明确能加速收敛。触发更新Triggered Update路由表发生变化时不等30秒周期立即发送更新。这能让坏消息传播更快减少收敛时间。这几个机制配合起来基本能解决小型网络里的环路问题。但要注意它们不是万能的网络规模一大收敛慢的问题还是会暴露出来。2.4 RIPv2的改进认证、组播与无类路由RIPv1的更新报文里没有子网掩码所以它只能识别A类、B类、C类这种自然网段。你如果在一个C类网段里划了子网RIPv1是传不出去的。RIPv2补上了这个短板子网掩码字段每条路由都携带掩码支持VLSM和CIDR。组播更新v1用广播255.255.255.255v2用组播224.0.0.9。组播的好处是只有启用了RIP的设备才会处理这些报文减少了对其他主机的干扰。认证支持明文认证和MD5认证。明文认证基本等于没有抓包就能看到密码MD5认证相对靠谱但配置时要注意密钥ID和密钥字符串的匹配。下一跳字段可以指定下一跳地址在某些特殊拓扑里有用。这些改进让RIPv2在小型企业网络里还能有一席之地。但它的本质还是距离矢量收敛慢、跳数限制、不支持大型网络这些先天缺陷是改不掉的。3. 动手实操从零搭一个三路由器的RIP网络3.1 拓扑设计与地址规划光讲理论没意思咱们直接搭一个能跑的环境。我用的是三台路由器串成一条线再加一个环回口模拟末梢网络。拓扑如下R1的G0/0口连R2的G0/0口网段192.168.12.0/24R2的G0/1口连R3的G0/0口网段192.168.23.0/24R1上有一个环回口Lo010.1.1.1/32R3上有一个环回口Lo010.3.3.3/32这样R1和R3之间要互通必须经过R2。RIP会自动发现这两条末梢路由并传播。地址规划表设备接口IP地址说明R1G0/0192.168.12.1/24连R2R1Lo010.1.1.1/32模拟末梢网络R2G0/0192.168.12.2/24连R1R2G0/1192.168.23.2/24连R3R3G0/0192.168.23.3/24连R2R3Lo010.3.3.3/32模拟末梢网络如果你手头没有真机用GNS3、EVE-NG或者Cisco Packet Tracer都能做。Packet Tracer最轻量适合纯学习GNS3和EVE-NG更接近真实环境但需要自己准备镜像。3.2 基础配置与RIP启用先给每台路由器配好接口地址然后启用RIP。以R1为例R1(config)# interface GigabitEthernet0/0 R1(config-if)# ip address 192.168.12.1 255.255.255.0 R1(config-if)# no shutdown R1(config-if)# exit R1(config)# interface Loopback0 R1(config-if)# ip address 10.1.1.1 255.255.255.255 R1(config-if)# exit R1(config)# router rip R1(config-router)# version 2 R1(config-router)# no auto-summary R1(config-router)# network 192.168.12.0 R1(config-router)# network 10.0.0.0 R1(config-router)# exit这里有几个点要特别注意version 2必须手动指定否则默认是v1。v1不支持子网掩码你的/32环回口根本传不出去。no auto-summary关闭自动汇总。RIPv2默认会在主类网络边界做自动汇总比如把10.1.1.1/32汇总成10.0.0.0/8。在实验环境里这会导致路由信息不精确建议关掉。生产环境里如果地址规划规范自动汇总有时能减小路由表但大多数情况下还是关掉更可控。network命令RIP的network命令和OSPF不一样。OSPF的network后面跟的是反掩码精确匹配接口RIP的network后面跟的是主类网络号只要接口地址属于这个主类网络该接口就会启用RIP并参与收发更新。比如network 10.0.0.0会让所有10.x.x.x的接口都启用RIP。这一点新手很容易搞混。R2和R3的配置类似R2要同时宣告192.168.12.0和192.168.23.0两个网段R3宣告192.168.23.0和10.0.0.0。3.3 验证路由学习结果配完之后等30秒左右让周期更新跑一轮然后在R1上查看路由表R1# show ip route你应该能看到类似这样的条目R 192.168.23.0/24 [120/1] via 192.168.12.2, 00:00:15, GigabitEthernet0/0 R 10.3.3.3/32 [120/2] via 192.168.12.2, 00:00:15, GigabitEthernet0/0[120/1]里的120是RIP的管理距离Administrative Distance1是度量值跳数。管理距离表示路由来源的可信度RIP默认是120比直连0、静态1、OSPF110都低。也就是说如果同一目的地同时有OSPF和RIP的路由路由器会优先选OSPF。10.3.3.3/32的度量值是2因为R1到R3经过R2跳了两跳。这符合预期。再看R2的路由表应该能同时看到10.1.1.1/32和10.3.3.3/32度量值都是1。用show ip protocols可以查看RIP的运行状态包括版本、更新计时器、水平分割是否启用等。用debug ip rip可以实时看更新报文但生产环境慎用debug输出很吃CPU。3.4 抓包看RIPv2报文长什么样如果想更直观地理解RIPv2可以在R1和R2之间抓个包。RIPv2跑在UDP 520端口上组播地址224.0.0.9。一个典型的Response报文里包含命令字段1Request2Response版本号2路由条目地址族标识2表示IP、路由标记、IP地址、子网掩码、下一跳、度量值每条路由条目20字节一个RIP报文最多25条路由受MTU限制。如果路由表超过25条会分多个报文发送。抓包的时候你会看到即使网络没变化每30秒也会准时来一个全量更新。这就是周期性更新的特点——不管有没有变化都发。这也是RIP消耗带宽的原因之一。4. 常见问题与排查技巧实录4.1 路由学不到按这个顺序查RIP配置看起来简单但实际排错时经常一头雾水。我整理了一个排查顺序基本能覆盖90%的问题排查步骤检查命令常见问题1. 接口状态show ip interface brief接口没up、地址配错2. RIP是否启用show ip protocols忘了配router rip或network3. 版本是否一致show ip protocols一端v1一端v2收不到4. 自动汇总show running-config汇总导致路由被吞5. 水平分割show ip interface帧中继等NBMA环境需关闭6. 认证debug ip rip密钥不匹配更新被丢弃7. 被动接口show ip protocols误配passive-interface版本不一致是最常见的坑。RIPv1和RIPv2虽然能共存但v1收不了v2的组播更新v2默认也不处理v1的广播更新除非配了ip rip receive version 1 2。所以两端要么都v2要么都v1别混着来。自动汇总是第二个坑。比如R1的环回口是10.1.1.1/32如果没关自动汇总R2学到的可能是10.0.0.0/8。虽然也能通但路由不精确而且如果网络里有其他10.x.x.x的网段可能会出问题。被动接口也容易误伤。有时候为了安全会把连接PC的接口配成passive-interface结果忘了那个接口也需要发RIP更新导致对端学不到路由。被动接口只收不发用在末梢网络没问题但用在路由器互联接口上就断了。4.2 路由环路症状、原因与急救路由环路的典型症状是数据包在几个路由器之间来回转发TTL递减到0被丢弃网络时通时断路由器CPU升高。用traceroute能看到路径在几个IP之间循环。RIP环境下出现环路通常是这几个原因水平分割被关闭了有些NBMA环境需要关但关了就要靠其他机制防环路由毒化和触发更新没生效某些老设备或配置问题网络设计本身有环路且收敛过程中出现临时环路急救办法在出问题的路由器上clear ip route *清空路由表让它重新学习。但这只是治标根本解决要检查水平分割和触发更新的配置。实操心得在帧中继或DMVPN这种NBMA环境里水平分割默认是开启的但物理上只有一个接口逻辑上多个邻居水平分割会导致部分邻居学不到路由。这时候需要关掉水平分割但一定要配合路由毒化和触发更新来防环。我一般会同时配no ip split-horizon和确保触发更新开启RIP默认就是开的。4.3 收敛慢怎么办能调的参数与不能调的硬伤RIP的收敛慢是出了名的。网络一抖动可能要几分钟才能稳定。能调的参数有更新计时器默认30秒可以改小比如10秒。但改小会增加带宽消耗和CPU负担而且所有路由器必须一致否则计时器不匹配会出问题。超时计时器默认180秒路由失效后多久删除。抑制计时器默认180秒收到不可达路由后多久才接受同一路由的新信息。触发更新确保开启能让变化立即传播。但说实话这些调整治标不治本。RIP的硬伤是周期性全量更新和跳数限制网络一大就不行。我的建议是超过10台路由器的网络直接上OSPF别在RIP上浪费时间。RIP的定位就是小型网络、实验学习、或者作为备用路由协议。4.4 认证配置的坑MD5密钥ID不匹配RIPv2的MD5认证配置看起来简单但有个细节容易忽略密钥ID必须两端一致。配置是这样的R1(config)# key chain RIP_KEY R1(config-keychain)# key 1 R1(config-keychain-key)# key-string MyPassword123 R1(config-keychain-key)# exit R1(config-keychain)# exit R1(config)# interface GigabitEthernet0/0 R1(config-if)# ip rip authentication mode md5 R1(config-if)# ip rip authentication key-chain RIP_KEY如果一端key ID是1另一端是2即使key-string一样认证也会失败。debug ip rip会显示“Authentication failure”或者直接丢弃报文。这个坑我踩过不止一次排查时先看key ID再看key-string最后看模式明文还是MD5。另外明文认证的key-string在抓包里是可见的安全性约等于零。如果环境里有人抓包密码就泄露了。所以能用MD5就用MD5。5. RIP还值得学吗适用场景与替代方案对比5.1 什么场景下RIP还能用虽然RIP在大型网络里已经基本被淘汰但下面这些场景它依然有生命力教学与实验这是RIP最大的价值。距离矢量的核心概念——度量、周期更新、水平分割、路由毒化——在RIP里体现得最纯粹。学完RIP再看OSPF很多设计动机就一目了然了。极小型网络比如一个办公室里有三四个网段两三台路由器用RIP配起来比OSPF快得多。OSPF要划区域、配router-id、理解DR/BDR选举RIP几行命令就完事。备用路由协议有些环境主用OSPF或EIGRP但配一个RIP作为备份。当主协议出问题时RIP能提供一条保底路径。不过要注意管理距离RIP默认120比OSPF的110大所以正常情况下RIP路由不会进路由表只有OSPF路由消失后才会生效。认证考试网络方向的入门认证基本都会考RIP尤其是RIPv2的配置和排错。这块内容不掌握后面学OSPF和BGP会缺一块基础。5.2 RIP vs OSPF vs 静态路由怎么选对比项RIPOSPF静态路由度量值跳数带宽、延迟等无最大规模15跳理论上无限制无限制收敛速度慢分钟级快秒级无收敛概念配置复杂度低中高低CPU/内存消耗低中高无适用场景小型网络、教学中大型网络简单固定拓扑我的经验是网络直径小于5跳、路由器少于10台RIP够用超过这个规模直接上OSPF。静态路由适合拓扑固定、不需要动态调整的场景比如只有一条出口的末梢网络。5.3 从RIP迁移到OSPF的注意事项如果你现在网络里跑的是RIP想迁移到OSPF有几个点要注意管理距离OSPF默认110RIP默认120。如果同时启用OSPF路由会优先。迁移时可以先把OSPF配好确认路由正确后再关RIP这样业务不会中断。网络宣告方式RIP的network后面跟主类网络号OSPF的network后面跟反掩码。比如RIP是network 192.168.1.0OSPF是network 192.168.1.0 0.0.0.255。别搞混了。区域设计OSPF有区域概念所有非骨干区域必须连到骨干区域Area 0。RIP没有区域迁移时要重新规划。认证OSPF的认证配置和RIP不一样RIP是key chainOSPF可以接口级也可以区域级。迁移时认证要重新配。计时器OSPF的Hello和Dead计时器默认是10秒和40秒和RIP的30秒/180秒完全不同。迁移后收敛行为会变化要提前测试。6. 几个容易被忽略的细节与我的实操体会6.1 被动接口的正确用法passive-interface是RIP里很实用的一个命令。它的作用是该接口不发送RIP更新但接收更新并且该接口所在的网段仍然会被宣告。典型用法是在连接PC或服务器的接口上配passive-interface。这些接口不需要发RIP更新PC又不跑RIP但需要把网段宣告出去让其他路由器能学到。如果不配passive-interfaceRIP会往这些接口发组播更新虽然PC会忽略但浪费带宽而且有安全隐患。配置方法R1(config)# router rip R1(config-router)# passive-interface GigabitEthernet0/1如果想一次性把所有接口都设为被动再手动开启需要发更新的接口可以这样R1(config-router)# passive-interface default R1(config-router)# no passive-interface GigabitEthernet0/0这在接口多的路由器上很省事。6.2 单播更新与邻居指定RIP默认用广播或组播发更新但在某些环境里比如帧中继、或者需要跨网段建立邻居可能需要用单播。配置方法是R1(config-router)# neighbor 192.168.12.2配了neighbor之后RIP只向指定的邻居发单播更新不再发组播。这在NBMA环境里很有用但要注意配了neighbor之后水平分割可能还需要调整否则还是会有问题。6.3 路由过滤与偏移列表RIP支持用偏移列表offset-list来调整度量值从而实现路由过滤或选路控制。比如你想让某条路由的跳数增加2让路由器不选它R1(config)# access-list 1 permit 10.3.3.0 0.0.0.255 R1(config)# router rip R1(config-router)# offset-list 1 in 2 GigabitEthernet0/0这条命令的意思是从G0/0接口收到的、匹配ACL 1的路由度量值加2。这样原本2跳的路由变成4跳如果有其他更优路径就不会选这条了。偏移列表在RIP里算是比较高级的用法实际工作中用得不多但考试和实验里会出现。理解它的原理就行不用死记命令。6.4 我踩过的最大的坑计时器不一致有一次在实验环境里我把一台路由器的更新计时器改成了10秒另一台没改。结果两台路由器互相学不到路由debug看更新报文是发了但对方不处理。查了半天才发现是计时器不匹配。RIP的计时器必须全网一致包括更新计时器、超时计时器、抑制计时器、垃圾收集计时器。默认值是Update30秒Timeout180秒Suppress180秒Garbage-collect120秒改的时候要么全改要么全不改。生产环境里我建议保持默认别乱动。改小了增加负担改大了收敛更慢得不偿失。6.5 关于RIP的“毒性逆转”到底开不开毒性逆转Poison Reverse是水平分割的加强版默认在大多数实现里是开启的。它的作用是从某个接口学到的路由从这个接口发回去时标记为16跳。这样邻居能明确知道“这条路不通”而不是“没收到更新”。但毒性逆转会增加更新报文的体积因为每条路由都要带一个16跳的条目。在路由表很大的时候这会增加带宽消耗。所以有些实现允许关闭毒性逆转只保留水平分割。我的建议是小型网络保持默认开启大型网络如果带宽紧张可以考虑关闭但关闭后要确保触发更新和路由毒化正常工作。别为了省一点带宽把防环机制拆了得不偿失。6.6 RIPv2的认证密钥管理MD5认证的key chain可以配多个key每个key有不同的ID和有效期。RIP会使用第一个有效的key。配置多个key的好处是可以在不中断业务的情况下更换密码先加一个新key等所有路由器都更新后再删旧key。R1(config)# key chain RIP_KEY R1(config-keychain)# key 1 R1(config-keychain-key)# key-string OldPassword R1(config-keychain-key)# exit R1(config-keychain)# key 2 R1(config-keychain-key)# key-string NewPassword R1(config-keychain-key)# exit但要注意RIP的key chain不像某些协议支持平滑切换换key的时候可能会短暂中断。所以最好在维护窗口操作。7. 写在最后RIP教给我的那些事跑了这么多年网络RIP是我最早接触的动态路由协议也是我理解“路由协议到底在解决什么问题”的起点。它简单到你可以用一张纸把整个算法画出来但正是这种简单让很多核心概念变得清晰可见。距离矢量的“邻居告诉我什么我就信什么”链路状态的“我自己算最短路径”这两种思路的差异在RIP和OSPF的对比里体现得淋漓尽致。你如果能把RIP的收敛过程、环路成因、防环机制讲清楚再去学OSPF的LSA泛洪、SPF计算、区域划分会发现很多设计都是在解决RIP暴露出来的问题。最后分享一个我常用的教学方法让学生先用RIP搭一个三路由器的环然后故意断开一条链路用debug观察路由毒化和触发更新的过程。看着路由表从“有路由”变成“16跳不可达”再变成“删除”整个过程非常直观。这比看十遍书都管用。如果你正在学网络别跳过RIP。它可能不是最实用的协议但绝对是最值得花时间理解的协议之一。