目录
- 导语
- [一、5.5.1 SDN控制平面:SDN控制器和SDN网络控制应用程序](#一、5.5.1 SDN控制平面:SDN控制器和SDN网络控制应用程序)
- [二、5.5.2 OpenFlow协议](#二、5.5.2 OpenFlow协议)
- [三、5.5.3 数据平面和控制平面交互的例子](#三、5.5.3 数据平面和控制平面交互的例子)
- [四、5.5.4 SDN的过去与未来](#四、5.5.4 SDN的过去与未来)
- 本节核心总结(必看)
- 结语
导语
大家好呀~前面几节我们学习了传统的分布式路由选择------OSPF和BGP,每个路由器自己跑路由协议、自己算路由。这一节我们来学习一种完全不同的控制平面架构------SDN(Software Defined Networking,软件定义网络)。
SDN是近十年来网络领域最大的变革。它的核心思想是:把控制平面从路由器中抽出来,放到一个集中的控制器中,路由器只保留数据平面功能(转发)。 控制器掌握全网拓扑,统一计算和下发路由,网络功能可以通过软件编程实现,非常灵活。
4.4节我们学习了SDN的数据平面------OpenFlow的匹配+操作。这一节我们学习SDN的控制平面------SDN控制器的架构、OpenFlow协议的控制消息、数据平面和控制平面的交互过程,以及SDN的发展历程。准备好了吗?让我们走进SDN的世界~

一、5.5.1 SDN控制平面:SDN控制器和SDN网络控制应用程序
1. SDN控制平面的特点
回顾4.1节,SDN控制平面和传统分布式控制平面有本质区别:
| 对比项 | 传统分布式控制平面 | SDN集中控制平面 |
|---|---|---|
| 控制逻辑位置 | 每台路由器中 | 集中控制器中 |
| 路由器功能 | 数据平面+控制平面 | 仅数据平面(转发) |
| 网络视图 | 每个路由器只有局部视图 | 控制器有全网视图 |
| 新功能部署 | 需要升级每台路由器的软件 | 在控制器上写应用程序即可 |
| 容错性 | 分布式,单点故障影响小 | 控制器可能成为单点(需集群) |
SDN控制平面的核心是逻辑集中------控制器在逻辑上是一个集中的控制点,但物理上可以是分布式的集群(为了容错和性能)。
2. SDN控制器的架构
一个典型的SDN控制器(如ONOS、OpenDaylight)分为三层:
第一层:通信层(Communication Layer)
负责控制器和数据平面设备(交换机/路由器)之间的通信。最常用的协议是OpenFlow,也支持NETCONF、OVSDB等。这一层把设备上报的事件(如数据包到达、链路状态变化)传给上层,把上层的决策(如下发流表)传给设备。
第二层:网络状态管理层(Network State Management Layer)
维护全网的网络状态信息,包括:
- 拓扑信息(哪些设备、哪些链路、链路状态)
- 主机信息(主机MAC/IP、连接在哪个端口)
- 流表信息(每个设备上的流表项)
- 统计信息(端口流量、流表匹配次数)
这一层提供了一个全网网络状态数据库,上层应用可以查询和修改这些状态。
第三层:应用程序层(Application Layer)
运行各种网络控制应用程序,这些应用通过控制器提供的API(北向API)来实现网络功能。比如:
- 路由应用:计算最短路径,下发流表
- 防火墙应用:根据策略过滤流量
- 负载均衡应用:把流量分发到多个服务器
- 流量工程应用:优化网络资源利用
应用程序不需要关心底层设备的细节,只需要通过API操作网络状态------这就是SDN"软件定义"的含义。
3. SDN控制器的例子
主流的开源SDN控制器:
- ONOS(Open Network Operating System):面向运营商网络,高可用、高性能
- OpenDaylight(ODL):面向企业和数据中心,功能丰富,模块化
- Floodlight:轻量级,适合学习和实验
- Ryu:Python编写,适合开发和研究
商业SDN控制器包括思科APIC、VMware NSX、华为Agile Controller等。
二、5.5.2 OpenFlow协议
1. OpenFlow概述

OpenFlow是SDN中控制器和交换机之间通信的标准协议,由ONF(开放网络基金会)制定。4.4节我们学习了OpenFlow的数据平面(流表、匹配+操作),这一节学习OpenFlow的控制平面消息。
OpenFlow使用TCP作为传输层协议(控制器监听6653端口,旧版本用6633),支持TLS加密。控制器和交换机之间建立一条TCP连接,所有OpenFlow消息都通过这条连接传输。
2. OpenFlow消息类型
OpenFlow消息分为三大类:
(1)控制器→交换机(Controller-to-Switch)
控制器主动发给交换机的消息:
- Features Request/Reply:控制器请求交换机的能力信息(支持多少流表、多少端口、什么操作),交换机回复。
- Flow Mod:控制器下发、修改或删除流表项。这是最常用的消息------控制器计算好路由后,通过Flow Mod把流表项下发到交换机。
- Packet Out:控制器让交换机从指定端口发送一个数据包(通常是控制器处理完Packet In后,把数据包发出去)。
- Barrier Request/Reply:控制器请求交换机确认之前的操作都已完成,保证操作顺序。
- Set Config:设置交换机的配置参数(如miss发送到控制器的数据包长度)。
(2)交换机→控制器(Asynchronous)
交换机主动发给控制器的消息(异步,不需要控制器请求):
- Packet In:交换机收到一个数据包,但流表中没有匹配项(table miss),就把数据包(或其头部)发给控制器处理。这是SDN中"首包触发"的核心机制。
- Flow Removed:交换机上的流表项超时或被删除时,通知控制器。
- Port Status:端口状态变化(up/down)时通知控制器,控制器据此更新拓扑。
- Error:交换机处理控制器消息出错时,返回错误信息。
(3)对称消息(Symmetric)
双方都可以发送:
- Hello:连接建立时,双方协商OpenFlow版本。
- Echo Request/Reply:心跳消息,检测连接是否存活。
- Experimenter:厂商扩展消息。
3. OpenFlow的流表超时机制
OpenFlow流表项有两种超时时间:
- idle_timeout:流表项在多长时间内没有匹配到数据包就自动删除(空闲超时)
- hard_timeout:流表项不管有没有匹配,到时间就自动删除(硬超时)
超时机制很重要------它让流表不会无限增长,也让网络变化时旧的流表项能自动清理。控制器也可以通过Flow Mod消息主动删除流表项。
三、5.5.3 数据平面和控制平面交互的例子
1. 首包触发流程

让我们用一个具体例子来说明SDN中数据平面和控制平面的交互过程。假设有一个SDN网络,控制器已经掌握了全网拓扑。主机A要给主机B发数据包:
第1步:数据包到达交换机S1
主机A发送的数据包到达交换机S1的端口1。S1查找流表,没有匹配项(table miss)。
第2步:S1发送Packet In给控制器
S1把数据包(或头部)封装在Packet In消息中,通过OpenFlow连接发给控制器。同时,S1可以把数据包缓存在本地(buffer),等控制器指示。
第3步:控制器处理数据包
控制器收到Packet In后:
- 解析数据包的源MAC、目的MAC、源IP、目的IP等
- 查询网络状态数据库,找到目的主机B连接在哪个交换机的哪个端口
- 运行路由算法(如Dijkstra),计算从S1到S2的最短路径
- 确定路径上每台交换机应该怎么转发
第4步:控制器下发流表
控制器通过Flow Mod消息,给路径上的每台交换机(S1、中间交换机、S2)下发流表项:
- S1:匹配目的MAC=B,输出端口2
- 中间交换机:匹配目的MAC=B,输出端口X
- S2:匹配目的MAC=B,输出端口Y(连接主机B的端口)
第5步:控制器发送Packet Out
控制器通过Packet Out消息,让S1把之前缓存的数据包从端口2发出去(因为流表已经下发好了,后续数据包直接匹配流表转发)。
第6步:后续数据包直接转发
主机A后续发给主机B的数据包到达S1后,直接匹配流表项,从端口2转发,不需要再触发Packet In。整个过程微秒级完成。
这就是SDN的"首包触发、后续快速转发"模式------第一个数据包走慢速路径(控制器处理),后续数据包走快速路径(流表转发)。
2. 链路故障处理
当网络中的一条链路断开时:
- 检测到链路故障的交换机通过Port Status消息通知控制器
- 控制器更新网络状态数据库(标记链路为down)
- 控制器重新计算受影响的路由
- 控制器通过Flow Mod更新相关交换机的流表项(删除旧路径、添加新路径)
- 流量切换到新路径
整个过程由控制器集中处理,比传统分布式路由的收敛更可控。
四、5.5.4 SDN的过去与未来
1. SDN的发展历程

SDN不是突然出现的,它经历了长期的演进:
2004-2007年:思想萌芽
斯坦福大学的研究人员开始思考"网络能不能像计算机一样可编程"。4D项目(Decision, Dissemination, Discovery, Data)提出了控制平面和数据平面分离的思想。
2008年:OpenFlow诞生
斯坦福大学的Nick McKeown教授团队发表了OpenFlow论文,提出了开放的交换机控制接口。OpenFlow 1.0标准发布,SDN开始有了统一的协议标准。
2011年:ONF成立
开放网络基金会(ONF)成立,由Google、Facebook、微软等公司发起,负责推广OpenFlow和SDN标准。Google在内部数据中心部署了SDN(B4网络),证明了SDN的商业价值。
2012-2015年:商业化爆发
Nicira被VMware以12.6亿美元收购(NSX),思科推出ACI,OpenDaylight和ONOS等开源控制器兴起。SDN从学术走向产业。
2016年至今:成熟与融合
SDN在数据中心(云网络)和运营商网络中大规模部署。SDN和NFV(网络功能虚拟化)、云原生、网络自动化融合发展。
2. SDN的应用场景
SDN已经在很多场景落地:
- 数据中心网络:云计算数据中心用SDN实现虚拟网络(VXLAN)、微隔离、弹性扩缩容
- 运营商网络:用SDN实现流量工程、快速故障恢复、网络切片
- 校园网/企业网:用SDN实现集中管理、策略统一部署
- 5G核心网:5G核心网的UPF(用户面功能)就是SDN思想的体现
- 网络安全:用SDN实现动态防火墙、DDoS流量清洗、蜜网引流
3. SDN的挑战与未来
SDN面临的挑战:
- 控制器性能和可扩展性:大型网络中控制器需要处理大量Packet In和流表下发
- 控制器容错:控制器故障会影响全网,需要做集群和状态同步
- 安全:控制器是高价值攻击目标,需要强认证和加密
- 与传统网络兼容:SDN和传统网络混合部署时,需要互通方案
未来趋势:
- 意图驱动网络(Intent-Based Networking,IBN):管理员只需要表达"我想要什么"(意图),网络自动配置和验证
- AI/ML与网络结合:用机器学习预测流量、优化路由、检测异常
- 云原生网络:SDN和Kubernetes等容器平台深度融合
- 网络自动化:NetDevOps,网络配置像代码一样管理
本节核心总结(必看)
这一节学习了SDN控制平面,核心要点:
一、SDN控制器架构
- 三层架构:通信层(OpenFlow等)→ 网络状态管理层(全网状态数据库)→ 应用层(路由/防火墙/负载均衡等应用)
- 逻辑集中,物理可分布式集群
- 北向API供应用调用,南向协议(OpenFlow)控制设备
二、OpenFlow协议
- 控制器→交换机:Features、Flow Mod(下发流表)、Packet Out、Barrier
- 交换机→控制器:Packet In(首包触发)、Flow Removed、Port Status、Error
- 对称:Hello、Echo(心跳)
- 流表超时:idle_timeout和hard_timeout
三、数据控制平面交互
- 首包触发:Packet In → 控制器计算路由 → Flow Mod下发流表 → Packet Out发送首包 → 后续包快速转发
- 链路故障:Port Status通知 → 控制器更新拓扑 → 重新计算 → 更新流表
四、SDN发展
- 2008年OpenFlow诞生 → 2011年ONF成立 → 2012年商业化 → 现在大规模部署
- 应用:数据中心、运营商、5G、安全
- 未来:意图驱动网络、AI/ML、云原生、NetDevOps
关键概念清单
- SDN(软件定义网络):控制平面集中、数据平面可编程
- SDN控制器:集中控制平面,三层架构
- OpenFlow:控制器和交换机之间的标准协议
- Packet In:交换机把未匹配数据包发给控制器
- Flow Mod:控制器下发流表项
- Packet Out:控制器让交换机发送数据包
- 首包触发:第一个包走控制器,后续包走流表
- 北向API:控制器向上层应用提供的接口
- ONOS/OpenDaylight:主流开源SDN控制器
- 意图驱动网络(IBN):SDN的未来方向
结语
这一节我们学习了SDN控制平面------从控制器的三层架构,到OpenFlow协议的消息类型,到数据平面和控制平面的交互过程,再到SDN的发展历程和未来趋势。SDN代表了网络从"分布式、硬件绑定"向"集中化、软件定义"的范式转变,是近十年网络领域最重要的变革。
到这里,第5章的路由选择部分(5.1-5.5)就全部学完了。接下来我们学习两个辅助协议------5.6节的ICMP(因特网控制报文协议)和5.7节的网络管理(SNMP/NETCONF/YANG)。ICMP是ping和traceroute的底层原理,网络管理是运维工程师的必备技能。让我们继续前进吧!
如果你觉得这篇笔记对你有帮助,欢迎点赞收藏~有问题也欢迎留言讨论,我们一起进步!