如果你正在准备H3CNE(对应GB0-192考试),翻到“IP路由的原理”这一章时,可能会觉得内容偏理论:路由表长什么样、路由优先级是多少、最长匹配怎么算……看起来每个知识点都懂,但一做题、一配设备就发懵。我接触过不少学员,命令敲得飞快,静态路由、默认路由配置都没问题,但问到“为什么数据走这条链路不走那条”“路由表里明明有路由为什么ping不通”就卡住了。
这篇内容不打算照着官方课件念。我会结合H3C设备的实际显示输出、常见的配置场景和考试里反复出现的坑,把IP路由的原理拆开讲清楚:先搞懂路由表到底是什么,再弄明白选路的三把尺子,最后用真实的数据包转发过程把这些串起来。无论你是为了过GB0-192考试,还是刚入行想真正搞懂路由转发,这篇都值得你花半小时慢慢看。
1. 路由到底是什么:从“问路”到“地图”
1.1 路由的本质是“选择出口”
用最直白的话说,路由就是“去某个目标网段,该从哪个接口、交给哪个下一跳设备”。路由器本质上是一个岔路口,它不知道通往全世界的完整路径,它只做一件事:每来一个数据包,就查一下手里的地图(路由表),决定把包交给谁。
这里的“交给谁”很关键。IP网络是逐跳转发的,路由器不需要知道到达目标的整条路径,它只需要知道下一个节点是谁。就像你在陌生的城市问路,第一个人告诉你“往前走两个路口右转”,你到了那个路口再问下一个人,接着往前走。每一跳都只关心“下一跳在哪”,而不是“终点长什么样”。这就是IP路由的基本模型,也是理解后面所有内容的地基。
一定要把“路由”和“转发”分开看:路由是构建地图的过程,比如静态路由手工配置、动态路由协议学习;转发是查地图的过程,数据包到了之后查路由表做决策。H3CNE考察的重点集中在路由这个层面,但转发过程能帮你理解很多细节。
1.2 路由器和交换机的本质区别
很多初学者容易把路由器和二层交换机搞混,其实两者的工作层次和决策依据完全不同。交换机依靠MAC地址表转发,它看的是数据帧里的目的MAC地址,在一个广播域内工作;路由器依靠路由表转发,看的是IP报文里的目的IP地址,负责在不同网段之间转发。
更直白地说,MAC地址表回答的是“这个MAC地址从哪个口出去”,路由表回答的是“这个IP网段从哪个口、交给谁”。所以二层交换机隔离不了广播域,路由器天然隔离广播域。这也是为什么不同网段之间通信必须经过路由器或三层设备。
在H3C设备上,你输入display mac-address看到的是二层转发表,输入display ip routing-table看到的是三层路由表。这两个表是设备转发的两张核心表,考试里经常拿它们的特性做对比,别搞混。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 路由表:路由器的决策核心
2.1 一张路由表上到底写了什么
在H3C设备上执行display ip routing-table,你会看到类似下面的输出:
code复制Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 Static 60 0 202.100.1.1 GE0/0
10.0.0.0/8 Static 60 0 192.168.1.2 GE0/1
192.168.1.0/24 Direct 0 0 192.168.1.1 GE0/1
192.168.1.1/32 Direct 0 0 127.0.0.1 InLoop0
每一行就是一条路由条目(route entry),代表的含义是:去往某个目标网段,下一跳是谁,从哪个接口出去。逐列拆开看,其实不复杂。
Destination/Mask是目的网段和掩码,表示这条路由覆盖的IP地址范围。Proto是路由来源,说明这条路由是直连、静态还是动态协议学来的。Pre是路由优先级,Cost是度量值,这两个直接影响选路结果,下一节会重点讲。NextHop是下一跳地址,Interface是出接口,这两个决定数据包实际往哪送。
很多人刚学的时候有一个误区,以为路由表里记录了到每个IP的完整路径。不是的,路由表只记录“方向”,不记录“全程”。一台路由器只需要知道去某个网段该把包交给哪个邻居,剩下的由邻居继续查自己的路由表。这种设计让互联网不用维护全网所有路径,每台设备只管自己的一亩三分地。
2.2 路由的来源:直连、静态、动态
路由表里的条目不会凭空冒出来,它们有三个主要来源,H3CNE考试对这三个来源的优先级和适用场景考得非常多。
直连路由(Direct)最特殊。只要接口配置了IP地址并且状态是up,设备会自动生成直连路由。比如接口GE0/1配了192.168.1.1/24,路由表里就会自动出现192.168.1.0/24这条直连路由。你不需要配置任何东西,它自己就存在了。直连路由的优先级是0,数值最小,所以只要接口活着,它永远是最优先的。
静态路由(Static)是管理员手工配置的。它适用于网络规模小、拓扑稳定、链路固定的小型网络。静态路由的好处是可控性强、不占用带宽、没有协议开销,坏处是网络拓扑一变就得人工改配置。默认优先级是60。在H3CNE里,静态路由配置是必考实操,后面我会专门演示。
动态路由(RIP、OSPF等)是路由器之间通过协议自动学习来的。它适合大型网络,拓扑变化时协议会自动收敛,不需要人工干预。不同协议的默认优先级不一样,OSPF是10,RIP是100。这三种来源的对比,考试里经常以选择题形式出现,核心就记一条:直连优先级最低(0),静态居中(60),动态协议各有各的值。
| 路由来源 | 产生方式 | 默认优先级 | 适用场景 |
|---|---|---|---|
| 直连路由 | 接口配置IP后自动生成 | 0 | 所有直连网段 |
| 静态路由 | 管理员手工配置 | 60 | 小型网络、稳定链路 |
| OSPF | 协议动态学习 | 10 | 中大型网络,收敛快 |
| RIP | 协议动态学习 | 100 | 小型网络,配置简单 |
| BGP | 协议动态学习 | 255 | 跨自治域路由 |
这个表建议直接背下来,GB0-192里大概率会出现“哪条路由优先级最高/最低”这类题。
2.3 默认路由和空路由的特殊价值
路由表里有一种特殊条目叫默认路由,目的网段是0.0.0.0/0,掩码全0。它表示“在路由表里找不到更精确匹配时,所有流量都往这条路由走”。默认路由最典型的应用场景是出口路由器——内网去往外网的流量,不可能在路由表里列出所有公网网段,直接甩给运营商网关就完了。
配置命令也很直白:
code复制[H3C] ip route-static 0.0.0.0 0 202.100.1.1
这段命令的意思是:所有不知道往哪去的报文,下一跳都交给202.100.1.1。默认路由的优先级和普通静态路由一样,都是60,但考试里会有一个易错点:默认路由遵循“最精确匹配优先”原则,如果路由表里同时存在0.0.0.0/0和192.168.1.0/24,去192.168.1.0/24的流量会走更具体的那条直连路由,不会走默认路由。
还有一种特殊路由叫空路由(Null0),下一跳指向空接口Null0,通常用来防止路由环路。你可以把它理解为“黑洞”,匹配到的流量直接丢弃。在防御环路时是很有用的工具,考试里知道这个用途就够了。
3. 路由怎么选:优先级、度量与最长匹配
3.1 三把尺子,到底先比哪一把
这是IP路由原理里最核心、也最容易搞混的部分。路由表里可能同时存在多条能到达同一目的地的路由,路由器选路时手里有三把尺子:掩码长度、路由优先级(Preference)、度量值(Metric)。
很多资料喜欢把这三个并列,导致有人以为三把尺子同时比。实际上不是。选路时先比掩码长度,也就是最长匹配原则;在掩码长度相同的前提下,再比路由优先级;优先级也相同的情况下,才比度量值。这是一条线性的、层层递进的决策链,不是三选一的并列关系。
举一个实际例子:假设去往10.1.1.5这个地址,路由表里有两条路由,一条是10.0.0.0/8,另一条是10.1.1.0/24。10.1.1.5落在10.1.1.0/24的范围里,也落在10.0.0.0/8的范围里,但/24的掩码更长、更精确,所以路由器会选10.1.1.0/24这条。哪怕10.1.1.0/24这条路由的优先级更差、度量更大,它照样胜出,因为先比的是精确度。
这个逻辑很好理解:就像你问“去清华大学怎么走”,别人告诉你“往北京方向走”和“往清华东路走”,你肯定选更具体的那个方向,而不会因为“往北京走”的牌子挂得更高就更听它的。
3.2 最长匹配原则:精确到每一条
最长匹配原则说全了就是:当一个IP报文的目的地址同时匹配多条路由表项时,选择掩码最长的那条。这个“掩码最长”意味着地址范围最小、描述最精确。
来看一个典型的考试陷阱:目标地址是192.168.1.100,路由表里有三条路由:192.168.1.0/24、192.168.1.0/25、192.168.1.128/25。192.168.1.100落在192.168.1.0/24的范围里,也落在192.168.1.0/25的范围里(0~127),但不落在192.168.1.128/25的范围里(128~255),所以匹配结果是192.168.1.0/25这条,掩码25比24长,它胜出。
还有一层需要特别注意:最长匹配不是“谁的掩码长就选谁”,前提是目标地址必须落在这条路由的范围内。192.168.1.100不在192.168.1.128/25的范围内,就算它的掩码是25,也不能选它。做题的时候别看到掩码长就急着选,先算一下目标地址在不在范围内。
CIDR(无类域间路由)出现之后,路由表可以不按传统的A/B/C类地址来划分,掩码可以写在任意位。这给了路由聚合的灵活性,但也要求你必须老老实实做“目标地址与掩码相与”这个计算。考试时遇到涉及最长匹配的题,动笔算一遍,别心算,稳妥得多。
3.3 路由优先级(Preference):跨协议选路的“话语权”
当多条路由的掩码长度相同时,比的就是路由优先级。优先级是厂商给每种路由来源定的一个可信度等级,数值越小,优先级越高,路由越可信。这是H3C的私有概念,思科系统里对应的叫管理距离(AD),原理一样,数值不同,别记串了。
H3C设备的默认优先级如下:直连路由是0,OSPF内部路由是10,IS-IS是15,静态路由是60,RIP是100,OSPF外部路由是150,BGP是255。这些默认值不是拍脑袋定的,背后有设计逻辑。直连接口最可信,因为设备自己知道这个网段一定连着这个接口。静态路由是管理员亲手配的,可信度中等。动态协议靠邻居通告学来的信息,可信度相对低一些。
这些默认值是可以手工改的,比如ip route-static 10.0.0.0 8 192.168.1.2 preference 10就是把一条静态路由的优先级改成10。但考试和日常使用中,默认值已经够用,改优先级更多出现在特殊选路场景。
有个常见误解必须纠正:很多人以为OSPF优先级高于静态路由,所以OSPF学的路由一定替代静态路由。错。如果静态路由的掩码更长,静态路由照样赢。优先级只在掩码长度相同的前提下发挥作用。
3.4 度量值(Metric):同一协议内部比“远近”
路由优先级解决的是“不同来源的路由谁更可信”的问题,但同一来源的路由可能有好多条,比如两条静态路由、或者OSPF学来的多个等价路径。这时候比的就是度量值。
度量值的含义因协议而异:静态路由的cost是0,RIP用跳数(hop count),OSPF用开销(cost,默认参考带宽除以接口带宽)。度量值越小,路径越优。需要注意的是,不同协议之间的度量值没有可比性,你不会拿RIP的跳数和OSPF的cost直接对比,因为在到达度量这一步之前,优先级已经决出了胜负。
考试里经常考“两条静态路由都指向同一个目的地,为什么一条生效一条不生效”这类问题。如果两条静态路由的目的网段、掩码、优先级都相同,而且下一跳不同,设备会同时把它们加入路由表,形成等价路由(ECMP),流量会在两条链路上分担。如果不想分担,就修改其中一条的优先级或度量,让设备分个优劣出来。
3.5 等价路由与负载分担:多条路一起走
等价路由是指到达同一目的网段,掩码相同、路由优先级相同、度量值也相同的多条路由,它们会同时出现在路由表里。H3C设备默认支持等价路由,转发时按报文的源IP和目的IP做哈希,把流量平均分配到多条链路上。
等价路由的作用很实际:两条链路带宽一样、成本一样,如果只走一条就浪费了,等价路由让流量自动负载均衡。配置上不需要额外折腾,只要满足等价条件,设备自动就会把多条路由都装上。
不过要注意一个细节:等价路由做的是流级别的分担,不是包级别的分担。同一个源到同一个目的的多条报文,会被哈希到同一条链路上,这样能保证同一会话的报文不会乱序。如果像包级别那样轮流走,TCP连接会因为报文乱序而性能骤降。
4. 从配置到转发:一次数据包的真实旅程
4.1 数据包到达路由器后发生了什么
把路由原理落到实际转发场景,才能真正理解这些概念是怎么串起来的。一个数据包到达路由器,大致要经过下面几步。
第一步,路由器先把二层帧头解掉,看目的MAC地址是不是自己接口的MAC。如果不是,直接丢弃;如果是,就继续处理。第二步,取出IP报文头的目的IP地址,用这个地址去查转发表。H3C设备里实际转发查的是FIB(转发信息库),它是路由表的一个精简投影,专门给硬件转发用的。你在命令行看到的display ip routing-table是路由表,芯片转发时查的是FIB,两者内容基本一一对应,但FIB去掉了路由表里的无效信息。
第三步,根据最长匹配原则找到匹配的路由条目。如果找不到任何匹配路由,也没有默认路由,路由器直接丢弃报文,并回送一个ICMP目的不可达消息给源设备。这就是为什么ping一个不存在的网段时,会收到“Destination Host Unreachable”的提示。
第四步,拿到匹配路由后,看下一跳是不是直连可达。如果下一跳地址和出接口在同一个网段,直接转;如果下一跳不是直连网段,就需要递归查找——用这个下一跳地址再去查一次路由表,直到找到一个出接口和直连的下一跳为止。
第五步,TTL减1。TTL是0的话直接丢弃,防止数据包在网络里死循环。第六步,重新封装二层帧:源MAC改成出接口的MAC,目的MAC改成下一跳设备的MAC(通过ARP解析),然后从出接口送出去。
这个过程中,源IP、目的IP从头到尾不变,变化的只有MAC地址。很多人在理解NAT之前喜欢把它记成“源IP不变成目的MAC变”,这个规律在没做NAT的情况下是成立的。
4.2 静态路由配置实操:三台路由器打通
静态路由配置是H3CNE的必考内容,这里用一个最简单的三台路由器场景演示。假设R1的GE0/0连R2的GE0/0,R2的GE0/1连R3的GE0/0,R1上有一个192.168.10.0/24网段,R3上有一个192.168.30.0/24网段。要让R1能ping通R3的网段,需要在R1和R3上分别配置静态路由。
R1上配置去往192.168.30.0/24的路由:
code复制[H3C-R1] ip route-static 192.168.30.0 24 192.168.2.2
这条命令的含义是:去192.168.30.0/24,下一跳交给192.168.2.2(也就是R2的接口地址)。但注意,R1只配了这一条还不够,因为数据包到了R2之后,R2也需要知道怎么去192.168.30.0/24。如果R2上没配这条路由,包到R2就会被丢弃。
所以R2也要配:
code复制[H3C-R2] ip route-static 192.168.30.0 24 192.168.3.2
同理,R3想回应R1的请求,也需要知道怎么回192.168.10.0/24。要么在R3上配静态路由指回R2,要么在R3上配默认路由指给R2。这就是实际排障里最常遇见的“有去无回”问题,后面会详细讲。
配置完用display ip routing-table protocol static查看静态路由是否生效,重点看NextHop和Interface两列。如果路由状态是Inactive,说明下一跳不可达,路由没真正启用,要检查接口状态和IP网段。
4.3 默认路由配置与递归查找实例
出口路由器配默认路由是日常工作中最高频的操作。假设一台H3C路由器连运营商的网关202.100.1.1,内网接口是192.168.1.1/24,要让内网所有未知流量都往运营商走,配置如下:
code复制[H3C] ip route-static 0.0.0.0 0 202.100.1.1
这里有一个值得展开的细节:静态路由的下一跳必须是可达的。如果运营商网关202.100.1.1和路由器的上行接口不在同一个网段,这条静态路由会显示为Inactive,数据包不会往这转发。所以在配静态路由之前,先确认接口状态是up、接口IP和下一跳IP在同一个网段,否则路由配了也白配。
当遇到下一跳不是直连网段的情况,就涉及递归查找。比如你配了ip route-static 10.0.0.0 8 192.168.1.2,但设备发现192.168.1.2不是自己直连网段里的地址,它会再次用192.168.1.2去查路由表,看有没有哪条路由能到192.168.1.2。找到能到这条下一跳路由的直连路由后,才能确定真正的出接口。整个递归过程是自动完成的,你只需要知道有这回事就行,不用手动干预。
顺带说一句网上经常有人问:不登录路由器,能不能查看路由器里的外网IP?如果你自己管理这台H3C路由器,直接登录后敲display ip interface brief就能看到WAN接口的IP,这个IP就是运营商分配的公网地址。但如果你只是普通用户,没有设备管理权限,想靠ping或者tracert从内网推断出公网IP,基本做不到,因为路由器做了NAT(网络地址转换),内网设备看到的只是内网网关,公网IP被隐藏了。这个问题的本质是设备权限问题,不是技术难题。
4.4 查看路由表的常用验证命令
| 命令 | 作用 |
|---|---|
display ip routing-table |
查看全部路由表 |
display ip routing-table protocol static |
只查看静态路由 |
display ip routing-table 192.168.30.0 |
查看指定网段的路由 |
display ip interface brief |
查看接口IP和状态 |
display fib |
查看FIB转发表 |
display ip routing-table verbose |
查看路由详细信息,包括状态 |
这些命令在考试的操作题里经常用到,日常排障也是第一梯队的上手命令。多敲几遍形成肌肉记忆,比你硬背命令单词管用。
5. 高频坑与排查思路
5.1 直连路由正常,但跨网段ping不通:大概率是“有去无回”
最常见的跨网段不通现象是:A能ping通B的网关,但ping不通B主机。很多人一上来就怀疑是B的防火墙,其实更常见的原因是回程路由缺失。
A要ping B,数据包从A出发,经过路由器转发到B的网段。B收到请求报文后要回复,回复报文也得经过路由器回到A。如果路由器上只配了去往B网段的路由,没配回往A网段的路由,那么B的回复报文到了路由器之后无处可去,直接被丢弃。A这边看到的就是请求发出去没回应,表现成ping不通。
排查思路很简单:先在A上tracert看数据包走到哪一跳断了,然后在路径上的每台路由器上执行display ip routing-table,同时确认去程和回程的路由都在。我见过不少学员花半小时调ACL和防火墙,最后发现只是缺了一条回程静态路由。记住一句话:IP通信是双向的,路由也得双向都通。
5.2 路由表里有路由,但转发仍然失败
有时候display ip routing-table里能看到想要的路由,但流量就是不通。这时候要区分两种情况:路由状态是不是Active,以及出接口是否正常。用display ip routing-table verbose查看,如果路由状态显示Inactive,说明下一跳解析失败,路由不会下发到FIB,不会参与实际转发。
出接口down也会导致类似问题。接口物理状态down,路由表里的直连路由会消失,依赖这条直连路由的静态路由也会跟着失效。所以遇到路由表有显示但转发不通的情况,先看接口状态,再看下一跳可达性,最后考虑有没有ACL在中间拦截。排查顺序比技巧更重要,一步步来,别跳步。
5.3 优先级和最长匹配到底谁说了算
这个坑在考试里反复出现。比如题目说:路由器收到去往10.1.1.1的报文,路由表里有一条OSPF路由10.0.0.0/8,另有一条静态路由10.1.0.0/16,问走哪条。答案是走静态路由,因为虽然OSPF的优先级(10)比静态(60)小,但静态路由的掩码更长,最长匹配优先的原则排在优先级前面。
但如果OSPF的路由也是10.1.0.0/16,静态路由也是10.1.0.0/16,掩码相同的情况下才轮到优先级说话,这时候OSPF胜出。
记一个口诀:先比长,再比小,最后比开销。先比掩码谁长,再比优先级谁小,最后比度量谁小。三步走完,选路结束。
5.4 考试易错点:等价路由、默认路由和环路
等价路由的成立条件有三个缺一不可:目的网段和掩码相同、路由优先级相同、度量值相同。考试里经常把其中某个条件改一改,比如把一条静态路由加个preference 70,问两条路由还会不会形成等价路由。答案是:不会,一条生效。
默认路由的考点集中在“所有路由都匹配不上时才走默认路由”和“默认路由也会参与最长匹配,但掩码是全0,永远最不精确”。另外一个容易忽略的点是默认路由的下一跳不可达时,整条默认路由也会失效,内网就会彻底断网。这也是为什么出口路由器建议配置两条默认路由做备份,或者在条件允许时用动态路由协议做链路检测。
环路的排查则依赖TTL机制。数据包每经过一台路由器TTL减1,减到0就被丢弃,不会无限循环。考试里问你“如果路由表出现环路,数据包会怎样”,核心答案就是TTL耗尽后被丢弃,而不会永远转圈。
5.5 动手验证:用小实验把原理钉死
书上看十遍不如自己敲一遍。我强烈建议你在H3C的模拟器(HCL)里搭一个三台路由器的环境,手动配静态路由,然后用debug ip packet观察数据包的转发过程。你会发现当报文匹配到一条路由时,设备会打印出匹配的路由表项和下一跳信息,整个过程一目了然。
再做一个实验:配两条等价静态路由指向同一个目的网段,然后在两端各接一台PC,持续ping,你会看到流量被哈希到两条链路上。再把其中一条静态路由的优先级改成70,立刻就能看到路由表里只剩一条路由。这种亲手操作得到的直观感受,比单纯背优先级数值牢固得多。
我个人在实际操作中的体会是:IP路由原理这一章,千万别当成纯理论去背。它其实是整个路由协议学习的“操作系统”——后面学RIP、OSPF,无非是在这套选路框架里追加规则而已。你把最长匹配、优先级、度量值这条决策链吃透了,后面所有动态路由协议的内容都会变得非常顺。这也是我为什么一直建议备考H3CNE的人,先在这章上多花点时间,把实验做透,而不是急着往后翻。
