计算机网络第 5 章复习:Network Layer Control Plane(网络层控制平面)
课程来源:Computer Networking: A Top-Down Approach, 8th edition, Chapter 5:Network Layer: Control Plane。
目录
- [计算机网络第 5 章复习:Network Layer Control Plane(网络层控制平面)](#计算机网络第 5 章复习:Network Layer Control Plane(网络层控制平面))
- [0. 本章到底讲什么?](#0. 本章到底讲什么?)
- [1. 网络层控制平面:从 forwarding 到 routing](#1. 网络层控制平面:从 forwarding 到 routing)
-
- [1.1 forwarding 和 routing 的区别](#1.1 forwarding 和 routing 的区别)
- [1.2 控制平面的两种结构](#1.2 控制平面的两种结构)
-
- [1.2.1 Per-router control plane:传统分布式控制平面](#1.2.1 Per-router control plane:传统分布式控制平面)
- [1.2.2 SDN control plane:软件定义网络控制平面](#1.2.2 SDN control plane:软件定义网络控制平面)
- [2. 路由协议的目标与图抽象](#2. 路由协议的目标与图抽象)
-
- [2.1 路由协议的目标](#2.1 路由协议的目标)
- [2.2 图抽象:把网络看成图](#2.2 图抽象:把网络看成图)
- [2.3 路由算法分类](#2.3 路由算法分类)
-
- [2.3.1 按信息掌握范围分类](#2.3.1 按信息掌握范围分类)
- [2.3.2 按路由变化速度分类](#2.3.2 按路由变化速度分类)
- [3. 链路状态路由算法:Dijkstra](#3. 链路状态路由算法:Dijkstra)
- [4. 距离向量路由算法:Bellman-Ford](#4. 距离向量路由算法:Bellman-Ford)
-
- [4.1 Bellman-Ford 方程](#4.1 Bellman-Ford 方程)
- [4.2 Bellman-Ford 示例](#4.2 Bellman-Ford 示例)
- [4.3 距离向量算法的运行方式](#4.3 距离向量算法的运行方式)
-
- [1. iterative:迭代式](#1. iterative:迭代式)
- [2. asynchronous:异步式](#2. asynchronous:异步式)
- [3. distributed:分布式](#3. distributed:分布式)
- [4.4 距离向量的信息扩散过程](#4.4 距离向量的信息扩散过程)
- [4.5 距离向量计算示例:节点 b](#4.5 距离向量计算示例:节点 b)
- [4.6 距离向量计算示例:节点 c](#4.6 距离向量计算示例:节点 c)
- [4.7 好消息传播快](#4.7 好消息传播快)
- [4.8 坏消息传播慢:无穷计数问题](#4.8 坏消息传播慢:无穷计数问题)
- [4.9 LS 和 DV 对比](#4.9 LS 和 DV 对比)
- [5. Internet 为什么需要 AS?](#5. Internet 为什么需要 AS?)
-
- [5.1 扁平路由的问题](#5.1 扁平路由的问题)
-
- [1. 规模问题](#1. 规模问题)
- [2. 管理自治问题](#2. 管理自治问题)
- [5.2 自治系统 AS](#5.2 自治系统 AS)
- [5.3 AS 内部和 AS 之间如何配合](#5.3 AS 内部和 AS 之间如何配合)
- [6. AS 内部路由:OSPF](#6. AS 内部路由:OSPF)
-
- [6.1 常见的 intra-AS 路由协议](#6.1 常见的 intra-AS 路由协议)
- [6.2 OSPF 的核心特点](#6.2 OSPF 的核心特点)
- [6.3 层次化 OSPF](#6.3 层次化 OSPF)
- [7. AS 之间路由:BGP](#7. AS 之间路由:BGP)
-
- [7.1 BGP 是什么?](#7.1 BGP 是什么?)
- [7.2 BGP 提供什么能力?](#7.2 BGP 提供什么能力?)
- [7.3 eBGP 和 iBGP](#7.3 eBGP 和 iBGP)
- [7.4 BGP 是 path vector 协议](#7.4 BGP 是 path vector 协议)
- [7.5 BGP 消息类型](#7.5 BGP 消息类型)
- [7.6 BGP 路由:prefix + attributes](#7.6 BGP 路由:prefix + attributes)
-
- [1. AS-PATH](#1. AS-PATH)
- [2. NEXT-HOP](#2. NEXT-HOP)
- [7.7 BGP 的策略路由](#7.7 BGP 的策略路由)
- [7.8 BGP 路径宣告过程](#7.8 BGP 路径宣告过程)
- [7.9 BGP 如何填充转发表?](#7.9 BGP 如何填充转发表?)
- [7.10 Hot potato routing:热土豆路由](#7.10 Hot potato routing:热土豆路由)
- [7.11 BGP 策略示例](#7.11 BGP 策略示例)
-
- [示例 1:ISP 不想免费帮别人转发](#示例 1:ISP 不想免费帮别人转发)
- [示例 2:dual-homed 网络不想做中转](#示例 2:dual-homed 网络不想做中转)
- [7.12 BGP 路由选择规则](#7.12 BGP 路由选择规则)
- [7.13 为什么 intra-AS 和 inter-AS 路由不同?](#7.13 为什么 intra-AS 和 inter-AS 路由不同?)
-
- [1. policy](#1. policy)
- [2. scale](#2. scale)
- [3. performance](#3. performance)
- [8. SDN 控制平面](#8. SDN 控制平面)
-
- [8.1 为什么要重新思考控制平面?](#8.1 为什么要重新思考控制平面?)
- [8.2 SDN 的核心思想](#8.2 SDN 的核心思想)
- [8.3 为什么需要逻辑集中式控制平面?](#8.3 为什么需要逻辑集中式控制平面?)
-
- [1. 更容易管理网络](#1. 更容易管理网络)
- [2. 可以编程](#2. 可以编程)
- [3. 集中式编程更容易](#3. 集中式编程更容易)
- [4. 控制平面开放](#4. 控制平面开放)
- [8.4 传统路由做流量工程为什么困难?](#8.4 传统路由做流量工程为什么困难?)
-
- [例子 1:想让 u 到 z 走指定路径](#例子 1:想让 u 到 z 走指定路径)
- [例子 2:想把流量分成两条路径](#例子 2:想把流量分成两条路径)
- [例子 3:想让红色流量和蓝色流量走不同路径](#例子 3:想让红色流量和蓝色流量走不同路径)
- [8.5 SDN 架构三层](#8.5 SDN 架构三层)
-
- [8.5.1 Data-plane switches](#8.5.1 Data-plane switches)
- [8.5.2 SDN controller](#8.5.2 SDN controller)
- [8.5.3 Network-control applications](#8.5.3 Network-control applications)
- [8.6 SDN 控制器组件](#8.6 SDN 控制器组件)
- [8.7 OpenFlow 协议](#8.7 OpenFlow 协议)
-
- [Controller-to-switch 消息](#Controller-to-switch 消息)
- [Switch-to-controller 消息](#Switch-to-controller 消息)
- [8.8 SDN 控制/数据平面交互例子](#8.8 SDN 控制/数据平面交互例子)
- [8.9 Google ORION](#8.9 Google ORION)
- [8.10 OpenDaylight 和 ONOS](#8.10 OpenDaylight 和 ONOS)
- [8.11 SDN 的挑战](#8.11 SDN 的挑战)
- [8.12 SDN 和传统协议的未来](#8.12 SDN 和传统协议的未来)
- [9. ICMP:网络层控制消息协议](#9. ICMP:网络层控制消息协议)
-
- [9.1 ICMP 的作用](#9.1 ICMP 的作用)
- [9.2 ICMP 报文格式](#9.2 ICMP 报文格式)
- [9.3 Traceroute 的原理](#9.3 Traceroute 的原理)
- [10. 网络管理:SNMP、MIB、NETCONF、YANG](#10. 网络管理:SNMP、MIB、NETCONF、YANG)
-
- [10.1 什么是网络管理?](#10.1 什么是网络管理?)
- [10.2 网络管理的组件](#10.2 网络管理的组件)
- [10.3 网络管理的三种方式](#10.3 网络管理的三种方式)
-
- [1. CLI](#1. CLI)
- [2. SNMP/MIB](#2. SNMP/MIB)
- [3. NETCONF/YANG](#3. NETCONF/YANG)
- [10.4 SNMP 协议](#10.4 SNMP 协议)
- [10.5 MIB:管理信息库](#10.5 MIB:管理信息库)
- [10.6 NETCONF 概述](#10.6 NETCONF 概述)
- [10.7 NETCONF 会话过程](#10.7 NETCONF 会话过程)
- [10.8 常见 NETCONF 操作](#10.8 常见 NETCONF 操作)
- [10.9 YANG](#10.9 YANG)
- [11. 本章总结](#11. 本章总结)
- [12. 第 5 章考试重点与易错点](#12. 第 5 章考试重点与易错点)
-
- [12.1 必须掌握的算法题](#12.1 必须掌握的算法题)
-
- [Dijkstra 表格题](#Dijkstra 表格题)
- [Bellman-Ford / DV 计算题](#Bellman-Ford / DV 计算题)
- [12.2 必须掌握的概念对比](#12.2 必须掌握的概念对比)
-
- [LS vs DV](#LS vs DV)
- [OSPF vs BGP](#OSPF vs BGP)
- [Per-router control vs SDN control](#Per-router control vs SDN control)
- [12.3 易错点](#12.3 易错点)
-
- [易错点 1:BGP 不是最短路径协议](#易错点 1:BGP 不是最短路径协议)
- [易错点 2:OSPF 是 intra-AS,不是 inter-AS](#易错点 2:OSPF 是 intra-AS,不是 inter-AS)
- [易错点 3:SDN 的集中不是物理单点](#易错点 3:SDN 的集中不是物理单点)
- [易错点 4:ICMP 封装在 IP 里](#易错点 4:ICMP 封装在 IP 里)
- [易错点 5:DV 的无穷计数根因是"不知道路径"](#易错点 5:DV 的无穷计数根因是“不知道路径”)
- [13. 自测题](#13. 自测题)
-
- [13.1 选择/判断类](#13.1 选择/判断类)
- [13.2 简答题](#13.2 简答题)
-
- [题 1:为什么 Internet 要引入 AS?](#题 1:为什么 Internet 要引入 AS?)
- [题 2:解释 count-to-infinity 问题。](#题 2:解释 count-to-infinity 问题。)
- [题 3:BGP 中 AS-PATH 和 NEXT-HOP 分别有什么作用?](#题 3:BGP 中 AS-PATH 和 NEXT-HOP 分别有什么作用?)
- [题 4:SDN 相比传统路由的优势是什么?](#题 4:SDN 相比传统路由的优势是什么?)
- [题 5:Traceroute 为什么能显示每一跳?](#题 5:Traceroute 为什么能显示每一跳?)
- [14. 最后一页复习版](#14. 最后一页复习版)
0. 本章到底讲什么?
第 4 章我们学习的是网络层的数据平面,也就是一个分组到达路由器之后,路由器如何查转发表,把它从输入端口转发到合适的输出端口。
第 5 章关注的是另一个问题:
路由器里的转发表到底是怎么来的?
这就是网络层的控制平面。控制平面的任务不是直接搬运每一个分组,而是决定分组应该沿着怎样的路径在网络中前进。它负责计算、维护、分发和安装路由信息。
本章的主线可以概括为四层:
- 传统路由算法:链路状态算法 LS、距离向量算法 DV。
- Internet 中的实际路由协议:AS 内部用 OSPF,AS 之间用 BGP。
- SDN 控制平面:通过逻辑集中式控制器计算和下发转发表。
- 网络控制与管理协议:ICMP、SNMP、MIB、NETCONF、YANG。
这章看起来协议很多,但核心逻辑其实很清楚:
控制平面负责"算路"和"管网",数据平面负责"按表转发"。
1. 网络层控制平面:从 forwarding 到 routing
1.1 forwarding 和 routing 的区别
网络层有两个关键功能:
| 功能 | 中文 | 作用范围 | 作用 |
|---|---|---|---|
| forwarding | 转发 | 单个路由器内部 | 把到达输入端口的分组送到正确输出端口 |
| routing | 路由选择 | 整个网络范围 | 决定分组从源到目的地经过哪些路由器 |
一个很好的类比是旅行:
- forwarding 像是在一个路口决定从哪条出口开出去;
- routing 像是在出发前规划从起点到终点的完整路线。
数据平面处理的是 forwarding,控制平面处理的是 routing。
1.2 控制平面的两种结构
PPT 一开始就区分了两种控制平面结构。
1.2.1 Per-router control plane:传统分布式控制平面
在传统网络中,每一台路由器内部都运行路由算法。路由器之间交换路由协议消息,最终每台路由器自己计算出自己的转发表。
特点是:
- 控制逻辑分布在每一台路由器里;
- 每台路由器既做数据转发,也参与路由计算;
- OSPF、BGP 等传统协议都属于这个大方向。
可以理解为:
每台路由器都有一点"大脑",大家通过协议交流,最后各自算出自己的路由表。
1.2.2 SDN control plane:软件定义网络控制平面
在 SDN 中,路由器或者交换机不再主要负责复杂的路由计算,而是由远程控制器计算转发表,并把表项安装到设备中。
特点是:
- 控制逻辑从路由器中抽离出来;
- 远程控制器具有全局视角;
- 数据平面设备更像执行者;
- 控制器通过 OpenFlow 等协议向交换机下发转发表。
可以理解为:
SDN 把网络"大脑"集中到控制器里,让交换机主要负责高速执行。
注意,SDN 是 logically centralized,即逻辑集中,不一定物理上只有一台服务器。现实中的 SDN 控制器往往是分布式系统,否则无法满足性能、可靠性和容错需求。
2. 路由协议的目标与图抽象
2.1 路由协议的目标
路由协议的目标是:
从发送主机到接收主机之间,找到一条"好路径"。
这里的 path 指的是分组从源到目的地经过的一系列路由器。
所谓 good path 可以有不同解释:
- cost 最小;
- 速度最快;
- 延迟最低;
- 拥塞最少;
- 带宽更高;
- 或者符合运营商策略。
在传统算法中,"好"经常被抽象为代价最小。但在真实 Internet 中,尤其是 BGP 里,"好"常常不只是性能问题,还涉及商业关系和管理策略。
2.2 图抽象:把网络看成图
路由算法通常把网络抽象成一个图:
G = (N, E)
其中:
- (N):节点集合,表示路由器;
- (E):边集合,表示链路;
- (c_{a,b}):节点 a 到节点 b 的直接链路代价;
- 如果 a 和 b 不直接相连,则 (c_{a,b}=\infty)。
链路代价由网络管理员定义,可以简单地都设为 1,也可以和带宽、延迟、拥塞程度相关。例如:
- 链路带宽越高,代价越低;
- 链路越拥塞,代价越高;
- 链路延迟越大,代价越高。
2.3 路由算法分类
PPT 中从两个角度分类。
2.3.1 按信息掌握范围分类
| 类型 | 英文 | 信息范围 | 典型算法 |
|---|---|---|---|
| 全局路由算法 | global | 每个路由器知道完整拓扑和链路代价 | Link State |
| 分布式路由算法 | decentralized | 每个路由器最初只知道邻居链路代价 | Distance Vector |
链路状态算法的典型代表是 Dijkstra。距离向量算法的基础是 Bellman-Ford 方程。
2.3.2 按路由变化速度分类
| 类型 | 英文 | 特点 |
|---|---|---|
| 静态路由 | static | 路由变化很慢,常由管理员手动配置 |
| 动态路由 | dynamic | 路由会根据链路状态、拓扑变化、拥塞情况自动更新 |
3. 链路状态路由算法:Dijkstra
链路状态算法是本章第一块重点。它的核心特点是:
每个路由器都知道完整的网络拓扑和链路代价,然后各自独立运行 Dijkstra 算法,计算从自己出发到所有目的地的最短路径。
3.1 链路状态算法的前提
链路状态算法要求所有节点拥有相同的全局信息。
这依赖于 link state broadcast,也就是每个路由器把自己直接相连链路的状态广播给所有其他路由器。最终每个路由器都获得同一张网络拓扑图。
这时,每个路由器就可以以自己为源点,运行 Dijkstra 算法。
3.2 Dijkstra 算法中的符号
PPT 中使用了几个重要符号:
| 符号 | 含义 |
|---|---|
| (c_{x,y}) | x 到 y 的直接链路代价,如果不是邻居则为 ∞ |
| (D(v)) | 当前从源点到 v 的最短路径代价估计 |
| (p(v)) | 当前最短路径中 v 的前驱节点 |
| (N') | 已经确定最短路径的节点集合 |
算法的目标是:
从一个源点 u 出发,计算 u 到所有其他节点的最小代价路径,并由此生成 u 的转发表。
3.3 Dijkstra 算法步骤
算法可以分为初始化和循环两部分。
初始化
设源点为 u。
- (N' = {u})。
- 对所有节点 v:
- 如果 v 是 u 的邻居,则 (D(v)=c_{u,v});
- 否则 (D(v)=\infty)。
循环
重复以下步骤,直到所有节点都加入 (N'):
- 在不属于 (N') 的节点中,找到 (D(w)) 最小的节点 w;
- 把 w 加入 (N');
- 对 w 的所有邻居 v,如果 v 不在 (N') 中,则更新:
D(v)=\\min(D(v),D(w)+c_{w,v})
这个更新操作叫松弛。意思是:
到 v 的当前最短路径,要么还是原来的,要么改成"先到 w,再从 w 到 v"。
3.4 Dijkstra 示例:从 u 出发
PPT 中用一个包含 u、v、w、x、y、z 的网络展示 Dijkstra 过程。源点是 u。
初始化时:
- u 到 v 的直接代价是 2,所以 (D(v)=2,p(v)=u);
- u 到 x 的直接代价是 1,所以 (D(x)=1,p(x)=u);
- u 到 w 的直接代价是 5,所以 (D(w)=5,p(w)=u);
- u 到 y、z 没有直接链路,所以为 ∞。
第一轮选择 D 值最小的 x,把 x 加入 (N')。然后通过 x 更新其他节点:
D(v)=\\min(2,1+2)=2
D(w)=\\min(5,1+3)=4
D(y)=\\min(\\infty,1+1)=2
第二轮选择 y,把 y 加入 (N'),继续更新:
D(w)=\\min(4,2+1)=3
D(z)=\\min(\\infty,2+2)=4
后续继续选择 v、w、z,最终得到从 u 出发的最短路径树。
最终最短代价大致为:
| 目的节点 | 最短代价 | 路径理解 |
|---|---|---|
| x | 1 | u → x |
| v | 2 | u → v |
| y | 2 | u → x → y |
| w | 3 | u → x → y → w |
| z | 4 | u → x → y → z |
注意:如果多个节点 D 值相同,可以任意打破平局。因此最短路径树可能不唯一,但总代价仍然正确。
3.5 从最短路径树到转发表
Dijkstra 算出的完整最短路径树,最终要转化为转发表。
转发表关心的不是完整路径,而是:
去某个目的地时,第一跳应该走哪条链路。
在 PPT 示例中,从 u 到 v 直接走 ((u,v)),但从 u 到 x、y、w、z 都先走 x。因此 u 的转发表类似:
| 目的地 | u 的输出链路 |
|---|---|
| v | (u,v) |
| x | (u,x) |
| y | (u,x) |
| w | (u,x) |
| z | (u,x) |
这说明:
路由算法可以计算完整路径,但转发表只需要记录下一跳。
3.6 Dijkstra 的复杂度
如果有 n 个节点,普通实现中每轮都要检查未加入 (N') 的节点,寻找 D 值最小者。
总比较次数大约是:
\\frac{n(n+1)}{2}
所以复杂度是:
O(n\^2)
如果用更高效的数据结构,比如堆,可以做到:
O(n\\log n)
消息复杂度方面,每个路由器都要把自己的链路状态信息广播给其他路由器。每个路由器的消息可能经过 O(n) 条链路,整体消息复杂度可以达到 O(n²) 级别。
3.7 Dijkstra 的路由震荡问题
Dijkstra 本身是正确的最短路算法,但如果链路代价依赖于流量负载,就可能出现路由震荡。
例如:
- 某条链路流量变大,代价上升;
- 路由算法重新计算,流量被转移到另一条链路;
- 新链路流量变大,代价又上升;
- 路由可能再次切换回来;
- 网络状态不断变化,路由反复震荡。
所以现实网络中,链路代价设计不能过度敏感。否则网络会陷入不稳定状态。
4. 距离向量路由算法:Bellman-Ford
距离向量算法是本章第二块重点。它和链路状态算法的最大区别是:
链路状态算法知道全网拓扑;距离向量算法只和邻居交换"我到各目的地的距离估计"。
4.1 Bellman-Ford 方程
距离向量算法基于 Bellman-Ford 方程。
设 (D_x(y)) 表示节点 x 到目的地 y 的最小代价估计,则:
D_x(y)=\\min_v{c_{x,v}+D_v(y)}
其中 v 是 x 的邻居。
这句话的意思是:
x 想去 y,可以尝试先走到每一个邻居 v,再让 v 去 y。总代价是 x 到 v 的代价加上 v 到 y 的代价。选最小的那个邻居作为下一跳。
4.2 Bellman-Ford 示例
假设 u 的邻居是 v、x、w。它们告诉 u:
- v 到 z 的代价是 5;
- x 到 z 的代价是 3;
- w 到 z 的代价是 3。
同时,u 到这些邻居的代价分别是:
- u 到 v:2;
- u 到 x:1;
- u 到 w:5。
那么 u 到 z 的代价为:
D_u(z)=\\min{2+5,1+3,5+3}=4
因此 u 会选择 x 作为去 z 的下一跳。
这个例子体现了距离向量算法的核心:
我不用知道完整路径,只要知道邻居声称自己到目的地有多远。
4.3 距离向量算法的运行方式
距离向量算法具有三个特点:
1. iterative:迭代式
节点会不断根据邻居的新信息重新计算自己的距离向量。
2. asynchronous:异步式
各节点不需要统一时钟,也不需要同时更新。一个节点可能因为本地链路代价变化而更新,也可能因为收到了邻居的距离向量而更新。
3. distributed:分布式
每个节点只和直接邻居交换信息,不需要把自己的信息广播给全网。
一个节点 x 的基本行为是:
- 等待本地链路代价变化,或者等待邻居发来的 DV 更新消息;
- 使用 Bellman-Ford 方程重新计算自己的距离向量;
- 如果自己的 DV 发生变化,就通知邻居;
- 如果没有变化,就什么也不做。
这也叫 self-stopping:没有变化时,算法自然停止传播。
4.4 距离向量的信息扩散过程
PPT 用一个 3×3 网格网络展示距离向量如何传播。
一开始,每个节点只知道自己到直接邻居的代价。例如 a 可能只知道:
- 到 a 自己代价为 0;
- 到 b 代价为 8;
- 到 d 代价为 1;
- 到其他节点代价为 ∞。
然后所有节点把自己的距离向量发给邻居。下一轮,邻居根据这些信息重新计算。信息就这样一跳一跳扩散:
- t=0:某个节点的信息只在自己这里;
- t=1:影响到 1 跳邻居;
- t=2:影响到 2 跳范围;
- t=3:影响到 3 跳范围;
- t=4:继续向更远处扩散。
这和链路状态算法很不同:
- LS 是先让大家拿到全图,再各自计算;
- DV 是大家只跟邻居交流,信息慢慢传遍网络。
4.5 距离向量计算示例:节点 b
PPT 中展示 b 从邻居 a、c、e 收到距离向量后,如何计算自己的新 DV。
以目的地 d 为例:
D_b(d)=\\min{c_{b,a}+D_a(d),c_{b,c}+D_c(d),c_{b,e}+D_e(d)}
如果:
- 经 a 的代价是 9;
- 经 c 的代价是 2;
- 经 e 的代价是 ∞;
那么:
D_b(d)=2
也就是 b 认为去 d 最好先走 c。
PPT 中 b 的计算结果包括:
| 目的地 | b 的新距离估计 |
|---|---|
| a | 8 |
| c | 1 |
| d | 2 |
| e | 1 |
| f | 2 |
| h | 2 |
| g | ∞ |
| i | ∞ |
4.6 距离向量计算示例:节点 c
节点 c 只从 b 收到距离向量时,它通过 b 来估计到其他节点的距离。
例如:
D_c(a)=c_{c,b}+D_b(a)=1+8=9
D_c(e)=c_{c,b}+D_b(e)=1+1=2
这说明 c 虽然不直接连到 e,但它可以通过 b 到达 e。
4.7 好消息传播快
如果某条链路代价变小,距离向量算法通常能很快收敛。
例如 y 到 x 的链路代价下降:
- y 检测到本地链路代价变化;
- y 更新自己的距离向量,并通知邻居;
- z 收到 y 的更新后,发现经 y 到 x 更便宜,于是也更新;
- 如果 y 再收到 z 的更新但自己的最短路不变,就停止传播。
这叫:
good news travels fast,好消息传播快。
4.8 坏消息传播慢:无穷计数问题
如果链路代价变大,距离向量算法可能出现严重问题。
PPT 中的例子是:y 到 x 的直接链路代价从 4 变成 60。按理说 y 应该知道到 x 变贵了,但 z 之前告诉 y:"我到 x 的代价是 5"。于是 y 误以为可以经 z 到 x,总代价变成 6。
但问题在于,z 到 x 的路径本来可能就是经过 y。
于是产生循环误解:
- y 认为经 z 到 x 是 6,于是告诉 z;
- z 认为经 y 到 x 是 7,于是告诉 y;
- y 又认为经 z 到 x 是 8;
- z 又认为经 y 到 x 是 9;
- 如此不断增加。
这就是:
count-to-infinity,无穷计数问题。
它的根本原因是:
路由器只知道"距离",不知道"路径"。
当 X 告诉 Y "我能到 Z" 时,Y 并不知道自己是否已经在 X 到 Z 的路径上。因此两者可能互相误导,形成路由环路。
4.9 LS 和 DV 对比
| 对比维度 | LS 链路状态算法 | DV 距离向量算法 |
|---|---|---|
| 信息范围 | 全网拓扑和链路代价 | 只知道邻居的距离向量 |
| 典型算法 | Dijkstra | Bellman-Ford |
| 消息交换 | 链路状态信息向全网广播 | 只和邻居交换 |
| 计算方式 | 每个节点独立算完整最短路径树 | 每个节点根据邻居估计更新自己 |
| 收敛速度 | 通常较快 | 变化较大,可能很慢 |
| 典型问题 | 链路代价依赖流量时可能震荡 | 路由环路、无穷计数 |
| 鲁棒性 | 错误链路代价主要影响本节点计算 | 错误 DV 会被别人继续使用和传播 |
一句话总结:
LS 是"先知道地图再自己算";DV 是"只问邻居慢慢传"。
5. Internet 为什么需要 AS?
前面讲的 LS 和 DV 都是假设网络是一个扁平结构,所有路由器地位相同。但真实 Internet 不是这样。
5.1 扁平路由的问题
如果全球 Internet 中所有路由器都在一个大平面里运行同一个路由协议,会出现两个大问题。
1. 规模问题
Internet 有数十亿目的地址,不可能让每台路由器都保存所有目的地的详细路由。
如果路由表太大:
- 存储压力巨大;
- 查表复杂;
- 路由更新消息会淹没链路。
2. 管理自治问题
Internet 是 network of networks。不同网络属于不同组织,比如:
- 校园网;
- 企业网;
- 运营商网络;
- 内容提供商网络;
- 数据中心网络。
每个组织都希望控制自己网络内部的路由策略,不可能让全球所有路由器都按一个统一算法运行。
5.2 自治系统 AS
为了解决规模和自治问题,Internet 把路由器聚合成一个个区域,称为:
Autonomous System,自治系统,AS。
AS 也叫 domain,通常由一个组织管理。
路由被分成两类:
| 类型 | 英文 | 含义 | 典型协议 |
|---|---|---|---|
| AS 内部路由 | intra-AS / intra-domain | 同一个 AS 内部的路由 | OSPF、RIP、IS-IS、EIGRP |
| AS 之间路由 | inter-AS / inter-domain | 不同 AS 之间的路由 | BGP |
AS 边缘连接其他 AS 的路由器叫 gateway router。它既要参与本 AS 内部路由,也要参与 AS 之间的路由。
5.3 AS 内部和 AS 之间如何配合
一个路由器收到目的地在本 AS 内部的分组时,intra-AS 路由就能决定怎么转发。
但如果目的地在 AS 外部,就需要两步:
- inter-AS 路由告诉本 AS:哪些外部网络可以通过哪些网关到达;
- intra-AS 路由告诉本 AS 内部路由器:如何到达这些网关。
例如 AS1 里的某台路由器收到一个发往 AS1 外部的分组,它需要知道:
- 这个外部网络通过 AS2 可达,还是通过 AS3 可达?
- 如果通过 AS2,应当先把分组送到 AS1 的哪个出口网关?
- 到这个出口网关在 AS1 内部该走哪条链路?
这就是 inter-AS 和 intra-AS 的配合。
6. AS 内部路由:OSPF
6.1 常见的 intra-AS 路由协议
PPT 中列出了常见 AS 内部路由协议:
- RIP:Routing Information Protocol,经典距离向量协议,每 30 秒交换 DV,现在不常用了;
- EIGRP:Enhanced Interior Gateway Routing Protocol,基于距离向量,曾经长期是 Cisco 私有协议,后来开放;
- OSPF:Open Shortest Path First,链路状态协议,是重点;
- IS-IS:ISO 标准协议,本质上和 OSPF 类似。
6.2 OSPF 的核心特点
OSPF 全称是:
Open Shortest Path First。
它的特点包括:
- open:公开标准,不是某个厂商的私有协议。
- link-state:经典链路状态协议。
- 每个路由器向整个 AS 泛洪 OSPF link-state advertisements。
- OSPF 直接运行在 IP 之上,不使用 TCP 或 UDP。
- 链路代价可以使用多种指标,例如带宽、延迟等。
- 每个路由器获得完整拓扑后,用 Dijkstra 算法计算转发表。
- OSPF 消息可以认证,防止恶意路由注入。
一句话总结:
OSPF 是 AS 内部使用的链路状态路由协议。每台路由器通过 LSA 获得 AS 内部拓扑,然后运行 Dijkstra 计算最短路径。
6.3 层次化 OSPF
OSPF 支持两级层次结构:
- local area,本地区域;
- backbone,骨干区域。
链路状态通告不会简单地在整个大型 AS 中无限泛洪,而是在区域内或骨干区域中传播。
每个节点:
- 知道本区域内部的详细拓扑;
- 对其他区域,只知道大致的方向和出口。
这样做的好处是:
- 降低路由信息规模;
- 降低链路状态泛洪开销;
- 提高大规模 AS 内部路由的可扩展性。
7. AS 之间路由:BGP
BGP 是本章最重要的协议之一。
7.1 BGP 是什么?
BGP 全称是:
Border Gateway Protocol,边界网关协议。
它是 Internet 中事实上的 inter-domain routing protocol,也就是 AS 之间的路由协议。
PPT 中把 BGP 称为:
glue that holds the Internet together
也就是把 Internet 粘在一起的胶水。
BGP 的作用是让一个 AS 能够告诉其他 AS:
我在这里,我能到这些目的网络,我也可以帮你把分组转发过去。
7.2 BGP 提供什么能力?
BGP 为每个 AS 提供四种能力:
- 从邻居 AS 获得目的网络可达性信息;
- 根据可达性信息和策略决定路由;
- 把可达性信息传播给本 AS 内部路由器;
- 向邻居 AS 宣告自己可以到达哪些目的网络。
7.3 eBGP 和 iBGP
BGP 分为两类连接:
| 类型 | 含义 |
|---|---|
| eBGP | 不同 AS 的 BGP 路由器之间交换路由信息 |
| iBGP | 同一个 AS 内部传播从外部学到的 BGP 路由 |
例如:
- AS3 的网关 3a 向 AS2 的网关 2c 宣告可以到达 X,这是 eBGP;
- AS2 的 2c 再把这个信息告诉 AS2 内部其他路由器,这是 iBGP。
7.4 BGP 是 path vector 协议
BGP routers,也叫 BGP peers,通过半永久 TCP 连接交换 BGP 消息。
BGP 宣告的不是单纯的距离,而是路径。它告诉对方:
去某个目的网络前缀,需要经过哪些 AS。
因此 BGP 是:
path vector protocol,路径向量协议。
例如 AS3 向 AS2 宣告路径 AS3, X,表示 AS3 承诺可以把发往 X 的数据报转发过去。
7.5 BGP 消息类型
BGP 消息通过 TCP 连接交换,主要有四类:
| 消息类型 | 作用 |
|---|---|
| OPEN | 打开到远程 BGP peer 的 TCP 连接,并认证发送方 |
| UPDATE | 宣告新路径,或者撤销旧路径 |
| KEEPALIVE | 在没有 UPDATE 时保持连接,也用于确认 OPEN 请求 |
| NOTIFICATION | 报告错误,也可以用于关闭连接 |
考试常考点:
BGP 运行在 TCP 之上,UPDATE 用于路径宣告和撤销。
7.6 BGP 路由:prefix + attributes
BGP 宣告的路由由两部分组成:
prefix + attributes
prefix 是被宣告的目的网络前缀。
attributes 是路径属性,其中最重要的两个是:
1. AS-PATH
AS-PATH 是该前缀宣告经过的 AS 列表。
作用包括:
- 防止路由环路;
- 作为路径选择依据;
- 体现经过了哪些 AS。
2. NEXT-HOP
NEXT-HOP 指向下一跳 AS 的具体内部路由器。
它解决的是:
我知道这个外部网络可以从某个出口出去,但我在本 AS 内部应该先送到哪个出口路由器?
7.7 BGP 的策略路由
BGP 不是单纯最短路径协议。它是策略驱动协议。
收到路由宣告时,网关会根据 import policy 决定是否接受某条路径。例如:
- 不经过某个 AS;
- 更偏好客户路径;
- 不愿意转发不赚钱的流量。
AS 还可以根据 export policy 决定是否把某条路径继续宣告给其他邻居。
这一点非常重要:
在 BGP 中,商业关系和管理策略往往比路径长短更重要。
7.8 BGP 路径宣告过程
PPT 中的路径宣告过程可以这样理解:
- AS3 的路由器 3a 通过 eBGP 向 AS2 的 2c 宣告路径 AS3,X。
- AS2 根据自己的策略决定是否接受该路径。
- 如果接受,AS2 的 2c 通过 iBGP 把该路径传播给 AS2 内部路由器。
- AS2 的 2a 再通过 eBGP 向 AS1 的 1c 宣告路径 AS2,AS3,X。
当 AS1 的 1c 还可能从 AS3 直接学到 AS3,X 时,AS1 会根据策略选择其中一条路径,并通过 iBGP 告诉 AS1 内部其他路由器。
7.9 BGP 如何填充转发表?
BGP 决定的是外部目的网络通过哪个网关出去。
但是本 AS 内部具体如何到达这个网关,要靠 OSPF 这样的 intra-AS 协议。
例如 AS1 内部的 1d 学到:
去 X 的路径通过网关 1c。
然后 1d 运行 OSPF,发现到 1c 应该走本地接口 1,于是它在转发表中填入:
去 X,输出接口 1。
对 1a 来说,OSPF 可能告诉它到 1c 应该走接口 2,于是 1a 的转发表中会填:
去 X,输出接口 2。
这说明:
BGP 决定出口,OSPF 决定 AS 内部如何到出口。
7.10 Hot potato routing:热土豆路由
Hot potato routing 的意思是:
尽快把分组扔出自己的 AS。
例如 AS2 内部的路由器 2d 通过 iBGP 知道,去 X 可以通过 2a,也可以通过 2c。
它可能会选择内部代价最低的出口,比如 2a。即使从 AS 级路径看,2a 后面的 AS 跳数更多,它也可能选择 2a。
原因是:
对本 AS 来说,尽快把流量交给别的 AS,可以减少自己内部资源占用。
所以 hot potato routing 不关心外部路径整体最短,而是关心本 AS 内部到出口的代价最小。
7.11 BGP 策略示例
PPT 中有两个策略例子。
示例 1:ISP 不想免费帮别人转发
假设 A 向 B 和 C 宣告自己能到 w。B 可能学到路径 BAw,但 B 不一定会把 BAw 宣告给 C。
原因是:
- 如果 C 通过 B 去 A/w,B 要帮 C 转发流量;
- 但 C、A、w 都不是 B 的客户;
- B 没有收益,所以 B 不愿意帮忙做 transit。
这体现了真实运营商策略:
ISP 通常只愿意转发和自己客户相关的流量,不愿意免费承担其他 ISP 之间的中转流量。
示例 2:dual-homed 网络不想做中转
x 同时连接 B 和 C,是 dual-homed。
但是 x 不想让 B 通过自己到 C,也不想让 C 通过自己到 B。
因此 x 不会向 B 宣告到 C 的路由。
这样 B 就不会把流量发给 x 再去 C。
7.12 BGP 路由选择规则
当路由器学到多条到同一目的 AS 的路径时,BGP 通常按以下顺序选择:
- local preference:本地偏好,通常由策略决定;
- shortest AS-PATH:AS-PATH 更短;
- closest NEXT-HOP:最近的下一跳,也就是 hot potato;
- 其他附加规则。
注意顺序:
BGP 先看策略,再看 AS 路径长度,再看内部出口距离。
所以 BGP 不是普通意义上的最短路径协议。
7.13 为什么 intra-AS 和 inter-AS 路由不同?
PPT 从三个角度解释。
1. policy
AS 之间涉及不同管理者。每个 AS 都希望控制:
- 自己的流量怎么出去;
- 谁能经过自己的网络;
- 哪些路径可以被别人使用。
AS 内部通常只有一个管理员,策略冲突少得多。
2. scale
Internet 太大,需要层次化路由减少路由表大小和更新流量。
3. performance
AS 内部可以更关注性能,例如最短路径、低延迟、高带宽。
AS 之间则往往由策略主导,性能不一定排第一。
总结:
| 对比 | intra-AS | inter-AS |
|---|---|---|
| 管理范围 | 单个 AS 内部 | 不同 AS 之间 |
| 典型协议 | OSPF、IS-IS、RIP | BGP |
| 主要目标 | 性能优化 | 策略控制 |
| 路由依据 | 链路代价、最短路径 | 策略、AS-PATH、NEXT-HOP |
8. SDN 控制平面
8.1 为什么要重新思考控制平面?
历史上,Internet 网络层主要通过分布式 per-router control 实现。
传统路由器通常是一个整体化设备:
- 有交换硬件;
- 运行厂商私有路由器操作系统,例如 Cisco IOS;
- 内部实现 IP、RIP、IS-IS、OSPF、BGP 等协议;
- 防火墙、负载均衡、NAT 等功能常由不同 middlebox 实现。
这种模式的问题是:
- 控制逻辑分散;
- 配置复杂;
- 厂商封闭;
- 流量工程能力有限;
- 创新速度慢。
大约 2005 年后,人们开始重新思考网络控制平面,SDN 兴起。
8.2 SDN 的核心思想
SDN,即 Software Defined Networking,软件定义网络。
核心思想是:
把控制平面从数据平面设备中分离出来,由逻辑集中式控制器计算和安装转发表。
传统网络中,每个路由器自己运行路由算法;SDN 中,控制器负责计算,交换机负责执行。
8.3 为什么需要逻辑集中式控制平面?
SDN 的优势包括:
1. 更容易管理网络
集中控制可以减少大量设备手工配置错误,并且能更灵活地调整流量路径。
2. 可以编程
基于 OpenFlow API 的表项转发,使网络设备可以被程序化控制。
3. 集中式编程更容易
集中控制器拥有全局视角,可以统一计算和分发转发表。
分布式编程则更难,因为每台路由器都要运行协议,通过分布式交互间接得到结果。
4. 控制平面开放
开放控制接口可以降低厂商锁定,促进创新。
PPT 用"大型机到 PC 革命"类比 SDN:传统网络设备像封闭的大型机系统,而 SDN 希望让硬件、控制器、应用解耦,形成开放生态。
8.4 传统路由做流量工程为什么困难?
PPT 给了三个例子。
例子 1:想让 u 到 z 走指定路径
如果网络管理员希望 u 到 z 的流量走 uvwz,而不是 uxyz,传统路由只能调链路权重,让最短路径算法"算出来"这条路。
问题是:
链路权重是唯一控制旋钮,控制能力很弱。
例子 2:想把流量分成两条路径
如果希望 u 到 z 的流量一部分走 uvwz,一部分走 uxyz,传统目的地址转发很难做到。
因为传统路由通常按目的地址决定下一跳,而不是按流量类别、比例或应用类型精细控制。
例子 3:想让红色流量和蓝色流量走不同路径
如果 w 想让红色流量和蓝色流量到 z 走不同路径,传统 destination-based forwarding 加 LS/DV 路由也做不到。
第 4 章学过 generalized forwarding,SDN 就可以利用 match + action,根据更丰富的头部字段和策略实现更复杂的转发。
8.5 SDN 架构三层
SDN 可以分成三层。
8.5.1 Data-plane switches
数据平面交换机的特点:
- 快速;
- 简单;
- 商品化;
- 用硬件实现 generalized forwarding;
- 流表由控制器计算和安装;
- 通过 OpenFlow 等协议与控制器通信。
8.5.2 SDN controller
SDN controller 也叫 network OS。
它的任务是:
- 维护网络状态信息;
- 通过 northbound API 与上层控制应用交互;
- 通过 southbound API 与底层交换机交互;
- 作为分布式系统实现,以支持性能、扩展性、容错性和鲁棒性。
8.5.3 Network-control applications
网络控制应用是控制逻辑真正所在。
例如:
- routing;
- access control;
- load balancing;
- traffic engineering。
这些应用使用控制器提供的 API 和网络状态,计算具体控制策略。它们可以由第三方提供,不必绑定设备厂商。
8.6 SDN 控制器组件
PPT 中将 SDN controller 分为几个核心组件:
- Communication to/from controlled devices:负责与交换机通信;
- Network-wide state management:维护网络链路、交换机、服务等状态,通常是分布式数据库;
- Interface layer to network control apps:为上层控制应用提供抽象和 API。
可以把控制器理解成网络操作系统:
往下管理设备,往上服务应用,中间维护全网状态。
8.7 OpenFlow 协议
OpenFlow 运行在 controller 和 switch 之间。
特点:
- 使用 TCP 交换消息;
- 可以选择加密;
- 消息分三类:
- controller-to-switch;
- asynchronous,switch-to-controller;
- symmetric,杂项双向消息。
注意区分两个概念:
| 概念 | 含义 |
|---|---|
| OpenFlow API | 定义可以控制哪些表项和动作 |
| OpenFlow protocol | 控制器和交换机之间如何通信 |
Controller-to-switch 消息
重要消息包括:
- features:控制器查询交换机能力,交换机回复;
- configure:查询或设置交换机配置参数;
- modify-state:增加、删除、修改 OpenFlow 流表项;
- packet-out:控制器要求交换机从指定端口发出某个包。
Switch-to-controller 消息
重要消息包括:
- packet-in:交换机把包和控制信息交给控制器;
- flow-removed:通知控制器某个流表项被删除;
- port status:通知端口状态变化。
现实中,网络管理员通常不会直接手写 OpenFlow 消息,而是通过控制器提供的高级抽象完成管理。
8.8 SDN 控制/数据平面交互例子
以 Dijkstra 路由应用为例:
- 交换机向控制器上报链路状态、端口状态等信息;
- 控制器维护全网拓扑;
- 路由控制应用在控制器之上运行 Dijkstra;
- 应用把计算结果交给控制器;
- 控制器生成具体流表项;
- 控制器通过 OpenFlow 下发到交换机;
- 交换机按流表进行高速转发。
传统路由和 SDN 的区别就在这里:
- 传统网络:每台路由器分布式运行 Dijkstra;
- SDN 网络:控制器集中运行逻辑,再统一下发结果。
8.9 Google ORION
ORION 是 Google 的 SDN 控制平面,用于 Google 的数据中心网络 Jupiter 和广域网 B4。
ORION 提供的功能包括:
- intradomain routing;
- iBGP;
- traffic engineering;
- edge-edge flow-based controls,例如 CoFlow scheduling;
- 管理和监控;
- OpenFlow 交换机信令和监控。
这说明 SDN 不是纸面概念,而是在大型真实网络中已经大规模使用。
8.10 OpenDaylight 和 ONOS
OpenDaylight,ODL
ODL 控制器包括:
- northbound API;
- southbound API;
- Service Abstraction Layer,SAL。
SAL 用于连接内部和外部应用、服务,提供统一抽象。
ONOS
ONOS 强调:
- 控制应用和控制器分离;
- northbound abstractions;
- intent framework,即用户描述"想要什么",系统决定"怎么实现";
- 分布式核心,重视可靠性、复制、性能扩展。
8.11 SDN 的挑战
SDN 也有挑战:
- 控制平面必须可靠;
- 必须具备高性能和可扩展性;
- 必须安全;
- 必须能容忍故障;
- 控制平面最好从设计之初就 baked in dependability and security;
- 某些网络有 mission-specific requirements,比如实时、超可靠、超安全;
- 如果扩展到单个 AS 之外,Internet 级别扩展更困难;
- SDN 在 5G 蜂窝网络中非常关键。
8.12 SDN 和传统协议的未来
PPT 最后提出一个开放问题:
传统路由表可以由分布式协议计算,也可以由 SDN 控制器计算。
那么是否也可以用类似 SDN 的方式计算拥塞控制?
例如:
控制器根据路由器上报的拥塞程度,直接设置发送端速率。
这说明 SDN 思想可能不仅影响路由和转发,也可能影响更多传统网络协议。
9. ICMP:网络层控制消息协议
9.1 ICMP 的作用
ICMP 全称是:
Internet Control Message Protocol。
它用于主机和路由器之间交换网络层控制信息。
主要功能包括:
- 错误报告;
- 目的网络不可达;
- 目的主机不可达;
- 目的协议不可达;
- 目的端口不可达;
- TTL 过期;
- ping 使用的 echo request / echo reply。
ICMP 可以理解为网络层的"控制消息机制"。
它在逻辑上位于网络层之上,但 ICMP 报文被封装在 IP 数据报中传输。
9.2 ICMP 报文格式
ICMP 消息包括:
- type;
- code;
- 导致错误的 IP 数据报的前若干字节。
常见 type/code:
| Type | Code | 描述 |
|---|---|---|
| 0 | 0 | echo reply,用于 ping 回复 |
| 3 | 0 | destination network unreachable |
| 3 | 1 | destination host unreachable |
| 3 | 2 | destination protocol unreachable |
| 3 | 3 | destination port unreachable |
| 3 | 6 | destination network unknown |
| 3 | 7 | destination host unknown |
| 4 | 0 | source quench,过去用于拥塞控制,现在不用 |
| 8 | 0 | echo request,用于 ping 请求 |
| 9 | 0 | route advertisement |
| 10 | 0 | router discovery |
| 11 | 0 | TTL expired |
| 12 | 0 | bad IP header |
9.3 Traceroute 的原理
Traceroute 利用 ICMP 和 TTL。
源主机会向目的主机发送一组 UDP 段:
- 第一组 TTL=1;
- 第二组 TTL=2;
- 第三组 TTL=3;
- 以此类推。
当第 n 组数据报到达第 n 个路由器时,TTL 变成 0。该路由器丢弃数据报,并向源主机发送 ICMP 消息:
type 11, code 0,TTL expired。
源主机收到 ICMP 后记录:
- 该路由器的 IP 地址;
- 可能包含的路由器名字;
- RTT。
通常每个 TTL 发送 3 个 probes,因此 traceroute 会显示每一跳的多个 RTT。
停止条件是:
- UDP 段最终到达目的主机;
- 目的主机发现目标端口不可达;
- 目的主机返回 ICMP destination port unreachable,即 type 3, code 3;
- 源主机收到后停止。
一句话:
traceroute 通过不断增加 TTL,让沿途路由器依次返回 TTL expired,从而探测路径。
10. 网络管理:SNMP、MIB、NETCONF、YANG
10.1 什么是网络管理?
一个自治系统中可能有成千上万个硬件和软件组件。网络管理员必须监控、配置和控制这些组件。
PPT 用飞机、核电站等复杂系统类比网络。它们都需要持续监控和精确配置。
网络管理关注的问题包括:
- 设备是否在线;
- 接口是否异常;
- 链路是否拥塞;
- 配置是否正确;
- 路由器、防火墙、交换机是否按预期运行。
10.2 网络管理的组件
PPT 中给出三个核心组件。
| 组件 | 含义 |
|---|---|
| Managing server | 管理服务器,运行管理应用,通常有人类管理员参与 |
| Managed device | 被管理设备,例如路由器、交换机、防火墙 |
| Data | 设备状态、配置数据、运行数据、设备统计信息 |
网络管理本质上就是:
管理服务器读取和修改被管理设备上的状态与配置数据。
10.3 网络管理的三种方式
1. CLI
CLI 是 Command Line Interface。
管理员可以通过 SSH 等方式登录设备,然后直接输入命令。
优点是直接、灵活。
缺点是:
- 面向单设备;
- 容易手工出错;
- 自动化程度低;
- 不适合大规模网络。
2. SNMP/MIB
SNMP 是 Simple Network Management Protocol。
管理员通过 SNMP 查询或设置设备中的 MIB 数据。
MIB 是 Management Information Base,即管理信息库。
SNMP 更偏向监控和简单管理。
3. NETCONF/YANG
NETCONF/YANG 更面向抽象、全网、整体化管理。
- YANG 是数据建模语言;
- NETCONF 用于在管理服务器和设备之间传输 YANG 兼容的数据与操作;
- 重点是多设备配置管理。
10.4 SNMP 协议
SNMP 有两种传递 MIB 信息和命令的方式:
- request/response mode:管理服务器主动请求,设备响应;
- 设备也可以主动通知管理端某些事件。
SNMP PDU 包括:
- PDU type;
- Request ID;
- Error Status;
- Error Index;
- Name/Value 变量绑定。
SNMP 消息可以用于 get 或 set 设备变量。
10.5 MIB:管理信息库
MIB 存储的是被管理设备的运行数据和部分配置数据。
特点:
- 每个设备可以有 MIB module;
- RFC 定义了数百个标准 MIB;
- 厂商可以定义更多私有 MIB;
- MIB 变量可以描述 UDP 协议、接口状态、设备统计等。
SMI,Structure of Management Information,是描述 MIB 数据结构的数据定义语言。
可以理解为:
MIB 是设备可被管理的数据集合,SMI 是描述这些数据的数据定义语言。
10.6 NETCONF 概述
NETCONF 的目标是:
主动地、全网范围地管理和配置设备。
它运行在 managing server 和 managed devices 之间。
NETCONF 支持:
- retrieve:获取配置;
- set:设置配置;
- modify:修改配置;
- activate:激活配置;
- 多设备 atomic commit;
- 查询运行状态和统计信息;
- 订阅设备通知;
- RPC 模式;
- XML 编码消息;
- 运行在安全可靠传输协议之上,例如 TLS。
10.7 NETCONF 会话过程
NETCONF 会话通常包括:
- 初始化连接;
- hello 能力交换;
- rpc 请求;
- rpc-reply 响应;
- notification 通知;
- close-session 关闭会话。
10.8 常见 NETCONF 操作
| 操作 | 作用 |
|---|---|
<get-config> |
获取某个配置的全部或部分内容 |
<get> |
获取配置状态和运行状态数据 |
<edit-config> |
修改被管理设备上的配置 |
<lock> / <unlock> |
锁定或解锁配置数据,防止 NETCONF、SNMP、CLI 等其他来源同时修改 |
<create-subscription> |
创建事件通知订阅 |
<notification> |
设备向管理端发送通知 |
PPT 示例中,NETCONF RPC 可以修改 running configuration,把 Ethernet 0/0 接口的 MTU 改成 1500。
这里不需要死记 XML 细节,重点是理解:
NETCONF 用结构化 RPC 来管理设备配置,比逐台设备手工 CLI 更适合自动化和一致性管理。
10.9 YANG
YANG 是一种数据建模语言,用来描述 NETCONF 管理数据的:
- 结构;
- 语法;
- 语义;
- 约束条件。
YANG 有内置数据类型,类似 SMI。
根据 YANG 描述,可以生成 XML 文档,用于描述设备能力和配置结构。
YANG 还可以表达数据之间必须满足的约束,从而保证 NETCONF 配置的正确性和一致性。
一句话:
NETCONF 负责"怎么通信和操作",YANG 负责"数据长什么样、是否合法"。
11. 本章总结
本章围绕网络层控制平面展开,核心问题是:
路由器的转发表如何被计算、传播、安装和管理?
本章学到的主要内容包括:
- 网络层可以分为数据平面和控制平面;
- 传统控制平面是 per-router control,每台路由器运行路由算法;
- SDN 控制平面是 logically centralized control,由控制器计算和安装转发表;
- 路由协议目标是找到从源到目的地的 good path;
- 链路状态算法使用 Dijkstra,要求全网拓扑信息;
- 距离向量算法基于 Bellman-Ford,只和邻居交换距离向量;
- LS 的问题包括消息复杂度和可能路由震荡;
- DV 的问题包括路由环路和 count-to-infinity;
- Internet 用 AS 解决规模和管理自治问题;
- OSPF 是 AS 内部的链路状态协议;
- BGP 是 AS 之间的路径向量协议,是 Internet 的"胶水";
- BGP 强调策略,不只是最短路径;
- SDN 通过控制器、数据平面交换机和控制应用实现开放可编程网络;
- OpenFlow 是控制器和交换机之间的重要协议;
- ICMP 用于网络层错误报告和控制消息,ping 和 traceroute 都依赖它;
- 网络管理可以通过 CLI、SNMP/MIB、NETCONF/YANG 完成;
- SNMP 更偏监控,NETCONF/YANG 更偏结构化配置管理。
12. 第 5 章考试重点与易错点
12.1 必须掌握的算法题
Dijkstra 表格题
必须会:
- 初始化 (N')、(D(v))、(p(v));
- 每轮选最小 D;
- 更新邻居;
- 画最短路径树;
- 根据最短路径树写转发表。
Bellman-Ford / DV 计算题
必须会:
D_x(y)=\\min_v{c_{x,v}+D_v(y)}
看到题目给邻居距离向量时,要逐个目的地计算最小值。
12.2 必须掌握的概念对比
LS vs DV
| LS | DV |
|---|---|
| 全局拓扑 | 邻居距离 |
| Dijkstra | Bellman-Ford |
| 链路状态广播 | 邻居交换 DV |
| 可能路由震荡 | 可能无穷计数 |
OSPF vs BGP
| OSPF | BGP |
|---|---|
| AS 内部 | AS 之间 |
| 链路状态协议 | 路径向量协议 |
| 用 Dijkstra | 按策略选择路径 |
| 更关注性能 | 更关注策略 |
| 直接运行在 IP 上 | 运行在 TCP 上 |
Per-router control vs SDN control
| 传统控制平面 | SDN 控制平面 |
|---|---|
| 每台路由器自己运行算法 | 控制器集中计算 |
| 分布式协议交互 | 控制器统一下发表 |
| 设备封闭、配置复杂 | 开放接口、可编程 |
12.3 易错点
易错点 1:BGP 不是最短路径协议
BGP 首先看策略,然后才看 AS-PATH 长度、NEXT-HOP 距离等。
易错点 2:OSPF 是 intra-AS,不是 inter-AS
OSPF 用在一个 AS 内部,BGP 用在 AS 之间。
易错点 3:SDN 的集中不是物理单点
SDN 是逻辑集中式控制,不代表一定只有一台控制器。
易错点 4:ICMP 封装在 IP 里
ICMP 是网络层控制消息,但它的报文被 IP 数据报承载。
易错点 5:DV 的无穷计数根因是"不知道路径"
距离向量只知道距离,不知道完整路径,因此容易互相误导。
13. 自测题
13.1 选择/判断类
-
forwarding 属于数据平面,routing 属于控制平面。
答案:对。
-
Dijkstra 算法要求每个节点知道完整拓扑和链路代价。
答案:对。
-
距离向量算法中,每个节点需要向全网广播完整拓扑。
答案:错。DV 只和邻居交换距离向量。
-
OSPF 是 AS 之间路由协议。
答案:错。OSPF 是 AS 内部路由协议。
-
BGP 运行在 TCP 之上。
答案:对。
-
BGP 一定选择 AS-PATH 最短的路径。
答案:错。BGP 先看策略,AS-PATH 只是其中一个选择因素。
-
Hot potato routing 指的是尽快把流量交给其他 AS。
答案:对。
-
ICMP type 11 code 0 表示 TTL expired。
答案:对。
-
SNMP 更偏监控,NETCONF/YANG 更偏结构化配置管理。
答案:对。
13.2 简答题
题 1:为什么 Internet 要引入 AS?
因为全球 Internet 太大,不能让所有路由器运行一个扁平路由协议;同时 Internet 是多个组织管理的 network of networks,每个组织需要管理自治。AS 可以把路由分成 AS 内部路由和 AS 之间路由,从而提升可扩展性并满足管理策略需求。
题 2:解释 count-to-infinity 问题。
在距离向量算法中,路由器只知道邻居到目的地的距离,不知道完整路径。当链路代价变大时,两个邻居可能互相误以为对方有更好的路径,从而不断增加距离估计,形成无穷计数问题。
题 3:BGP 中 AS-PATH 和 NEXT-HOP 分别有什么作用?
AS-PATH 是路径经过的 AS 列表,用于防止环路,也可用于路径选择。NEXT-HOP 指明到达下一跳 AS 的具体内部路由器,用于 AS 内部把分组送到正确出口。
题 4:SDN 相比传统路由的优势是什么?
SDN 把控制逻辑从路由器中抽离出来,由逻辑集中式控制器维护网络状态、计算转发表并下发给交换机。这样更容易管理、编程和做流量工程,也更开放,有利于创新。
题 5:Traceroute 为什么能显示每一跳?
Traceroute 发送 TTL 逐步增加的 UDP 数据报。TTL 到 0 的路由器会丢弃数据报并返回 ICMP TTL expired。源主机记录返回 ICMP 的路由器地址和 RTT。最终目的主机返回端口不可达,源主机停止。
14. 最后一页复习版
第五章一句话:
网络层控制平面负责计算和管理转发表。传统网络靠路由器分布式运行 LS/DV、OSPF/BGP 等协议;SDN 把控制逻辑集中到控制器;ICMP 用于网络层控制消息;SNMP、NETCONF、YANG 用于网络管理和配置。
最重要的五个关键词:
- Dijkstra;
- Bellman-Ford;
- OSPF;
- BGP;
- SDN。
最容易考的三类题:
- Dijkstra 填表和写转发表;
- 距离向量 Bellman-Ford 更新;
- OSPF/BGP/SDN/ICMP/SNMP 的概念对比。