一、SDN是什么
刚接触SDN的时候,有点懵。传统网络干了多年,概念怎么变成"软件定义"了?
经过了解理清楚:传统网络设备(交换机、路由器)有个特点——控制平面和数据平面绑死在同一个盒子里。每个设备自己跑自己的路由协议,自己算自己的路由。听起来没问题,但实际工作中会发现几个让人头疼的地方:
网络设备配置要一台一台登上去敲命令,稍有疏忽就出错
新业务上线,从申请到配置完毕往往要好几周
网络策略?基本靠人在每台设备上手工保证一致,根本没法统一
出了问题排查起来特别麻烦,因为状态分散在几十台甚至上百台设备里
SDN就是冲着这些问题来的。它的想法其实不复杂:把控制平面从设备里抽出来,集中到一个控制器(Controller)上去。设备只管转发,控制器管一切逻辑。
这个思路一出来,各个厂商售前PPT上就开始刹不住车了。这几年SDN已经从"概念"走到了"实际部署",不少数据中心和园区网都在用了。
二、SDN的基本思路
传统网络到底哪里不好
说"传统网络不行"太绝对了,wa跑得好好的。但碰到大一点的场景,问题就出来了:
传统设备是分布式控制的,每台交换机、路由器自己决定自己的事。好处是去中心化,挂一台不影响其他;坏处是你想做一点全局性的策略,就得挨个登设备去配,而且很难保证不出错。
我踩过一次坑:有一次做全网VLAN调整,手工配了三十多台接入交换机,结果有一台的trunk允许列表漏配了一个VLAN,排查了半天。这种事在传统网络里太常见了。
SDN的做法
SDN把事情反过来——控制集中,转发简化:
控制器集中管理:全网拓扑、路由计算、策略下发,全在控制器上
设备只管转发:支持开放接口(比如OpenFlow),接收控制器的指令
网络可编程:上层应用通过API(一般是REST API)跟控制器打交道,不用管底层设备是什么型号
配置统一下发:控制器把配置推给设备,不用逐台登录
这套东西听着挺理想化的,实际落地的时候还是有挑战的,后面会聊到。
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的"大脑",也就是控制器所在的地方。
控制器干的事情挺多的:
拓扑管理:发现全网有哪些设备、怎么连接的
路径计算:根据策略算出来流量该怎么走
策略下发:通过南向接口把流表推给交换机
设备管理:监控设备状态,管理设备配置
业界常见的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
几个常见故障的排查思路
交换机连不上控制器
工作中遇到过好几次,一般按这个顺序查:
先ping一下,看看IP网络通不通(很多时候是基本网络问题)
确认控制器IP和端口配置对了没有(默认端口是6653)
看看有没有防火墙挡住了OpenFlow流量(TCP 6653)
确认控制器进程本身是不是正常运行的
流表下不去
这个也挺常见的:
先确认OpenFlow连接是不是正常的(display openflow controller)
检查流表项的配置,匹配字段有没有写错
交换机的流表容量是不是满了(有些中低端交换机流表项数有限制)
翻一下控制器的日志,一般会有错误信息
写到最后
SDN这个话题其实挺大的,一篇文章肯定说不完。我这里主要聊了架构、OpenFlow、华为的解决方案和实际配置,都是比较实用的部分。
在网络规划设计师考试,SDN是必考的内容,建议把VXLAN/EVPN那部分好好看看,最近几次考试都有涉及。
实际工作中,SDN落地的关键不在于技术本身,而在于你的场景是否适合。如果是新建数据中心,SDN几乎是标配了;但如果是改造已有的传统网络,就要仔细评估一下成本和风险,不要为了上SDN而上SDN。
夜雨聆风