乐于分享
好东西不私藏

网络基础知识(68)——SDN软件定义网络:架构与华为解决方案

网络基础知识(68)——SDN软件定义网络:架构与华为解决方案

一、SDN是什么

刚接触SDN的时候,有点懵。传统网络干了多年,概念怎么变成"软件定义"了?

经过了解理清楚:传统网络设备(交换机、路由器)有个特点——控制平面和数据平面绑死在同一个盒子里。每个设备自己跑自己的路由协议,自己算自己的路由。听起来没问题,但实际工作中会发现几个让人头疼的地方:

  • 网络设备配置要一台一台登上去敲命令,稍有疏忽就出错

  • 新业务上线,从申请到配置完毕往往要好几周

  • 网络策略?基本靠人在每台设备上手工保证一致,根本没法统一

  • 出了问题排查起来特别麻烦,因为状态分散在几十台甚至上百台设备里

SDN就是冲着这些问题来的。它的想法其实不复杂:把控制平面从设备里抽出来,集中到一个控制器(Controller)上去。设备只管转发,控制器管一切逻辑。

这个思路一出来,各个厂商售前PPT上就开始刹不住车了。这几年SDN已经从"概念"走到了"实际部署",不少数据中心和园区网都在用了。


二、SDN的基本思路

传统网络到底哪里不好

说"传统网络不行"太绝对了,wa跑得好好的。但碰到大一点的场景,问题就出来了:

传统设备是分布式控制的,每台交换机、路由器自己决定自己的事。好处是去中心化,挂一台不影响其他;坏处是你想做一点全局性的策略,就得挨个登设备去配,而且很难保证不出错。

我踩过一次坑:有一次做全网VLAN调整,手工配了三十多台接入交换机,结果有一台的trunk允许列表漏配了一个VLAN,排查了半天。这种事在传统网络里太常见了。

SDN的做法

SDN把事情反过来——控制集中,转发简化

  1. 控制器集中管理:全网拓扑、路由计算、策略下发,全在控制器上

  2. 设备只管转发:支持开放接口(比如OpenFlow),接收控制器的指令

  3. 网络可编程:上层应用通过API(一般是REST API)跟控制器打交道,不用管底层设备是什么型号

  4. 配置统一下发:控制器把配置推给设备,不用逐台登录

这套东西听着挺理想化的,实际落地的时候还是有挑战的,后面会聊到。

SDN能带来什么好处

列举几个实际的:

  • 管理简单了:控制器上配一次,全网生效。不用挨个登设备。

  • 业务上线快:原来要几周的配置工作,现在可以在控制器上批量下发,几分钟搞定。

  • 能搞自动化:控制器可以跟运维系统对接,实现自动部署、故障自愈之类的。

  • 生态开放:有了开放API,第三方应用也能来操作网络,不再被厂商绑定死。

当然,这些都是"能带来"的好处,实际能不能吃到,还得看你的场景和落地方式。


三、SDN架构到底长什么样

SDN架构一般画成三层,我们一层一层说。

+------------------+
|    应用层(Application Layer)            |
|  - 网络应用(负载均衡、安全、监控等) |
+------------------+
          ↑ 北向接口(NBI,如REST API)
+------------------+
|    控制层(Control Layer)             |
|  - SDN控制器(Controller)            |
|  - 网络拓扑管理、路径计算、策略下发  |
+------------------+
          ↑ 南向接口(SBI,如OpenFlow、Netconf)
+------------------+
|   基础设施层(Infrastructure Layer)      |
|  - 网络设备(交换机、路由器)          |
|  - 只负责转发,接受控制器管理        |
+------------------+

应用层

应用层就是跑在SDN上面的各种网络应用,比如负载均衡、安全策略、流量监控、流量工程之类的。

这些应用不需要直接跟交换机对话,它们通过北向接口(NBI)跟控制器通信。控制器把网络抽象成一个"资源池",应用只管提需求,不用管底下怎么实现。

北向接口最常见的是REST API(基于HTTP/JSON),也有一些用Java API或者Python API的。

控制层

这一层是SDN的"大脑",也就是控制器所在的地方。

控制器干的事情挺多的:

  1. 拓扑管理:发现全网有哪些设备、怎么连接的

  2. 路径计算:根据策略算出来流量该怎么走

  3. 策略下发:通过南向接口把流表推给交换机

  4. 设备管理:监控设备状态,管理设备配置

