【计算机网络笔记】第五章 网络层的控制平面

一、路由协议

  • 路由协议的目标:

路由协议的核心目标是确定从发送主机到接收主机的最优路径 (即路由)。路径指数据包从初始源主机到目标主机时,需经过的路由器序列。最优路径需满足++成本最低、传输速度最快、网络拥塞最少++等条件。

  • 路由算法的分类:

路由算法包括全局选路算法分布式选路算法

全局选路算法 用完整的、全局性的网络信息来计算从源到目的之间的最低费用路径。 代表算法是++链路状态路由++。

分布式选路算法 以迭代的、分布式的方式计算出最低费用路径。通过迭代计算并与相邻节分布式选路算法点交换信息,逐渐计算出到达某目的节点或一组目的节点的最低费用路径。代表算法是++距离向量++。


链路状态路由是一种全局选路的算法,请读者先复习一下数据结构的算法,主要是Dijsktra算法。

链路状态(Link State)路由可分为五个部分:

  1. 发现邻居,了解他们的网络地址;
  1. 设置到每个邻居的成本度量:为每条链路分配一个"开销"或"度量",用于衡量路径的优劣。
  • 度量因素:自动发现或人工配置,常见度量包括带宽、跳数、延迟、负载、可靠性等。

  • 常用度量 :与链路带宽成反比:带宽越高,代价越低。例如:1-Gbps以太网的代价为1,100-Mbps以太网的代价为10。

  • 可选度量延迟 :通过发送ICMP echo包(如ping命令所用),测量往返时间(RTT)来估算延迟。

  1. 构造一个报文,报文中包含刚收到的所有信息;
  1. 将此分组发送给其他的路由器;(泛洪 Flood)

路由器将LSP通过洪泛(Flooding)方式广播给网络中的所有其他路由器。

  • 每个LSP包含一个递增的序列号。

  • 路由器会记录所有收到的 (源路由器, 序列号) 对。

  • 当新分组到达时,路由器根据记录判断,对不同分组采用不同处理方式:

    • 新分组:洪泛广播。

    • 重复分组:丢弃。

    • 过时分组:拒绝。

  1. 计算到其他路由器的最短路径。常用Dijsktra算法:


1.2. 距离向量 distance vector

距离向量算法是一种分布式 、异步的路由算法。其核心思想是每个节点通过与邻居交换信息来逐步收敛到网络中所有目的节点的最小开销路径。


1.2.1. 算法原理与数据结构

  • 距离向量:

    • 每个节点 x 维护一个距离向量 ,其中 N 是网络中所有节点的集合。

    • 是节点 x 对从自身到节点 y 的最小开销的当前估计值

  • 邻居信息:

    • 节点 x 知道到每个直接邻居 v 的开销

    • 节点 x 还会维护并存储从每个邻居 v 接收到的距离向量


1.2.2. Bellman-Ford 方程

该算法基于动态规划,其核心是 Bellman-Ford 方程

  • 定义 为从节点 x 到节点 y 的最低开销路径的实际代价。

  • 节点 x 的距离向量 包含了它对所有其他节点 y 的开销估计值 D_x(y)。

更新规则如下:

其中:

  • c(x,v) 是从节点 x 到其邻居 v 的直接链路开销。

  • 是邻居 v 报告的从 v 到目的节点 y 的最低开销。

  • min 操作是在所有邻居 v 中选取使总开销最小的那个。

示例:Bellman-Ford 计算

示例1:

在一个包含节点 u, v, x, w, y, z 的网络中,计算从 uz 的最短路径:

  • 已知:d_v(z) = 5, d_x(z) = 3, d_w(z) = 3。

  • 根据 B-F 方程:

  • 最小值对应的邻居即为下一跳。在此例中,最小值 4 来自路径 u -> x,因此 xuz 的下一跳,该信息将被用于构建转发表。

示例2:

1.2.3. 算法特点

距离向量算法的关键特性是分布式异步

  • 分布式: 每个节点独立运行,仅与直接邻居通信。

  • 异步: 节点在本地事件触发时才进行计算和通信。

  • 分布式通知机制

    • 当一个节点的 DV 发生变化时,它会立即通知所有邻居。

    • 如果邻居的 DV 因此发生变化,它们也会继续通知自己的邻居,如此传递下去。

  • 收敛性:在满足一些基本且自然的条件下,该算法最终会收敛。

1.2.4. 触发条件与操作

本地迭代由以下两个事件触发:

  1. 本地链路开销发生变化

  2. 接收到邻居节点发送的新的距离向量 (DV) 更新消息

当节点 x 从邻居 v 收到一个新的 DV 估计时,它会:

  1. 保存邻居 v 的距离向量

  2. 使用 Bellman-Ford 方程更新自身的距离向量



1.3. 距离向量的两个特性

距离向量算法在处理网络拓扑变化 时,表现出一个著名的非对称性:"好消息传播得快,坏消息传播得慢"。这主要是由于其分布式、异步的更新机制和缺乏全局视图所导致。


1.3.1. 好消息传的快

当网络中出现链路开销降低(即"好消息",如链路修复或带宽增加)时,信息会迅速在整个网络中传播并收敛。

例如:

考虑一个包含节点 x, y, z 的简单网络:

  • 初始状态:xz 的直接链路代价为 50。yx 的链路代价为 60,yz 的链路代价为 1。

  • 此时,yx 的最佳路径是通过 z,代价为 1 + 50 = 51。

场景:好消息------yx 的链路代价从 60 降低到 4。

  • t0 : 节点 y 检测到本地链路代价变化,立即更新自己的距离向量,并通知邻居 z

  • t1 : 节点 z 收到来自 y 的更新,计算出到 x 的新最低费用为 1 + 4 = 5,然后通知邻居 y

  • t2 : 节点 y 收到来自 z 的更新,发现到 z 的最低费用没有变化,算法进入静止状态。

