很多人学网络的第一台动态路由实验都是从RIP开始的,我当年也一样。拿ensp把三台路由器一连,敲上几条命令,看到路由表里出现“R”开头的条目时,那种成就感确实很实在。但随着你接触OSPF、BGP之后,RIP似乎成了“过气”协议,很多教材也就一笔带过。不过话说回来,RIP虽然简单,却是理解“距离矢量”思想的最佳入门素材,而且在ensp里练RIP,你踩的每个坑——比如启动失败、路由不生效、环路问题——都能帮你在后续学更复杂的协议时省下大量排查时间。
这篇博文,我按自己在ensp里练RIP的实际经历,从环境准备到协议原理,再到完整配置和故障排查,完整梳理一遍。无论你是刚装好ensp准备做第一个动态路由实验,还是配置完了发现路由不通在找原因,这篇文章都能给你一个可复现、可排查的完整路径。我会把那些文档里不写、老师上课不讲,但实际操作中一定会遇到的细节一并说清楚。
1. 实验前的环境准备:eNSP到底该怎么装才能不折腾
先说个很多人忽略的事:eNSP本身是个图形前端,真正干活的是VirtualBox虚拟机和设备镜像。所以你的电脑上必须先把VirtualBox装好,两个软件的版本还得互相兼容,否则你会遇到无数个莫名其妙的“启动设备失败”。我在几台不同机器上装过,Win10和Win11都试过,有些版本组合就是水土不服,最后稳定下来的搭配是:eNSP V100R003C00SPC100搭配VirtualBox 5.2.x。注意,不是越新越好,VirtualBox 6.x以上版本跟旧版eNSP经常出兼容性问题,如果你装了新版本反而启动不了设备,先怀疑VirtualBox版本。
1.1 Win11下的安装顺序与常见报错
Win11装eNSP比Win10麻烦一点,但也不是不能装。关键点是:先装VirtualBox,再装eNSP,最后装Wireshark(抓包用)和VLC(有些实验需要播放流媒体,RIP实验用不到,但建议一起装)。顺序错了,后面补插件经常出现虚拟网卡缺失的问题。如果你在Win11上启动AR路由器时报错“错误代码40”,大概率是VirtualBox的虚拟网卡没装好。解决方法是:
- 打开“设备管理器”,查看“网络适配器”下是否有“VirtualBox Host-Only Ethernet Adapter”。
- 如果没有,去VirtualBox的安装目录下找到
VBoxDrv.inf,右键选择“安装”,然后重启电脑。 - 如果还不行,用管理员身份打开命令行,执行
net start VBoxSup,把VirtualBox的服务手动拉起。
注意:eNSP安装路径一定不要带中文,也不要放在Program Files这类有空格和权限限制的目录下,建议直接放D盘根目录,比如
D:\eNSP。这个问题引发的启动失败非常隐蔽,很多人排查半天发现是路径问题。
1.2 启动设备超时或一直崩溃的排查思路
“启动超时”是另一个高频问题。现象是双击路由器设备后,图标一直在那里转圈,最后提示“启动超时”。这个问题的本质是eNSP在等待VirtualBox里的虚拟机启动完成,但虚拟机的控制台一直没就绪。排查步骤我建议按这个顺序来:
- 先看VirtualBox主界面,是不是真的出现了一台名为“AR_Base”的虚拟机在运行。如果没有,说明eNSP根本没有把设备镜像导入成功,这种情况重装VirtualBox或eNSP。
- 如果虚拟机在运行但一直卡在启动界面,多半是CPU虚拟化没开启。进BIOS,找到“Intel Virtualization Technology”或“AMD SVM”,设置为Enabled。在Win11上还要检查“控制面板-程序-启用或关闭Windows功能”里,“虚拟机平台”和“Windows虚拟机监控程序平台”是否勾选。
- 如果以上都正常,试试把设备删除重新拖一个进来,有时只是eNSP的资源回收机制卡住。
说起来你可能不信,我遇到过最离谱的一次是路由器图标一直跳井号(#),像死机一样,结果是eNSP窗口缩放导致的显示问题,把窗口最大化再还原就好了。这种问题没有规律,只能见招拆招。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. RIP协议核心原理速成:30秒更新一次的路由谣言
在配置之前,必须先搞清楚RIP到底在做什么。RIP(Routing Information Protocol,路由信息协议)是一种基于距离矢量(Distance Vector)算法的动态路由协议。它的工作方式非常朴素:每个路由器定期(默认30秒)把自己的整张路由表广播给直连邻居,邻居收到后,把收到的每一条路由的跳数加1,然后对比自己的路由表,如果发现一条“更短”的路,就更新自己的路由表。这个过程在教材上叫“路由谣言”,因为每台路由器都是“听别人说”的,它并不知道整个网络的真实结构,只知道“到某个网段,我的下一跳是谁,需要几跳”。
2.1 为什么RIP用跳数而不用带宽
RIP的度量标准只有跳数(Hop Count),这个设计在现在看来很粗糙。比如有两条路到同一个目标网段,一条是千兆光纤但需要经过3台路由器,另一条是10M低速链路但只需要经过2台路由器,RIP会毫不犹豫选择后者,因为它只数跳数,不关心链路质量。这就是RIP和OSPF的本质区别之一,OSPF会综合考虑带宽、时延、负载等代价(Cost),而RIP只看“几步能到”。用生活类比来解释,RIP就像一个只看地铁站数量的乘客,中间换乘几次、线路挤不挤他不管,到站数最少就是最优。所以在实际生产中RIP基本被OSPF和BGP取代了,但在ensp里练它,恰恰是因为它简单,你能用肉眼看清路由表是怎么一步步建立和收敛的。
2.2 更新机制与防环机制
RIP的更新机制里有几个时间参数需要记牢:
- 更新定时器(Update):30秒,周期发送路由更新。
- 失效定时器(Invalid):180秒,如果一条路由在180秒内没有收到更新,标记为不可达。
- 清除定时器(Flush):240秒,如果再过60秒还没收到更新,从路由表中删除该路由。
这组参数直接决定了网络收敛时间。你想想,如果一台路由器挂了,邻居最多要等180秒才能发现路由失效,再等60秒才把路由从表里删掉,这段时间内数据包就可能被发向一个黑洞。所以RIP的收敛速度很慢,这也是它不适合大型网络的另一个原因。
RIP的防环机制主要有三个:水平分割(Split Horizon)、毒性反转(Poison Reverse)、触发更新(Triggered Update)。水平分割的意思是:从某个接口学到的路由,不能再从这个接口通告回去。毒性反转更狠一些:从某个接口学到的路由,在从这个接口通告时,直接把跳数改为16(即不可达),相当于主动告诉邻居“这条路别走”。触发更新则是当路由发生变化时,不等30秒的周期,立刻发送更新。这三个机制在ensp里是默认开启的,你不需要额外配置,但理解它们能帮你解释很多“明明配置没问题,路由怎么老是不对”的现象。
扩展阅读:RIP还有一种毒化路由(Route Poisoning)操作,就是把故障路由的跳数置为16直接通告给邻居,让邻居立刻知道该路由不可达,而不用等180秒失效。这个动作和毒性反转名称相近但场景不同,前者是故障通告,后者是防环措施。
2.3 eNSP里RIPv1和RIPv2的区别
eNSP里配置RIP时需要选择版本。RIPv1是classful协议,不携带子网掩码,不支持VLSM和CIDR,只支持广播更新;RIPv2则携带子网掩码,支持变长子网掩码,使用组播地址224.0.0.9发送更新,还支持认证和手动汇总。现在的实验基本都是用RIPv2,因为RIPv1遇到不连续子网会直接出问题,但你也要知道RIPv2默认开启自动汇总,在配置loopback地址或多个不连续网段时,可能因为自动汇总导致路由无法精确匹配。我在实验中就在这个点上吃过亏,后面4.3小节我会专门说这个坑的解决思路。
3. 实验拓扑设计与地址规划
现在开始真正动手。我推荐的拓扑是经典的三台路由器串联结构:AR1-AR2-AR3,每台路由器再接一台PC,模拟三个不同的网段。这个拓扑虽然简单,但能完整地展示RIP建立路由、跨网段通信、路由备份(如果有等价路径)等核心场景。
3.1 拓扑结构与接口IP规划
我这里用的是ensp自带的AR2220路由器,你也可以用AR201、AR1220,配置命令没有区别,只是启动速度有点差异。三台PC分别叫PCA、PCB、PCC,连接关系如下:
| 设备 | 接口 | IP地址 | 对端设备与接口 | 对端IP |
|---|---|---|---|---|
| AR1 | GE0/0/0 | 192.168.1.1/24 | 连接PCA | 192.168.1.10/24 |
| AR1 | GE0/0/1 | 10.0.12.1/24 | 连接AR2的GE0/0/0 | 10.0.12.2/24 |
| AR2 | GE0/0/1 | 10.0.23.1/24 | 连接AR3的GE0/0/0 | 10.0.23.2/24 |
| AR3 | GE0/0/1 | 192.168.3.1/24 | 连接PCC | 192.168.3.10/24 |
等等,PC网关和路由器接口的IP要规划好。PC的网关就是所连路由器接口的IP。比如PCA的网关是192.168.1.1,IP是192.168.1.10,掩码255.255.255.0,这样PCA才能把数据包交给AR1转发。
这里有个细节:AR2的路由器型号是AR2220的话,GE0/0/0和GE0/0/1都在设备面板上,拖出来之后默认接口是关闭的吗?不是,华为AR路由器接口默认不关闭,只要配了IP就能用。但GE接口和Serial接口在ensp里的默认状态不一样,Serial更常用来做HDLC和PPP封装实验,RIP实验用GE就够了。
3.2 为什么这样规划子网
这个拓扑里我故意用了两个10.0.x.x地址段作为路由器之间的互联地址,用192.168.1.0/24和192.168.3.0/24作为终端网段。这里有一个很多新手会踩的坑:如果你所有的网段都选192.168.x.x,那么在RIP自动汇总时可能会把所有路由汇总成一条192.168.0.0/16,导致子网无法精确匹配。用不同的主类网络号(10.0.0.0和192.168.0.0)能避免这个问题,让RIP的更新表现更直观,也方便你观察路由表的变化。
另外,VLSM(变长子网掩码)在RIPv2下是可以正常工作的,但在RIPv1下就会出问题。所以我建议你在ensp里把RIP版本都配置成RIPv2,除非你想做一个RIPv1和RIPv2不兼容的对比实验。
4. 完整配置RIP并验证:从零到全网互通
拓扑搭好了,IP也规划好了,接下来就是配置。我会把每台路由器的完整配置逐步敲下来,并解释每条命令的含义和背后的原理。
4.1 配置接口IP与PC参数
先配置PCA、PCB、PCC的地址。在ensp里双击PC图标,在“基础配置”里把IP地址、子网掩码、网关填上。PCA填:
code复制IP地址:192.168.1.10
子网掩码:255.255.255.0
网关:192.168.1.1
PCB的网段我设计在AR2下面,但它不直接连PC,为了模拟完整的三段网络,可以给AR2的LoopBack0配置一个网段来模拟终端网段,或者直接再拖一台交换机连接PC。我这里为了让实验简洁,直接在AR2上配一个LoopBack0地址192.168.2.1/24来模拟192.168.2.0/24网段,你后面ping 192.168.2.1就能验证。
然后配置三个路由器的接口地址。以AR1为例:
bash复制<Huawei>system-view
[Huawei]sysname AR1
[AR1]interface GigabitEthernet 0/0/0
[AR1-GigabitEthernet0/0/0]ip address 192.168.1.1 24
[AR1-GigabitEthernet0/0/0]quit
[AR1]interface GigabitEthernet 0/0/1
[AR1-GigabitEthernet0/0/1]ip address 10.0.12.1 24
[AR1-GigabitEthernet0/0/1]quit
AR2和AR3类似,把对应接口配好,AR2记得配一个LoopBack0:
bash复制[AR2]interface LoopBack 0
[AR2-LoopBack0]ip address 192.168.2.1 24
4.2 启动RIP进程并宣告网段
接口配好后,先验证一下直连网段的连通性:在AR1上ping 10.0.12.2,在AR2上ping 10.0.23.1。如果这个都不通,说明底层链路有问题,别急着配RIP。
接下来进入RIP配置。AR1的命令如下:
bash复制[AR1]rip 1
[AR1-rip-1]version 2
[AR1-rip-1]network 192.168.1.0
[AR1-rip-1]network 10.0.0.0
[AR1-rip-1]quit
AR2:
bash复制[AR2]rip 1
[AR2-rip-1]version 2
[AR2-rip-1]network 10.0.0.0
[AR2-rip-1]network 192.168.2.0
[AR2-rip-1]quit
AR3:
bash复制[AR3]rip 1
[AR3-rip-1]version 2
[AR3-rip-1]network 10.0.0.0
[AR3-rip-1]network 192.168.3.0
[AR3-rip-1]quit
4.3 network命令的关键细节:为什么必须是主类网络号
这是RIP配置里最核心的考点。很多人在这里卡住,不理解为什么network 10.0.0.0就能覆盖10.0.12.0和10.0.23.0两个子网,而network 10.0.12.0反而报错或无效。
RIP的network命令后面跟的不是精确的接口子网号,而是有类网络地址(Classful Network Address)。在RIP看来,接口IP是10.0.12.1/24,它只知道这个接口属于10.0.0.0这个大网段,不知道也不关心具体的子网掩码。所以你必须通告10.0.0.0,而不是10.0.12.0。同理,192.168.1.0/24归属的主类网络就是192.168.0.0,但这里有个例外:192.168.1.0这个网段的掩码是24位,它属于B类私有地址范围,RIP要求通告刚好是192.168.1.0?不,不是。
我再重新说准确:在华为设备上,RIP的network命令支持两种写法,一种是有类网络号,一种是精确子网号(在较新版本的VRP平台上支持了subnet方式)。但为了兼容性和避免歧义,最稳的做法是通告主类网络号或你实际规划的子网。比如对192.168.1.0/24,你可以直接写network 192.168.1.0,因为RIPv2支持子网通告;对10.0.12.0/24,建议写network 10.0.0.0,以免系统因为自动汇总规则把10.0.12.0解析出问题。
实际操作中最直观的判断方法是:执行display rip 1 route,如果某个接口的网段没有出现在RIP的路由表里,说明network命令没宣告对。你不需要死记规则,多看几张路由表就知道规律了。
RIPv2默认开启自动汇总。在接口地址不连续时(例如R1上面有192.168.1.0/24,R3上面有192.168.3.0/24,中间夹着10.0.0.0网段),R2收到的这两条路由可能会被汇总成一条192.168.0.0/16,从而出现路由“大而全”但不精确的问题。正规的解决方法是关闭自动汇总:
bash复制[AR1-rip-1]undo summary
[AR2-rip-1]undo summary
[AR3-rip-1]undo summary
在实验里,只要你的三个终端网段属于不同的主类网络(比如分别是192.168.1.0/24、192.168.2.0/24、192.168.3.0/24),RIP会自动把它们汇总为192.168.0.0/16通告出去,这时你查看路由表会发现学习到的路由是一条“192.168.0.0/16”,但下一跳和出接口都是对的。这种情况下,ping终端IP可能依然能通,但路由表里的条目不是一个一个的精确子网路由,很多人就因此困惑。关掉自动汇总后,三条精确的/24路由就出来了。
4.4 路由验证与抓包分析
配置完成后,给设备20秒左右的时间收敛,然后开始验证。验证手段我习惯分三层看:
- 看邻居关系
bash复制<AR1>display rip 1 neighbor
正常情况下能看到AR2的接口地址和端口号。如果这条命令没有输出,说明RIP的报文没有正常交互,优先检查接口是否up、IP是否在同一网段、RIP版本是否一致。
- 看路由表
bash复制<AR1>display ip routing-table
重点看有没有RIP学习到的路由。一条典型的路由条目是这样的:
code复制Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.3.0/24 RIP 100 2 D 10.0.12.2 GigabitEthernet0/0/1
这里的Pre是路由优先级,RIP默认是100;Cost是度量值,也就是跳数,从AR1到192.168.3.0/24要经过AR2和AR3,所以是2跳。看到这个庞然大物一样路由表时,别慌,只需要看Proto带R的行。
- 抓包看协议报文
这一步是进阶操作,但非常有用。在AR1的GE0/0/1接口上开启抓包,等30秒左右,你会看到周期性的RIP报文。如果是RIPv2,源地址是接口IP,目的地址是224.0.0.9,UDP端口520;如果是RIPv1,用的是广播地址255.255.255.255。抓包能验证你的协议配置是否正常,还能看到RIP封装的具体条目,直观理解“30秒发一次”的机制。
最后验证全网互通:
bash复制<AR1>ping 192.168.3.10
<AR1>ping 192.168.2.1
如果源路由器的IP地址不在目标网段内,可能需要指定源接口:
bash复制<AR1>ping -a 192.168.1.1 192.168.3.10
通的话恭喜你,RIP全网互通实验完成。
5. 常见故障排查:直接从现象定位问题
RIP实验里能遇到的问题其实很有限,翻来覆去就那么几个。我把这几年在ensp里排查RIP实验的实战经验,整理成速查表,下次你遇到类似情况直接对照着查。
5.1 故障现象与排查方向速查表
| 故障现象 | 可能原因 | 排查命令或动作 |
|---|---|---|
| 路由表里没有RIP条目 | network宣告错误,或RIP版本不一致 | display current-configuration 查看rip配置;display rip 1 neighbor 看邻居关系 |
| 有RIP条目但ping不通 | 路由黑洞,或AR2/AR3路由表不完整 | 逐台display ip routing-table,确认全链路回程路由都存在 |
| 抓包看不到RIP报文 | 接口被 shutdown,或版本不匹配,或网络类型不支持广播/组播 | display interface brief 看接口状态;确认接口在network命令覆盖范围内 |
| 路由表条目是汇总路由 | RIPv2自动汇总开启 | 在RIP进程下执行undo summary |
| 直连网段都ping不通 | 接口没配IP,或PC网关配置错误 | display ip interface brief 查看接口地址 |
| 路由器一直跳井号 | eNSP崩溃或显示缓冲问题 | 调整窗口大小或重启eNSP |
| 启动设备报错40 | VirtualBox版本不兼容或虚拟网卡失效 | 卸载重装VirtualBox 5.2.x;更新虚拟网卡驱动 |
| 启动超时 | CPU虚拟化未开启或设备占用冲突 | BIOS开启虚拟化;关闭Hyper-V;重启VirtualBox服务 |
5.2 一个经典的RIP排障案例
我拿一个最常见的场景举个例子:设备都配置好了,AR1能学到AR2的路由,但学不到AR3的路由。从AR1看display ip routing-table,发现10.0.23.0和192.168.3.0都没有,而AR2上这些路由都在。这种问题十有八九是AR2的network宣告漏了10.0.0.0。因为AR2上的RIP进程如果没有宣告10.0.0.0,它就不会把10.0.23.0这个接口网段放进RIP更新报文里,AR1自然学不到。
还有一种更隐蔽的情况:AR2上配了network 192.168.2.0,但漏配了network 10.0.0.0。这时AR2能从接口学到RIP路由(和RIP版本有关,因为RIP可以“被动学习”),但不会主动发给邻居,结果就是AR1学不到路由,而AR2自己的路由表是正常的。这种情况排查起来很费劲,因为你看到的“半张表”很容易让你误判是链路问题。
我的建议是:配完RIP后,先把三台路由器的display current-configuration configuration rip输出对比一遍,确认每台的network宣告都覆盖了自己所有需要通告的接口网段。这一步比盯着路由表空想高效得多。
5.3 打开调试开关,用log信息确认问题
如果配置都对但还是不收敛,可以打开调试信息看RIP报文交换的情况:
bash复制<AR1>debugging rip 1
<AR1>terminal debugging
<AR1>terminal monitor
这时控制台会打印出RIP发送和接收的报文详细内容。你看一下报文的源和目的地址、接口、条目内容,基本就能定位是发送端的问题还是接收端的问题。看完记得关掉调试:
bash复制<AR1>undo debugging rip 1
注意:在ensp虚拟环境下,debugging输出的日志量大时可能卡顿,建议先在小范围内开,定位完立刻关闭。如果你在真实设备上操作,更要谨慎——生产环境里开debugging是很危险的操作,但模拟器里随便玩。
6. 提升实验的进阶方向:从RIP到动态路由综合
RIP配置通的瞬间,你对距离矢量协议的直观感受会远超你背十遍原理。但eNSP的价值远不止RIP本身,接下来有几个进阶方向,按实用度排序:
-
RIP与静态路由的对比实验:在同一拓扑里,左边跑RIP,右边跑静态路由,中间做路由引入(import-route static)。你会直观看到动态协议和静态路由的管理距离、优先级、故障收敛速度上的差异。RIP的优先级默认100,静态路由默认60,当两条路由同时存在时,路由器优先选静态。这个细节很多人学完就忘,做一次引入实验就记住了。
-
RIP与OSPF的重发布实验:在AR2上同时运行RIP和OSPF,用
import-route rip和import-route ospf做双向引入,看外部路由转换成内部路由后跳数和开销如何变化。这个实验对理解路由引入的环路风险非常有帮助。 -
抓包深度分析RIP报文格式:用Wireshark抓RIP报文,对照RFC 1058和RFC 2453看RIPv1和RIPv2的报文结构差异。你会看到RIPv2的route tag、subnet mask、next hop这三个RIPv1没有的字段,这些都是为了支持CIDR和VLSM而加入的。理解报文结构之后,很多“为什么RIPv2能支持子网”的疑问就迎刃而解了。
-
故障演练:把AR2直接关闭(不是关机,是删除设备),观察AR1和AR3要多久才能察觉到路由失效。使用默认180秒失效时间的话,你会看到路由表在180秒后把相关路由标记为不可达,再过60秒后彻底删除。这个实验做完,你就明白为什么动态路由协议一定要有hello机制或定时更新机制,也就理解了OSPF为什么能秒级收敛。
7. 写在最后的几点实操心得
练RIP这个实验,我确实踩过不少坑,有些心得想分享给你。
第一,实验做不通的时候,不要急着怀疑协议配置,先看物理层。ensp里AR设备的接口默认是up的,但如果你拖设备时不小心拖了一个“云”或“交换机”进来,接口状态可能就不对。用display interface brief一眼就能看出来哪些接口是down的。
第二,配RIP时养成先关闭自动汇总的习惯。虽然在这个小拓扑里不关也能通,但你以后做复杂实验时,自动汇总导致的“路由大而全”问题会极大干扰你对路由表的判断。提前关掉它,让每条精确子网路由都显示在表里,观察起来会舒服很多。
第三,做实验不要满足于“通了”。把路由通的结果发给我们编辑同学看的时候,很多人只会展示ping通的结果,但其实你更应该做的是:通之前发生了什么,通不了时你怀疑过哪些点,最后怎么确认的。这些才是面试官和读者真正想看的东西。在ensp里练RIP,练的不仅仅是RIP协议,更重要的是训练一套“分层排查”的思路。从物理层到IP层,再到路由协议层,每一层都有对应的验证命令。这个思路才是你从网络小白走向能独立排障的关键一步。