业界常见的SDN控制器有几个:

  • OpenDaylight:开源项目,Linux基金会旗下,生态比较丰富

  • ONOS:也是开源的,定位是运营商级SDN控制器

  • Floodlight:轻量级开源控制器,适合学习和小场景

  • 华为Agile Controller:华为自己的控制器,跟华为设备整合得好

  • 华三SeerEngine:华三的SDN控制器

  • Cisco ACI:思科的方案,偏数据中心场景

基础设施层

这一层就是传统的网络设备了——交换机、路由器、防火墙等。

在SDN架构里,这些设备的角色变了:它们不再自己做决策,而是听从控制器的指挥。具体表现是:

  • 支持OpenFlow等南向接口协议

  • 接收控制器下发的流表

  • 根据流表做转发决策


四、OpenFlow协议

OpenFlow是SDN里最有名的南向接口协议,定义了控制器和交换机之间怎么通信。

流表是怎么回事

OpenFlow的核心概念是流表(Flow Table)

交换机里有一张或多张流表,每张流表里有很多流表项(Flow Entry)。每个流表项包含三样东西:

  • 匹配字段:用来匹配数据包的特征,比如源IP、目的IP、源端口、目的端口等等

  • 动作(Action):匹配上了之后干什么——转发、丢弃、修改字段等等

  • 计数器:统计匹配到这个表项的数据包有多少

OpenFlow消息类型

控制器和交换机之间要通过消息来通信,消息分三类:

1. 控制器发往交换机的消息

  • Features:问交换机"你支持什么功能?"

  • Configuration:配置交换机参数

  • Modify-State:增删改流表项

  • Read-State:读取交换机状态信息

  • Send-Packet:让交换机发送一个数据包

2. 交换机发往控制器的消息(异步)

  • Packet-in:交换机收到一个数据包,不知道怎么处理,送给控制器决定

  • Flow-removed:通知控制器某个流表项被删除了

  • Port-status:端口状态变了(比如网线拔了),通知控制器

  • Error:出错了,告诉控制器

3. 双方都能发的消息

  • Hello:建立连接时打招呼

  • Echo:心跳检测,看看连接还通不通


五、华为的SDN解决方案

Agile Controller

华为的SDN控制器叫Agile Controller,支持的数据中心、园区网、广域网等场景都能用。

从我实际接触的情况来看,Agile Controller有几个特点:

  • 南向接口支持OpenFlow、Netconf、SNMP等多种协议,不完全依赖OpenFlow

  • 北向提供REST API,方便对接第三方系统

  • 支持网络拓扑自动发现,不用手动录入设备

  • 有路径计算和优化的能力

  • 支持网络自动化部署,减少人工操作

Agile Controller本身的架构也分三层:

  • 管理层:提供Web界面和REST API,用户和管理系统跟它打交道

  • 控制层:干核心活儿的——拓扑管理、路径计算、策略管理

  • 接口层:南向对接设备,北向对接应用

华为SDN用在哪些场景

数据中心SDN

数据中心是SDN落地最成熟的场景。华为的方案一般是Agile Controller + VXLAN/EVPN:

  • 用VXLAN做网络Overlay,实现大二层网络

  • 用EVPN做控制平面,学习MAC地址和ARP信息,减少泛洪

  • 网络自动化部署,虚拟机迁移的时候网络策略自动跟随

园区网络SDN

园区网最近几年也在推SDN,华为的方案有个比较亮眼的功能叫"策略随行"

  • 用户不管在有线还是无线、不管在哪个位置接入,他的安全策略自动跟着走

  • 有线无线一体化管理,不用分开维护两套系统

  • 配置统一在控制器上做,不用逐台登交换机

广域网SDN

广域网的SDN主要解决的是流量工程和链路利用率的问题:

  • 控制器可以根据实时流量情况调整路径,避免某些链路拥塞而另一些空闲

  • 链路故障的时候可以快速重路由

  • 对多出口的场景特别有用


六、动手配置一下

Agile Controller基础配置

# 登录Agile Controller Web界面
# 默认地址:https://<AC_IP>:8443
# 默认用户名/密码:admin/xx

# 添加网络设备
# 1. 进入"资源管理 > 设备管理"
# 2. 点击"添加设备"
# 3. 输入设备IP地址、SNMP团体名等信息
# 4. 点击"确定"