整个过程仅需几步即可完成收敛,体现了"好消息传得快"的特点。该特点使在网络优化或故障恢复时,距离向量算法能快速适应,使路由表迅速更新到最优状态。


1.3.2. 坏消息传得慢 ------ "计数到无穷大"问题

当网络中出现链路开销增加或失效 (即"坏消息",如链路断开)时,信息传播会非常缓慢,甚至可能陷入无限循环,这就是著名的 "计数到无穷大"(Count-to-Infinity)问题

例如:还是上面的例子,开销变大后:

修正后的拓扑

  • xy: 4 变到 60 (坏消息)

  • yz: 1

  • zx: 50 变到 不存在 (或设为无穷大 \infty)

修正后的计算过程

  • t_0 : y 检测到 y->x 代价变为 60。

    • y->x: min{60, 1 + D_z(x)}。初始表中存储的 D_z(x) = 50

    • y->x 更新为 1 + 50 = 51。

    • y 通知 z

  • t_1 : z 收到 y 的更新。

    • z->x: min{infty, 1 + D_y(x)} = 1 + 51 = 52。

    • z 通知 y

  • t_2 : y 收到 z 的更新。

    • y->x: min{60, 1 + 52} = 53。

    • y 通知 z

  • t_3 : z 收到 y 的更新。

    • z->x: min{infty, 1 + 53} = 54。

    • z 通知 y

如此循环,代价会不断递增,直到达到协议定义的"无穷大"值(如 RIP 协议的 16)才停止。

该问题的根本原因是 节点间相互依赖 。节点 yz 互为对方到达目的地 x 的"下一跳",它们基于对方的错误信息进行迭代计算,从而形成了一个自我强化的错误环路。

为解决此问题,通常采用以下技术:

  • 水平分割 (Split Horizon): 不将从某个邻居学到的路由信息再发送回该邻居。

  • 毒性逆转 (Poison Reverse): 将从某个邻居学到的路由信息以"无穷大"代价发送回该邻居,以打破环路。

  • 最大跳数限制: 如 RIP 协议设置最大跳数为 15,超过则视为不可达。

  • 触发更新 (Triggered Updates):当链路状态发生变化时,立即发送更新,而不等待定时器,从而加速坏消息传播,减少收敛时间。

其中重点是毒性逆转 (Poisoned Reverse),其基本思想是如果一个节点 z 是通过邻居 y 到达某个目的地 x 的,那么当 zy 发送自己的距离向量时,它会将到 x 的代价故意设置为无穷大 (\infty),而不是真实的估计值。从而让邻居 y 知道,"不要通过我来到达 x",主动避免形成环路。

毒性逆转虽然有效,但不能完全解决所有情况下的"计数到无穷大"问题,当环路涉及三个或更多节点时,由于节点更新不同步,可能导致某些节点在收到"毒性"信息前,已经基于错误信息进行了计算,毒性逆转可能失效。

毒性逆转是解决"计数到无穷大"问题的重要方法,尤其适用于简单的两节点环路。但对于更复杂的网络拓扑,需要结合其他技术(如水平分割、最大跳数限制等)才能达到理想效果。没有任何单一方法可以"完全解决"所有情况下的环路问题 ,因此现代路由协议(如 OSPF)倾向于采用链路状态算法来从根本上规避此类问题



1.4. 全局算法 (LS) 与距离向量算法 (DV) 的全面比较

链路状态 (Link State, LS) 算法和距离向量 (Distance Vector, DV) 算法是两种主流的动态路由协议,它们在信息交换方式、收敛速度、健壮性和消息复杂度等方面存在根本性差异。


1.4.1. 网络状态信息交换的范围

  • 距离向量 (DV):

    • 邻居间交换:每个节点仅与直接相连的邻居交换其完整的距离向量(即到所有目的地的开销估计)。

    • "部分道听途说":节点依赖邻居提供的信息进行计算,自身不掌握全局拓扑。

  • 链路状态 (LS):

    • 全网扩散:每个节点通过洪泛(flooding)机制,将自身的链路状态信息(如邻居列表和链路开销)广播给网络中的所有其他节点。

    • "自己测量":每个节点最终会收集到全网的拓扑图,并基于此独立计算最短路径。


1.4.2. 收敛速度

  • 距离向量 (DV):

    • :收敛时间不稳定,受网络规模和拓扑变化影响大。

    • 可能出现"计数到无穷大"问题:当链路失效时,错误信息可能在网络中循环传播,导致路由开销不断递增,直到达到最大跳数才停止。这使得坏消息传播极其缓慢。

    • 可能产生震荡现象:在网络负载或链路代价波动时,路由表可能反复更新,难以稳定。

  • 链路状态 (LS):

    • :一旦所有节点都收到了完整的链路状态信息,它们会立即并行地运行 Dijkstra 算法,快速计算出新的最短路径树。

    • 消息量大:虽然收敛速度快,但需要发送 O(nE) 条消息(其中 n 是节点数,E 是链路数),消息复杂度较高。


1.4.3. 健壮性 (Robustness)

健壮性指当路由器发生故障或发送错误信息时,算法能否保持正确运行。

  • 距离向量 (DV):

    • 健壮性差:节点计算出的路由结果会传递给邻居。如果一个节点发送了错误的路径开销,这个错误会像病毒一样在网络中传播,污染其他节点的路由表。

    • 错误会通过网络传播:单点错误可能导致全局路由失效。

  • 链路状态 (LS):

    • 健壮性好:每个节点都拥有全网拓扑图,并独立计算自己的路由表。即使某个节点发送了不正确的链路开销,其他节点也能通过自己的测量和计算来发现并忽略该错误。

    • 各自计算:错误信息的影响被限制在局部,不会引发全局性的路由崩溃。


