Appearance
Packet Path
Network Layer
The data plane forwards each packet locally; the control plane decides the global routing state.
datagramrouterSDN
01Ingresspacket in
02Lookuptable hit
03Switchfabric
04Egresslink out
第五章:网络层:控制平面
上一章讨论的是 数据平面:分组进入路由器以后如何查表、排队、交换和转发。本章讨论 控制平面:这些转发表、路径选择和网络控制策略到底从哪里来。传统互联网依靠每台路由器运行分布式路由协议;SDN 则把控制逻辑抽象成逻辑集中式控制器,再通过开放接口向交换设备下发表项。
目录
- 5.1 本章主线:控制平面在做什么
- 5.2 路由抽象:子网、路由器、图和路径代价
- 5.3 路由算法的目标与分类
- 5.4 链路状态路由与 Dijkstra 算法
- 5.5 距离矢量路由与 Bellman-Ford 方程
- 5.6 LS 与 DV 的对比
- 5.7 层次化路由与自治系统
- 5.8 AS 内部路由:RIP 与 OSPF
- 5.9 AS 间路由:BGP
- 5.10 SDN 控制平面
- 5.11 ICMP 与 traceroute
- 5.12 网络管理:SNMP、MIB、NETCONF 与 YANG
- 5.13 本章小结
5.1 本章主线:控制平面在做什么
网络层有两个紧密相关但职责不同的平面:
| 平面 | 核心动作 | 时间尺度 | 典型实现 |
|---|---|---|---|
| 数据平面 | 按表项把到达分组从输入端口转到输出端口 | 每个分组,通常要求线速 | 路由器/交换机硬件 |
| 控制平面 | 计算路径、生成转发表或流表、管理网络状态 | 路由变化或策略变化时 | 路由协议或 SDN 控制器 |
控制平面有两种主要构建方式:
- 每路由器控制:每台路由器本地运行路由算法,和其他路由器交换路由信息,独立计算自己的转发表。RIP、OSPF、BGP 都属于这一传统体系。
- 逻辑集中式控制:远程控制器掌握网络状态,集中计算流表或转发表,再安装到数据平面设备中。SDN 采用这种思路,但控制器本身可以为了可靠性和扩展性而分布式实现。
如果把数据平面看成“按路牌开车”,控制平面就是“路牌是谁算出来、谁发布、谁维护”的问题。
5.2 路由抽象:子网、路由器、图和路径代价
互联网路由通常以 网络/子网前缀 为单位,而不是以单台主机为单位。一个子网内部共享前缀,主机之间一跳可达;路由器比较特殊,它有多个接口,分别属于多个网络,因此可以在网络之间转发分组。
从路由器视角看,主机到主机的跨网络通信可以简化成路由器之间的路径选择:
- 第一跳:源主机把分组交给本网络的默认网关。
- 中间跳:路由器根据目标子网逐跳选择下一跳。
- 最后一跳:到达目标网络所连路由器后,目标主机在该网络内可直接到达。
路由算法通常把网络抽象成图:
| 图元素 | 网络含义 |
|---|---|
| 节点 | 路由器集合 |
| 边 | 路由器之间的链路 |
| 链路代价 | 链路的度量值,可由跳数、带宽、延迟、拥塞程度等定义 |
| 路径 | 从源到目的经过的路由器序列 |
一条路径
链路代价由网络运营者定义。它可以永远为 1,也可以和带宽、延迟、队列长度或拥塞程度有关。选择什么指标,本质上是在表达“网络更重视什么”。
最优化原则
对某个目的节点来说,从所有节点到它的最优路径会形成一棵 汇集树 (sink tree)。路由算法的目标,就是为每台路由器找到通往各个目标网络的下一跳,使这些下一跳组合成代价较小、稳定且可用的路径。
路由表项的结果通常不是完整路径,而是:
text
目标网络前缀 -> 下一跳路由器 / 输出接口数据平面拿到这个结果后,再按最长前缀匹配逐跳转发。
5.3 路由算法的目标与分类
一个实用路由算法需要同时满足多个目标:
| 目标 | 含义 |
|---|---|
| 正确性 | 能给所有可达目标算出正确路径 |
| 简单性 | 算法和协议实现不能过度复杂 |
| 健壮性 | 能适应链路故障、路由器故障、流量变化和拓扑变化 |
| 稳定性 | 路由不应频繁摇摆 |
| 公平性 | 不应长期牺牲某些流量或目标 |
| 最优性 | 在给定指标下尽量选择低代价路径 |
路由算法可以从三个维度分类:
| 分类维度 | 类型 | 说明 |
|---|---|---|
| 信息来源 | 全局 | 每台路由器知道完整拓扑和链路代价,典型算法是链路状态算法 |
| 信息来源 | 分布式 | 路由器只知道邻居信息,通过邻居交换逐步收敛,典型算法是距离矢量算法 |
| 变化速度 | 静态 | 路由变化很慢,通常人工或低频更新 |
| 变化速度 | 动态 | 根据链路代价或拓扑变化自动更新 |
| 计算方式 | 集中式/逻辑集中式 | 控制器或全局状态驱动计算 |
| 计算方式 | 迭代分布式 | 每台路由器局部计算,邻居之间交换结果 |
本章先讨论两个经典算法:链路状态 (link state, LS) 和 距离矢量 (distance vector, DV),再看它们在互联网协议中的落地。
5.4 链路状态路由与 Dijkstra 算法
链路状态路由的基本思路是:每个路由器先获得全网拓扑和链路代价,然后独立运行最短路算法,算出自己到所有目的节点的最短路径树。
LS 路由可以分成五个动作:
| 步骤 | 动作 | 目的 |
|---|---|---|
| 1 | 发现邻居 | 通过 HELLO 等报文发现相邻路由器及其网络地址 |
| 2 | 测量链路代价 | 可用 ECHO 往返时间、带宽、人工配置等估计代价 |
| 3 | 组装 LS 分组 | 描述本路由器及其邻居链路代价 |
| 4 | 可靠泛洪 | 把 LS 分组扩散到所有路由器,让每台路由器得到同一份拓扑图 |
| 5 | 运行 Dijkstra | 以自己为源计算最短路径树和转发表 |
LS 分组通常包含发送者、序号、年龄和邻居代价列表。序号用于丢弃重复或过期分组;年龄字段用于防止旧分组在网络里永久存在。可靠泛洪实现时,还需要记录已见过的 (源路由器, 序号),并维护向哪些邻居转发、向哪些邻居应答。
Dijkstra 算法的状态
从源节点
| 记号 | 含义 |
|---|---|
| 已经确定最小代价路径的节点集合 | |
| 当前已知从源到节点 | |
| 当前路径上 | |
| 节点 |
算法框架如下:
text
N' = {u}
for every node v:
if v adjacent to u:
D(v) = c(u,v)
else:
D(v) = infinity
loop:
find w not in N' with minimum D(w)
add w to N'
for each neighbor v of w not in N':
D(v) = min(D(v), D(w) + c(w,v))
until all nodes are in N'最终可以通过每个节点的前序节点
复杂度与振荡
朴素 Dijkstra 在
如果链路代价直接依赖流量负载,LS 也可能振荡:路由器根据当前拥塞改走另一条路,流量迁移后原路径又变便宜,下一轮计算又改回去。实际网络会通过平滑代价、限制更新频率和工程化策略减少这种摇摆。
5.5 距离矢量路由与 Bellman-Ford 方程
距离矢量路由不要求每台路由器知道完整拓扑。每台路由器只维护自己到各目标的代价估计,并周期性或触发式地把这个向量发给邻居。收到邻居的距离矢量后,本路由器用 Bellman-Ford 方程更新自己的估计。
令
其中
DV 算法过程
每台路由器重复执行下面的事件循环:
text
wait until local link cost changes or a distance vector arrives
recompute D_x(y) for each destination y using Bellman-Ford
if any local distance estimate changes:
send the new distance vector to neighborsDV 的特点是:
- 迭代:路由器一轮轮更新自己的估计。
- 异步:不同路由器不需要同步时钟或同步轮次。
- 分布式:每台路由器只和邻居交换信息。
- 自终止:如果没有新的变化,就不会继续产生通告。
好消息快,坏消息慢
当链路代价下降时,低代价路径通常很快通过邻居通告扩散出去;这常被称为“好消息传得快”。当链路代价上升或链路失效时,DV 可能发生 无穷计数 (count-to-infinity):
发现自己到 的直接代价变大。 - 但邻居
还声称它能以较低代价到达 。 误以为可经 到达 ,更新并通告一个稍大的代价。 又以为可以经 到达 ,继续把代价加大。 - 两者来回更新,直到代价达到协议定义的“无穷大”。
RIP 使用毒性逆转等机制缓解这类问题,但分布式算法的收敛和环路处理仍然是 DV 的核心难点。
5.6 LS 与 DV 的对比
| 维度 | 链路状态 LS | 距离矢量 DV |
|---|---|---|
| 路由信息 | 每台路由器获得完整拓扑和链路代价 | 每台路由器只知道邻居通告的距离估计 |
| 计算方式 | 本地运行 Dijkstra | 根据 Bellman-Ford 与邻居迭代更新 |
| 消息传播 | 泛洪链路状态 | 邻居之间交换距离矢量 |
| 收敛速度 | 通常较快,但要运行最短路计算 | 变化较大,可能慢收敛 |
| 常见风险 | 代价依赖流量时可能振荡 | 路由环路、无穷计数、错误信息扩散 |
| 故障影响 | 错误链路状态会影响所有收到该状态的节点 | 错误距离可能被邻居继续传播 |
| 互联网实例 | OSPF、IS-IS | RIP,BGP 的路径矢量思想也源自 DV |
两类算法没有绝对优劣。LS 更依赖全局状态和泛洪机制,DV 更轻量但收敛行为更复杂。互联网在不同范围内同时使用了它们。
5.7 层次化路由与自治系统
如果把整个互联网当成一个平面网络,让所有路由器都知道所有网络的路由信息,会遇到两个根本问题:
| 问题 | 原因 |
|---|---|
| 规模问题 | 目标网络数量巨大,路由信息存储、传输和计算代价过高 |
| 管理自治问题 | 不同网络归不同组织所有,各自希望控制内部策略并隐藏内部细节 |
互联网的解决办法是 层次化路由:把网络划分为自治系统 (autonomous system, AS),每个 AS 通常由一个 ISP、企业或组织管理,并用 AS Number (ASN) 标识。
| 层次 | 范围 | 协议类型 | 解决的问题 |
|---|---|---|---|
| AS 内部路由 | 一个自治系统内部 | 内部网关协议 IGP,如 RIP、OSPF、IS-IS、EIGRP | AS 内各子网和路由器如何互达 |
| AS 间路由 | 自治系统之间 | 外部网关协议 EGP,事实标准是 BGP | 各 AS 如何通告可达性、选择跨域路径 |
层次化带来两个好处:
- 规模可控:AS 内部路由只处理本 AS 内有限数量的路由器和子网;AS 间路由把一个 AS 抽象成更粗粒度的节点。
- 管理独立:不同 AS 可以运行不同的内部路由协议,并根据商业关系和策略决定是否接收、选择或再通告某条路径。
5.8 AS 内部路由:RIP 与 OSPF
AS 内部路由更关注性能、快速收敛和资源利用,因为整个 AS 通常属于同一管理者。课件主要讨论 RIP 和 OSPF。
RIP
RIP (Routing Information Protocol) 是经典距离矢量协议,早期在 BSD UNIX 中实现。
| 特性 | RIP 行为 |
|---|---|
| 算法 | 距离矢量 |
| 代价 | 每条链路代价为 1,以跳数为指标 |
| 最大距离 | 15 跳;16 表示不可达 |
| 通告周期 | 邻居间约每 30 秒交换距离矢量 |
| 通告内容 | 每条通告最多包含 25 个目标网络的可达信息 |
| 失效检测 | 约 180 秒未收到邻居通告,则认为邻居或链路失效 |
| 环路缓解 | 毒性逆转,把不可达路径以 16 跳通告 |
| 实现方式 | routed 守护进程,通告报文通过 UDP 传送 |
RIP 的一个有趣点是:它虽然服务于网络层路由,但实现上是一个应用进程,借助 UDP 报文交换路由信息。
OSPF
OSPF (Open Shortest Path First) 是开放的链路状态协议,也是更现代、更常用的 AS 内部路由协议之一。
| 特性 | OSPF 行为 |
|---|---|
| 算法 | 链路状态 |
| 通告方式 | 每台路由器向 AS 内泛洪链路状态通告 |
| 承载方式 | 直接运行在 IP 之上,不使用 TCP 或 UDP |
| 路径计算 | 每台路由器得到拓扑和代价后运行 Dijkstra |
| 代价指标 | 可使用带宽、延迟等多种链路代价 |
| 安全性 | OSPF 报文可认证,防止恶意注入 |
OSPF 支持层次化区域:
| 角色 | 作用 |
|---|---|
| 本地区域 | 区域内路由器只需要掌握本区域详细拓扑 |
| 骨干区域 | 连接多个区域,承载区域间路由 |
| 区域边界路由器 | 汇总本区域可达信息,并通告到骨干区域 |
| 边界路由器 | 连接其他 AS,同时参与外部路由 |
| 内部路由器 | 在本区域内泛洪 LS 信息并计算区域内路由 |
这种结构让大型 AS 内部也能继续分层,避免所有路由器都维护整个 AS 的完整细节。
5.9 AS 间路由:BGP
BGP (Border Gateway Protocol) 是 AS 间路由的事实标准,常被称为把互联网粘在一起的协议。它让一个 AS 可以向其他 AS 通告:
text
我拥有这些网络前缀;或者,通过我可以到达这些网络前缀。BGP 有两种会话范围:
| 类型 | 作用 |
|---|---|
| eBGP | 不同 AS 的网关路由器之间交换前缀可达性信息 |
| iBGP | 在同一个 AS 内部传播从外部学到的可达性信息 |
BGP 被称为 路径矢量协议。它不只通告“到某前缀的距离”,还通告到达该前缀经过的 AS 序列,从而能检测环路,并为策略选择提供依据。
BGP 路由信息与属性
BGP 通告的基本形式是:
text
prefix + attributes两个关键属性是:
| 属性 | 含义 |
|---|---|
| AS-PATH | 到达该前缀要经过的 AS 序列 |
| NEXT-HOP | 到下一跳 AS 的具体边界路由器 |
网关路由器收到路径后,不一定接受,也不一定再通告。AS 可以根据输入策略和输出策略过滤路径,例如不愿经过某个 AS、不愿为非客户网络承载过境流量,或者已有更偏好的路径。
BGP 报文
BGP 对等体通过半永久 TCP 连接交换报文:
| 报文 | 作用 |
|---|---|
| OPEN | 打开到 BGP 对等体的连接并认证对等体 |
| UPDATE | 通告新路径或撤回旧路径 |
| KEEPALIVE | 在没有 UPDATE 时保持连接,也可确认 OPEN |
| NOTIFICATION | 报告错误并关闭连接 |
BGP 如何影响转发表
AS 内部路由和 AS 间路由共同决定最终表项。假设 AS1 的内部路由器通过 iBGP 得知“经边界路由器 1c 可以到达前缀 X”,那么它还要靠 AS 内部路由协议算出自己到 1c 的路径。最终转发表通常是:
text
目标前缀 X -> 到达边界路由器 1c 的输出接口这说明 BGP 负责选择跨 AS 的出口和路径属性,OSPF/RIP 等 IGP 负责把分组送到本 AS 内正确的出口。
热土豆路由
热土豆路由 (hot potato routing) 指 AS 内路由器选择 离自己最近的出口网关,尽快把流量交给别的 AS。它不一定选择全局 AS 路径最短的出口,而是更关注本 AS 内部代价。
BGP 路由选择常见顺序是:
- 最高本地偏好值。
- 最短 AS-PATH。
- 最近 NEXT-HOP,也就是热土豆路由。
- 其他附加规则。
为什么 AS 内和 AS 间路由差异这么大
| 维度 | AS 内部路由 | AS 间路由 |
|---|---|---|
| 管理者 | 同一组织 | 多个独立组织 |
| 主要目标 | 性能、收敛、资源利用 | 策略、商业关系、可扩展性 |
| 路径选择 | 代价指标更重要 | 策略通常比性能更重要 |
| 拓扑可见性 | 可以暴露较多内部信息 | 倾向隐藏内部结构 |
AS 间路由不是单纯的最短路问题。客户、提供商、对等互联、过境流量等商业关系会直接决定某些路径是否被通告和是否被采用。
5.10 SDN 控制平面
传统互联网控制平面把路由算法放在每台路由器里,由私有路由器操作系统运行 IP、RIP、OSPF、BGP 等协议。SDN 重新思考这个结构:把控制平面从数据平面设备中抽离出来,由逻辑集中式控制器计算和安装表项。
SDN 的动机主要有三点:
| 动机 | 说明 |
|---|---|
| 管理更简单 | 网络策略集中表达,减少逐台设备配置错误 |
| 控制更灵活 | 基于通用匹配表项的交换设备可被控制器编程 |
| 接口更开放 | 控制平面不再完全绑定在厂商私有实现里,便于创新 |
传统路由在流量工程上的限制
如果只靠目的地址转发和链路权重,网络运营者能调的旋钮很少。例如:
- 想让
的流量走某条特定路径,通常只能改链路权重,让最短路算法间接得到这个结果。 - 想把同一对源目的之间的流量分摊到两条路径,传统最短路协议不容易表达。
- 想让同一出口上的不同业务流走不同策略,基于目的地址的转发也难以表达。
第四章提到的通用转发和 OpenFlow 把动作抽象成“匹配字段 + 执行动作”,为 SDN 的可编程控制提供了数据平面基础。
SDN 的四个特征
| 特征 | 含义 |
|---|---|
| 通用的基于流转发 | 流表可匹配链路层、网络层、传输层等字段 |
| 控制平面与数据平面分离 | 交换机负责快速转发,控制器负责计算表项 |
| 控制功能位于交换设备之外 | 路由、访问控制、负载均衡等逻辑作为控制应用运行 |
| 可编程控制 | 控制应用通过 API 使用控制器提供的网络状态和控制能力 |
SDN 控制器结构
SDN 控制器常被称为 network OS,它负责维护网络状态并对上、对下提供接口:
| 层次 | 作用 |
|---|---|
| 网络控制应用 | 路由、访问控制、防火墙、负载均衡、流量工程等 |
| 北向 API | 给控制应用提供网络图、统计、意图、流表等抽象 |
| 网络状态管理 | 维护链路、主机、交换机、流表和统计信息,通常需要分布式可靠存储 |
| 南向 API / 通信层 | 通过 OpenFlow、SNMP、NETCONF、OVSDB 等协议和设备交互 |
| SDN 交换设备 | 实现高速通用转发,按控制器安装的表项处理分组 |
控制器逻辑上集中,但工程上常常分布式实现,以满足性能、可扩展性、容错和安全需求。
OpenFlow 协议
OpenFlow 是控制器和交换机之间的一类南向协议,使用 TCP 交换报文,加密可以作为可选能力。它和 OpenFlow API 不同:API 描述通用转发行为,协议负责控制器和设备之间实际通信。
OpenFlow 报文可以分为三类:
| 类别 | 方向 | 例子 |
|---|---|---|
| 控制器到交换机 | 控制器主动控制设备 | 查询特性、配置设备、增加/删除/修改流表项、让交换机从指定端口发包 |
| 交换机到控制器 | 设备向控制器上报事件 | packet-in、流移除、端口状态变化 |
| 对称消息 | 双向或通用 | hello、echo 等连接维护消息 |
一个典型控制循环是:
- 交换机检测到链路失效,通过 OpenFlow 端口状态消息通知控制器。
- 控制器更新网络状态数据库。
- 已注册的链路状态路由应用被触发。
- 路由应用读取拓扑和链路状态,运行 Dijkstra 计算新路径。
- 控制器中的流表计算模块生成新的表项。
- 控制器通过 OpenFlow 把更新安装到相关交换机。
ODL、ONOS 与挑战
OpenDaylight (ODL) 和 ONOS 都是 SDN 控制器实践。ODL 强调网络编排、服务抽象层和多种南向协议;ONOS 强调应用与控制器分离、意图框架和分布式核心。
SDN 的难点也很现实:
- 控制平面本身必须可靠、可信、安全、可扩展。
- 控制器故障不能让网络整体失控。
- 网络状态要足够新,又不能被更新流量淹没。
- 大范围跨 AS 部署比单个数据中心或运营商网络内部更困难。
5.11 ICMP 与 traceroute
ICMP (Internet Control Message Protocol) 用于主机和路由器之间传送网络层控制信息。它不是传输层协议,而是被封装在 IP 数据报中。
ICMP 报文包含类型、代码,以及触发错误的 IP 数据报头部和前 8 字节。常见类型如下:
| Type | Code | 含义 |
|---|---|---|
| 0 | 0 | echo reply,ping 响应 |
| 3 | 0 | 目标网络不可达 |
| 3 | 1 | 目标主机不可达 |
| 3 | 2 | 目标协议不可达 |
| 3 | 3 | 目标端口不可达 |
| 8 | 0 | echo request,ping 请求 |
| 9 | 0 | 路由器通告 |
| 10 | 0 | 路由器发现 |
| 11 | 0 | TTL 过期 |
| 12 | 0 | IP 头部错误 |
traceroute 的基本机制
traceroute 利用 TTL 和 ICMP 观察路径上的路由器:
- 源主机向目标发送一系列 UDP 段。
- 第一轮设置 TTL=1,第二轮 TTL=2,依此类推,通常每个 TTL 发多个探测包。
- 第
轮探测包到达第 个路由器时 TTL 变为 0,路由器丢弃该分组,并返回 ICMP TTL expired。 - 源主机收到 ICMP 报文后记录路由器地址和往返时间。
- 当 UDP 段最终到达目标主机时,由于目标端口通常未开放,目标返回 ICMP port unreachable。
- 源主机以这个端口不可达报文作为停止条件。
因此,ping 主要测试端到端连通性和 RTT;traceroute 则逐跳暴露路径和每跳 RTT。
5.12 网络管理:SNMP、MIB、NETCONF 与 YANG
网络管理要监测、测试、配置、分析和控制网络设备,使网络以合理成本满足可用性、性能和服务质量要求。一个 AS 可能有大量互操作的软硬件元素,因此需要系统化管理机制。
网络管理的基本角色如下:
| 元件 | 作用 |
|---|---|
| 管理服务器/控制器 | 运行管理应用,通常有人类管理员或自动化系统参与 |
| 被管设备 | 具有可管理、可配置硬件和软件组件的路由器、交换机等设备 |
| 代理数据 | 设备状态、配置参数、运行参数和统计信息 |
| 网络管理协议 | 用于查询、配置设备,或让设备上报事件 |
管理员可以通过三类方式管理网络:
| 方式 | 特点 |
|---|---|
| CLI | 直接登录单台设备输入命令或脚本,简单但不适合大规模自动化 |
| SNMP/MIB | 查询或设置 MIB 中的设备变量,也能接收异常事件通知 |
| NETCONF/YANG | 面向网络范围配置,抽象程度更高,强调多设备配置管理 |
SNMP 与 MIB
SNMP (Simple Network Management Protocol) 以管理服务器和被管设备代理之间的交互为核心。它有两种基本模式:
| 模式 | 说明 |
|---|---|
| request/response | 管理服务器主动查询或设置设备数据 |
| trap | 被管设备主动向管理服务器报告异常事件 |
常见 SNMP 报文类型:
| 报文 | 方向 | 功能 |
|---|---|---|
| GetRequest | manager -> agent | 读取指定数据 |
| GetNextRequest | manager -> agent | 读取列表中的下一个数据 |
| GetBulkRequest | manager -> agent | 批量读取数据 |
| SetRequest | manager -> agent | 设置 MIB 变量 |
| Response | agent -> manager | 返回值或响应请求 |
| Trap | agent -> manager | 报告异常事件 |
MIB (Management Information Base) 是被管设备运行数据和部分配置数据的集合。MIB 模块由对象 ID 标识,SMI (Structure of Management Information) 则提供数据定义语言。典型变量包括 UDP 输入数据报数、无端口可交付数据报数、输出数据报数等计数器。
NETCONF
NETCONF 的目标是主动管理和配置网络范围内的设备。它运行在管理服务器和被管设备之间,采用远程过程调用 (RPC) 范式,报文通常编码为 XML,并运行在安全、可靠传输之上。
NETCONF 支持:
- 请求、设置、修改和激活配置。
- 对多个设备执行原子配置操作。
- 查询运行状态和统计数据。
- 订阅设备通知。
常见操作包括:
| 操作 | 作用 |
|---|---|
<get-config> | 检索给定配置的全部或部分内容 |
<get> | 检索配置状态和操作状态数据 |
<edit-config> | 修改被管设备上的配置 |
<lock> / <unlock> | 锁定或解锁配置数据存储,避免并发修改冲突 |
<create-subscription> | 启用事件通知订阅 |
<notification> | 被管设备发送事件通知 |
NETCONF 会话通常包括 <hello> 能力交换、多个 <rpc> / <rpc-reply> 交互、可能的 <notification>,最后通过 <close-session> 关闭。
YANG
YANG 是用于描述 NETCONF 管理数据的数据建模语言。它规定配置数据的结构、语法和语义,包含内置数据类型,也能表达配置之间必须满足的约束。
可以把三者关系简化为:
text
YANG 定义数据模型
NETCONF 按模型读写配置和状态
设备根据配置改变运行行为SNMP 更偏向监测和简单变量管理;NETCONF/YANG 更偏向结构化、可验证、可自动化的大规模配置管理。
5.13 本章小结
本章的核心问题是:网络层的转发表和控制状态如何被计算、分发、管理和更新?
需要掌握的主线:
- 控制平面决定路径和表项,数据平面按表项逐包转发。
- 路由通常以子网为单位,图抽象把路由器表示为节点,把链路表示为带代价的边。
- 链路状态算法让每台路由器掌握全局拓扑,再用 Dijkstra 计算最短路径。
- 距离矢量算法只在邻居间交换距离估计,用 Bellman-Ford 迭代收敛。
- LS 和 DV 各有代价:LS 依赖泛洪和全局状态,DV 可能出现环路和无穷计数。
- 互联网通过 AS 实现层次化路由,AS 内部协议解决性能和可达性,BGP 解决跨 AS 可达性和策略。
- RIP 是经典 DV 协议;OSPF 是开放的 LS 协议,并支持区域层次化。
- BGP 是路径矢量协议,核心是前缀、AS-PATH、NEXT-HOP、策略和通告控制。
- SDN 把控制逻辑移到逻辑集中式控制器,通过北向/南向 API 和 OpenFlow 等协议编程数据平面。
- ICMP 支持错误报告、
ping和traceroute等网络诊断。 - SNMP/MIB、NETCONF/YANG 提供网络监测、配置和管理机制。
下一章的问题是:当一个分组已经知道下一跳后,它如何在单条链路上被封装、传输、校验并交付?