SDN 与 OpenFlow:软件定义网络详解
一、先理解为什么需要 SDN
在传统网络中(比如企业网络、运营商网络),网络设备(交换机、路由器)通常是控制和转发一体化的。
例如一个传统交换机:
网络管理员
|
v
+-------------+
| 交换机 |
| |
| 控制平面 |
| (决定怎么转) |
| + |
| 转发平面 |
| (真正发包) |
+-------------+
|
数据包转发
交换机内部同时负责:
-
控制平面(Control Plane)
-
学习 MAC 地址
-
运行 STP
-
计算路由
-
生成转发表
-
-
数据平面(Data Plane)
-
根据转发表查找
-
把数据包从端口转出去
-
例如:
收到数据包:
目的 MAC = AA:BB:CC
交换机查询:
MAC表:
AA:BB:CC ---> port 3
然后:
从 port 3 转发
问题是:
1. 网络设备太"聪明"
每台交换机都有自己的控制逻辑:
交换机A:
运行 STP
交换机B:
运行 STP
交换机C:
运行 STP
整个网络像:
A
/ \
B---C
A自己决定
B自己决定
C自己决定
管理员很难统一控制。
2. 网络变化越来越复杂
比如云计算:
一天可能发生:
虚拟机1
|
迁移
|
虚拟机2
但是:
IP地址
MAC地址
流量路径
安全策略
都可能变化。
传统网络:
管理员需要:
修改交换机1配置
修改交换机2配置
修改交换机3配置
...
非常困难。
于是提出:
SDN(Software Defined Networking)
即:
软件定义网络
核心思想:
把网络的控制逻辑从交换机里面抽离出来,集中到一个软件控制器中。
二、SDN 是什么?
SDN 是一种网络架构思想。
核心:
控制平面和数据平面分离。
传统:
交换机
+----------------+
| 控制平面 |
| 路由计算 |
| STP |
+----------------+
| 数据平面 |
| 转发数据包 |
+----------------+
SDN:
SDN Controller
(网络大脑)
|
|
OpenFlow协议
|
|
+----------------+
| Switch |
| |
| 数据平面 |
| 只负责转发 |
+----------------+
交换机变成:
一个执行命令的数据转发设备。
三、SDN 三层架构
SDN 通常分为三层:
+--------------------------------+
| 应用层 Application |
| |
| 网络安全 |
| 负载均衡 |
| QoS策略 |
+--------------------------------+
|
|
+--------------------------------+
| 控制层 Control Layer |
| |
| SDN Controller |
| 网络操作系统 |
+--------------------------------+
|
|
+--------------------------------+
| 数据层 Data Layer |
| |
| OpenFlow Switch |
| 普通交换机 |
+--------------------------------+
1. 应用层(Application Layer)
负责:
告诉网络应该怎么工作
例如:
防火墙应用
规则:
禁止:
10.0.0.5 ---> Internet
告诉 Controller:
添加流规则
负载均衡应用
例如:
服务器:
Client
|
|
v
Load Balancer
|
+---- Server A
|
+---- Server B
应用层决定:
80%流量去A
20%流量去B
2. 控制层(Control Layer)
核心就是:
SDN Controller
它类似:
网络操作系统
常见 Controller:
-
ONOS
-
OpenDaylight Project
-
Ryu Network Operating System
Controller负责:
-
网络拓扑发现
-
路由计算
-
下发流表
-
网络策略管理
例如:
发现:
交换机:
S1 ----- S2
|
|
S3
计算:
A到B:
A
|
S1
|
S2
|
B
然后通知交换机。
3. 数据层(Data Layer)
就是交换机。
但是 SDN 交换机特点:
它不负责:
-
路由算法
-
网络策略
-
控制逻辑
只负责:
收到包
↓
查表
↓
执行动作
四、OpenFlow 是什么?
现在进入重点:
OpenFlow 是 SDN 中控制器和交换机通信的一种协议。
简单理解:
SDN 是思想。
OpenFlow 是实现这个思想的一种协议。
关系:
SDN
|
|
+----------------+
| |
OpenFlow 其他协议
类似:
面向对象思想
|
|
Java语言实现
C++实现
SDN:
理念
OpenFlow:
实现方式之一
五、OpenFlow 如何工作?
核心:
Flow Table(流表)
OpenFlow交换机里面有流表。
类似:
传统交换机:
MAC表
MAC地址 ---> 端口
OpenFlow:
Flow Table
匹配条件 ---> 动作
例如:
匹配:
目的IP = 10.0.0.8
动作:
发送到 port 3
完整结构:
+--------------------------------+
| Flow Table |
+--------------------------------+
Match Action
IP=10.0.0.1 ---> port 2
TCP port=80 ---> server A
MAC=AA:BB ---> drop
六、一个 OpenFlow 工作例子
假设:
Controller
|
|
OpenFlow协议
|
Client
|
|
S1
|
|
Server
第一次数据包:
Client ---> Server
S1收到:
查询流表:
有没有匹配规则?
没有!
于是:
Packet-In
发送给Controller
Controller:
分析:
目的IP:
10.0.0.5
路径:
S1 port2
生成规则:
match:
dst=10.0.0.5
action:
output port2
发送:
Flow-Mod
给交换机。
交换机:
安装:
Flow Table:
dst=10.0.0.5
↓
port2
以后:
Client
|
|
S1
直接转发
不用询问 Controller。
七、OpenFlow 流表结构
OpenFlow流表通常包含:
+--------------------+
| Match Fields |
+--------------------+
| Priority |
+--------------------+
| Counters |
+--------------------+
| Instructions |
+--------------------+
1. Match
匹配字段:
可以匹配:
二层:
MAC地址
VLAN
三层:
IP地址
四层:
TCP/UDP端口
例如:
src IP=10.0.0.1
dst IP=10.0.0.2
TCP dst port=80
2. Priority
优先级。
例如:
规则1:
所有HTTP流量
转发服务器A
priority=10
规则2:
10.0.0.5访问HTTP
转发服务器B
priority=100
匹配两个时:
选择:
priority高的规则
3. Counters
统计:
例如:
匹配次数:
10000
字节:
10MB
可以用于:
-
流量分析
-
计费
-
监控
4. Action
动作:
例如:
output port 3
drop
modify header
send controller
八、SDN 和 OpenFlow 的关系总结
| SDN | OpenFlow | |
|---|---|---|
| 是什么 | 网络架构思想 | 通信协议 |
| 目标 | 控制和转发分离 | 控制器控制交换机 |
| 范围 | 更大 | 更具体 |
| 位置 | 架构层面 | 协议层面 |
| 类似 | 操作系统思想 | 系统调用接口 |
关系:
SDN
控制面/数据面分离
|
|
Controller
|
|
OpenFlow协议
|
|
Switch
九、SDN 的优势
1. 集中控制
传统:
S1 自己决定
S2 自己决定
S3 自己决定
SDN:
Controller
|
-----------------
S1 S2 S3
统一管理。
2. 网络自动化
例如:
服务器扩容:
以前:
修改几十台交换机配置
现在:
修改Controller策略
自动下发
3. 灵活编程
网络可以像软件一样:
if:
用户=VIP
then:
走高速链路
十、SDN 的不足
1. Controller 成为关键点
如果:
Controller挂掉
怎么办?
所以需要:
Controller集群
C1
/ \
C2----C3
2. 性能问题
如果所有流量:
交换机
↓
Controller
会产生压力。
所以:
第一次:
询问Controller
之后:
交换机本地转发
3. 部署成本
传统网络:
买交换机
配置交换机
SDN:
需要:
Controller
软件系统
自动化平台
十一、实际应用场景
1. 数据中心网络
例如:
云厂商:
用户创建虚拟机
↓
SDN自动创建网络
↓
配置安全策略
↓
完成通信
2. 云计算
虚拟网络:
VM1
|
虚拟交换机
|
VM2
通过 SDN 管理。
3. 网络安全
动态防火墙:
发现攻击:
攻击IP
↓
Controller
↓
所有交换机阻断
最后用一句话总结
SDN 是一种网络架构思想,它把“决定怎么走”的控制逻辑从交换机中抽离出来,集中到软件控制器;OpenFlow 是实现 SDN 的一种协议,它规定控制器如何告诉交换机安装流表、如何转发数据。
可以简单记:
SDN = 网络的大脑搬家
OpenFlow = 大脑和四肢之间的通信语言
Controller = 大脑
Switch = 四肢
Flow Table = 大脑下达的动作指令表
这也是现代云数据中心网络(如虚拟网络、网络自动化、云原生网络)的重要基础。