Appearance
SDN 软件定义网络
2026 大纲 四(一)3 SDN 基本概念。大纲用的是"基本概念"四个字,要求止于理解,不涉及配置与协议细节。控制面 / 数据面这对概念本身见《网络层功能》,传统路由器上这两个面在硬件里的位置见《路由器与三层转发》。
一、为什么非分不可
上一篇把网络层的工作拆成了控制面与数据面,但在传统网络里,这两个面长在同一台设备里:每台路由器既跑路由协议算路,又负责转发。SDN 要做的事只有一句话——把控制面从设备里拿出来,集中到一处。问题是,为什么要费这个劲。
常见的说法有三条:厂商配置方式各不相同、新策略要逐台去配、新协议得等厂商出固件。这三条都成立,但都不是根本动因。根本动因在算法上。
分布式路由协议算出来的是"每一对源宿之间的最短路",可运营者真正想要的常常是别的目标——"让所有链路利用率都不超过 70%""让 A 到 B 的流量走这条贵但可靠的线""晚上把备份流量挤到闲置链路"。这些都是全局的、带约束的优化问题,而 OSPF 只会闷头算最短路,你能改的只有链路代价这一个旋钮。用一个旋钮去逼近复杂的运维目标,既笨拙又顾此失彼。
要做全局优化,就必须有一个实体拥有并能作用于全网视图——这个实体只能在设备之外。于是有了 SDN 的两个动作:分离(设备不再算路由,只保留转发)+ 集中(控制器持全网视图,统一算规则再下发)。
这里有两处措辞容易记岔,值得先按住。
分离的是位置,不是功能。 转发照做、"匹配 + 动作"照做,只是算路的地点从每台设备挪到了控制器。SDN 并没有"消灭路由",路由该算还是要算,只是换了个地方算。
"软件定义"不等于"用软件替代硬件"。 定义的是网络的行为与策略;硬件交换机仍然存在、仍然负责高速转发。变的是"谁说了算",不是"谁在干活"。
二、三层架构与两个接口
控制面被抽出来以后,整个网络就分成了三层:
应用层通过北向接口提需求;控制层的控制器维护全网拓扑与状态、计算转发规则;数据层的 SDN 交换机只按流表转发,不参与路由计算。
控制器夹在中间做两次翻译:向上把网络能力抽象成 API,向下把抽象的意图翻译成流表。
两个接口的方向别记反。北向是控制器 ↔ 应用,走 RESTful API 之类,传的是"意图",没有统一标准——因为意图的表达方式因应用而异,做不出通用的那一套。南向是控制器 ↔ 交换机,走 OpenFlow,传的是流表项,有开放标准——必须有,否则控制器换一家交换机就要重写。记法可以简化成一句:北向对人,南向对机器。
三、流表:SDN 能力的真正来源
传统设备的转发决策被协议层次锁死——二层设备只准看 MAC,三层设备只准看 IP。流表把这个约束拿掉了:同一台设备可以按"目的 IP + TCP 端口号"这样一个跨层组合来决定动作。所谓"软件定义",定义的就是"按什么来分类、分完之后怎么处理"。
也正因如此,SDN 交换机既不是二层交换机也不是三层路由器,它是一台"按控制器指定的规则做匹配-动作"的通用转发设备,传统的交换与路由都可以看成它的特例。
一条流表项由五部分构成:匹配字段(入端口、源/目的 MAC、VLAN、源/目的 IP、协议类型、源/目的端口号……)、优先级、计数器、动作/指令、超时(分空闲超时与硬超时,到期自动删除)。
把它和前面学过的两张表摆在一起,差别就很清楚了:
| 匹配什么 | 怎么匹配 | 表从哪来 | |
|---|---|---|---|
| MAC 地址表 | 只看目的 MAC | 精确匹配 | 交换机自学习 |
| 转发表 | 只看目的 IP 前缀 | 最长前缀匹配 | 由路由表导出 |
| 流表 | 二到四层任意字段组合 | 通配 + 优先级 | 控制器下发 |
流表的动作还多出两样是前两者做不到的:改写首部,以及上送控制器。
匹配流程是从第 1 张流表开始逐张往下走,多条命中时取优先级最高的那条:
图里的 table-miss 本身也是一条流表项——它是优先级最低、匹配字段全通配的那条,动作通常是"上送控制器"。在 OpenFlow 里,"没有规则"也必须写成一条规则。
规则什么时候下发,分两种风格。反应式是等分组来了、miss 了再下发,代价可以量化:每条新流的第一个分组都要走完"上送控制器 → 控制器决策 → 下发流表 → 分组返回转发"一整圈,控制器离交换机越远这一圈越久。主动式是控制器预先把规则装满,首包直接命中、无额外时延。真实部署常混用——常规流量用主动式预装,例外情况才落到反应式。
顺带澄清一个常见误解:控制器不在数据通路上。只有 table-miss 的首个分组会经过它,正常流量根本不碰它。
四、这笔交换划不划算
SDN 用集中带来的全局最优与可编程性,换掉了分布式协议天然的容错性与可扩展性。这笔交换的代价是具体的:控制器是单点,首包有额外时延,控制通道要单独保障(带内走数据网省钱但脆弱、带外另建管理网可靠但贵),规模一大控制器的计算与状态量就成了瓶颈。
控制器集群能缓解单点问题,但集群立刻带来状态一致性——正是分布式协议当初想避开的东西,绕了一圈又回来了。
所以场景决定成败:数据中心拓扑规整、运营者单一、要做精细的流量工程,划算;广域互联网跨管理域、规模巨大、必须容忍任意故障,不划算。这就是因特网骨干至今仍然跑 BGP 的原因。
传统网络与 SDN 的逐项横向对照(想一次性对比九个维度时展开)
| 对比项 | 传统网络 | SDN |
|---|---|---|
| 控制平面位置 | 分布在每台设备中 | 集中在控制器 |
| 转发决策 | 每台设备独立计算 | 控制器统一计算后下发 |
| 网络视图 | 每台设备只有局部视图 | 控制器拥有全局视图 |
| 转发依据 | 被协议层次锁死(MAC 表 / IP 转发表) | 流表,可跨层任意字段组合 |
| 可编程性 | 低,依赖厂商实现与协议标准 | 高,通过北向 API 编程 |
| 设备角色 | 既转发又计算路由 | 只负责转发 |
| 全局优化 | 难(只能调链路代价这一个旋钮) | 可以直接表达带约束的优化目标 |
| 容错 | 分布式,天然抗单点故障 | 控制器是单点,需要集群 |
| 典型场景 | 广域网、因特网骨干 | 数据中心、企业网 |
本节小结
- 分离的是控制平面的位置,不是它的功能。 转发与"匹配 + 动作"依然在交换机上做,只是算路挪到了控制器;"软件定义"定义的是网络行为与策略,硬件交换机仍负责高速转发。分离的根本动因是分布式协议只能算最短路、只有链路代价一个旋钮,做不了带约束的全局优化。
- 三层两接口:应用层 — 北向(RESTful API 等,对人,无统一标准)— 控制层(控制器)— 南向(OpenFlow,对机器,有标准)— 数据层。流表由匹配字段、优先级、计数器、动作、超时组成;它与 MAC 表、转发表的根本差别是不受协议层次约束,可按二到四层任意字段组合分类,动作还包括改写首部与上送控制器。
- 集中是有价的:控制器单点、首包时延、控制通道需单独保障、大规模下控制器成瓶颈。数据中心划算、广域互联网不划算,因特网骨干至今跑 BGP。
考点速记
SDN 在真题里被考过的形式只有一种,而且只考南北向接口的方向。
控制器向交换机下发流表用哪个接口(cn-2022-37)。四个选项是东向、南向、西向、北向,答 B 南向。判据就是那句"北向对人、南向对机器"——下发流表是控制器对交换机说话,方向朝下,走南向;北向是应用程序向控制器提需求的那一侧。至于东向、西向,指的是控制器与控制器之间(多控制器集群互相同步状态),本题里两个都是干扰项。
这道题看着简单,但它选中的正是整个 SDN 章节里唯一有明确方向性、可以设计成四选一的知识点。其余内容——分离与集中的动因、流表的跨层匹配、集中的代价——在真题里不单独成题,它们的作用是让你在读到"南向接口"这四个字时能立刻反应出"那一侧连的是交换机",而不是靠死记方位。
易错:北向接口对应用、南向接口对交换机。 下发流表朝下走南向;东向和西向指控制器之间,与交换机无关。
易错:SDN 交换机不参与路由计算,但仍然做转发。 分离的是控制面的位置,不是转发功能。
易错:"软件定义"不是"用软件替代硬件转发"。 硬件交换机照旧负责高速转发。
易错:table-miss 也是一条流表项——优先级最低、全通配。别答成"没有匹配项时不查表"。
易错:控制器不在数据通路上。 只有 table-miss 的首包上送控制器,正常流量不经过它。
易错:流表可以匹配二到四层的任意字段组合,这正是它区别于 MAC 表(只看目的 MAC)和转发表(只看目的 IP 前缀)的地方。
教材出处
- 谢希仁《计算机网络》(第 8 版)4.10 软件定义网络 SDN 简介,印刷版 p194–p200:
- SDN 是体系结构、不是协议,在 p194——"SDN 不是协议,更不是一种产品。SDN 是一个体系结构,是一种设计、构建和管理网络的新方法或新概念,其要点就是把网络的控制层面和数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备";同页给出 OpenFlow 的定位——"可以把协议 OpenFlow 看成是在 SDN 体系结构中控制层面和数据层面之间的通信接口,它使得控制层面的控制器可以对数据层面中的物理设备或虚拟设备,进行直接访问和操纵"。
- OpenFlow 不是 SDN 的必要条件在 p195——"SDN 并未规定必须使用 OpenFlow,只不过是大部分 SDN 的产品采用了 OpenFlow 作为其控制层面与数据层面的接口";同页说明本篇按 1.3 版本组织的依据——"到 2015 年 3 月发布了版本 1.5.1(283 页),但目前较为成熟的是 1.3 版本"。
- 流表就是"匹配 + 动作"的转发表在 p195——"在 SDN 中,取代传统转发表的是'流表'(flow table)。因此,流表就是'匹配+动作'的转发表";同页也说明了为什么不再叫路由器——"这种完成'匹配+动作'的设备,就不应当称为路由器了,而是叫作'分组交换机'或'OpenFlow 交换机'"。
- 匹配字段与匹配不上时的处理在 p196——"首部字段值:这是一组字段,用来使入分组(incoming packet)的对应首部与之相匹配,因此又称为匹配字段。匹配不上的分组就被丢弃,或发送到远程控制器做更多的处理";跨层匹配同页——"图 4-72 所示的匹配字段有 11 个项目涉及三个层次的首部。这就是说,OpenFlow 的匹配抽象与我们以前讲过的分层的原则明显不同"。
- ⚠️ 教材的图 4-72 画的是 OpenFlow 1.0 版本的流表,表项只列首部字段值、计数器、动作三项;本篇正文按教材自己指明的 1.3 版本组织,故多出优先级与超时两项。
本篇内容按 408 大纲「四(一)3 SDN 基本概念」的要求组织,只覆盖大纲明确要求的概念层面:控制平面与数据平面分离、集中式控制与分布式控制的差别、三层架构与南北向接口、OpenFlow 流表的"匹配 + 动作"结构。OpenFlow 的字段清单、版本差异、控制器实现等均不在大纲范围内,本篇一律只作了解性提及,不展开、不要求记忆。
相关知识
网络层功能:路由、转发与异构网络互联|路由器与三层转发|路由算法:距离向量 vs 链路状态|以太网交换机的自学习