1.4.4. 消息复杂度

  • 距离向量 (DV):

    • 消息量相对较小:节点只与邻居交换数据,消息交换是局部的。

    • 收敛时间不确定:由于异步和迭代的特性,收敛所需的消息总数和时间无法精确预测。

  • 链路状态 (LS):

    • 消息量大:对于一个包含 n 个节点和 E 条链路的网络,LS 算法需要发送 O(nE) 条消息来完成全网信息的同步。

    • 算法复杂度高:每个节点需要运行一次 O(n^2) 的 Dijkstra 算法来计算最短路径。


总结对比表

特性 距离向量 (DV) 链路状态 (LS)
信息交换范围 邻居间交换 全网扩散
信息可靠性 部分道听途说 自己测量,可靠
收敛速度 慢,可能有"计数到无穷大"问题
健壮性 差,错误会传播 好,各自独立计算
消息复杂度 相对较低,但收敛时间不定 高,需 O(nE) 条消息

核心结论 :DV 算法简单、开销小,但在大型或动态网络中易出现收敛慢和环路问题;LS 算法则通过全局视图和独立计算,提供了更快的收敛速度和更强的健壮性,但以更高的消息和计算开销为代价。现代大型网络(如互联网骨干网)普遍采用 LS 算法(如 OSPF),而小型或简单的网络则可能使用 DV 算法(如 RIP)。

二、层次路由

随着互联网规模的爆炸式增长,传统的扁平化路由算法(如LS和DV)在面对数十亿个节点时会面临巨大的性能和管理挑战。为了解决这些问题,网络设计引入了层次路由(Hierarchical Routing)的概念。


2.1. 层次路由的产生原因

网络扩展性问题:在一个大型网络中,每个路由器都需要为每一个目的地维护一条路由条目。这会导致路由表尺寸过大,占用大量内存,并降低查表速度。通过地址聚合 (Address Aggregation) 虽然可以解决该问题,但地址聚合依赖于连续的地址分配和拓扑结构。如果地址分配是随机的,聚合效率会大打折扣。在现实情况中,地址分配往往是随机的,难以进行高效的地址聚合。

地址聚合方法:

如图所示,路由器 R1 可以将 PC1-2PC5-6 的路由条目聚合为更粗略的条目,从而大大减少路由表的条目数。

管理自治问题:每个网络的管理员都有自己的管理方法和思路,不希望外部路由器干涉其内部事务。

层次路由的则可以解决以上两个问题

  • 网络扩展性:通过将网络划分为多个层级,可以控制每个路由器需要维护的路由条目数量和存储空间的增长。

  • 管理自治:允许网络管理员独立地控制和管理自己网络内部的路由,而不受外部影响。


2.2. 层次路由的基本思路

层次路由的核心思想是将整个互联网划分为多个自治系统 (Autonomous System, AS)

自治系统 (AS)

  • 定义:一个由单一管理机构控制的网络。

  • 内部特性

    • 一个 AS 内部通常使用相同的路由算法和路由度量标准(如跳数、带宽、时延等)。

    • 不同的 AS 可以使用不同的路由算法和协议。

  • 唯一标识 :每个 AS 都有一个全球唯一的 ID 号,称为 AS ID

层次划分

  • 宏观层面:互联网是一个由无数个 AS 互连而成的"网络的网络"。

  • 微观层面 :一个大的 AS 内部还可以进一步划分为更小的层次,如私有自治系统或区域,以实现更精细的管理和控制。

总结:层次路由通过引入"自治系统"的概念,将庞大的互联网分解为一个个可管理的单元。每个 AS 内部负责自身的路由,而 AS 之间则通过边界网关协议(BGP)进行路由信息的交换。这种架构完美地解决了大规模网络的扩展性和管理自治两大难题。


2.3. 域内路由与域间路由

在层次路由架构中,互联网被划分为多个自治系统(AS)。为了实现高效和可控的路由,网络内部的路由被明确区分为域内路由 (Intra-AS Routing)域间路由 (Inter-AS Routing) 两大类。


2.3.1. 域内路由 (Intra-AS Routing)

定义

指在一个AS内部进行的路由,负责将数据包从源主机传递到同一AS内的目的主机。

关键特征
  • 统一协议 :一个AS内部的所有路由器通常运行同一种内部网关协议 (IGP),如RIP、OSPF或IS-IS。

  • 灵活选择:不同AS之间可以运行完全不同的IGP。例如,AS1可能使用OSPF,而AS2可能使用RIP。

  • 执行进程 :路由功能由一个名为"路由守护进程"(Routing Daemon)的后台程序实现,常见的进程名有 routed, gated, mprexe.exe 等。

核心作用:确保AS内部网络的连通性和最优路径选择。

域内路由协议 (IGP - Interior Gateway Protocol)
  • 作用范围:在一个 AS 内部运行。

  • 核心功能:负责 AS 内部主机间的连通性和最优路径选择。

  • 特点

    • 一个 AS 内部的所有路由器通常运行同一种 IGP。

    • 不同 AS 可以自由选择不同的 IGP。

  • 典型协议

    • OSPF (Open Shortest Path First): 开放最短路径优先。基于链路状态算法,广泛用于大型企业网。

    • RIP (Routing Information Protocol): 路由信息协议。基于距离向量算法,简单但收敛慢。

    • IS-IS (Intermediate System to Intermediate System): 类似 OSPF,常用于电信骨干网。

    • IGRP (Interior Gateway Routing Protocol): 内部网关路由协议。


