如果你已经跟着这个系列看到第六篇,大概率在实验里遇到过一个让人抓狂的场景:交换机全连好了、VLAN 也照着前几篇教程划了,结果不同 VLAN 的两台电脑死活 ping 不通。这不是端口配置错了,也不是网线有问题,而是数据包到了三层边界之后,没人告诉它下一步往哪走。这一篇是 HCIA 基础网络知识系列的第六篇,核心就一个词——路由。我会把路由表的结构、静态路由的配置、转发查表的细节,以及我踩过的那些三层互通坑一次讲完。适合正在备考 HCIA 的初学者,也适合那些实验做了不少、但对"路由器到底在忙什么"始终模糊的朋友。读完你会明白,为什么"配通了"和"配懂了"之间,差的恰恰是路由这一层。
1. 二层交换机解决不了的"跨网段通信",才是路由存在的意义
1.1 二层世界有边界:交换机只看 MAC,不关心 IP
前几篇反复强调过,交换机的核心操作是查 MAC 地址表、转发以太网帧。帧里面只有源 MAC 和目的 MAC,没有"这个数据属于哪个网段"的全局视野。交换机天生生活在同一个广播域里:广播域之内,MAC 能互相识别;广播域之外,帧连怎么封装都不知道。VLAN 划分的本质是把一个大广播域切成几个小广播域,让它更安静、更安全,但也带来了一个副作用——不同 VLAN 之间被彻底隔离,二层设备不再搭理彼此。
于是你会看到一个很有意思的现象:同一台交换机上,VLAN 10 里的 PC 能 ping 通 VLAN 10 里的另一台 PC,但永远 ping 不到 VLAN 20 里的任何设备。很多人第一反应是"交换机端口配置错了"。端口没错,VLAN 划得也没错,错在把三层互通的期待强加给了一台只干二层工作的设备。记住这个边界:交换机的职责止步于广播域,跨广播域的通信不是它的活。
1.2 路由的"问路"逻辑:像导航一样逐跳转发
路由这件事,类比成导航最贴切。你开车从 A 城市去 B 城市,导航不会在出发地直接给你一条穿过每一家院子的小路,它给的是"上高速、出收费站、走主干道、转盘掉头"这种层级路线。网络里的路由也是一样:路由器关注的是 IP 地址的网段,而不是具体某台主机。它只决定"这个包交给下一个路由器最合适",剩下的路由由下一跳路由器继续处理。这种"我只负责一段,剩下的交给下游"的机制,就是逐跳转发。
这个逻辑解释了为什么路由不能"一步到位"。中间任何一台路由器都不知道完整路径,它只需要知道档口应该往哪送。所以你在排查三层互通问题时,永远要沿着数据包的走向,一台设备一台设备地查,而不是坐在源 PC 前问"为什么不通"。谁也不知道完整路径,只有每一跳都通了,最终才会通。
1.3 三层转发比二层多出来的那道工序:ARP
二层转发查 MAC 表,目的 MAC 必须在表里,查到就发。三层转发则先查路由表,找到下一跳 IP,然后再通过 ARP 去询问这个下一跳的 MAC 地址。多出来的这道 ARP 工序,恰恰是路由最容易让新手翻车的地方:配置了路由不代表就能通,下一跳必须是你"看得见"的邻居,也就是和你出接口在同一网段、能被 ARP 解析到的设备。
这里有一个经典现象:ping 一个地址,第一次超时,第二次以后就通了。很多人以为是设备不稳定,其实是第一次 ping 触发 ARP 学习,请求往返需要时间,后续的包走的是缓存里的 MAC 表项。如果你在 HCIA 实验里遇到"第一次丢包后面全通",不必惊慌,这不是故障,是 ARP 的正常工作方式。搞懂了这一层,后面排错时思路会清晰很多。
2. 路由表:一台路由器最重要的一张表
2.1 核心字段逐个拆:知道看什么,才能排错
路由表本质上是一组规则,告诉路由器"目的网段长什么样,应该往哪送"。以 HCIA 体系常见的路由表来说,核心字段是这么几个:
| 字段 | 含义 | 看表时怎么用 |
|---|---|---|
| Destination/Mask | 目的网段及掩码 | 决定这个包匹配哪一条路由 |
| Proto | 路由来源 | Direct 是直连,Static 是静态,OSPF 是动态 |
| Pre(优先级) | 路由的"分数" | 数值越小越优先,先比它 |
| Cost(度量值) | 同一来源下的开销 | Pre 相同的时候再比它 |
| NextHop | 下一跳地址 | 包交给哪个邻居 |
| Interface | 出接口 | 从本地哪个接口送出去 |
我特别想提醒新手注意 Pre 这个字段。不同来源的路由可能指向同一个目的网段,路由器不会"有两条就一起用",而是挑优先级最小的那条。比如直连路由 Pre 通常是 0,静态路由 Pre 是 60 左右,动态路由看具体协议而定。这些数值是厂商在设计时定好的"默认规则",考试要记,工程里更要理解背后的排序逻辑。
2.2 路由从哪来:直连、静态、动态,三者互补而不是互斥
路由的来源主要有三条路,我按 HCIA 考试的常见程度给你理一理:
- 直连路由:接口配了 IP 地址并且物理链路 up,系统自动生成。它不需要手工配置,但前提是接口不能处于 down 状态,否则直连路由会从表里消失。
- 静态路由:管理员手工加进去,语法简单、行为可控、不额外消耗带宽。适合小型网络、出口网关、需要精确控制路径的场景。
- 动态路由:通过协议自动学习和更新,比如 OSPF。适合规模较大、拓扑经常变化的网络,人工维护不过来的时候尤其好用。
三者的关系不是互相替代,而是配合使用。工程上常见做法是直连和静态负责基础打底,动态协议负责内部变化。你只有把三者的适用边界分开,才知道什么场景该用什么方式,而不是遇到需求就用一个命令硬怼。
2.3 排序规则:两条路由都匹配时,听谁的
到了这里,你会发现一个关键问题:路由表里可能有多条路由同时匹配同一个目的地址,到底走哪条?答案是按"分数"排队。首先比较 Pre,Pre 小的胜出;Pre 相同,再比较 Cost,Cost 小的胜出;如果连 Cost 也相同,那就可能做负载分担。
新手最容易犯的错是以为"后面配置的会覆盖前面配置的"。路由选择不是先来后到,而是按分数排位。我见过这样的场景:工程师手工配了一条静态路由想改路径,结果流量还是走原来的老路。查了半天才发现,是动态路由的 Pre 数值更小,优先级更高,静态路由根本"抢不过"。所以当你发现流量走向和预期不符时,第一件事不是删配置,而是把两条候选路由的 Pre 和 Cost 拉出来对比。
3. 静态路由配置实操:命令三分钟,思路值三年
3.1 先画拓扑再敲命令,把数据包的完整路径画在纸上
我见过太多人拿到实验题就开敲命令,最后地址规划乱成一锅粥。这里给一个 HCIA 实验里非常经典的三台设备互联场景:PC1 在 192.168.10.0/24 网段,接入路由器 R1;R1 和 R2 之间的互联链路使用 192.168.100.0/30 网段;R2 下挂 PC2,所在网段是 192.168.20.0/24。目标很简单:让 PC1 能 ping 通 PC2。
先规划再配置的好处是,你能提前画出数据包的完整路径:PC1 把包交给网关(R1 接口地址),R1 查路由表发现目的网段 192.168.20.0/24 要从互联链路走,于是把包发给下一跳(也就是 R2 的互联接口地址 192.168.100.2),R2 再根据直连路由把包从下挂接口送出去,最后交给 PC2。这张图画通了,配置就只是执行而已;画不通,配置再熟练也会栽。
3.2 配置参数逐条讲:目的网段、掩码、下一跳,一个都不能错
以 HCIA 体系对应的设备命令行为例,核心配置只有两条:
[R1] ip route-static 192.168.20.0 24 192.168.100.2 [R2] ip route-static 192.168.10.0 24 192.168.100.1每条静态路由的完整参数是"目的网段 + 掩码 + 下一跳"。掩码写 24 而不是 255.255.255.0,是设备命令行允许的简写方式,两者等价。这里我必须多说一句:下一跳必须填写你自己直连链路上的地址,也就是对方设备的互联接口地址。这个点是新手重灾区——有人把下一跳填成 PC2 的地址,有人填了一个根本不在同一条链路上的地址。结果就是,要么路由表里这条路由始终进不去,要么装进去了但下一跳是"看不见的邻居",ARP 根本解析不了,包自然发不出去。
配置完建议立刻用display ip routing-table看一眼,确认这条路由出现在表里,再继续配下一条。逐条验证比全部配完再统一验证,定位问题要快得多。
3.3 缺省路由:所有未知目的地都走这
假设你的网络只有一个出口,比如企业网要上联到运营商,你不想把每一条外网路由都手工写上去,这时候就需要缺省路由:
[R1] ip route-static 0.0.0.0 0 192.168.100.10.0.0.0/0 是一个"兜底网段",任何在路由表里没有匹配到明细路由的包,最终都会落到这条缺省路由上。缺省路由不是偷懒,而是工程里必要的兜底策略。但注意匹配规则:如果目的地址同时匹配一条 /24 的明细路由和一条 /0 的缺省路由,那么明细路由优先。因为路由器匹配时看的是"谁的网络位更长、更精确",而不是谁先配置的。
3.4 为什么 HCIA 阶段必须先把静态路由吃透
静态路由是唯一一种"每一步都看得见摸得着"的路由。动态协议会帮你自动计算,但也把底层逻辑藏了起来。你只有亲手为两端各加一条静态路由、亲眼看到路由表里出现那一行,才能真正理解"下一跳""优先级""出接口"这些词的分量。考试可以背命令,但工程里命令只是工具,思路才是那棵大树。我见过不少朋友把命令背得滚瓜烂熟,一问"为什么这里下一跳填的是对端接口地址而不是对端主机地址"就卡住了。原因很简单:主机地址是二层通信的目标,而路由关心的是"下一台路由器在哪",这个区别想通了,静态路由就学会了一半。
4. 路由器查表与转发的四个细节,决定了你排错快不快
4.1 最长前缀匹配:越具体的路越优先
路由表里可能同时存在 192.168.20.0/24 和 192.168.20.128/25 两条路由。这时候来了一个目的地址是 192.168.20.200 的包,该走哪条?答案是 /25。路由器匹配时不是"谁先谁后",也不是"谁 Pre 小谁赢",而是先比网络位的长度,网络位更长、范围更精确的那条路由胜出。哪怕 /25 这条是后配置的,只要匹配位更长,它就是赢家。这个规则是三层转发的基石,忘了它,做题和排错都会栽跟头。
换个好记的说法:路由器算"覆盖范围"的时候,宁可走一条更窄但更对的路,也不走一条宽阔但模糊的路。就像你找一个人,知道完整门牌号就按门牌号找,不会因为"那条街更大"就整条街挨家问。
4.2 下一跳必须是"看得见的邻居":首次 ping 的谜题
路由表给的是 NextHop,但真正把数据发出去的时候,路由器还要靠 ARP 拿到这个下一跳的 MAC 地址。所以下一跳必须和自己处于同一个广播域,也就是和出接口同网段。这也解释了为什么 PC 的网关地址必须和 PC 自己在同一网段:PC 要先 ARP 解析网关,才能把包交出去,如果网关配到了别的网段,PC 根本不会把包交给路由器。
前面提到的"第一次 ping 丢包、后面全通",根源就在这里。第一次发数据时 ARP 缓存是空的,要先花时间解析 MAC;解析成功后会缓存一段时间,后续数据直接走缓存,自然就通了。做实验时不用为这个现象焦虑,但如果每次 ping 都丢第一个包、后面也断断续续,那就要怀疑是不是网络里有环路或者接口在反复抖动。
4.3 TTL 与环路:踢皮球的死循环靠什么终结
如果路由器 A 认为去某个网段要经过 B,而 B 又认为要经过 A,两个包就会在 AB 之间来回"踢皮球",这就是路由环路。环路的危害不只是浪费带宽,更可怕的是数据包永远到不了目的地。靠什么兜底?就是 IP 头里的 TTL 字段。每经过一台路由器,TTL 减 1,减到 0 时路由器直接丢弃这个包,并回送一个 ICMP 超时报文给源地址。
所以当你在 ping 一个地址时发现 TTL 值异常、时通时断,或者延迟一跳比一跳大,基本就能判断出链路附近存在环路。到了这个阶段,不用急着怀疑物理线路,先沿路径逐台看路由表,找到那两条互相指向对方的路由,删掉配错的那条,问题自然消失。
4.4 等价路由:一个常被误会的加分项
如果去同一个目的网段有两条 Pre、Cost 都完全相同的路径,路由器会做负载分担,把流量拆分到两条链路上同时转发。这在考试里是个小考点,在工程里也是个常用技巧。但请注意,等价路由不等于高可用方案。它更像两条并行的车道,车道减少一条的时候,流量并不自动全部切换到剩下的车道上,除非你额外配置了链路检测和联动机制。把等价路由当成冗余备份来用,是很多人踩过的坑,提前给你打一针预防。
5. 踩坑实录:三层互ping不通的六大常见原因,按顺序查
5.1 一次完整排查过程:A同学的一小时弯路
前阵子有个备考的朋友 A 同学找我,说他在模拟器里搭了 R1、R2 两台设备,接口全都 up,VLAN、IP 也都对着教程配了,可 PC1 就是 ping 不通 PC2。他怀疑是软件问题,整整折腾了一个小时。
我让他别急,按顺序做三件事。第一,先在 PC1 上 ping 自己的网关,通了说明二层链路没问题;再 ping R2 的互联接口地址,通了说明 R1 到 R2 这一段也没问题。第二,在 R1 上执行display ip routing-table,看 192.168.20.0/24 这条路由在不在表里。结果显示:路由在。第三,让他去 R2 上执行同样的命令,看 192.168.10.0/24 在不在表里。结果出来了——R2 的路由表里根本没有回程路由。
问题一下就清楚了:A同学只给 R1 配了去往 PC2 网段的静态路由,忘了在 R2 上配回程路由。他以为"能发出去就能收到",但网络通信是双向的,回来的包同样需要路由。补上这一条,PC1 和 PC2 立刻就能互相 ping 通。这个案例很有代表性,因为"只配了单向路由"正是新手最常掉进去的坑。
5.2 六大根因速查表:从现象反推问题
| 故障现象 | 可能根因 | 验证方式 |
|---|---|---|
| 接口全 up,但 ping 不通 | 缺静态路由或掩码写错 | 逐台设备看路由表,确认目的网段是否在表中、掩码是否一致 |
| 路由表有路由,但包发不出去 | 下一跳填了非直连地址 | 看 NextHop 是否和出接口同网段,再用 ARP 表确认能否解析 |
| 只有一端能通,另一端不通 | 只配了单向静态路由 | 沿着数据包的往返路径各查一遍,缺哪条补哪条 |
| 时通时断,延迟忽高忽低 | 环路或接口频繁翻转 | 反复 ping 观察 TTL 变化,用接口状态确认是否连续 up/down |
| PC 能 ping 通网关,但 ping 不通远端 | 网关路由器缺回程路由 | 在 PC 上跟踪路由逐跳定位,在对应路由器上补路由 |
| 配置命令看着没问题,路由却不生效 | 掩码简写格式理解错误 | 检查路由表里的掩码位数,确认 24 与 255.255.255.0 等价 |
这张表是我在实际带新人的时候整理出来的,几乎覆盖了 HCIA 实验阶段九成以上的三层不通问题。遇到故障不用慌,按行对应到自己的现象,逐条验证就行了。
5.3 模拟器里两个容易被忽略的习惯
在模拟器上做实验,有两个习惯特别重要。第一个是配置完之后一定要确认配置真正生效:敲完静态路由,立刻执行display current-configuration过滤查看路由配置,确认命令行没有敲漏、没有因为手误被系统拒绝。第二个是注意接口状态:模拟器里接口经常默认处于开启状态,但也可能因为反复配置被 shutdown 了。接口一旦 down,直连路由根本生成不了,后面所有路由都是空中楼阁。我见过很多"明明配了路由却不进表"的怪事,最后发现都是接口没开,直连路由都没起来。
另外提醒一句:模拟器里的配置如果不做保存操作,关闭设备重开就全没了。做长实验之前,养成保存配置的习惯,不然下次打开发现路由表一片空白,前面的思路也跟着丢了。
5.4 工程里的配置规范:回程路由是铁律
最后说点工程上的习惯。配置静态路由时,我建议遵循三条规则:第一,出口方向的路由配完,立刻检查回程方向,没有回程路由,任何三层互通都是幻想;第二,下一跳能写具体 IP 地址就不要写"出接口"(除非是点到点链路),这样路由表里的信息量更大,排错时一眼能看清路径;第三,静态路由多了以后,给不同区域的路由做统一命名和注释,方便后期维护。这些规范看起来琐碎,却能在关键时刻帮你省下大量排查时间。
最后再分享一个我个人的体会:学路由最忌"背命令"。我见过不少朋友把静态路由命令背得滚瓜烂熟,但一问"为什么这里下一跳填的是对端地址而不是对端主机地址"就卡住了。后来我让这些人做一件事:在每一跳路由器上都画一遍数据包的完整旅程——从源 IP 到目的 IP,经过哪几个接口、经过哪几台设备、哪些地方需要 ARP、哪些地方需要查路由表。画通三张图,命令自然就忘不掉,排错也快得多。如果你正在备考 HCIA,建议这一篇不要只看,打开模拟器照着第三节的拓扑做一遍,不通就对着第五节的表格一项项查。网络这个东西,纸上得来终觉浅,自己按下回车看到"Reply from"出来的那一秒,比看十篇教程都管用。