5计算机网络:自顶向下方法(原书第8版)

链路层

局域网和数据中心网络

差错检测以太网交换机VLANMPLS数据中心

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第5章:网络层——控制平面(The Network Layer: Control Plane)

一、导读

5.1 本章学习目标

本章讲解网络层的控制平面——路由算法和路由协议。路由算法决定分组从源到目的的路径,路由协议在路由器之间交换路由信息。

本章的核心学习目标包括:

  • 掌握路由算法:链路状态(Dijkstra)和距离向量(Bellman-Ford)
  • 理解 OSPF:自治系统内部的路由协议
  • 掌握 BGP:自治系统之间的路由协议
  • 理解 SDN:控制平面与数据平面分离的新范式
  • 了解 ICMP 和路由表构建:路由表是如何从路由协议中产生的

5.2 为什么控制平面如此重要

没有路由算法,分组就无法找到从源到目的的路径。路由协议是互联网的"神经系统",决定了整个网络的运行。控制平面的设计直接影响网络的性能、可靠性和可扩展性。

互联网的路由系统是全球最大的分布式计算系统之一。全球有超过 10 万个自治系统,它们通过 BGP 协议交换路由信息,构成了互联网的路由骨架。理解这个系统的工作原理,对于网络工程师至关重要。

5.3 核心问题引导

在阅读本章时,请带着以下问题思考:

路由器如何知道将分组转发到哪里?

Dijkstra 算法和 Bellman-Ford 算法有什么区别?各自有什么优缺点?

为什么互联网需要两种路由协议(OSPF 和 BGP)?

BGP 为什么不使用最短路径?策略路由是如何工作的?

SDN 如何改变了传统网络的控制方式?


二、核心概念详解

2.1 路由算法分类

路由算法分为两大类:

  • 链路状态(Link State):每个路由器知道整个网络的拓扑和代价
  • 距离向量(Distance Vector):每个路由器只知道邻居的信息

两种算法的核心区别在于信息的完整性和计算方式。链路状态算法中,每个路由器拥有全局视图,独立计算最短路径;距离向量算法中,每个路由器只有局部视图,通过与邻居迭代交换信息逐步收敛到最优路径。

2.2 链路状态路由(Dijkstra 算法)

Dijkstra 算法计算从源到所有目的的最短路径:

初始化:D(s) = 0, D(v) = ∞ (v ≠ s)
重复:
  1. 找到未访问的最小 D(v) 的节点 u
  2. 标记 u 为已访问
  3. 更新 u 的邻居 v 的 D(v):
     D(v) = min(D(v), D(u) + c(u,v))

Dijkstra 算法的时间复杂度为 O(n²),其中 n 是节点数。使用优先队列可以优化到 O(n log n)。在 OSPF 协议中,每个路由器都运行 Dijkstra 算法来计算最短路径树。

Dijkstra 算法的一个特点是它可能产生振荡(oscillation):当链路代价取决于流量负载时,路由的改变会导致流量的改变,进而导致链路代价的改变,形成循环。

2.3 距离向量路由(Bellman-Ford 算法)

Bellman-Ford 算法通过迭代更新距离向量:

Dx(y) = min{c(x,v) + Dv(y)} for all neighbors v

每个路由器定期与邻居交换距离向量,直到收敛。距离向量算法的优点是实现简单、分布式计算;缺点是收敛速度慢,且存在"计数到无穷"(count-to-infinity)问题。

当一条链路断开时,距离向量算法可能需要很长时间才能收敛。为了解决这个问题,实际协议(如 RIP)采用了毒性逆转(poison reverse)和水平线(split horizon)等技术。

2.4 OSPF(开放最短路径优先)

OSPF 是自治系统内部的链路状态路由协议:

  • 使用 Dijkstra 算法
  • 支持层次化区域(Area):Area 0 是骨干区域,其他区域连接到骨干区域
  • 支持多路径(相同代价)
  • 支持认证
  • 使用组播发送 OSPF 报文

OSPF 的层次化设计是其可扩展性的关键。在一个大型网络中,如果所有路由器都运行 Dijkstra 算法,计算量会非常大。通过将网络划分为多个区域,每个区域的路由器只需要知道本区域的详细拓扑和到其他区域的汇总路由。

2.5 BGP(边界网关协议)

BGP 是自治系统之间的路由协议,是互联网的路由基石:

  • eBGP:不同 AS 之间的 BGP
  • iBGP:同一 AS 内部的 BGP

BGP 的属性:

  • AS-PATH:经过的 AS 列表
  • NEXT-HOP:下一跳 IP
  • LOCAL-PREF:本地优先级
  • MED:多出口鉴别器

BGP 的选路规则(按优先级排序):

优先选择 LOCAL-PREF 值最高的路径

优先选择 AS-PATH 最短的路径

优先选择 NEXT-HOP 最近的路径(MED 最小)

如果以上都相同,选择 BGP Identifier 最小的路径

BGP 不使用最短路径,而是使用策略路由。例如,一个 AS 可能选择不经过某个竞争对手的 AS,即使这是最短路径。这种策略路由是互联网商业关系的反映。

2.6 SDN(软件定义网络)

SDN 将控制平面与数据平面分离:

  • 数据平面:交换机只负责转发
  • 控制平面:控制器决定路由规则
┌──────────────┐
        │   控制器      │  ← 控制平面
        └──────┬───────┘
               │
    ┌──────────┼──────────┐
    ↓          ↓          ↓
