SDN软件定义网络概述
约 1932 字大约 6 分钟
sdnnetworking
2025-07-16
概述
SDN(Software-Defined Networking)将网络的控制平面与数据平面分离,通过集中化的软件控制器来管理网络设备的转发行为。这一架构革新打破了传统网络设备的封闭性,使网络变得可编程、可自动化、更加灵活。
SDN架构
三层架构说明:
| 层次 | 组件 | 职责 |
|---|---|---|
| 应用平面 | 网络应用 | 定义网络行为和策略 |
| 控制平面 | SDN控制器 | 全局路由决策、策略下发 |
| 数据平面 | 网络设备 | 按照流表进行数据转发 |
传统网络 vs SDN
| 特性 | 传统网络 | SDN |
|---|---|---|
| 控制方式 | 分布式(每台设备独立) | 集中式(控制器统一管理) |
| 可编程性 | 低(CLI/SNMP) | 高(REST API/编程接口) |
| 设备角色 | 控制+转发 | 仅转发 |
| 网络视图 | 局部(单设备) | 全局(控制器掌握全网拓扑) |
| 厂商锁定 | 严重 | 较低(开放接口) |
| 变更速度 | 慢(人工配置) | 快(自动化下发) |
OpenFlow协议
OpenFlow是最早也是最典型的SDN南向接口协议,定义了控制器与交换机之间的通信标准。
OpenFlow流表结构:
流表项组成:
+---------------+----------+---------------+-----------+----------+
| Match Fields | Priority | Instructions | Counters | Timeouts |
| (匹配字段) | (优先级) | (指令/动作) | (计数器) | (超时) |
+---------------+----------+---------------+-----------+----------+
Match Fields(匹配字段):
- 入端口 (in_port)
- 源/目的MAC地址
- VLAN ID
- 源/目的IP地址
- IP协议号
- 源/目的端口号
- MPLS标签
Instructions(指令):
- Forward: 转发到指定端口
- Drop: 丢弃
- Modify: 修改报文头部
- Group: 发送到组表(多播/负载均衡)
- Meter: 限速OpenFlow流表示例(Python Ryu控制器):
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, set_ev_cls
from ryu.ofproto import ofproto_v1_3
class SimpleSwitch(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def packet_in_handler(self, ev):
msg = ev.msg
dp = msg.datapath
ofp = dp.ofproto
parser = dp.ofproto_parser
# 匹配条件:目的IP为10.0.0.2的TCP流量
match = parser.OFPMatch(
eth_type=0x0800,
ipv4_dst='10.0.0.2',
ip_proto=6
)
# 动作:从端口2转发
actions = [parser.OFPActionOutput(2)]
# 安装流表项
inst = [parser.OFPInstructionActions(
ofp.OFPIT_APPLY_ACTIONS, actions
)]
mod = parser.OFPFlowMod(
datapath=dp,
priority=100,
match=match,
instructions=inst,
idle_timeout=300,
hard_timeout=600
)
dp.send_msg(mod)SDN控制器
OpenDaylight (ODL)
- Java开发,模块化架构
- 支持丰富的南向协议
- 企业级特性(集群、高可用)
- Linux Foundation项目
ONOS (Open Network Operating System)
ONOS特点:
- 专注于运营商/大规模网络
- 分布式架构(使用Atomix实现一致性)
- 高性能(支持百万级流表下发/秒)
- Intent-based networking(基于意图的网络配置)
ONOS Intent示例:
{
"type": "HostToHostIntent",
"appId": "org.onosproject.cli",
"one": "00:00:00:00:00:01/None",
"two": "00:00:00:00:00:02/None"
}
# 控制器自动计算最优路径并下发流表网络功能虚拟化(NFV)
NFV将传统的网络功能(防火墙、负载均衡、IDS等)从专用硬件迁移到通用服务器上的虚拟化实例。
NFV架构组件:
| 组件 | 说明 |
|---|---|
| NFVI | 基础设施层(计算、存储、网络资源) |
| VNF | 虚拟网络功能(虚拟化的网络服务) |
| MANO | 管理和编排框架 |
| VIM | 虚拟基础设施管理器(如OpenStack) |
SDN与NFV的关系:
- SDN关注网络控制平面的集中化和可编程性
- NFV关注网络功能的虚拟化和弹性部署
- 两者互补:SDN提供网络连接编排,NFV提供网络功能编排
SD-WAN
SD-WAN将SDN理念应用于广域网,简化分支机构的网络管理。
SD-WAN核心功能:
1. 多链路智能选路
- 实时监测链路质量(延迟、抖动、丢包)
- 基于应用SLA自动选择最优路径
- 关键业务走MPLS,普通流量走互联网
2. 零接触部署(ZTP)
- 设备上电后自动连接编排器
- 自动下载配置和策略
- 大幅降低分支部署成本
3. 应用感知
- DPI(深度包检测)识别应用
- 基于应用的QoS策略
- SaaS应用直接分流到互联网数据平面编程(P4)
P4(Programming Protocol-independent Packet Processors)是一种用于编程网络数据平面的语言:
// P4简单示例:自定义转发逻辑
header ethernet_t {
bit<48> dstAddr;
bit<48> srcAddr;
bit<16> etherType;
}
header ipv4_t {
bit<4> version;
bit<4> ihl;
bit<8> diffserv;
bit<16> totalLen;
bit<32> srcAddr;
bit<32> dstAddr;
}
parser MyParser(packet_in packet, out headers hdr) {
state start {
packet.extract(hdr.ethernet);
transition select(hdr.ethernet.etherType) {
0x0800: parse_ipv4;
default: accept;
}
}
state parse_ipv4 {
packet.extract(hdr.ipv4);
transition accept;
}
}
control MyIngress(inout headers hdr, inout metadata meta) {
action forward(bit<9> port) {
standard_metadata.egress_spec = port;
}
table ipv4_lpm {
key = { hdr.ipv4.dstAddr: lpm; }
actions = { forward; drop; }
}
apply {
if (hdr.ipv4.isValid()) {
ipv4_lpm.apply();
}
}
}SDN在实际中的应用
1. 数据中心网络
- Google B4:SDN管理全球数据中心间WAN
- Facebook Fabric:SDN管理数据中心内部网络
- 目标:链路利用率从30-40%提升到95%+
2. 运营商网络
- AT&T ECOMP/ONAP:网络功能编排
- 中国移动NovoNet:SDN/NFV网络重构
3. 企业网络
- VMware NSX:数据中心网络虚拟化
- Cisco ACI:应用为中心的基础设施
4. 云计算网络
- OpenStack Neutron:虚拟网络管理
- Kubernetes CNI:容器网络接口总结
SDN通过分离控制平面和数据平面,使网络变得可编程和自动化。OpenFlow是经典的SDN协议,但现代SDN已扩展到更广泛的范畴,包括NFV、SD-WAN和可编程数据平面。SDN的核心价值在于网络的软件化管理,使网络能够像云计算一样灵活编排。选择SDN方案时,应根据场景需求(数据中心、广域网、企业网)选择合适的架构和工具。
贡献者
更新日志
2026/3/14 13:09
查看所有更新日志
9f6c2-feat: organize wiki content and refresh site setup于