1. 实验背景:RIP协议综合练习到底在练什么
以前带新人做路由协议实验,我最喜欢让他们先碰RIP协议。别看这协议老得掉渣,距离矢量那套“听邻居说、算跳数、定期广播”的玩法,恰恰是理解所有动态路由协议的底座。这份rip综合练习,不是把router rip敲一遍就收工,而是要把防环、汇总、默认路由、路由过滤、排障这些点串起来。练完之后,你会真切地感受到一条BGP路由背后那些“从哪听说、怎么播出去、断了怎么收回来”的原始逻辑。适合刚学完基础路由的伙伴,也适合想在入网前把路由协议底子打实的同学。
1.1 为什么兜兜转转还是要回来练RIP
RIP(Routing Information Protocol,路由信息协议)是最典型的距离矢量协议,它靠跳数选路,最大有效跳数是15,16就代表不可达。把规则抽出来看,配置命令非常简单:启用进程、指定版本、宣告直连网络。但正是这份简单,让你有机会把注意力放在路由更新、环路抑制、计时器这些公共机制上。你在RIP里能想明白“为什么路由表里会有两条等价路径”“为什么断了链路之后不是立刻消失”“为什么有人会把16跳说成毒路由”,这些经验搬到OSPF、BGP里照样成立。
综合练习和单点验证不一样。单点验证只是确认某条命令能生效,综合练习要求你在一张完整拓扑里同时处理多类问题。比如RIPv2的自动汇总要不要关,默认路由怎么注入,被动接口加在哪,路由过滤和offset-list会影响谁。这些问题单独拎出来都不难,一旦叠加,就能逼着你把路由协议从“背命令”变成“看逻辑”。
1.2 练习环境与拓扑规划
先说环境。我习惯用GNS3挂Cisco IOS镜像,或者直接用华为eNSP里的AR路由器,两者都行。只要你把接口编号和命令对应起来,结论完全通用。模拟器之外,建议开一个Wireshark,专门抓路由器之间的RIP报文,后面会讲到怎么用。别用纯PackerTracer的简化模式,有些debug和抓包行为跟真实IOS差异太大,容易误导。
这一轮综合练习用4台路由器组成一条主干链,R1和R4各自挂Loopback口模拟终端网段,网络规模不大,但足够把RIP该看的都看一遍。
| 设备 | 接口 | IP地址 | 说明 |
|---|---|---|---|
| R1 | G0/0/0 | 192.168.12.1/24 | 连接R2 |
| R1 | Loopback0 | 10.1.1.1/24 | 模拟LAN1 |
| R2 | G0/0/0 | 192.168.12.2/24 | 连接R1 |
| R2 | G0/0/1 | 192.168.23.2/24 | 连接R3 |
| R3 | G0/0/0 | 192.168.23.3/24 | 连接R2 |
| R3 | G0/0/1 | 192.168.34.3/24 | 连接R4 |
| R4 | G0/0/0 | 192.168.34.4/24 | 连接R3 |
| R4 | Loopback0 | 10.4.1.1/24 | 模拟LAN2 |
| R4 | Loopback1 | 10.4.2.1/24 | 模拟LAN3 |
这样的规划有一个很关键的点:10.0.0.0/8这个主类网络被192.168.0.0/16隔开了,R1和R4各有一堆10.x网段,正好用来演示RIP自动汇总的坑。如果手上只有三台设备,就把R4的两个Loopback挪到R3上,主干链路改成R1-R2-R3,练习重点一样能保住。
2. 动手前先把距离矢量的关键原理捋一遍
RIP规则少,但每条规则都牵一发动全身。配置之前不把这些东西理顺,遇到路由不通,你只能瞎试。
2.1 路由是怎么从邻居嘴里听来的
距离矢量的名字说明了一切:每台路由器手里只有“去某个目的地的方向和距离”,没有全网地图。它从邻居那里听说一条路由后,会查一下自己路由表:如果这条路由是自己的直连,或已有metric更小的路由,就忽略;如果metric更小,就用新的替换;如果metric相同,就加入形成等价负载分担。这个“收到通告、比较跳数、决定替换”的循环每30秒来一遍,所以RIP对拓扑变化的反应不如OSPF快。
RIP的跳数计算也很有意思。直连网络自己知道,不会算成1跳;从邻居学来后,每经过一台路由器加1跳,超过15就视为不可达。这也是为什么RIP不适合作大网协议。在实验室里,你可以故意让一台路由器上连续写一大堆RIP邻居,把跳数顶到16,体会“不可达”的含义,这是安全的实验环境才能干的活儿。
2.2 防环三件套:水平分割、毒性反转、触发更新
路由环路是距离矢量协议的老毛病。A告诉B一条路,B又原样告诉A,A听着听着就觉得“下一跳还能走”,结果链路一断就绕圈。RIP针对这个问题上了三道保险。
水平分割的规则是:从哪个接口学到的路由,不再从这个接口通告回去。这能在绝大多数情况下避免两台路由器之间的双向误导。毒性反转更进一步:不仅不说回去,还反着通告metric 16,明确告诉对方“这条路已经废了”。触发更新则是当拓扑变化时不等30秒,立刻广播最新状态,让坏消息跑得比好消息快。实际配置中,Cisco默认开水平分割,你不需要在每个接口下敲命令,但要能认出来,特别是当你为了做实验关掉它之后,路由立刻出问题,那就是防环机制被破坏了。
2.3 RIPv1与RIPv2:综合练习为什么选v2
既然做综合练习,当然用RIPv2。它和v1最大的差别在子网掩码的携带方式。RIPv1基于类别地址,不携带掩码,所以遇到不连续子网、可变长子网掩码(VLSM)和CIDR就抓瞎。RIPv2在报文里带上了掩码和下一跳,还支持组播更新和认证。
| 对比项 | RIPv1 | RIPv2 |
|---|---|---|
| 更新方式 | 广播255.255.255.255 | 组播224.0.0.9 |
| 子网掩码 | 不带 | 带 |
| VLSM/CIDR | 不支持 | 支持 |
| 认证 | 不支持 | 支持明文/MD5 |
| 自动汇总 | 必开 | 可关 |
一句话:v1是古董,v2是能进生产环境的最小可用版本。后面的配置全部以RIPv2为例。
3. 综合练习配置全流程(以Cisco IOS为例)
下面把整张拓扑的配置过一遍。命令以Cisco IOS为主,Huawei的差异我会在文章最后单独列。
3.1 基础IP与环回接口准备
先把所有接口地址配好,并确认物理链路up。R1的基础配置长这样:
R1(config)# interface GigabitEthernet0/0/0 R1(config-if)# ip address 192.168.12.1 255.255.255.0 R1(config-if)# no shutdown R1(config-if)# interface Loopback0 R1(config-if)# ip address 10.1.1.1 255.255.255.0R2、R3照着地址表配,R4除了G0/0/0之外还要配两个Loopback:
R4(config)# interface GigabitEthernet0/0/0 R4(config-if)# ip address 192.168.34.4 255.255.255.0 R4(config-if)# no shutdown R4(config-if)# interface Loopback0 R4(config-if)# ip address 10.4.1.1 255.255.255.0 R4(config-if)# interface Loopback1 R4(config-if)# ip address 10.4.2.1 255.255.255.0配完后用show ip interface brief检查,所有物理接口都应该是up/up,Loopback本来就是up,不用管线缆。
3.2 启用RIPv2并理解network命令
RIP的启动配置非常短,但很多人恰恰死在network语句上。以R1为例:
R1(config)# router rip R1(config-router)# version 2 R1(config-router)# no auto-summary R1(config-router)# network 192.168.0.0 R1(config-router)# network 10.0.0.0这里的network命令不是“宣告某一条具体路由”,而是“告诉RIP在哪些接口上跑起来”。更重要的是,它必须写主类网络地址。你不能写network 192.168.12.0,要写network 192.168.0.0;不能写network 10.1.1.0,要写network 10.0.0.0。因为RIP的进程要拿你写的网络号去匹配接口,匹配上之后,这个接口就会发RIP更新,同时把该接口对应的直连路由交给RIP去通告。写了主类网络,它才会把所有落在该主类网段内的接口都选进来。
R2和R3只需要宣告192.168.0.0,因为它们的接口全在这个主类网络里。R4除了192.168.0.0,还要宣告10.0.0.0,把两个Loopback纳入RIP。
3.3 关闭自动汇总,用路由汇总给路由表瘦身
为什么RIPv2默认自动汇总要我强制加一句no auto-summary?因为这版拓扑里,10.0.0.0/8被192.168.0.0/16一分为二。如果不关自动汇总,R1会把自己的10.1.1.0/24汇总成10.0.0.0/8发给R2,R4也会把自己的10.4.1.0/24和10.4.2.0/24汇总成10.0.0.0/8发给R3。两边都往外发同一个10.0.0.0/8,R1和R4收到后根本分不清这个汇总到底指向哪一侧,路由就会黑掉。
先把所有路由器上的no auto-summary配完,等路由表正常了,再玩手工汇总。手工汇总的好处是让路由表更精简,比如R4两个Loopback分别是10.4.1.0/24和10.4.2.0/24,它们能精确汇总成10.4.0.0/16。这时在R4连接R3的接口上做:
R4(config)# interface GigabitEthernet0/0/0 R4(config-if)# ip summary-address rip 10.4.0.0 255.255.0.0配完后,R3、R2、R1的路由表里就不再是两个/24,而是一条10.4.0.0/16。注意,手工汇总命令是针对某个接口的,不会自动涵盖你后来新建的所有10.x网段,只有落在10.4.0.0/16范围内的路由才会被汇总。这是练习里最容易被忽略的细节。
3.4 被动接口与默认路由注入
RIP默认会向启用了进程的所有接口周期发更新。像Loopback这种模拟终端网段的接口,后面根本没有路由器,发RIP报文纯属浪费,甚至在某些真实设备上还会招来安全问题。这时用被动接口把它关掉:
R1(config)# router rip R1(config-router)# passive-interface Loopback0 R4(config)# router rip R4(config-router)# passive-interface Loopback0 R4(config-router)# passive-interface Loopback1被动接口不发送RIP更新,但仍然接受更新,也仍然会宣告该接口的直连路由,这个点很多人会记混。默认路由的注入是另一道硬菜。假设R3是公司网络出口,外网方向我们不接真设备,给R3造一条静态默认路由:
R3(config)# ip route 0.0.0.0 0.0.0.0 Null0 R3(config)# router rip R3(config-router)# default-information originate如果不写default-information originate,RIP不会自动传播静态默认路由,R1和R4没有外网方向的出路。加上这条后,R3会把0.0.0.0/0作为一条RIP路由通告出去,全网都知道“去外网找R3”。做实验时可以先用Null0当下一跳,理解机制;生产环境记得改成指向真实出口设备的下一跳,不然流量会被直接丢弃。
3.5 路由过滤与度量调整的进阶配置
基础通了之后,建议在R2上做一次路由过滤,模拟“不想让某一台内网设备学习到某个网段”的场景。例如让R2不把10.4.0.0/16放进路由表:
R2(config)# access-list 10 deny 10.4.0.0 0.0.255.255 R2(config)# access-list 10 permit any R2(config)# router rip R2(config-router)# distribute-list 10 in GigabitEthernet0/0/1这条distribute-list是入方向过滤,R2从G0/0/1收到的RIP更新里,匹配10.4.0.0/16的路由会被丢掉。另一个常用手段是offset-list,用来给特定路由增加额外metric,模拟“这条路更绕”的效果。比如想让R1去往10.4.0.0/16的路由metric被人为抬高:
R2(config)# access-list 20 permit 10.4.0.0 0.0.255.255 R2(config)# router rip R2(config-router)# offset-list 20 in 3 GigabitEthernet0/0/1这样R2从R3学到的10.4.0.0/16,metric会被多加3。实际项目中常用来实现主备路径切换,而不是依赖修改协议默认metric。别把这些过滤和偏移一次性全加上,一条一条验证,否则你根本分不清是策略拦了路由,还是协议本身出了问题。
4. 联调实测:从路由表看到抓包,把协议跑明白
配置只是第一步,RIP综合练习的重头戏在联调。
4.1 show命令三板斧:协议状态、路由表、路由数据库
第一板斧是show ip protocols,看RIP进程的整体状态。正常会显示版本是RIPv2、更新计时器30/180/180/240、被动接口列表、以及Automatic network summarization is not in effect(如果是v1或没关自动汇总,这里会是in effect)。
第二板斧是show ip route rip,只看RIP学来的路由。R2上应该类似这样:
R 10.1.1.0/24 [120/1] via 192.168.12.1, 00:00:09, GigabitEthernet0/0/0 R 10.4.0.0/16 [120/2] via 192.168.23.3, 00:00:11, GigabitEthernet0/0/1路由代码R代表RIP,120是RIP的管理距离,方括号里第二个数字是metric。如果你看到的是10.0.0.0/8而不是明细,说明自动汇总没关干净,回头检查no auto-summary。
第三板斧是show ip rip database,它显示RIP进程自己维护的数据库,比show ip route更细,能看到哪些路由正在被通告。查路由不通问题时,三板斧轮流看,基本能定位是进程没跑、路由没学进来,还是学了但没进全局路由表。
4.2 debug ip rip与Wireshark配合看更新
debug ip rip是观察RIP实时行为的利器。开在R1上,会看到类似:
RIP: sending v2 update to 224.0.0.9 via GigabitEthernet0/0/0 (192.168.12.1) 10.1.1.0/24 via 0.0.0.0, metric 1, tag 0 RIP: received v2 update from 192.168.23.3 on GigabitEthernet0/0/1 10.4.0.0/16 via 0.0.0.0, metric 2, tag 0看到metric 16的更新别慌,那叫毒路由,是协议在主动告诉你某条路由不可达。抓包时记得在路由器之间链路上同时抓两个接口的报文,Wireshark过滤器写rip即可。重点看三个字段:IP地址与掩码对应的是哪条路由,下一跳是不是0.0.0.0,metric是多少。RIPv2正常会发往224.0.0.9的组播UDP 520端口;如果抓到的是广播255.255.255.255,说明某台设备还在跑v1。
4.3 断链演练:观察RIP的收敛与毒路由
综合练习必须人为搞一次故障。在R2上把通往R3的接口shutdown:
R2(config)# interface GigabitEthernet0/0/1 R2(config-if)# shutdown同一时刻,在R1上打开debug,你会更快看到R2发来metric 16的毒路由,通知10.4.0.0/16已经不可达。这是因为R2在G0/0/1上原先是R3学路由的接口,链路一断,它立即触发更新,用毒性反转告诉R1“别再从我去10.4了”。
此时在R1上执行show ip route 10.4.1.1,应该已经没有原本的RIP路由。这和直连路由消失是两码事,你要观察的是“动态路由协议如何把坏消息尽快扩散”。等若干秒后再把R2的接口no shutdown,R1又能慢慢学回10.4.0.0/16。如果这个过程中出现路由更新来回横跳,多半是水平分割或计时器配置出了问题。
4.4 调整计时器,让实验不被30秒拖死
RIP默认30秒发一次更新,等它收敛真的能急死人。实验环境可以全局调快:
R2(config)# router rip R2(config-router)# timers basic 10 30 30 60这个命令依次是update、invalid、holddown、flush:每10秒发更新,30秒判定无效,30秒进入抑制,60秒删除。所有参与实验的路由器都要改成一样的,否则一台10秒发、一台30秒发,收敛过程会变得很怪。生产设备上没事别动这些计时器,RIP本来收敛就慢,调错会让网络更不稳。实验的目的只是把30秒周期压缩到一个能忍受的节奏,观察触发更新和毒路由的效果会更直观。
5. 常见问题与排障技巧速查
综合练习最怕的不是配错,而是不知道怎么排查。这里把我踩过的、带新人时新人反复犯的坑整理成一张速查表。
5.1 一张表看懂最常见的RIP综合练习故障
| 症状 | 常见原因 | 排查动作 |
|---|---|---|
| 路由表里只有10.0.0.0/8,没有10.x明细 | 自动汇总没关 | 所有RIPv2路由器的RIP视图下配置no auto-summary |
| 全网能通,但R1学不到10.4.x的路由 | R4没有宣告10.0.0.0 | 检查network命令是否包含Loopback所在主类网络 |
| 路由表一直出现且消失,来回抖动 | 双路径下水平分割被关 | 查看接口配置,确认没有no ip split-horizon |
| debug里收到metric 16 | 路由正被毒性反转/不可达 | 确认这是链路故障或策略导致,处理根源而不是删路由 |
| 默认路由全网看不到 | 没有default-information originate | R3加静态默认路由,再在RIP视图下开启下发命令 |
| 手工汇总后个别网段不通 | 汇总范围盖住了不该盖的路由 | 用show ip rip database核对汇总前后明细,调整掩码 |
| 抓不到RIP报文 | 模拟器接口或ACL过滤了UDP 520 | 检查接口enabled,关掉设备ACL,Wireshark过滤写法改成udp.port==520 |
5.2 三个让综合练习含金量翻倍的操作习惯
第一个习惯是每做一步配置前都先存一份show running-config和show ip route,出了故障方便比对前后差异。第二个习惯是只改一个变量,同时观察show ip protocols和路由表变化,别把过滤、汇总、改metric一次全上。第三个习惯是给所有模拟接口写description,特别是在多台设备的综合练习里,否则你根本分不清G0/0/1另一头是谁,排查时全靠猜。
6. 从综合练习到生产环境:RIP还能玩出什么花
如果你已经能把上面的综合练习完整跑通,下一步可以在这个基础上继续叠加,让练习真正接近真实项目的复杂度。
6.1 认证、offset-list与distribute-list的组合练习
RIPv2支持认证,这在模拟器上常常被人忽略。给R2和R3之间的链路配置MD5认证,可以让你理解“为什么两台设备路由协议版本和参数都一样,却死活学不到路由”。
R2(config)# key chain RIPKEY R2(config-keychain)# key 1 R2(config-keychain-key)# key-string lab123 R2(config)# interface GigabitEthernet0/0/0 R2(config-if)# ip rip authentication key-chain RIPKEY R2(config-if)# ip rip authentication mode md5注意,两端key chain的名称可以不一致,但key-string要一致,认证模式也要一致。把offset-list、distribute-list、key-chain放到同一个练习里,就是一个小型的“RIP路由策略综合项目”。开始之前写清楚业务目标:哪台设备不能看到哪个网段、去哪条路径希望更优、哪些邻居必须认证。目标越明确,练习越接近生产。
6.2 Cisco与Huawei常用命令对照
很多同学公司用的是华为设备,家里练的是Cisco模拟器,两边命令容易混。这里列几个最常被问到的对照:
| 操作 | Cisco IOS | Huawei VRP |
|---|---|---|
| 进入RIP进程 | router rip | rip 1 |
| 指定版本 | version 2 | version 2 |
| 关闭自动汇总 | no auto-summary | undo summary |
| 宣告网络 | network 192.168.0.0 | network 192.168.0.0 |
| 下发默认路由 | default-information originate | default-route originate |
| 被动接口 | passive-interface GigabitEthernet0/0/0 | silent-interface GigabitEthernet0/0/0 |
| 手工汇总 | ip summary-address rip 10.4.0.0 255.255.0.0 | summary-address 10.4.0.0 255.255.0.0 |
| 查看协议状态 | show ip protocols | display rip 1 |
细节以你设备上的版本为准,但框架基本一致。练习时先认清“这步在干什么”,再去找对应命令,比死记好用得多。
6.3 延伸建议:学完RIP之后再补什么
RIP这套综合练习的价值在于让你深刻理解距离矢量协议的通告、防环、收敛与策略。下一步建议直接上OSPF,对比链路状态协议怎么维护全网拓扑、怎么用LSA洪泛代替周期性广播,以及为什么OSPF收敛更快。回头再看RIP,你会理解前辈们为什么非要做这么多防环设计。再往后就是BGP,你会发现那些“路径属性、选路规则、策略控制”的概念,在RIP的metric、offset-list、distribute-list里都能找到影子。
我个人实际带练习的体会是:RIP综合练习最值钱的部分不是命令,而是故障处理时的观察顺序。先看协议状态,再看路由数据库,最后抓包验证,这个习惯一旦养成,后面接触任何路由协议都能少走弯路。你把这次练习里的配置、抓包、排障记录都留好,等哪天带新人或者自己被生产环境的路由问题难住时,这套东西就是最扎实的底子。