2.3.2. 域间路由 (Inter-AS Routing)

定义

指在不同AS之间进行的路由,负责将数据包从一个AS传递到另一个AS。

关键特征
  • 边界网关 :负责连接不同AS的路由器被称为网关路由器 (Gateway Router)边界路由器 (Border Router)

  • 双重角色:网关路由器既执行域内路由功能,也执行域间路由功能。

  • 核心任务

    1. 可达性信息收集:确定哪些外部网络可以通过哪个相邻AS到达。

      • 例如,AS1需要知道:哪些地址可以通过AS2到达?哪些地址可以通过AS3到达?
    2. 信息分发:将这些外部可达性信息传播给AS内部的所有路由器,以便它们能够正确地转发去往外部网络的数据包。

核心作用:实现互联网作为"网络的网络"的互联功能,是整个互联网路由体系的骨架。

域间路由协议 (EGP - Exterior Gateway Protocol)
  • 作用范围:在不同 AS 之间运行。

  • 核心功能:负责 AS 之间的可达性信息交换和路由策略实施。

  • 关键角色边界网关路由器 (Gateway Router),它同时执行 IGP 和 EGP 功能。

  • 唯一标准协议BGP (Border Gateway Protocol),当今互联网上唯一的 EGP 标准协议。它不仅传递路由信息,还承载着复杂的策略(如流量工程、路由过滤等),是互联网的"外交官"。


2.4. 层次路由的效果

通过引入域内和域间路由的划分,层次路由极大地优化了路由表的规模和网络的可管理性。

对比:分层 vs. 不分层

  • 不分层情况

    • 路由器 R4 的路由表需要为每一个目的网络(N1, N2, ..., N8)都维护一条精确的下一跳记录。

    • 这会导致路由表条目数量庞大,难以管理和维护。

  • 分层情况

    • 路由器 R4 的层次路由表只需维护:

      • 到AS1内部各网络(N1, N2, N3)的精确路由。

      • 到AS2和AS3的聚合路由("AS2内的所有网络"、"AS3内的所有网络")。

    • 这大大减少了路由表的条目数,提高了查表效率和网络的可扩展性。

转发表的构建

最终,路由器的转发表 (Forwarding Table) 是由域内路由和域间路由共同配置生成的。

  • 域内路由 (Intra-AS):决定了如何到达AS内部的目的节点。

  • 域间路由 (Inter-AS):与域内路由共同决定如何到达AS外部的目的节点。

总结:域内路由负责"家里的事",域间路由负责"外交事务"。两者协同工作,共同构建出完整的、高效的互联网路由体系。

三、互联网中的AS内部路由:OSPF

下面重点介绍层次路由的域内路由的 OSPF 协议。

OSPF(Open Shortest Path First,开放最短路径优先)是一种广泛应用于大型企业网和互联网服务提供商(ISP)网络的链路状态路由协议。它以其开放性、高效性和可扩展性而著称。


3.1. OSPF 基础概念

  • "Open" 的含义:协议是公开、标准化的,可供任何厂商实现,确保了互操作性。

  • 核心算法 :基于链路状态 原理。路由器通过交换链路状态信息,构建全网拓扑图,并使用 Dijkstra 算法计算到所有目的地的最短路径。

  • 工作流程

    1. 发送 Hello 报文,建立并维护与邻居路由器的关系。

    2. 形成链路状态数据库 (LSDB),存储全网拓扑信息。

    3. 运行 Dijkstra 算法,生成最优路由表。

  • 传输机制 :OSPF 消息直接封装在 IP 数据报中(协议号为 89),不依赖 TCP 或 UDP,以保证快速、可靠的传播。

关联协议:IS-IS(Intermediate System to Intermediate System)协议与 OSPF 在功能上几乎完全相同,常用于电信骨干网。


3.2. OSPF 的核心优点

OSPF 相比于早期的距离向量协议(如 RIP),具有显著的优势:

  • 支持等价多路径 (ECMP):允许存在多条代价相同的路径,实现负载均衡。而 RIP 只能选择其中一条。

  • 支持服务类型 (ToS) 路由:可以为不同的业务类型(如实时视频、普通数据)计算不同的路由集,优化服务质量。

  • 集成单播与多播支持:原生支持多播,无需额外广播,从而减轻了非 OSPF 设备的系统负载。

  • 层次化结构 (Hierarchical OSPF):在大型域中,将网络划分为多个区域(Area),有效减少路由信息的洪泛范围,提高可扩展性。

  • 支持子网划分:子网掩码信息会随路由通告一起传播,实现了更灵活的地址规划。

  • 安全性:支持消息认证,只有经过认证的、受信任的路由器才能参与 OSPF 协议,增强了网络的安全性。


3.3. OSPF 报文类型

OSPF 通过五种主要的报文类型来完成邻居发现、数据库同步和路由更新:

  • Hello 报文 (Hello Packet)

    • 作用:建立和维护邻居关系,周期性发送。

    • 内容:包含定时器值、DR/BDR 选举信息以及已知邻居列表。

  • DD 报文 (Database Description Packet)

    • 作用:在邻居关系初始化时,描述自己的链路状态数据库(LSDB)摘要,用于数据库同步。
  • LSR 报文 (Link State Request Packet)

    • 作用:向邻居请求特定的链路状态通告(LSA)的详细信息。
  • LSU 报文 (Link State Update Packet)

    • 作用:携带一个或多个 LSA,用于泛洪更新。在支持组播的链路上,通常以组播形式发送。
  • LSAck 报文 (Link State Acknowledgment Packet)

    • 作用:对收到的 LSU 报文进行确认,确保可靠传输。一个 LSAck 可以确认多个 LSA。

