SDN 与 OpenFlow:软件定义网络详解

一、先理解为什么需要 SDN

在传统网络中(比如企业网络、运营商网络),网络设备(交换机、路由器)通常是控制和转发一体化的。

例如一个传统交换机:

                 网络管理员
                     |
                     v
              +-------------+
              |   交换机     |
              |             |
              | 控制平面     |
              | (决定怎么转) |
              |      +      |
              | 转发平面     |
              | (真正发包)   |
              +-------------+
                    |
              数据包转发

交换机内部同时负责:

  1. 控制平面(Control Plane)

    • 学习 MAC 地址

    • 运行 STP

    • 计算路由

    • 生成转发表

  2. 数据平面(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 = 大脑下达的动作指令表

这也是现代云数据中心网络(如虚拟网络、网络自动化、云原生网络)的重要基础。