# 配置OpenFlow连接
# 1. 进入"资源管理 > 南向接口管理"
# 2. 选择"OpenFlow"
# 3. 添加控制器与交换机之间的OpenFlow连接
# 4. 配置控制器IP地址、端口号(默认6653)

交换机上启用OpenFlow

# 在华为交换机上配置OpenFlow
<Switch> system-view
[Switch] sysname Switch

# 启用OpenFlow
[Switch] openflow enable

# 创建OpenFlow控制器连接
[Switch] openflow controller 1 ip 192.168.100.1 port 6653

# 将接口加入OpenFlow
[Switch] interface gigabitethernet 0/0/1
[Switch-GigabitEthernet0/0/1] openflow enable
[Switch-GigabitEthernet0/0/1] quit

# 查看OpenFlow连接状态
<Switch> display openflow controller

配置流表项

# 在Agile Controller上配置流表项
# 1. 进入"策略管理 > 流表管理"
# 2. 点击"添加流表项"
# 3. 配置匹配字段(如源IP、目的IP、源端口、目的端口等)
# 4. 配置动作(如转发、丢弃、修改等)
# 5. 点击"确定"

# 查看流表项
<Switch> display openflow flow-table

七、实际场景:数据中心和园区网的SDN

数据中心SDN(VXLAN/EVPN)

VXLAN这个词最近几年出现的频率特别高。它的作用是把二层报文封装在UDP里,这样就能跨三层网络实现二层互通了。

几个关键概念:

  • VNI(VXLAN Network Identifier):VXLAN的标识符,24位,最多能支持1600万个VXLAN段

  • VTEP(VXLAN Tunnel End Point):VXLAN隧道的端点,一般是交换机或者路由器

EVPN是用来解决控制平面问题的。传统VXLAN用组播来泛洪学习MAC地址,在大网络里效率很低。EVPN通过控制平面(一般是BGP)来分发MAC地址和ARP信息,大大减少了泛洪流量。

华为的数据中心SDN方案一般是这样搭的:

  • Agile Controller做控制器

  • VXLAN做网络Overlay

  • EVPN做控制平面

  • 支持网络自动化部署和策略随行

园区网络SDN(策略随行)

园区网SDN有个很实用的功能叫策略随行,我第一次听到的时候觉得这想法不错。

传统的做法是:用户在A楼层接入,交换机上配一套VLAN和ACL;换到B楼层,又要重新配。管理员的工作量很大,而且容易出错。

策略随行就是解决这个问题:用户在任意位置接入,他的安全策略自动跟随,不用管物理位置在哪。实现方式是控制器根据用户身份(一般是跟认证系统对接)动态下发策略到接入设备上。

华为的园区SDN方案:

  • Agile Controller做控制器

  • 有线无线一体化管理(AC和交换机都在同一个控制器上管)

  • 支持策略随行,基于用户组、设备类型等实施策略


八、故障排查经验

先看看连接状态

碰到SDN相关问题,第一步永远是确认控制器和交换机之间的连接是否正常。

# 查看OpenFlow连接状态
<Switch> display openflow controller

# 查看OpenFlow连接统计信息
<Switch> display openflow controller statistics

# 查看流表项
<Switch> display openflow flow-table

几个常见故障的排查思路

交换机连不上控制器

工作中遇到过好几次,一般按这个顺序查:

  1. 先ping一下,看看IP网络通不通(很多时候是基本网络问题)

  2. 确认控制器IP和端口配置对了没有(默认端口是6653)

  3. 看看有没有防火墙挡住了OpenFlow流量(TCP 6653)

  4. 确认控制器进程本身是不是正常运行的

流表下不去

这个也挺常见的:

  1. 先确认OpenFlow连接是不是正常的(display openflow controller)

  2. 检查流表项的配置,匹配字段有没有写错

  3. 交换机的流表容量是不是满了(有些中低端交换机流表项数有限制)

  4. 翻一下控制器的日志,一般会有错误信息


写到最后

SDN这个话题其实挺大的,一篇文章肯定说不完。我这里主要聊了架构、OpenFlow、华为的解决方案和实际配置,都是比较实用的部分。

在网络规划设计师考试,SDN是必考的内容,建议把VXLAN/EVPN那部分好好看看,最近几次考试都有涉及。

实际工作中,SDN落地的关键不在于技术本身,而在于你的场景是否适合。如果是新建数据中心,SDN几乎是标配了;但如果是改造已有的传统网络,就要仔细评估一下成本和风险,不要为了上SDN而上SDN。