3.4. 层次化的 OSPF (Hierarchical OSPF)

为了应对超大规模网络,OSPF 引入了两层的层次化结构:

  • 两级结构

    • 本地网 (Local Area):即 OSPF 的各个区域(Area)。

    • 骨干网 (Backbone Area):即 Area 0,所有其他区域都必须与之相连。

  • 关键特性

    • 链路状态信息仅在区域内洪泛:这极大地减少了网络流量,提高了效率。

    • 每个节点保持域内拓扑:路由器只需了解自己所在区域的完整拓扑,无需知道全网拓扑。

  • 路由器角色细化

    • 自治系统边界路由器 (Autonomous System Boundary Router, ASBR):位于 OSPF 域边缘,负责将外部路由(如来自 BGP 或静态路由)引入 OSPF 域的路由器,它可以是内部路由器或 ABR,但必须运行外部路由协议。

    • 区域边界路由器 (Area Border Router, ABR):连接一个或多个非骨干区域到骨干区域(Area 0)的路由器,将本区域的路由信息汇总后,广播给其他区域。其作为不同区域间的通信网关,必须为每个相连的区域维护独立的链路状态数据库。

    • 骨干路由器 (Backbone Router):在骨干区域(Area 0)内运行 OSPF 算法,负责区域间路由。

    • 内部路由器 (Internal Router, IR):所有接口都属于同一个 OSPF 区域的路由器,仅负责该区域内的路由计算。

总结:OSPF 通过其开放标准、链路状态算法、丰富的特性和层次化设计,成为现代大型网络的核心路由协议。它不仅解决了传统协议的缺陷,还提供了强大的可扩展性、灵活性和安全性。

四、互联网服务提供商(ISPs)之间的路由:BGP

下面重点介绍层次路由的域间路由的 BGP 协议。

BGP(Border Gateway Protocol,边界网关协议)是互联网上唯一的域间路由协议 (EGP),它负责在不同的自治系统(AS)之间交换路由信息,是整个互联网得以互联互通的"外交协议"。


4.1. BGP 的核心定位与功能

  • 事实标准:BGP 是当前互联网域间路由的事实标准,所有大型网络都必须运行 BGP。

  • 核心功能:为每个自治系统(AS)提供以下能力:

    • 获取可达性信息 :通过 eBGP (External BGP) 从相邻的 AS 获取子网可达性信息。

    • 传播可达性信息 :通过 iBGP (Internal BGP) 将这些信息在本 AS 内部的所有路由器间传播。

    • 基于策略选择最佳路径:根据网络管理员设定的策略和可达性信息,确定到达外部网络的"好"路由。

  • 宣告存在:允许每个子网向互联网的其余部分宣告自己的存在,即"我在这里"("I am here")。

关键区分

  • eBGP:用于不同 AS 之间的通信。

  • iBGP:用于同一 AS 内部路由器之间的通信。


4.2. BGP 的基本工作规则

  • 会话建立

    • 两个 BGP 路由器通过 TCP 179 端口 建立一个半连接会话。

    • 会话建立后,它们开始交换信息,通告各自可以到达的网络前缀(Network Prefixes)。

  • 距离向量特性

    • BGP 本质上是一个距离向量协议,但它交换的不是简单的"跳数",而是完整的"路径"(Path)。
  • 承诺机制

    • 当 AS3 的网关 3a 向 AS2 的网关 2c 发送一条 BGP 通告 AS3, X 时,这代表 AS3 承诺:它将负责把数据包转发到目的地 X

4.3. BGP 路径广播与转发表构建

本节将深入解析 BGP 路径是如何在自治系统(AS)间广播、如何被学习和选择,以及最终如何与 OSPF 等域内协议协同工作,共同构建路由器的转发表。


4.3.1. BGP路径广播 (Path Advertisement) 的完整流程

BGP 路径广播是一个分步、基于策略的过程,涉及 eBGP 和 iBGP 的协同工作。

步骤一:外部路径引入 (eBGP)
  • 场景 :AS3 中的目的地 X 需要被 AS2 和 AS1 知道。

  • 动作 :AS3 的网关路由器 3a 通过 eBGP 会话,向其邻居 AS2 的网关 2c 发送一条路径通告:AS3, X

    • 这条通告表示:"我(AS3)可以到达 X"。
步骤二:内部路径传播 (iBGP)
  • 场景 :AS2 的路由器 2c 收到 AS3, X 的通告后,需要让 AS2 内部的所有路由器都知道这个信息。

  • 动作 :根据 AS2 的路由策略,2c 接受该路径,并通过 iBGP 会话将其传播给 AS2 内部的所有其他路由器(如 2a, 2b, 2d)。

步骤三:对外宣告 (eBGP)
  • 场景 :AS2 现在知道可以通过 AS3 到达 X,它需要将这一信息告诉它的另一个邻居 AS1。

  • 动作 :根据 AS2 的路由策略,AS2 的网关路由器 2a 通过 eBGP 会话,向 AS1 的网关 1c 发送一条新的路径通告:AS2, AS3, X

    • 这条通告表示:"我(AS2)知道一条经过 AS3 可以到达 X 的路径"。

注意 :路径在传播过程中会被"追加"上当前 AS 的编号。因此,从 AS1 看,到达 X 的路径是 AS2, AS3, X,而不是原始的 AS3, X


4.3.2. 多路径学习与选择

一个路由器可能会从不同的邻居学到到达同一目的地的多条路径。

