刚接触网络的人最容易把路由器想复杂,总觉得它像个智能导航,会实时问路、会看交通状况、会自己选最快的一条。实际上路由器的“智商”低得惊人——它只做一件事:查表。查一张叫“路由表”的表,表里有记录就转发,没记录就直接丢包。所谓IP路由原理,本质上就是搞清楚这张表的生成逻辑和维护方式;而静态路由和动态路由的区分,也完全是围绕着“表是谁写的”展开的。弄明白这一点,整个网络技术的入门门槛就跨过去了一半。
这篇文章用eNSP模拟器里的实际操作来拆解IP路由原理,把静态路由配置、OSPF动态路由配置、路由优先级、管理距离、收敛速度这些概念串起来讲。适合正在备考网络工程师认证的人、刚入行的网络运维,以及那些被网线插上但ping不通折磨过的人。我会尽量用大白话把原理讲透,再给可复现的命令和排错思路。看完之后,你再看到三层交换机或路由器上的路由表,就不会只盯着0.0.0.0那一行发呆了。
1. 路由器的核心工作:查表转发,而不是“问路”
1.1 路由表的本质:一本“到哪去、走哪口”的通讯录
先看一张最简单的路由表长什么样。在一台企业路由器上执行display ip routing-table,输出里最关键的四列是:目的网络/掩码、协议类型、优先级/度量值、下一跳/出接口。
| 目的网络/掩码 | 协议 | 优先级/度量值 | 下一跳/出接口 |
|---|---|---|---|
| 192.168.10.0/24 | Direct | 0/0 | 192.168.10.1, GigabitEthernet0/0/0 |
| 192.168.20.0/24 | Static | 60/0 | 192.168.30.2, GigabitEthernet0/0/1 |
| 10.1.1.0/24 | OSPF | 10/2 | 192.168.30.3, GigabitEthernet0/0/1 |
这张表就是一个纯手工维护或协议自动维护的通讯录。当一个数据包到达路由器时,路由器取出包里的目的IP地址,在路由表里找“哪一行的目的网络包含这个IP”,命中之后,把包从对应的出接口扔出去,交给下一跳。整个过程不涉及“此路不通换个方向”的思考,表里没有就是没有,直接丢弃并回一个ICMP不可达。
很多初学者会有个误区:路由器是不是知道所有IP地址?不是的。它只关心“网络段”,不关心具体主机。路由表里的条目是“192.168.10.0/24”这种网段,而不是“192.168.10.5”这种主机地址。原因很简单——全球几十亿台设备,每台都记成主机地址,内存爆掉也记不完,而且路由根本没这个必要,你只要知道目标在哪个网段、往哪个方向走就够了。这就好比寄快递,快递网点只需要知道包裹去哪个城市、哪个区,不需要记住每个收件人的门牌号在哪个分拣口。
1.2 最长前缀匹配:路由表里的“谁更具体谁说了算”
查表转发有一个核心原则必须懂:当数据包的目的IP同时命中了好几条路由条目时,路由器选掩码最长的那条。这个机制叫最长前缀匹配。
举个例子。路由器路由表里有两条静态路由:
- 192.168.10.0/24,下一跳192.168.30.2
- 192.168.10.128/25,下一跳192.168.30.4
这个时候来了一个目的IP为192.168.10.200的包。它同时落在两个网段里——192.168.10.200确实属于192.168.10.0/24,也属于192.168.10.128/25。按最长前缀匹配,/25的掩码更长、范围更具体,所以路由器走下一跳192.168.30.4。
这个机制在网络上被广泛用于“默认路由 + 精确路由”的组合。默认路由0.0.0.0/0是所有路由表里掩码最短的条目,它匹配所有IP。当其他所有更具体的条目都不匹配时,流量才会落入默认路由。很多企业出口就是这样配的:内网精确路由走内网,其他所有流量走默认路由丢给运营商。理解了最长前缀匹配,你就不会惊讶为什么表里可以同时存在0.0.0.0/0和172.16.0.0/16这两条看起来“冲突”的路由。
1.3 路由的三大来源:直连、静态、动态
路由表里的条目不会凭空产生,它们的来源无外乎三种。
- 直连路由:只要接口配置了IP地址并处于up状态,路由器自动产生该网段的路由,无需任何手工配置。它是路由器“天生就知道”的路。
- 静态路由:管理员手工敲命令写进路由表的。它精确、可控、不产生任何协议报文开销,但网络拓扑一变就得手工改。
- 动态路由:路由器之间通过运行路由协议(OSPF、RIP、BGP等)互相交换网络信息,自动计算出路由条目。网络变化时协议会自动更新路由表,无需人工干预。
直连、静态、动态这三种来源同时存在时,路由器优先听谁的?这就涉及一个特别关键的参数——管理距离,华为设备上叫“优先级”。管理距离是一个表示“可信程度”的数字,数字越小越可信、越优先被选用。华为设备上直连路由的优先级是0,OSPF内部路由是10,静态路由是60,RIP是100。如果同一目的网段既有一条静态路由又有一条OSPF路由,路由器默认无条件信静态的——因为管理员手工敲的命令,可信度当然比协议自动学来的高。
度量值(Metric)和管理距离很容易被人混在一起。管理距离是不同协议之间的“比较维度”,度量值则是在同一种协议内部“比较路径好坏”的尺子。OSPF的度量值是开销(Cost),RIP的度量值是跳数。如果把选路比作招聘,管理距离是“学历门槛”——985的简历先看;度量值是“面试分数”——同样是985的两个人,谁面试分数高选谁。
2. 静态路由:哪条路最快,你说了算
2.1 为什么还需要静态路由:可控性和稳定性的价值
动态路由那么智能,为什么还要用静态路由?这个问题我在培训新人时被问过无数次。答案是:物美价廉、稳定可控。
静态路由的第一大优势是省资源。它不跑任何协议报文,不占带宽,不消耗CPU,不会因为协议震荡产生路由抖动。在带宽和性能都有限的小型网络里,静态路由是最经济的选择。
第二大优势是可控。动态路由是协议算出来的路,管理员只能通过调整度量值间接影响选路结果;静态路由是管理员亲手写的路,说走哪就走哪,不存在“协议觉得这条路更好”的意外。企业里连接分支机构、银行专线、监控专网时,要求流量必须走指定运营商线路,这种场景静态路由一配了之,干净利落。
第三大优势是故障定位容易。全网都是静态路由时,某段网络不通,你只需要沿着手工配置的路径逐跳ping,很容易找到断点。如果全是动态路由,一旦路径发生切换,你先得判断流量到底走了哪条路,排错复杂度立刻上了一个台阶。
但静态路由的缺点同样明显——不会自动适应网络变化。链路一断,静态路由不会自动切到备用线路,必须管理员介入或者借助其他机制(比如浮动路由)才能实现切换。网络规模一大,几十台路由器全配静态,维护工作量和出错概率都很吓人。
2.2 eNSP环境准备与实验拓扑搭建
这篇文章里的所有命令都是基于华为eNSP模拟器验证过的。如果你还没装eNSP,建议先装好,版本没什么特别要求,能跑通AR路由器就行。我个人习惯配三台路由器R1、R2、R3串成一串,每台路由器再接一台PC,模拟两个办公网段互通。
实践环境规划参考如下:
| 设备 | 接口 | IP地址 | 用途 |
|---|---|---|---|
| PC1 | eth0/0/0 | 192.168.10.10/24 | 模拟办公区A的主机 |
| R1 | GE0/0/0 | 192.168.10.1/24 | 连接PC1 |
| R1 | GE0/0/1 | 10.0.12.1/24 | 连接R2 |
| R2 | GE0/0/0 | 10.0.12.2/24 | 连接R1 |
| R2 | GE0/0/1 | 10.0.23.2/24 | 连接R3 |
| R3 | GE0/0/0 | 10.0.23.3/24 | 连接R2 |
| R3 | GE0/0/1 | 192.168.20.1/24 | 连接PC2 |
| PC2 | eth0/0/0 | 192.168.20.10/24 | 模拟办公区B的主机 |
先用命令把所有接口的IP地址配上。这里只写R1的部分,R2和R3照葫芦画瓢:
system-view sysname R1 interface GigabitEthernet0/0/0 ip address 192.168.10.1 255.255.255.0 undo shutdown quit interface GigabitEthernet0/0/1 ip address 10.0.12.1 255.255.255.0 undo shutdown quit配完接口后,三台路由器的直连路由自动生成。此时在R1上display ip routing-table能看到192.168.10.0/24和10.0.12.0/24这两条Direct路由,但R1并不知道10.0.23.0/24和192.168.20.0/24怎么走。这就是PC1 ping不通PC2的根本原因——路由表里没路。
2.3 静态路由配置命令拆解:目的网段、掩码、下一跳该怎么写
在华为设备上,静态路由的命令格式是:
ip route-static 目的网段 掩码 { 下一跳地址 | 出接口 } [ preference 优先级 ]要让PC1能访问PC2所在的192.168.20.0/24网段,R1需要知道:去这个网段,把包交给10.0.12.2。所以R1上执行:
ip route-static 192.168.20.0 255.255.255.0 10.0.12.2同样,R3也需要知道怎么回去192.168.10.0/24,把包交给10.0.23.2:
ip route-static 192.168.10.0 255.255.255.0 10.0.23.2那R2需要配吗?需要。R2虽然直连了10.0.12.0/24和10.0.23.0/24,但不知道192.168.10.0/24和192.168.20.0/24在哪里。R2配两条:
ip route-static 192.168.10.0 255.255.255.0 10.0.12.1 ip route-static 192.168.20.0 255.255.255.0 10.0.23.3这里有一个新手必踩的坑:只配去程不配回程。很多人只在R1上配了去192.168.20.0/24的静态路由,然后ping不通,开始怀疑设备坏了。其实数据包能从PC1到PC2,但PC2回包时,R3根本没有去192.168.10.0/24的路由,回包被R3丢弃,表现就是ping不通。网络通信是双向的,路由也得来回路都通。任何一次ping不通的排查,第一件事就是分别在两端设备上追一下来回路径。
下一跳到底填什么?这里也容易犯迷糊。一个原则:下一跳必须是直连链路上对端设备的接口IP,不能跨越路由器填IP。R1连R2的那条链路上,R1的接口IP是10.0.12.1,R2的接口IP是10.0.12.2,所以R1配去R3方向的静态路由,下一跳只能填10.0.12.2,绝不能填10.0.23.2——因为10.0.23.2对于R1来说根本不是直连可达的地址,你把包交给它,R1连ARP都解析不出来。
配完之后别忘了保存配置。eNSP里执行save,不然重启全没了。这个动作在真实设备上也同样重要,很多网络工程师在设备上配了一堆策略,结果机房断电重启后配置全丢,这种事故多半就是忘了save。
2.4 静态路由的可用性判断:下一跳不可达后会怎样
细心的读者可能会问:如果R1配置的下一跳10.0.12.2对应的设备宕机了,这条静态路由还在不在路由表里?
在华为设备上,默认情况下静态路由被配置后,只要协议栈能解析出下一跳,路由就会一直存在于路由表中。哪怕下一跳设备已经宕机,只要它的IP还能被ARP解析(或者配置的是出接口方式),路由器也不会自动把这条路由删掉。结果就是数据包发过去了,但对端没有任何回应,直接丢包。
解决这个问题有两个常用办法。第一个办法是把静态路由和链路状态绑定——配置静态路由时指定出接口而不是下一跳:
ip route-static 192.168.20.0 255.255.255.0 GigabitEthernet0/0/1当接口down掉时,这条静态路由会跟着从路由表消失。但这种方式也有代价:如果对端路由器是通过交换机二层接入的,接口up不代表链路可用,出接口方式反而可能造成路由黑洞。
第二个办法是使用链路检测技术,比如BFD(双向转发检测)联动静态路由。BFD能在毫秒级感知链路故障,并通知路由管理模块把相关静态路由从路由表里撤销或切换。配置大概是这样的思路:
bfd quit ip route-static 192.168.20.0 255.255.255.0 10.0.12.2 bfd-session-name bfd-r1-r2对于纯学习和入门阶段,知道有BFD这个机制就行,真正常用的是后面要讲的动态路由——协议自己就能感知链路故障并收敛。
3. 动态路由:让OSPF这类协议自己学路,网断了也会绕
3.1 动态路由为什么会存在:大型网络的“人工维护噩梦”
等你把三台路由器的静态路由配完,体会一下维护体验:改一个网段,所有相关路由器都要跟着改一遍。那如果有三十台路由器呢?三百台呢?静态路由的维护工作量和出错概率会呈指数级增长。
动态路由解决的就是这个问题。路由器之间通过协议互相“汇报”自己知道的路由信息,然后各自计算出一张完整的网络拓扑图。链路断了,协议自动感知、自动更新路由、自动切换到备用路径,整个过程不需要管理员敲任何命令。这个能力在网络领域有个专门的词叫“收敛”。静态路由的收敛靠人,快则几分钟,慢则半小时起步;动态路由的收敛靠协议,快则毫秒级,慢则几秒钟。
先明确两个基础分类。从工作范围上分,运行在同一自治系统内部的叫IGP(内部网关协议),典型代表是RIP、OSPF、IS-IS;运行在不同自治系统之间的叫EGP(外部网关协议),典型代表是BGP。这篇文章重点讲IGP里的OSPF,因为它是目前企业园区网、数据中心内部用得最广泛的动态路由协议,也是华为认证考试里必考的内容。
再从算法机制上分,动态路由协议分距离矢量型和链路状态型两大类。RIP属于距离矢量型,它只告诉邻居“我有多远”,像“听别人说前面走3站能到”;OSPF属于链路状态型,它要把自己的链路状态通告给全网所有路由器,每台路由器都掌握整张网络地图,然后用SPF算法自己算出最短路径。打个比方,距离矢量是“村里人互相传话”,链路状态是“每家每户把自家门前的路况画成地图发给全村,每家人手里都有全村地图,自己规划路线”。OSPF的复杂度和能力都远高于RIP,所以现在企业网络里基本看不到RIP的身影,而OSPF遍地都是。
3.2 OSPF的五个关键机制:从邻居建立到路由计算
OSPF全称Open Shortest Path First,开放最短路径优先。理解OSPF不需要一开始就去啃RFC,你只需要抓住五个关键机制,整个协议的骨架就搭起来了。
第一个机制是邻居发现。OSPF路由器通过组播地址224.0.0.5周期性发送Hello报文,Hello报文里携带路由器ID(Router ID)、区域ID、认证信息、Hello间隔等参数。两台路由器收到对方的Hello报文并确认参数匹配,就会从Down状态一路经历过Init、2-Way、ExStart、Exchange、Loading,最终进入Full状态,建立完整的邻接关系。如果两台设备上Hello间隔配置不一致,它们是永远不可能成为邻居的。
第二个机制是链路状态通告(LSA)与泛洪。建立邻接关系后,每台路由器把自己的接口信息、邻居关系、链路开销封装成LSA,向全网泛洪。所谓泛洪,就是每个路由器收到LSA后,除了收到这个LSA的接口,再往其他所有接口转发一份副本,直到全网每台路由器都收到相同的一份LSA。最终,每台路由器都拥有全网完全一致的链路状态数据库(LSDB),相当于全村人手里都拿到了一模一样的路况地图。
第三个机制是SPF算法计算。拿到全网地图之后,每台路由器以自己为根节点,用Dijkstra最短路径优先算法计算出到每个网段的最短路径。算出结果之后,把最优路径挂进路由表,就完成了路由计算。注意,SPF算法是每台路由器独立计算的,不需要别人告诉它“走哪条路”,这也是链路状态协议比距离矢量协议更不容易出现环路的原因。
第四个机制是区域设计。OSPF可以把一个大网络划分成多个区域,区域之间通过骨干区域Area 0互联。为什么搞这么复杂?因为SPF算法虽然好,但如果你有几千台路由器全放在一个区域里,全网泛洪LSA的规模和每台设备上的数据库会大得离谱,任何拓扑变化都要触发全网重新计算,CPU和带宽都扛不住。划分区域之后,区域内部的变化只在区域内部泛洪,不会影响其他区域。学习阶段先不用管多区域,等你在真实项目里遇到几百台路由器的规模时,自然会体会到区域划分的重要性。
第五个机制是开销(Cost)与路径选择。OSPF的度量值是接口开销,默认计算公式是Cost = 100Mbps / 接口带宽,结果小于1则取1。在华为设备上,百兆接口Cost=1,千兆接口Cost=1(因为1000/100=10?不,华为默认参考带宽就是100Mbps,千兆算出来是0.1,向上取整为1),万兆也是1。这就产生了一个常见问题——默认情况下OSPF认为百兆、千兆、万兆链路的路由开销是一样的,选路时不会自动帮你挑带宽更大的那条。真实项目里要通过bandwidth-reference命令调整参考带宽来纠正,比如设成10000后,千兆Cost=10,万兆Cost=1,OSPF就能区分链路好坏。这个知识点面试经常考,注意理解。
3.3 一条OSPF的路由是怎么进路由表的:以R1到R3网段为例
还是拿之前那个三台路由器的拓扑。把R1、R2、R3的静态路由全部删掉,改配OSPF。R1的配置如下:
system-view ospf 1 router-id 1.1.1.1 area 0 network 192.168.10.0 0.0.0.255 network 10.0.12.0 0.0.0.255 quit quitR2:
system-view ospf 1 router-id 2.2.2.2 area 0 network 10.0.12.0 0.0.0.255 network 10.0.23.0 0.0.0.255 quit quitR3:
system-view ospf 1 router-id 3.3.3.3 area 0 network 192.168.20.0 0.0.0.255 network 10.0.23.0 0.0.0.255 quit quit注意这里network命令后面跟的是通配符掩码,不是子网掩码。0.0.0.255表示只匹配前24位固定的地址,也就是192.168.10.0/24这个网段。通配符掩码的规则是:0表示对应位必须匹配,255表示对应位不需要匹配。很多人第一次配OSPF就在这栽跟头,把255.255.255.0直接怼进去,结果OSPF进程宣告的网段跟你预期的完全不一样。
OSPF只在宣告了network的接口上收发OSPF报文。R1宣告了192.168.10.0/24和10.0.12.0/24,它就会在这两个接口上发送Hello报文。同理R2在10.0.12.0/24和10.0.23.0/24上发Hello,R3在10.0.23.0/24和192.168.20.0/24上发Hello。R1和R2在10.0.12网段上互相发现,R2和R3在10.0.23网段上互相发现。等R1和R3收到的LSA泛洪完整,各自运行SPF算法,R1的路由表里就会多出10.0.23.0/24和192.168.20.0/24这两条OSPF路由。
有个排查技巧值得单独说:配置完OSPF后,如果路由表里没出现预期的OSPF路由,先别急着怀疑配置。在设备上执行display ospf peer查看邻居状态是否Full,如果Peer状态停在Init或2-Way,多半是Hello参数不匹配或区域号不一致;如果邻居已经是Full但路由表里没有,再用display ospf lsdb看链路状态数据库里有没有对方的LSA。这种逐步排查的思路,和静态路由排错的思路完全不同——静态路由排错查配置和接口,动态路由排错先查邻居、再查数据库、最后查路由表,顺序不能乱。
3.4 OSPF的收敛能力实测:模拟链路故障看路由自愈
动态路由和静态路由最大的体感差异,就是链路故障时的表现。这里分享一个我在eNSP里常给学生演示的测试。
在三台路由器都运行OSPF且全网互通之后,把R1和R2之间的链路shutdown:
system-view interface GigabitEthernet0/0/1 shutdown几秒钟之后,在R1上执行display ip routing-table,你会发现192.168.20.0/24这条路由的下一跳变成了10.0.23.2,而不是此前的10.0.12.2。R1的感知路径变成了R1 -> R3(走10.0.23.2?这里拓扑是R1与R3不直连,所以实际是R1 -> R3 -> R2,等等,R1直连R2和R3?回到拓扑:R1连R2、R2连R3,R1和R3不直连。所以R1要去192.168.20.0/24,必须经过R2或者绕R3。如果R1-R2断了,R1就没有到达R3的路径了。这个测试得调整拓扑。比较合理的设计是R1连R2连R3,再有一条R1-R3的直连链路,形成三角形环路,OSPF才有备用路径可切换。调整拓扑后在R1上会有两条路:R1->R2->R3和R1->R3,OSPF会选Cost小的。R1-R2断掉后,路由切换到R1->R3这条路径。)
你不需要敲任何命令,OSPF自动完成了路由切换。整个过程就是:R1-R2链路down掉后,R1和R2之间的邻接关系中断,R2立刻生成新的LSA描述自己的链路状态变化,通过R3泛洪到全网(R2还有到R3的链路),每台设备收到新LSA后重新运行SPF算法,更新路由表。从链路down到全网路由收敛,在三台路由器的小规模网络里通常只需要几秒。
静态路由要实现同样的切换,只能靠浮动静态路由。浮动静态路由的原理是配置两条静态路由,目标网段一样,但优先级不同,比如主路由优先级60,备路由优先级100。正常情况下优先级60的条目胜出,主链路出问题时主路由条目消失,优先级100的备路由自动顶上。配置如下:
# 主路由,默认优先级60 ip route-static 192.168.20.0 255.255.255.0 10.0.12.2 # 备路由,优先级100,正常情况下不生效 ip route-static 192.168.20.0 255.255.255.0 10.0.23.2 preference 100但注意,静态路由的切换速度取决于设备感知到接口down的速度。如果中间隔着二层交换机,物理接口没down但链路实际已经断了,静态路由感知不到,浮动路由就是废的。这也是为什么在大网里,核心骨干链路的冗余切换基本都靠OSPF或BGP这类动态协议,而不是靠静态路由硬撑。
4. 静态和动态怎么选:从管理距离、收敛速度到混合部署
4.1 一张表格看清两者的核心差异
经常有人问我:“到底用静态路由还是动态路由?”我的习惯是先甩出下面这张表,再结合场景聊。
| 对比维度 | 静态路由 | 动态路由(以OSPF为例) |
|---|---|---|
| 路由表生成方式 | 管理员手工配置 | 协议自动计算 |
| 部署和维护难度 | 小网络简单,大网络噩梦 | 小网络偏重,大网络反而简单 |
| 消耗设备资源 | 基本不消耗 | 消耗CPU和内存,需要设计区域 |
| 对拓扑变化的感知 | 不感知,除非配合其他机制 | 自动感知并收敛 |
| 收敛速度 | 人工干预,分钟级起步 | 秒级甚至毫秒级 |
| 选路可控性 | 完全可控 | 通过调整Cost等参数间接控制 |
| 故障定位 | 逐跳检查,路径清晰 | 需要查邻居、数据库、路由表 |
| 典型适用场景 | 小型网络、末梢接入、专线固定路径 | 中大型园区网、数据中心、骨干网 |
这张表里的每一项都不是空话。举个真实例子:一个只有两台防火墙做双机热备的出口网络,去往运营商专线的路由就一条,配静态完全够用,安全和维护成本都最低。但如果你负责的是一个大学校园网,核心、汇聚、接入三层,加在一起上百台设备,还划分了十几个业务VLAN,这时候如果还坚持全部用静态路由,拓扑一旦调整,光改静态路由条目就能让人崩溃。OSPF反而是更省心的选择。
4.2 企业里的真实选型思路:不是二选一,而是混合部署
要特别强调一点:真实的企业网络里,静态路由和动态路由不是互斥的,而是共存的。我现在维护的网络里,出口方向是静态默认路由(指向运营商),核心到汇聚是OSPF,汇聚到接入层有时候用静态、有时候用OSPF,专线互联地址也经常用静态。这是很常见的混合形态。
选型的核心判断因素有三个。
第一个是网络规模。少于10台路由器且拓扑很少变化的,静态路由足够。超过这个规模,或者网络分层明显、存在多条冗余路径,上OSPF的收益立刻体现出来。
第二个是拓扑冗余度。如果全网只有一条路,断了就是断了,没有其他路径可切,那动态路由的价值就没那么明显——反正切无可切。一旦存在冗余链路,你想让流量在链路故障时自动切换,就必须要动态路由或者浮动静态路由。冗余路径越多,OSPF的优势越显著。
第三个是运维团队的能力。静态路由排错简单,黑盒程度低,任何一个网络基础扎实的工程师都能搞定。OSPF虽然不算难,但要想真正用好,得理解区域、LSA类型、邻居状态机、Cost调优这些概念。团队能力不够的情况下,强行上OSPF反而会制造新的故障点。
关于细节,还有一个经常被忽略的坑:动静路由混合部署时,注意管理距离导致的选路意外。假设你配了一条静态路由指向某个网段,同时OSPF也学到了同一网段的路由,华为设备默认会优先信静态的。如果静态路由下一跳的链路其实已经不通,而OSPF计算出的路径是通的,流量依然会发给静态路由的下一跳,结果就是丢包。这个场景我遇到过不止一次,排查到最后都是“表里明明有OSPF的路由,但流量就是不走”,最后发现是静态路由优先级太高截胡了。
4.3 路由重发布与特殊场景:静态和动态之间的翻译官
混合部署时还有一个绕不开的话题——路由重发布。
OSPF和静态路由在同一个路由器上各学各的,OSPF进程默认不会自动把静态路由宣告给其他OSPF邻居。比如你的核心路由器上有一条指向运营商的静态默认路由,你想让全网其他路由器都学到这条默认路由,而不是每台都手工配一遍,就需要在OSPF进程里引入静态路由:
system-view ospf 1 default-route-advertise quit这条命令的意思是让OSPF路由器向邻居通告一条类型为ASE的默认路由,其他路由器就会自动生成一条0.0.0.0/0的OSPF路由指向这台路由器。这就是静态和动态之间的“翻译官”机制。类似的还有import-route static,可以把指定的静态路由引入OSPF域内。反向操作也常见:把OSPF路由引入到其他协议或静态路由表里。但引入路由时要格外小心,万一引入的路由里有环路路径,可能导致流量被导进黑洞。
4.4 路由排错的基本思路:从路由表出发,不猜不蒙
不管你是配静态还是配动态,排错思路决定效率。根据我多年的习惯,网络不通时排查路由相关的顺序如下:
- 先在源设备上ping网关,确认源端链路和接口正常。
- 查看源设备路由表,确认存在去往目的网段的路由条目。
- 查看下一跳设备的ARP表和接口状态,确认二层链路正常。
- 跳到下一台设备,重复上面的步骤,逐跳推进。
- 如果发现路由表里缺条目,区分是静态配置问题还是OSPF问题:静态查命令是否敲错、下一跳是否可达、回程路由是否存在;OSPF先查邻居状态,再查LSDB是否完整,最后查SPF计算结果。
有一个我在实际排障中非常依赖的命令组合,值得分享。ping不通时,在路由器上执行:
display ip routing-table <目的IP>这条命令直接只看与目的IP相关的路由条目,比先display ip routing-table再手动搜快得多。华为设备上还有display ip routing-table verbose可以看路由条目的详细来源信息,比如这条路由是通过哪个协议、从哪个邻居学来的,排障时信息量很大。
另外一个非常隐蔽但常见的坑:路由黑洞。当一个网段在路由表里有条目,但实际对应的链路已经不存在了(比如对端设备被拔掉但接口还up着,或者静态路由指向了一个二层交换机上不存在的VLAN),包会被路由器接收然后静默丢弃。这种情况在路由表上完全看不出异常,只有对照实际的物理拓扑才能发现。我的建议是:任何路由配置变更之后,尽快做端到端连通性测试,不要拖到业务受影响才想起来验证。
5. 最后说点我自己的体会
做网络这一行,最忌讳的就是只背命令不理解原理。静态路由和OSPF的配置命令加起来不超过十行,但为什么这样配、链路断了会发生什么、多条路由存在时谁优先,这些才是真正值钱的东西。我自己带人的时候,如果对方能把“管理距离”和“度量值”的区别讲清楚,能把最长前缀匹配说顺溜,我就知道这人是真把路由原理装进脑子里了,而不是只会对着文档敲命令。
如果你想把这篇文章里的知识点消化掉,我的建议是打开eNSP按下面的步骤练一遍:先搭好三台路由器的拓扑,全程用静态路由配通;然后把静态路由全部删掉,换成OSPF重新配通;接着在OSPF环境里手动shutdown一条链路,观察路由表的变化;最后把OSPF删了,配置浮动静态路由模拟主备切换。这四步走完,你不仅理解了IP路由原理,静态路由和动态路由的区别也会变成肌肉记忆,而不是考试卷上的死题目。
篇幅有限,区域设计、LSA类型这些更深的OSPF话题这篇没有展开,等你在单区域OSPF里跑熟了,自然而然会有进一步探索的需求。祝大家少踩坑,多收包。