┌───────┐ ┌───────┐ ┌───────┐
│交换机1 │ │交换机2 │ │交换机3 │  ← 数据平面
└───────┘ └───────┘ └───────┘

SDN 的核心优势是集中化控制。控制器拥有全局视图,可以做出更优的路由决策。SDN 还使得网络编程成为可能:网络管理员可以通过软件定义网络行为,而不需要逐个配置每台交换机。OpenFlow 是 SDN 中最常用的南向协议。


三、深入分析

3.1 路由与转发的区别

  • 路由:决定分组的路径(控制平面)
  • 转发:将分组从输入端口移动到输出端口(数据平面)

路由是"离线"的——路由表在分组到达之前就已经计算好了。转发是"在线"的——每个分组到达时都需要查表转发。路由表是控制平面和数据平面的接口:控制平面生成路由表,数据平面使用路由表。

3.2 自治系统(AS)

自治系统是一组在统一管理下的路由器。每个 AS 有一个唯一的 AS 号。AS 内部的 routing 称为内部网关协议(IGP),如 OSPF、RIP;AS 之间的 routing 称为外部网关协议(EGP),如 BGP。

3.3 路由汇聚与最长前缀匹配

路由汇聚将多个路由表项合并为一个,减少路由表大小。当路由器查找路由表时,使用最长前缀匹配(longest prefix matching)原则:选择与目的地址匹配的前缀最长的路由表项。

例如,路由表中有两条路由:192.168.1.0/24 和 192.168.0.0/16。当目的地址为 192.168.1.100 时,两条路由都匹配,但路由器选择 192.168.1.0/24(前缀更长,更具体)。最长前缀匹配是 IP 路由的核心机制,它使得路由表能够灵活地处理不同粒度的路由信息。


四、实践案例

4.1 案例一:使用 whois 和 Looking Glass 分析 BGP 路由

bash
# 查询 AS 信息
whois AS15169  # Google 的 AS 号

# 查看 AS 的路由宣告
whois -h whois.radb.net -- '-i origin AS15169'

Looking Glass 是公开的 BGP 路由查询工具,可以查看全球各地路由器看到的 BGP 路由。通过这些工具,可以了解互联网的真实路由结构。

4.2 案例二:使用 traceroute 观察 AS 间路由

bash
# Linux/Mac
traceroute -n www.google.com

# 结合 AS 信息查询
mtr www.google.com

通过 traceroute 可以观察分组经过的 AS 边界。每一跳的 IP 地址可以通过 whois 查询其所属的 AS,从而了解路由经过了哪些自治系统。


五、常见误区

5.1 误区一:"最短路径就是最快路径"

最短路径是基于代价的,代价可以是延迟、带宽、费用等。不同路由协议使用不同的代价度量。OSPF 使用链路代价(通常与带宽成反比),BGP 使用策略路由。

5.2 误区二:"BGP 使用最短路径"

BGP 的策略路由可能选择非最短路径,因为需要考虑商业关系、策略偏好等。例如,一个 ISP 可能选择不经过竞争对手的 AS,即使这是最短路径。

5.3 误区三:"距离向量算法已经过时"

虽然 OSPF 在大多数企业网络中取代了 RIP,但距离向量的思想仍然被广泛使用。BGP 本质上就是一种距离向量协议(更准确地说是路径向量协议)。

5.4 难点:理解 BGP 的选路规则

BGP 的选路规则复杂,需要理解 LOCAL-PREF、AS-PATH、MED 等属性的优先级。不同属性的优先级顺序是:LOCAL-PREF > AS-PATH > MED > BGP ID。

5.5 难点:理解 SDN 与传统网络的区别

传统网络中,每台路由器独立运行路由协议,控制平面是分布式的。SDN 中,控制器集中管理所有交换机,控制平面是集中式的。这种架构变化带来了更好的可编程性和可管理性。SDN 的典型应用包括:数据中心流量工程、广域网流量调度、网络安全策略集中管理等。Google 的 B4 广域网是 SDN 的经典案例,通过集中式流量调度将链路利用率从 30-40% 提升到接近 100%。


六、本章小结

第5章讲解了网络层的控制平面:

链路状态路由 使用 Dijkstra 算法,每个路由器拥有全局视图

距离向量路由 使用 Bellman-Ford 算法,通过邻居迭代收敛

OSPF 是自治系统内部的链路状态协议

BGP 是自治系统之间的路径向量协议,使用策略路由

SDN 将控制平面与数据平面分离,实现集中化控制

后续章节将讲解链路层协议。控制平面和数据平面的分离是网络设计的核心思想之一。在下一章中,我们将看到链路层如何实现相邻节点之间的可靠数据传输,以及以太网和 WiFi 等链路层技术的工作原理。


七、思考题

使用 Dijkstra 算法,计算从节点 A 到所有其他节点的最短路径。网络拓扑如下:A-B(2), A-C(5), B-C(1), B-D(3), C-D(1), C-E(4), D-E(2)。请给出每一步的计算过程。

比较链路状态路由和距离向量路由的优缺点。在什么场景下你会选择其中一种?

为什么互联网需要两种路由协议(OSPF 和 BGP)?能否只用一种协议解决所有路由问题?

BGP 为什么不使用最短路径?请举例说明策略路由在实际中的应用场景。

SDN 的集中式控制有什么优势和风险?如果控制器出现故障,网络会怎样?


5/9链路层
0%