示例:AS1 网关路由器 1c

  • 路径一 :从 AS2 的 2a 学到路径 AS2, AS3, X

  • 路径二 :直接从 AS3 的 3a 学到路径 AS3, X

  • 选择过程

    • 路由器 1c 会根据 BGP 的路由选择规则(本地偏好 -> 最短 AS-PATH -> 最近 NEXT-HOP)来决定哪条路径最优。

    • 在此例中,路径 AS3, X 的 AS-PATH 更短(只有1个AS),因此会被选为最佳路径。

  • 内部传播 :选定最佳路径后,1c 会通过 iBGP 将这条路径 AS3, X 传播给 AS1 内部的所有其他路由器(1a, 1b, 1d)。

结论:BGP 不仅传递可达性信息,更是一个智能的决策系统,它能根据网络拓扑和管理员策略,为每个目的地选出最优路径。


4.3.3. BGP 消息类型

BGP 对等体之间通过四种核心消息进行通信,所有消息均通过 TCP 179 端口传输。

消息类型 功能 作用
OPEN 建立连接 用于打开与远程 BGP 对等体的 TCP 连接,并进行身份验证。这是建立 BGP 会话的第一步。
UPDATE 交换路由信息 用于发布新的路由(或撤销旧的路由)。这是 BGP 交换网络层可达性信息的核心消息。
KEEPALIVE 保持连接 在没有 UPDATE 消息时,周期性发送以保持连接活跃,并确认 OPEN 请求已被接受。
NOTIFICATION 报告错误 用于报告先前消息中的错误,并关闭连接。

重要性:这些消息构成了 BGP 协议的基石,确保了路由信息交换的可靠性和稳定性。


4.3.4. BGP、OSPF 与转发表项的协同工作

路由器最终的转发行为是由转发表 (Forwarding Table) 决定的。这张表是 BGP(域间路由)和 OSPF(域内路由)共同计算的结果。

核心原理

  • BGP 提供"去哪里" :BGP 告诉路由器,去往某个外部网络(如 X)的最佳出口是哪个网关路由器(如 1c)。

  • OSPF 提供"怎么去" :OSPF 告诉路由器,在本 AS 内部,如何从当前路由器到达那个出口网关(如 1c)。

示例:路由器 1d 的转发表

假设路由器 1d 需要发送数据包到目的地 X

  1. BGP 决策1d 通过 iBGP 从 1c 学到,去往 X 的最佳路径是通过 1c

  2. OSPF 决策1d 运行 OSPF,计算出到达 1c 的最短路径是通过其本地接口 1

  3. 转发表项 :综合以上信息,1d 的转发表会生成一条记录:

    复制代码
     目的地 (dest): X
     出站接口 (interface): 1

示例:路由器 1a 的转发表

对于路由器 1a

  1. BGP 决策 :同样,1a 也通过 iBGP 学到,去往 X 的最佳路径是通过 1c

  2. OSPF 决策1a 运行 OSPF,计算出到达 1c 的最短路径是通过其本地接口 2

  3. 转发表项

    复制代码
     目的地 (dest): X
     出站接口 (interface): 2

总结:BGP 和 OSPF 各司其职,共同协作。BGP 解决了"宏观"的域间路由问题,而 OSPF 解决了"微观"的域内路由问题。它们的信息融合,最终决定了数据包在网络中的精确转发路径。

4.4. BGP 路由选择与策略控制

BGP 的强大之处在于其丰富的路径属性 (Path Attributes)策略路由 (Policy-based Routing) 功能。

  • 路径的构成

    • 一个 BGP "路由" = 目的网络前缀 + 一系列属性。

    • 两个最重要的属性

      • AS-PATH:一个有序列表,记录了该路由所经过的所有自治系统的编号。这是防止路由环路的关键。

      • NEXT-HOP:指明了数据包应该被转发到的下一个路由器的 IP 地址。

  • 基于策略的路由 (Policy-based Routing)

    • 导入策略 (Import Policy):网关在收到其他 AS 的路由通告时,可以根据策略决定是否接受或拒绝该路径。

      • 例如:绝不允许流量经过 AS Y。
    • 导出策略 (Export Policy):AS 可以决定是否将某条路径通告给其他相邻的 AS。

      • 例如:只将特定的业务流量路由通过某条昂贵但质量高的链路。

4.4.1. BGP 路由选择的详细依据

当路由器从不同邻居学到到达同一目的地的多条路径时,它必须根据一套严格的优先级规则进行选择。这些规则是 BGP 策略和性能的核心体现。

路由选择依据(按优先级排序):

  1. 本地偏好值 (Local Preference)

    • 核心:这是最重要的属性,完全由网络管理员在本地设置。

    • 作用:用于表达对某条路径的"偏好",值越高,优先级越高。这是实现网络管理策略的主要手段。

  2. 最短 AS-PATH

    • 核心:选择经过自治系统数量最少的路径。

    • 作用:减少跨域跳数,通常意味着更低的延迟和更高的可靠性。

  3. 最近的 NEXT-HOP (热土豆算法)

    • 核心:选择下一跳路由器距离自己最近的路径。

    • 原理:该算法也被称为"热土豆路由"(Hot Potato Routing),其理念是"尽快把烫手的山芋(数据包)扔出去"。路由器会优先选择一条在本地域内代价最小的路径,将数据包快速送出自己的 AS,而不关心后续跨域的开销。

    • 示例 :如图所示,路由器 2d 学习到它可以通过 2a2c 到达目的地 X。尽管通过 2c 的总 AS 跳数可能更少,但 2a 在本地域内的 OSPF 开销(201)小于 2c(263),因此 2d 会选择 2a 作为出口。
  4. 其他附加标准

    • 包括最低的 BGP 标识符 (Router ID)、最低的邻居 IP 地址等,用于在以上条件都相同时进行最终裁决。

