摘要
- Background:为什么需要 SDN
- SDN的主要解决方案
- SDN的整体应用架构
- SDN与网络安全
- OpenFlow工作原理
- OpenFlow在SDN架构中的角色
Background
软件定义网络(Software-defined networking,SDN),一种新的网络架构。SDN 提出的控制与转发平面分离、网络状态集中控制、支持软件编程等理念并不是什么新鲜事,但是长久以来一直没有非常突破性的进展。
“为了让系统更好地工作,早期需要管理复杂性而后期需要提取简单性。” —唐·诺曼(Donald Arthur Norman)
目前 SDN 引起广泛关注得益于网络需求侧翻天覆地的变化:云计算业务(服务器虚拟化技术为代表)成为主流,移动互联网催生的大数据技术日益普及,包括网络在内的资源快速配置、弹性扩容、按需调用需求强烈。传统模式的弊端显现:网络设备硬件、操作系统和网络应用三部分紧耦合在一起,组成一个封闭系统,这三部分相互依赖、每一部分的创新和演进都要求其余部分做出同样的升级。
SDN Solutions
如何解决从“管理复杂性”阶段转变到“提取简单性”阶段呢?最先取得成功商用经验的是互联网企业Google。
Google 的 SDN 实践
Google 基于 SDN 技术改造其骨干网 G-scale(Backbone Network,也称WAN网)。WAN网的主要任务是负责全球12个数据中心之间的互联,数据流量的内容包括:1. 用户数据备份,例如视频、图片、语音等;2. 跨数据中心存储访问,例如计算资源和存储资源分布不同;3. 大规模的数据同步。WAN 网成本高昂(包括很多海底光缆),而且存在数据流量大但是链路带宽利用率低的问题:为了实现负载均衡,同时避免大流量都被分发到同一个链路上导致丢包,Google不得不使用过量链路,提供比实际需要多得多的带宽,实际链路带宽利用率只有30%~40%,而且仍不可避免有的链路很空闲,有的链路产生拥塞,设备必须支持很大的包缓存,成本高。为了增强网络的可管理性,Google 首先在带宽分配和路径计算方面尝试。解决思路是当一个新的数据要开始传输时,应用程序会评估所需要耗用的带宽,为它选择一条最优路径(如负载最轻但非最短路径,虽不丢包但延时大),然后把这个应用对应的策略通过控制器(Controller)下发到定制的交换机中,跟选择的路径绑定在一起,从而整体上使链路带宽利用率达到最优。
SDN 架构中最显著的一个特点就是采用集中式控制器(Controller):
SDN 世界的两大山头
SDN 技术体系目前还处于激烈竞争阶段,相关新产品和新技术层出不穷,如果要梳理大致可以分为两个流派:
-
ONF(Open Networking Foundation,开放网络基金会 )
董事会成员:德国电信(DT)、Facebook、 Google, Microsoft、Verizon、Yahoo!、日本 NTT 电信、高盛公司
特点:面向用户
SDN 标准化组织
-
ETSI NFV(Network Functions Virtualisation)
成员:欧洲电信标准协会(European Telecommunications Standards Institute,ETSI)包括 AT&T, 英国电信(BT), 德国电信等
特点:主要工作成果是 “网络功能虚拟化白皮书”,对NFV的定义、应用场景、基本功能,以及SDN等技术的关系等内容进行描述。 -
ITU-T (国际电信联盟通信标准化组织)
由 ITU-T 指定的国际标准通常被称为建议(Recommendations),2012年开始 SDN 与电信网络结合的标准研究。
SDN Architecture
SDN在应用中大体上可以可以划分为三层体系结构:
- 应用层(Application Layer)
- 控制层(Control Layer)
- 基础设施层(Infrastructure Layer)
不同层次之间通过接口通讯:
- 北向接口(Northbound interface)
- 南向接口(Sorthbound interface)
控制层( Control Layer )
目前市场上的 SDN 控制器解决方案大致可以分为两类:大型网络设备厂商提供商业方案,例如 Cisco Open SDN controller, Juniper Contrail, Brocade SDN controller, 和来自 NEC 公司的 PFC SDN controller ;社区组织提供的开源方案,例如 OpenDaylight, Floodlight, Beacon, Ryu 等等。
Commercial Solutions:
Open Source Solutions:
- :由斯坦福大学开发,Java语言编写
- :源于,Big Switch Networks开发,Java语言编写,Apache许可证
- :
- :由 NTT 开发,Python 编写,能够与 OpenStack 平台整合,控制器API丰富
- : 由 Kulcloud 开发,内核采用 C 语言实现的多线程架构
- : 由 Cisco 开发,基于 Node.js 的 控制器,JavaScript 编写
- : 由 NEC 开发,Ruby/C 编写
- : 由 Nicira 开发,C++/Python编写,业界第一款 控制器
- : 由 Nicira 开发,是 NOX 的纯 Python 实现版本,目的是提供跨平台部署的便利性
基础设施层( Infrastructure Layer )
应用层( Application Layer )
应用层对于开发者来说是开放区域,鼓励开发尽可能多的创新应用。包括网络的可视化:拓扑结构、网络状态、网络统计等;网络自动化相关应用:网络配置管理,网络监控,网络故障排除,网络安全策略等。SDN 应用程序可以为企业和数据中心网络提供各种端到端的解决方案。
例如,Brocade 应用实例:
- Brocade Flow Optimizer
- Brocade Virtual router
- Brocade Network advisor
HPE 应用实例:
- HPE Network Optimizer
- HPE Network protector
- HPE Network visualizer
- NEC UNC for HP SDN VAN Controller
- Aricent SDN Load balancer
- TechM smart flow steering
- TechM server load balancer
南向接口( Southbound interface )
控制层到基础设施层(网络交换机)通讯需要经过南向接口,目前主要的协议是 OpenFlow , NetConf,OVSDB 。 OpenFlow 协议是事实上的国际行业标准,NOX 、Onix 、Floodlight 等都是基于 OpenFlow 控制协议的开源控制器。作为一个开放的协议,OpenFlow 突破了传统网络设备厂商各自为政形成的设备能力接口壁垒。