数据包经过 ARP与首跳路由 找到了第一跳路由器,又被 IP地址与子网 的最长前缀匹配逐跳转发。但一个组织内部可能有几十甚至上百台路由器——它们之间怎么知道该把包往哪送?路由表里的那些”下一跳”是谁填进去的?
答案就是域内路由协议(IGP,Interior Gateway Protocol)。路由器之间通过 IGP 交换网络拓扑信息,各自计算出最短路径,填入路由表。没有 IGP,每台路由器的路由表都得人工配置——在规模稍大的网络里,这和手工管理每台主机的 /etc/hosts 一样不现实。
本章从路由问题的图论本质出发,先看距离向量路由(RIP)的简单与局限,再深入链路状态路由(OSPF)的核心机制——LSDB 同步、区域划分、LSA 类型、SPF 计算,然后对比运营商偏好的 IS-IS,最后追踪一次链路故障后 OSPF 网络的收敛过程。
一、路由问题:网络内部如何找到路径
1.1 图论视角:最短路径问题
把网络抽象成一个带权有向图:路由器是节点,链路是边,链路的度量值(metric,比如延迟、带宽、跳数)是边的权重。路由问题本质上就是单源最短路径问题——每台路由器都需要算出自己到所有其他路由器的最短路径。
以 R1 为源,最短路径是:
| 目的 | 最短路径 | 总代价 |
|---|---|---|
| R2 | R1→R2 | 10 |
| R3 | R1→R2→R3 | 30 |
| R4 | R1→R2→R4 | 25 |
| R5 | R1→R2→R4→R5 | 35 |
注意 R1→R3 的直连链路代价是 30,但经 R2 中转的总代价也是 30——等价路径,可以负载分担。
两种经典算法可以解决这个问题:
- Bellman-Ford 算法:逐轮松弛边,时间复杂度 O(VE)。距离向量路由(RIP)的理论基础。
- Dijkstra 算法:贪心扩展最近节点,时间复杂度 O(V²) 或 O(E + V log V)(用优先队列)。链路状态路由(OSPF/IS-IS)的理论基础。
1.2 为什么需要动态路由
最简单的方案是静态路由——管理员手动在每台路由器上配置”目的网络 → 下一跳”的映射。小型网络里这没问题:
# 在 R1 上配置静态路由ip route 10.0.2.0/24 via 10.0.1.2 # 经 R2 到达 10.0.2.0/24ip route 10.0.3.0/24 via 10.0.1.3 # 经 R3 到达 10.0.3.0/24ip route 0.0.0.0/0 via 10.0.1.1 # 默认路由但静态路由有三个致命问题:
- 不可扩展:50 台路由器的网络,一条链路断开可能需要改 30 多台路由器的配置
- 无故障自愈:链路断开时不会自动切换到备用路径
- 无法感知拓扑变化:新增路由器、度量值变化、负载均衡需求——静态路由一无所知
动态路由协议解决的就是这三个问题:自动发现拓扑、自动计算路径、自动响应变化。
1.3 IGP 与 EGP 的分工
| 维度 | IGP(域内路由) | EGP(域间路由) |
|---|---|---|
| 作用范围 | 单个组织/AS 内部 | AS 之间 |
| 核心目标 | 找到最短路径 | 执行策略路由 |
| 典型协议 | OSPF、IS-IS、RIP | BGP |
| 路由数量 | 几十到几千条 | 几十万到上百万条 |
| 策略需求 | 少(主要看代价) | 多(商业关系、流量工程) |
IGP 关心”怎么走最快”,EGP 关心”允不允许走这条路”。本章聚焦 IGP,BGP与域间路由 中再展开 EGP。
二、距离向量路由:RIP 的简单与局限
2.1 Bellman-Ford 与距离向量
距离向量路由的核心思想极其简洁:每台路由器把自己的路由表发给邻居,邻居据此更新自己的路由表。这就是 Bellman-Ford 算法的分布式版本:
D(x, y) = min over all neighbors v { c(x, v) + D(v, y) }每台路由器只需要知道到邻居的代价和邻居通告的距离,就能算出自己的最短距离。RIP(RFC 2453)是距离向量路由的经典实现:
# FRR 中配置 RIP(仅作演示,生产环境不推荐)vtyshconfigure terminalrouter rip network 10.0.0.0/8 network 192.168.1.0/242.2 RIP 的工作过程
假设三台路由器线性连接:R1 — R2 — R3,每条链路代价为 1。
初始状态每台路由器只知道自己直连的网络。第一轮交换后,R1 从 R2 学到 10.0.2.0/24(距离 1),R2 从 R1 和 R3 分别学到 10.0.1.0/24 和 10.0.3.0/24(距离 1)。第二轮交换后,R1 从 R2 学到 10.0.3.0/24(距离 2)。收敛完成。
2.3 计数到无穷:RIP 的致命缺陷
距离向量路由有一个著名的问题——计数到无穷(Count-to-Infinity)。假设 R2→R3 的链路断开:
1. R3 发现 10.0.3.0/24 不可达,将距离设为 162. R2 的路由表里:10.0.3.0/24 → 下一跳 R3,距离 23. R3 收到 R2 的更新:"我到 10.0.3.0/24 距离是 2"4. R3 想:经 R2 可以到 10.0.3.0/24,距离 2+1=35. R2 收到 R3 的更新,距离变成 3+1=46. ... 如此循环,直到距离达到 16(RIP 的无穷大)RIP 用了两种修补手段:
- 水平分割(Split Horizon):从某个接口学到的路由,不再从该接口发回去
- 毒性逆转(Poison Reverse):从某个接口学到的路由,从该接口发回时将距离设为 16
这两种方法只能解决两个路由器之间的循环,三个以上路由器的循环仍然无法避免。
RIP 的计数到无穷不是”偶尔出现的小 bug”,而是距离向量算法的结构性缺陷。任何基于”我只告诉邻居我的距离”的协议,都无法在所有拓扑下避免路由环路。这是链路状态协议取代距离向量协议的根本原因。
2.4 RIP 被淘汰但概念重要
RIP 在现代网络中几乎绝迹,但理解它仍然重要:
- 距离向量的思想无处不在:BGP 的路径矢量是”增强版距离向量”——通告的不是距离而是完整路径,从而避免了计数到无穷。理解 RIP 的缺陷,才能理解 BGP 为什么要设计 AS_PATH 属性。
- 协议设计的反面教材:RIP 的每个缺陷都催生了更好的设计——计数到无穷催生了链路状态,慢收敛催生了触发更新,最大 15 跳催生了无跳数限制的协议。
三、链路状态路由:OSPF 的核心思想
3.1 Dijkstra 与全局视角
链路状态路由的核心思想与距离向量完全不同:每台路由器都掌握完整的网络拓扑,各自独立运行 Dijkstra 算法计算最短路径。从”我问邻居怎么走”变成”我自己看地图找路”。
| 维度 | 距离向量 | 链路状态 |
|---|---|---|
| 信息交换 | 路由器只通告距离向量 | 路由器通告本地链路状态 |
| 拓扑认知 | 只知道邻居告诉你的 | 知道完整拓扑 |
| 计算方式 | 分布式迭代(Bellman-Ford) | 本地独立计算(Dijkstra) |
| 收敛速度 | 慢(计数到无穷) | 快(拓扑变化立即泛洪) |
| 路由环路 | 可能产生 | 不会产生(计算无环) |
| 资源消耗 | 低(只存路由表) | 较高(存完整 LSDB) |
| 典型协议 | RIP | OSPF、IS-IS |
3.2 LSDB:链路状态数据库
OSPF 中,每台路由器生成链路状态通告(LSA,Link-State Advertisement),描述自己的链路信息。所有 LSA 的集合构成链路状态数据库(LSDB)。同一个区域内所有路由器的 LSDB 必须完全一致。
# 查看 OSPF 链路状态数据库vtyshshow ip ospf database
# 典型输出:# OSPF Router with ID (1.1.1.1)# Router Link States (Area 0.0.0.0)# Link ID ADV Router Age Seq# CkSum Link count# 1.1.1.1 1.1.1.1 364 0x80000004 0x00a5 2# 2.2.2.2 2.2.2.2 365 0x80000004 0x00b7 2# 3.3.3.3 3.3.3.3 360 0x80000003 0x00c9 1序列号和年龄机制保证 LSDB 的同步和老化:新 LSA 的序列号更大,旧 LSA 的年龄达到 MaxAge(3600 秒)后自动失效。
3.3 LSA 泛洪与同步
当路由器检测到拓扑变化,它生成新的 LSA 并**泛洪(flooding)**到整个区域:
泛洪的关键机制:
- 可靠泛洪:每条 LSA 都必须被确认(LSAck),未确认的重传
- DR/BDR 机制:在广播网络上选举指定路由器(DR)和备份指定路由器(BDR),非 DR 路由器只向 DR 发送 LSA,DR 负责向全网转发——减少泛洪流量
- 序列号比较:收到 LSA 后比较序列号——比本地新则更新并继续泛洪,比本地旧则丢弃
- 老化机制:LSA 的 Age 字段每秒递增,达到 MaxAge(3600 秒)后从 LSDB 中删除
# 查看 OSPF 接口状态,确认 DR/BDRshow ip ospf interface
# 典型输出:# eth0 is up# Internet Address 10.0.1.1/24, Area 0.0.0.0# Router ID 1.1.1.1, Network Type BROADCAST, Cost: 10# Transmit Delay is 1 sec, State DR, Priority 1# Designated Router (ID) 1.1.1.1, Interface address 10.0.1.1# Backup Designated Router (ID) 2.2.2.2, Interface address 10.0.1.2# Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 53.4 OSPF 区域划分
当网络规模增长,LSDB 也会膨胀。OSPF 的解决方案是区域划分(Area):
区域划分的规则:
- Area 0 是骨干区域:所有非骨干区域必须直接连接到 Area 0
- 区域内 LSDB 独立:每个区域有自己的 LSDB,SPF 计算在区域内独立进行
- ABR 桥接区域:区域边界路由器(ABR)连接多个区域,传递的是路由摘要而非原始 LSA
- 区域间流量必须经过 Area 0:非骨干区域之间不能直接交换流量
OSPF 的区域划分和 IP地址与子网 中的路由聚合是配合使用的。Area 1 内部可能有几十条 /24 的路由,ABR 只需向 Area 0 通告一条聚合后的 /16 汇总路由——大大减少区域间的路由信息量。
3.5 LSA 类型详解
| LSA 类型 | 名称 | 生成者 | 泛洪范围 | 携带信息 |
|---|---|---|---|---|
| Type 1 | Router LSA | 每台路由器 | 区域内 | 路由器的链路状态(连着谁、代价多少) |
| Type 2 | Network LSA | DR | 区域内 | 广播网段上的所有路由器列表 |
| Type 3 | Summary LSA | ABR | 区域间 | 区域间的网络路由摘要 |
| Type 4 | ASBR Summary LSA | ABR | 区域间 | 到 ASBR 的路由 |
| Type 5 | AS External LSA | ASBR | 全 AS | 到 AS 外部的路由 |
| Type 7 | NSSA External LSA | NSSA 内的 ASBR | NSSA 区域内 | NSSA 区域的外部路由(离开 NSSA 时转换为 Type 5) |
Type 1 Router LSA——最基础的 LSA,每台路由器生成一条,描述自己的所有链路:
Router LSA (Type 1) from Router 1.1.1.1: Link 1: connected to network 10.0.1.0/24, cost 10 Link 2: connected to router 2.2.2.2 (point-to-point), cost 20 Link 3: connected to stub network 10.0.10.0/24, cost 1Type 2 Network LSA——只在广播网段上由 DR 生成,列出该网段上所有路由器的 Router ID。Type 1 + Type 2 一起构成区域的完整拓扑——SPF 计算的输入。
Type 3 Summary LSA——ABR 将一个区域内的路由摘要后通告到另一个区域。注意 Type 3 传递的是路由(目的网络 + 代价),不是拓扑。收到 Type 3 的路由器直接将其作为叶子节点挂到 ABR 上,不纳入 SPF 计算。
Type 5 AS External LSA——由 ASBR 生成,通告 AS 外部的路由。外部路由有两种度量类型:E1(外部代价 + 内部代价)和 E2(只看外部代价,默认)。
Type 7 NSSA External LSA——NSSA 区域不允许 Type 5 LSA 进入,但 NSSA 内部可能有 ASBR 需要引入外部路由。Type 7 只在 NSSA 内泛洪,ABR 将其转换为 Type 5 后再传播到其他区域。
# 查看各类 LSA 的详细信息show ip ospf database router # Type 1show ip ospf database network # Type 2show ip ospf database summary # Type 3show ip ospf database external # Type 5show ip ospf database nssa-external # Type 73.6 LSDB 同步的完整过程
# 查看 OSPF 邻居状态show ip ospf neighbor
# 典型输出:# Neighbor ID Pri State Dead Time Address Interface# 2.2.2.2 1 Full/DR 38.314s 10.0.1.2 eth0# 3.3.3.3 1 Full/BDR 37.892s 10.0.1.3 eth0邻居状态机的关键转换:
| 状态 | 含义 | 触发条件 |
|---|---|---|
| Down | 未收到 Hello | 初始状态 |
| Init | 收到对方 Hello(但对方没列自己) | 收到 Hello |
| 2-Way | 双向通信确认 | 对方 Hello 包含自己的 Router ID |
| ExStart | 协商主从关系 | 在广播网上只有 DR/BDR 进入 |
| Exchange | 交换 DBD 报文(LSA 头部摘要) | 主从关系确定后 |
| Loading | 请求和传输缺失的 LSA | 发现 LSDB 差异后 |
| Full | LSDB 完全同步 | Loading 完成 |
ExStart 阶段 Router ID 更大的路由器成为 Master。Exchange 阶段交换 DBD(不是完整 LSA,而是头部摘要),通过比较发现差异后,Loading 阶段用 LSR 请求缺失的 LSA,对方用 LSU 发送完整 LSA。
3.7 OSPF 配置实战
# R1 的 OSPF 配置vtyshconfigure terminalrouter ospf ospf router-id 1.1.1.1 network 10.0.1.0/24 area 0 network 10.0.10.0/24 area 0
interface eth0 ip ospf cost 10 ip ospf hello-interval 10 ip ospf dead-interval 40
# 查看 OSPF 路由show ip route ospf
# 典型输出:# O 10.0.2.0/24 [110/20] via 10.0.1.2, eth0, 00:05:32# O 10.0.3.0/24 [110/30] via 10.0.1.2, eth0, 00:05:32# O IA 10.0.20.0/24 [110/40] via 10.0.1.2, eth0, 00:03:15# ↑ O = OSPF 区域内, IA = 区域间路由条目解读:O = 区域内路由(Type 1/2 LSA),O IA = 区域间路由(Type 3 LSA),O E1/O E2 = 外部路由(Type 5 LSA)。[110/20] = 管理距离 110 / 总代价 20。
四、IS-IS:运营商的选择
4.1 IS-IS vs OSPF
IS-IS(Intermediate System to Intermediate System)最初为 OSI 的 CLNP 协议设计,后来扩展支持 IP(Integrated IS-IS,RFC 1195)。在功能上与 OSPF 非常相似——都是链路状态协议,都用 Dijkstra 算法,都支持区域划分。但细节差异决定了各自的适用场景。
| 维度 | OSPF | IS-IS |
|---|---|---|
| 协议栈位置 | IP 层之上(协议号 89) | 链路层之上(Ethertype 0x22F4) |
| 区域边界 | 在路由器上(ABR) | 在链路上(L1/L2 路由器) |
| LSA/LSP 类型 | 6+ 种(Type 1-5, 7) | 2 种(L1 LSP, L2 LSP) |
| 扩展性 | TLV 支持有限 | 原生 TLV 结构,扩展灵活 |
| 典型部署 | 企业网 | 运营商骨干网 |
| 认证 | 明文/MD5/SHA | 明文/MD5/HMAC-SHA |
4.2 为什么运营商偏好 IS-IS
运营商选择 IS-IS 而非 OSPF,原因不是算法更优——两者都用 Dijkstra——而是工程实践中的差异:
-
IS-IS 运行在链路层:不依赖 IP 就能工作。即使 IP 层配置错误导致 IP 不通,IS-IS 仍然可以交换路由信息。OSPF 封装在 IP 中,IP 不通则 OSPF 也不通——排错时是鸡生蛋的问题。
-
区域边界在链路上:OSPF 的 ABR 同时属于多个区域,维护多份 LSDB。IS-IS 的 L1 和 L2 是独立的拓扑——L1 的 LSP 和 L2 的 LSP 完全分离,区域扩展更灵活。
-
TLV 结构更易扩展:IS-IS 的所有信息都用 TLV(Type-Length-Value)编码,新增功能只需定义新的 TLV 类型。OSPF 的 LSA 格式固定,新增功能往往需要定义新的 LSA 类型,实现复杂度上升。
-
大规模网络更稳定:IS-IS 的 LSP 泛洪机制比 OSPF 的 LSA 泛洪更高效——LSP 分片机制、SRM 标志位等设计减少了不必要的泛洪。
4.3 IS-IS 的 Level 1/Level 2 路由
IS-IS 的层次结构比 OSPF 更简洁——只有两层:
- Level 1 路由:区域内路由。L1 路由器只知道本区域拓扑,到其他区域的流量发给最近的 L1/L2 路由器
- Level 2 路由:区域间路由。L2 路由器组成骨干,知道所有区域的可达信息
- L1/L2 路由器:同时运行 L1 和 L2,将 L1 路由注入 L2,将 L2 默认路由注入 L1
与 OSPF 的关键区别:IS-IS 的 L1 路由器使用最近 L1/L2 路由器作为出口(attach-bit 机制),而 OSPF 的区域内路由器使用计算出的最短路径经过 ABR 到达其他区域。IS-IS 的区域间路径可能不是全局最优的——但换来了更简单的计算和更低的资源消耗。
4.4 IS-IS 的 TLV 结构与配置
IS-IS 的所有协议信息都用 TLV 编码,扩展极其方便:
TLV 格式: Type (1B) | Length (1B) | Value (Length bytes)
常见 TLV 类型: Type 1: Area Address Type 129: Protocols Supported Type 2: IS Neighbors (LSP) Type 128: IP Internal Reachability Type 6: IP Interface Address Type 130: IP External Reachability Type 10: Authentication Type 135: Extended IP Reachability对比 OSPF:OSPF 的 Router LSA 格式固定——每个 Link 描述长度固定。新增信息(比如 MPLS TE 需要的链路带宽)不得不定义新的 LSA 类型(Opaque LSA),而 IS-IS 只需新增一个 TLV。
# FRR 中配置 IS-ISvtyshconfigure terminal
router isis BACKBONE net 49.0001.0000.0000.0001.00 is-type level-1-2
interface eth0 ip router isis BACKBONE isis circuit-type level-1-2 isis metric 10 level-1 isis metric 20 level-2NET(Network Entity Title)格式为 Area-ID.System-ID.SEL:
49.0001.0000.0000.0001.00│ │ ││ │ └── SEL (00 = 路由器)│ └────────────────── System ID (6 字节)└───────────────────────── Area ID (49 = 私有区域)五、路由收敛:网络变化后多久恢复
5.1 收敛时间的影响因素
**收敛(Convergence)**是指网络拓扑变化后,所有路由器的路由表达到一致状态的过程。影响收敛时间的因素:
- 故障检测时间:物理层检测(毫秒级),OSPF Hello 超时(默认 40 秒),BFD(可缩短到 50 毫秒)
- LSA/LSP 泛洪时间:取决于网络直径和链路延迟
- SPF 计算时间:取决于 LSDB 规模和算法效率
- RIB/FIB 更新时间:取决于路由条目数量和硬件转发能力
5.2 OSPF SPF 调度与节流
OSPF 不会在每次 LSDB 变化时立即运行 SPF——短时间内多条 LSA 变化时频繁运行 SPF 会浪费 CPU。OSPF 使用**SPF 节流(throttling)**机制:
# 配置 SPF 节流参数router ospf timers throttle spf 50 200 5000 # ↑ ↑ ↑ # │ │ └── 最大间隔(ms) # │ └────── 增量间隔(ms) # └────────── 初始间隔(ms)SPF 节流的工作方式:第一次 LSDB 变化后等待 50ms 再运行 SPF(给其他 LSA 到达的时间),50ms 内又有变化也只运行一次。后续 SPF 间隔逐步增大直到 5000ms 上限,一段时间无新变化则重置回初始值。单次故障快速收敛,频繁抖动时保护 CPU。
5.3 IS-IS PRC 与部分路由计算
IS-IS 比 OSPF 更进一步——它支持部分路由计算(PRC,Partial Route Calculation)。收到新 LSP 时先判断变化类型:
- 拓扑变化(链路 up/down):需要重新运行 SPF
- 叶子变化(IP 前缀增删):只需更新路由表中的前缀,不需要重新运行 SPF
这在运营商网络中非常有价值——一个 LSP 可能携带几百条 IP 前缀,新增一个前缀不应该触发全网 SPF 重算。OSPF 也有类似概念(Type 3/5/7 LSA 变化不触发 SPF),但 IS-IS 的 TLV 结构使得”拓扑信息”和”前缀信息”天然分离,PRC 实现更自然。
5.4 链路故障后 OSPF 收敛追踪
假设以下拓扑中 R2→R4 的链路断开:
10 10 10R1 ------ R2 ------ R3 | | |10 20 10 | | |R5 ------ R4 ------ R6 10 10R2→R4 链路断开前的 R2 路由表:
| 目的 | 下一跳 | 代价 |
|---|---|---|
| R1 | 直连 | 10 |
| R3 | 直连 | 10 |
| R4 | 直连 | 20 |
| R5 | R1 | 20 |
| R6 | R3 | 20 |
链路断开后的收敛过程:
- T+0ms:R2 检测到链路故障(物理层载波丢失或 BFD 超时)
- T+5ms:R2 生成 Type 1 LSA 更新,开始泛洪
- T+10ms:R1、R3 收到新 LSA,确认并继续泛洪
- T+15ms:R5、R6 收到新 LSA
- T+55ms:R2 的 SPF 节流延迟到期(50ms),运行 SPF
- T+56ms:R2 计算出新路径:到 R4 经 R1→R5→R4,代价 30
- T+57ms:R2 更新 RIB 和 FIB
- T+60ms:其他路由器也完成 SPF 计算和路由表更新
收敛后 R2 的新路由表:
| 目的 | 下一跳 | 代价 | 变化 |
|---|---|---|---|
| R1 | 直连 | 10 | 不变 |
| R3 | 直连 | 10 | 不变 |
| R4 | R1 | 30 | 代价增大,路径切换 |
| R5 | R1 | 20 | 不变 |
| R6 | R3 | 20 | 不变 |
从数据包的角度看:T+0 到 T+57ms 之间,发往 R4 的数据包可能被丢弃。T+57ms 后,数据包改走 R1→R5→R4 的新路径。
现代运营商网络通过 BFD(50ms 检测)+ OSPF/IS-IS 快速收敛优化,可以将收敛时间控制在 100-200ms 以内。在 运营商骨干网 中会看到 MPLS Fast Reroute 如何将收敛时间进一步压缩到 50ms 以下。
六、实战追踪:一个 OSPF 网络的数据包转发
6.1 搭建小型 OSPF 网络
用 GNS3 + FRR 搭建一个 5 路由器的双区域 OSPF 网络:
Area 0 (骨干) Area 1┌──────────────────────┐ ┌──────────────┐│ R1 ──── R2 ──── R3 ─┼────┼ R4 ──── R5 ││ 10.0.12.0/24 │ │ │ 10.0.45.0/24 ││ 10.0.23.0/24 │ │ │ │└──────────────────────┘ └──────────────┘ │ │ R2-R4: 10.0.24.0/24 R3-R4: 10.0.34.0/24R1、R2、R3 在 Area 0,R4、R5 在 Area 1。R2 和 R3 都是 ABR,提供冗余路径。
# ===== R1 配置 =====vtyshconfigure terminalinterface eth0 ip address 10.0.12.1/24interface lo ip address 1.1.1.1/32router ospf ospf router-id 1.1.1.1 network 10.0.12.0/24 area 0 passive-interface lo
# ===== R2 配置(ABR)=====vtyshconfigure terminalinterface eth0 ip address 10.0.12.2/24interface eth1 ip address 10.0.23.2/24interface eth2 ip address 10.0.24.2/24interface lo ip address 2.2.2.2/32router ospf ospf router-id 2.2.2.2 network 10.0.12.0/24 area 0 network 10.0.23.0/24 area 0 network 10.0.24.0/24 area 1 passive-interface lo
# ===== R4 配置 =====vtyshconfigure terminalinterface eth0 ip address 10.0.24.4/24interface eth1 ip address 10.0.34.4/24interface eth2 ip address 10.0.45.4/24interface lo ip address 4.4.4.4/32router ospf ospf router-id 4.4.4.4 network 10.0.24.0/24 area 1 network 10.0.34.0/24 area 1 network 10.0.45.0/24 area 1 passive-interface lo
# ===== R5 配置 =====vtyshconfigure terminalinterface eth0 ip address 10.0.45.5/24interface lo ip address 5.5.5.5/32router ospf ospf router-id 5.5.5.5 network 10.0.45.0/24 area 1 passive-interface lo6.2 验证邻居与路由
# 在 R2 上查看 OSPF 邻居show ip ospf neighbor
# 预期输出:# Neighbor ID Pri State Dead Time Address Interface# 1.1.1.1 1 Full/DR 35s 10.0.12.1 eth0# 3.3.3.3 1 Full/DR 37s 10.0.23.3 eth1# 4.4.4.4 1 Full/DR 36s 10.0.24.4 eth2
# 在 R1 上查看 LSDBshow ip ospf database
# 预期输出(节选):# Router Link States (Area 0.0.0.0): 1.1.1.1, 2.2.2.2, 3.3.3.3# Summary Link States (Area 0.0.0.0): 10.0.24.0, 10.0.34.0, 10.0.45.0注意 R1 的 LSDB 中有 Summary Link States(Type 3 LSA)——ABR R2 和 R3 从 Area 1 注入到 Area 0 的路由摘要。
6.3 traceroute 追踪路径
# 在 R1 上执行 traceroutetraceroute 10.0.45.5
# 预期输出:# 1 10.0.12.2 (R2) 1.234 ms 1.156 ms 1.089 ms# 2 10.0.24.4 (R4) 2.345 ms 2.267 ms 2.198 ms# 3 10.0.45.5 (R5) 3.456 ms 3.378 ms 3.312 ms
# 查看 R1 的 OSPF 路由表show ip route ospf
# O 10.0.23.0/24 [110/20] via 10.0.12.2, eth0, 00:15:32# O IA 10.0.24.0/24 [110/20] via 10.0.12.2, eth0, 00:12:15# O IA 10.0.34.0/24 [110/20] via 10.0.12.2, eth0, 00:12:15# O IA 10.0.45.0/24 [110/30] via 10.0.12.2, eth0, 00:12:156.4 模拟链路故障观察收敛
模拟 R2→R4 链路故障:
# 在 R2 上关闭 eth2configure terminalinterface eth2 shutdown
# 在 R1 上持续 ping R5ping 10.0.45.5 count 100 interval 0.1预期观察:
64 bytes from 10.0.45.5: icmp_seq=1 ttl=62 time=3.2 ms64 bytes from 10.0.45.5: icmp_seq=2 ttl=62 time=3.1 ms... (链路断开,几个包丢失)Request timeout for icmp_seq=15Request timeout for icmp_seq=16... (OSPF 收敛中)64 bytes from 10.0.45.5: icmp_seq=22 ttl=61 time=5.8 ms收敛后路径自动切换到 R1→R2→R3→R4→R5:
traceroute 10.0.45.5# 1 10.0.12.2 (R2) 1.234 ms# 2 10.0.23.3 (R3) 2.345 ms# 3 10.0.34.4 (R4) 3.456 ms# 4 10.0.45.5 (R5) 4.567 ms
# 用 tcpdump 抓取 OSPF 事件sudo tcpdump -i eth0 -vv ip proto 89
# 观察到的关键事件:# 1. R2 发送 LSU(包含更新的 Type 1 LSA,移除到 R4 的链路)# 2. R1 回复 LSAck# 3. R3 发送 LSU(作为 ABR,更新 Type 3 Summary LSA)# 4. R1 运行 SPF,更新路由表6.5 OSPF 抓包分析
# 抓取 OSPF Hello 包sudo tcpdump -i eth0 -vv -c 5 ip proto 89 and ip[20:1] = 0x01# 典型输出:OSPFv2, Hello, length 44, Router-ID 1.1.1.1, Area 0.0.0.0# Hello Timer 10s, Dead Timer 40s, DR 10.0.12.1, BDR 10.0.12.2
# 抓取 OSPF LSU(链路状态更新)sudo tcpdump -i eth0 -vv -c 3 ip proto 89 and ip[20:1] = 0x04# 典型输出:OSPFv2, LS-Update, Router-ID 2.2.2.2, Area 0.0.0.0# Type: Router (1), Links: 2, cost 10 eachHello 包的关键字段:Hello Interval(10 秒)、Dead Interval(40 秒)、DR/BDR、Neighbor List。
七、本章小结
| 概念 | 要点 |
|---|---|
| 路由问题 | 带权图最短路径,Bellman-Ford(DV)vs Dijkstra(LS) |
| 静态路由局限 | 不可扩展、无故障自愈 |
| 距离向量(RIP) | 只通告距离给邻居,有计数到无穷缺陷 |
| 链路状态(OSPF) | 掌握完整拓扑,独立 Dijkstra,收敛快无环路 |
| OSPF 区域 | Area 0 骨干 + 非骨干,ABR 桥接,区域间传摘要 |
| LSA 类型 | Type 1/2 建拓扑,Type 3 跨区域,Type 5 跨 AS |
| LSDB 同步 | Down→2-Way→ExStart→Exchange→Loading→Full |
| IS-IS vs OSPF | IS-IS 链路层/TLV/运营商首选;OSPF IP 层/多 LSA/企业首选 |
数据包跨越组织边界时,IGP 就不够用了——那是 BGP与域间路由 的领域。
参考
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时