关键点

  • BGP 的选择过程是逐跳进行的,每个路由器独立地做出决策。

  • BGP 的选择过程是一个"先策略,后性能"的过程。管理员可以通过调整本地偏好值来覆盖其他技术性指标,从而实现商业目标。


4.4.2. 通过通告控制路由策略 (Achieving Policy via Advertisements)

BGP 的强大之处在于,它允许网络管理员通过控制路由通告来实现复杂的商业和运营策略。

示例一:ISP 不想传送"过境流量"
  • 场景:假设 ISP A 是一个提供商网络,它只想为自己的客户(W)服务,而不希望成为其他网络(如 B 和 C)之间流量的"过境通道"。

  • 策略执行

    1. A 向 B 和 C 通告其客户 W 的路径 AW

    2. B 收到路径 AW 后,选择不向 C 通告 路径 BAW。因为 B 为这条"过境流量"无法获得任何收益(W 不是 B 的客户),所以它主动屏蔽了这条路径。

    3. 结果:C 无法学习到通过 B 到达 W 的路径,因此它只会选择直接通过 A 来访问 W,从而避免了流量经由 B 传输。

示例二:客户网络的策略控制
  • 场景:网络 X 是一个"双归属"(Dual-homed)客户,同时连接到两个提供商网络 B 和 C。X 希望控制流量走向,例如,它不希望流量从 B 经过 X 再传送到 C。

  • 策略执行

    • X 会向 B 通告其可以到达的网络,但不会向 B 通告它可以到达 C 的路径。

    • 这样,B 就不知道可以通过 X 到达 C,从而避免了不必要的流量转发。

核心思想:BGP 不仅仅是一个技术协议,更是一个"政治"和"经济"协议。网络管理员通过控制"谁可以知道哪些路径",来决定流量的流向,从而实现成本控制、服务质量保证和商业合作。


🎯 为什么要区分域内路由 (Intra-AS) 和域间路由 (Inter-AS)?

这个问题的答案可以从三个维度来理解:策略 (Policy)规模 (Scale)性能 (Performance)

1. 策略 (Policy)

  • 域间路由 (Inter-AS)

    • 核心需求:管理端需要对其网络所传送的流量拥有绝对的控制权。他们需要决定"谁可以通过我的网络",以及"我为谁服务"。

    • 复杂性:涉及商业利益、成本核算和安全考量,因此需要复杂的策略机制。

  • 域内路由 (Intra-AS)

    • 核心需求:在一个单一管理机构控制的网络内部,目标是高效、快速地传递数据。

    • 简单性:不需要复杂的商业策略,只需关注性能优化。

2. 规模 (Scale)

  • 层次化设计:将网络划分为多个 AS,每个 AS 内部运行独立的路由协议(如 OSPF),可以极大地节省路由表空间,减少路由更新流量,从而解决互联网规模庞大的问题。

  • 信息隔离:域内路由协议无需了解全网拓扑,只需关注本区域,这使得网络扩展更加容易。

3. 性能 (Performance)

  • 域内路由 (Intra-AS)

    • 目标:集中于性能优化。协议(如 OSPF)的设计目标是快速收敛、计算最优路径。
  • 域间路由 (Inter-AS)

    • 目标策略胜过性能。有时为了满足商业策略(如避开某个昂贵的链路或某个不可信的 AS),即使选择了一条更长或更慢的路径,也是被允许甚至期望的。

最终结论:域内路由和域间路由的根本区别在于它们服务于不同的目标。域内路由追求的是"快"和"准",而域间路由追求的是"控"和"利"。这种分层架构是互联网能够稳定、高效、且符合商业逻辑运行的基础。

五、ICMP(Internet Control Message Protocol)

5.1. ICMP 报文格式

ICMP 报文结构(上层)

ICMP 报文由 固定头部(4 字节)可变数据部分 构成:

  • 固定头部:前 4 字节结构固定,但其值由报文类型决定。
字段 位范围 说明
类型 (Type) 0--7 位 定义报文类别(如 8=Echo Request,0=Echo Reply,3=Destination Unreachable)
代码 (Code) 8--15 位 对"类型"进一步细分(如 3/0=网络不可达,3/1=主机不可达)
校验和 (Checksum) 16--31 位 校验整个 ICMP 报文(含数据)的完整性
  • 数据部分 :长度和内容取决于 Type 字段

    • Echo 类报文:含标识符、序列号、填充数据

    • 错误类报文(如 Type=3):携带原始出错 IP 报文的首部 + 前 8 字节数据

ICMP 与 IP 封装关系(下层)
IP 数据报组成部分 内容
IP 首部 源/目的 IP、协议号(ICMP 协议号 = 1)等
IP 数据部分 完整 ICMP 报文(含其头部与数据)

总结:

  • ICMP 是 网络层控制协议,用于传递状态/错误信息。

  • 所有 ICMP 报文均有 统一 4 字节头部结构,但字段值因类型而异。

  • ICMP 报文整体作为 IP 数据报的载荷(payload) 被传输。


5.2. ICMP 报文类型和功能

ICMP是主机和路由器在网络层使用的一种控制协议。ICMP messages 承载在IP报文中,包括一个类型字段和编码字段,所有类型大致可分为查询报文或差错报文两大类。详细的ICMP报文类型如下:

其中常用的ICMP报文类型有:

注:根据RFC 6633规定,已不再使用类型值为4、10或9、15或16、17或18的报文。

举例:ICMP差错报告报文

当发生网络错误时,ICMP 会生成差错报告报文,其数据部分包含:

  • 原始出错 IP 数据报的完整首部

  • 该 IP 数据报数据部分的前 8 字节

此设计便于接收方识别是哪个原始报文出了问题。


5.3. ICMP 的两个应用实例

5.3.1. Traceroute

基本原理

Traceroute 是一个利用 ICMPIP 协议特性(TTL 字段)来探测数据包从源主机到目的主机所经过路径的网络诊断工具。

核心思想:通过逐步增加数据包的 TTL 值,让沿途每个路由器在 TTL 耗尽时返回 ICMP 差错报文,从而"绘制"出完整的路由路径。


工作流程
  1. 发送探测包

    • 源主机向目的主机发送 UDP 数据包 (也可使用 ICMP 或 TCP),并设置一个不常见的目标端口号(使目的主机大概率返回"端口不可达"错误)。

    • 第一组探测包:TTL = 1

    • 第二组探测包:TTL = 2

    • 依此类推,每组通常发送 3 个探测包(probes)以提高可靠性。

  2. 中间路由器响应

    • 当数据包到达第 n 跳路由器时,其 TTL 减为 0。

    • 该路由器丢弃数据包 ,并向源主机发送 ICMP 超时消息 (Type=11, Code=0)

    • 此 ICMP 消息中包含该路由器的 IP 地址和名称(如可解析)。

  3. 到达目的地

    • 当数据包最终到达目的主机时,由于目标端口不可达,目的主机会返回 ICMP 端口不可达消息 (Type=3, Code=3)

    • 源主机收到此消息后,即判定已到达终点,停止发送后续探测包。

  4. 记录与输出

    • 源主机记录每次 ICMP 响应的往返时间 (RTT)

    • 最终输出结果包括:

      • 每跳的序号

      • 路由器的 IP 地址和域名(如有)

      • 三次探测的 RTT 时间(单位:ms)


关键要点
  • 协议依赖 :主要依赖 IP 的 TTL 机制ICMP 的差错报告功能

  • 停止条件

    • 收到目的主机返回的 ICMP Type 3, Code 3(端口不可达)

    • 或达到最大跳数限制(通常为 30 跳)

  • 历史意义:由 Van Jacobson 于 1988 年开发,是理解 IP 路由原理和排查网络故障的重要工具。


5.3.2. Ping

核心功能
  • 目的 :测试两台主机之间的连通性(可达性)。

  • 本质 :通过向目标主机发送 ICMP Echo Request (Type=8, Code=0) 报文,等待其返回 ICMP Echo Reply (Type=0, Code=0) 报文。

重要提示ping 成功仅证明存在一条物理连通路径,不代表应用层服务可用。


工作流程
  1. 构造数据包

    • 构造 ICMP Echo 请求报文 → 封装进 IP 数据包 → 封装成以太网帧。
  2. 发送与接收

    • 发送至目标主机 → 目标主机收到后,构造 ICMP Echo 回答报文并返回。
  3. 结果解析

    • 源主机解析返回的 IP 和 ICMP 报文,计算往返时延 (RTT) 并显示统计信息。

Ping 命令输出信息解读

执行 ping www.baidu.com 后,典型输出包含:

输出项 含义
连通性 是否收到回复(如"已接收 = 4")
往返时延 (RTT) 最短、最长、平均响应时间(单位:ms)
单向转发跳数 (TTL) IP 报文剩余生存时间,可推断操作系统类型

常见 Ping 不通的原因

即使物理链路和路由正确,Ping 仍可能失败,原因包括:

  • 防火墙/安全策略:中间节点或目标主机过滤 ICMP 报文。

  • 路由器配置:某些路由器端口禁用 ICMP 响应。

  • 网络超时:设备间延迟过高,导致 ICMP 报文在默认超时(通常 2 秒)内未返回。

  • NAT 环境:可能导致单向通信(能 ping 出,不能 ping 回)。

  • 网线直连交换机:有时因 ARP 未建立等原因导致初始不通。


利用 TTL 判断操作系统类型

不同操作系统默认设置的 IP 报文 TTL 值不同,可通过返回的 TTL 值进行推测:

操作系统 默认 TTL 值
Windows NT/2000 128
Windows 95/98 32
Unix / Linux 255 / 64
Windows 7 / 10 64

判断方法: 若收到的 TTL = 53,则原始 TTL 可能为 64(Linux),说明经过了 11 跳;若为 128,则经过了 75 跳。结合实际网络拓扑可辅助判断。


总结
  • ping 是最基础、最常用的网络诊断命令,依赖 ICMP 协议。

  • 它提供连通性、延迟、跳数三大关键信息。

  • 但需注意:Ping 通 ≠ 服务可用;Ping 不通 ≠ 网络一定故障,需结合其他工具综合分析。

相关推荐
蒙奇D索大4 小时前
【数据结构】考研408 | B树收官:插入与删除的平衡艺术——分裂、合并与借位
数据结构·笔记·b树·考研·改行学it
暴风游侠8 小时前
linux知识点-内核参数相关
linux·运维·服务器·笔记
Galloping-Vijay12 小时前
Claude Code 使用笔记
笔记
极市平台14 小时前
骁龙大赛-技术分享第5期(上)
人工智能·经验分享·笔记·后端·个人开发
啄缘之间14 小时前
11. UVM Test [uvm_test]
经验分享·笔记·学习·uvm·总结
wan55cn@126.com15 小时前
人类文明可通过技术手段(如加强航天器防护、改进电网设计)缓解地球两极反转带来的影响
人工智能·笔记·搜索引擎·百度·微信
会飞的土拨鼠呀15 小时前
docker部署 outline(栗子云笔记)
笔记·docker·容器
_Minato_16 小时前
数据库知识整理——数据库设计的步骤
数据库·经验分享·笔记·软考
hssfscv16 小时前
Mysql学习笔记——事务
笔记·学习·mysql