SDN方案初了解
NOTE:
之前写过关于SDN的话题,现在有了新的体会,重新更新一下;之前的版本没有删除,已经归档到notion当中了,可以通过以下链接访问:传送门
传统网络设备的”三位一体“
三位一体
如上图,传统网络设备涉及到的三大平面:
- 管理平面,网络设备自带的WEB管理界面、telnet/ssh连接的命令行界面
- 转发平面,通过各种协议生成的、用来指导数据转发的流量转发表项(简称流表),比如说通过OSPF生成的路由表、MAC表、标签表等流量转发表。
- 数据平面,网络设备也属于计算机的一种,而计算机只能识别二进制,数据平面指的通过转发平面生成的、二进制表项,网络设备可以识别执行。
何为流表?
流表还是流量转发表,数据平面的流量转发表与控制平面的流量转发表有什么不同之处呢?
控制平面的OSPF路由表、标签表等流量转发表是为了给我们人类看的,计算机看不懂,无法直接识别运行,可以理解为半成品,而数据平面里面的流量转发表则是完成品,是二进制,是计算机直接能识别运行的表项。
我们也可以在开发的角度去理解,我们通过python或java写的for循环,人能看懂,但计算机看不懂,而编译之后就变成了计算机能识别并执行的二进制了!
紧耦合和解耦合
传统网络设备这三个平面都是一体的,即都是集成在一个硬件上,比如一台交换机上,我们只要开机之后可以通过管理平面的CLI或WEB界面进行配置,通过控制平面的路由协议最终生成数据平面的二进制流表,这种方式又被称之为“紧耦合”。
SDN是致力于将不同的层面分开,称做为解耦合,关于解耦合我们会在下文展开来介绍。
SDN概念
前言
NOTE:
- SDN不是一个协议,而是一种方法论,2006年才正式诞生!
- SDN是将“软件控制”的概念引入到“网络技术”领域相互融合的产物,传统网络技术为主,软件技术为辅;
- SDN的出现对于网络行业是一个很大的创新,但并不是完全颠覆,传统的网络技术被集中在了SDN方案当中,所以学好传统的网络技术依然是硬道理!
SDN全称为软件定义网络,明面上以软件控制为主,这除了说明“软件控制”对网络领域的重要性,我认为还有另外两个隐含的意思,一是集中控制,二是传统网络技术,也就是说SDN起码包括三个方面:集中控制、软件的控制、传统网络技术。
集中控制
我们先来看一下集中控制,集中控制这个概念并不新奇,很早很早就有,无非是大家都听某个事物的控制用来完成更大的任务,比如windows很早就推出的域控概念,在所有的计算机当中选择一台当做所有计算机的“皇帝”,即域控制器,其它的所有计算机都要听从皇帝的号令,这就是集中控制,SDN方案与之类似,在所有的网络设备当中当中选择一个当做“皇帝”,让它来控制所有的网络设备,比如说在Fortinet方案当中的核心设备是防火墙,用它就可以控制所有的交换机、AP等设备,所有的交换机和AP都可以在防火墙上进行统一的管理、监控、分析等操作,也就是说fortinet防火墙上集成了控制平面和控制平面;当然此控制平面和控制平面可以单独拿出来一台专门的设备上,或是直接放到云上,这样的话我们专门用这这台设备来完成对所有网络设备的控制、监控、分析等功能,这种单独的设备又被称为SDN的控制器,比如# 华为新一代SDN控制器Agile Controller-DCN
传统网络技术
SDN方案当中最核心的东西依然还是各种网络技术,比如说VXLAN、网络虚拟化、各种网络协议,QOS、SNMP监控、802.1Q认证、VLAN,只不过我们不需要再通过命令行把这些技术敲到网络设备当中了,而是直接通过控制器在图形界面上就可以直接生成这些命令或直接生成流表,从这个角度来看,SDN不过就是通过软件控制的方式将一系列网络技术融合到一起的一种方案。
值得一提的是,我们通过控制器操作图形界面的操时,有时会直接让管理员指定使用某某技术,有时并不会明确指定,比如说在SD-LAN的环境当中,当我们指定好边界网关和边缘接入设备之后会自动应用VXLAN、BGP等技术,非常方便快捷;
还有一点值得强调,由于华为的SDN方案是伪SDN,管理平面、控制平面、数据层面依然还是存在于网络设备之上,所以在控制器上配置的同时,依然可以通过命令行进行配置!
软件控制加持
我们来看一下wiki上对SDN的介绍,如下图所示:
*简单翻译一下:
软件定义网络 (SDN) 技术是一种网络管理方法,它支持动态、编程高效的网络配置,以提高网络性能和监控,使其更像云计算而不是传统的网络管理。 SDN旨在解决传统网络的静态架构。 SDN 试图通过将网络数据包(数据平面)的转发过程与路由过程(控制平面)分离,将网络智能集中在一个网络组件中。 控制平面由一个或多个控制器组成,它们被认为是 SDN 网络的大脑,其中包含了整个智能。
第一次看到WIKI上的解释难免有些蒙,我们用通俗的话来总结一下:
- SDN是建立在“集中控制”这个概念之上的,也就是说在整个网络当中起码会有一台或多台控制器用来管理控制所有的网络设备,客户自己花钱搭建或直接租用厂商自己的控制器;
- 对于真正的SDN方案,网络设备只要能接收和承载流表即可,网络设备再也不需要再集成管理平面和控制平面,注意一下,网络设备在启动之后先通过某种协议(比如openflow)连接到控制器才可以接收流表;
- 对于真正的SDN方案,控制器上会集成管理平面和控制平面,也就是我们日常对网络设备的管理配置都去控制器上配置,比如去控制器上配置OSPF,控制器最终计算完成后,生成二进制流表,通过openflow直接下发给网络设备;
在软件强有力的加持之下,控制器不仅仅能实现管理和控制网络设备的功能,还可以实现以下功能:
-
不仅仅是管理
SDN控制器不仅仅是能管理网络设备,还能做监控、分析,而且集成的技术都是非常新的,比如SNMP的下一代telemetry监控协议、QOS的升级版HQOS; -
软件加持下实现自动化
比较典型的就是我们再配置网络设备的时候,比如两个分支之间建立VPN的时,只需要轻轻一点,自动完成配置命令的下发,不需要我们人为的去操作加密算法之类的,减轻了配置难度;
另外一点比较重要的是,软件可以实时的监控某个链路或某几个链路,如果发现某些个主用链路不通了,他自动就可以进行切换,可以保证业务的连续性,不会轻易的断掉。
-
流量优化
无论技术再先进,总是会有丢包之类的情况发生,在存储领域当中可以通过raid技术对数据做运算,以达到某些硬盘损坏也无不会影响数据的完整性,那网络上使用类似的技术也是可以的,以达到就算丢一部分包也能通过其它的报文计算出来的效果; -
流量识别
传统网络当中,通常会加装一个好的应用识别软件对流量进行管理,而现在控制器上也集成应用识别的功能,我们可以直接在控制器上实现上网行为管理设备的效果。 -
安全策略
传统的防火墙上都有安全策略,SDN的控制器上也是有的,而且非常精细,叫安全策略矩阵,所以实现防火墙的安全策略也是轻而易举的,只不过毕竟控制器不是专业的防火墙,这属于轻量集成,集成不是很完美;也有一些集中的比较完美的SDN方案,比如说fortinet的方案,还有一些SDN方案是直接把头部防火墙厂商的功能直接集中在自家产品当中,比如说思杰的SDN方案; -
用户的接入及认证
控制器上可以直接运行数据库,这样的话就可以做作为第三方数据库被认证协议调用;
真伪SDN
真SDN
最早期的SDN是希望将管理平面和控制平面集中的控制器上,控制器直接把流表直接计算出来,网络设备仅仅通过开源的协议(openflow)连接控制器后接收控制器推送过来的流表即可,即网络设备只需要有数据平面即可,也就是说对网络设备的要求不高了,搞一个廉价的、低成本的、只要能连接控制器、接收控制器推送过来的流表即可。
一个好消息,一个坏消息。好消息是用户购买网络设备的成本会降低,由于网络设备没有了控制层面和控制层面,仅有数据层面,那网络设备就不需要特别高的性能;而且控制器与网络设备之间通常运行的是开源的openflow协议,那任何厂商都可以生产,一旦各个厂商卷起来的话,就类似于电商对于实体经济的冲击,工厂直发,直接降到成本价!
坏消息是,这种方式无疑会给市场产生冲击,当今中国网络设备市场还属于混乱局面,各个厂商在不断的争夺市场,不同厂商之间的设备存在着排斥性,也可以这么说,正是因为不同厂商之间的排斥性才养活了中国这么多的网络设备厂商,比如说你购买了华为的SDN控制器,那你只能购买华为的设备,而不能能使用华为的控制器去控制华三或锐捷的设备;如果在中国推出了真SDN方案,大家都用统一的、成本低廉的网络设备,那网络设备厂商的营收无疑会受到巨大冲击,所以真SDN的推进会受到非常大的阻力。这就类似让中国的官员进行财产公示,这无疑会让官员们感到不满,官员们肯定不愿意去推这样的政策。
此外,还有一个说法是我们中国目前的技术实力还是很难实现真SDN方案,不得不使用伪SDN的方案。
伪SDN
好了,总结一下,中国互联网的推动无非就是依赖像华为、华三、深信服这样的厂商,虽然SDN的概念非常好,让用户的成本无限降低,但现在让厂商自我革命这无疑是不现实的,但SDN这种事物国外已经非常流行了,各个厂商又不得不跟进,所以就产生一种中庸的方案,即伪SDN。
伪SDN采取了一种非常“鸡贼”的操作,依然是管理平面和控制平面集成到控制器,但真SDN方案的的控制器会继续“加工”控制平面的流量转发表成为二进制流表再通过openflow协议推送给网络设备,网络设备直接使用就行了,不需要任何的计算;而伪SDN方案的控制器是在管理员在管理平面操作之后,直接生成配置命令,然后通过Netconf协议将命令推送到网络设备进行执行计算,让网络设备自己计算出数据平面,也就是说要求网络设备还必须有控制平面和数据平面,这样做能让用户还继续花大价钱购买高性能的网络设备,令人沮丧的是中国几乎所有的网络设备厂商都是不约而同的采用了这种伪SDN方案。
附件:连接协议
OpenFlow
自 OpenFlow 协议于 2011 年出现以来,SDN 通常与 OpenFlow 协议(用于与网络平面元素进行远程通信,以确定网络数据包跨网络交换机的路径)相关联。但是,自 2012 年以来,专有系统也使用了该术语。 其中包括 Cisco Systems 的开放网络环境和 Nicira 的网络虚拟化平台。 SD-WAN 将类似的技术应用于广域网 (WAN)。
上图是SDN的模型架构图,该模型的指导思想是,低层的数据通信(交换机、路由器)是“简化的”,可以理解为开源的、价格较低的、统一的的设备,并定义一个对外开放的关于流表FlowTable的公用API(应用程序接口),同时采用控制器来控制整个网络。openflow 是用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准,最初的SDN架构被定义为转控分离,openflow是实现SDN的关键技术。
下列是openflow的一些基础介绍:
- OpenFlow 是一种通信协议,SDN控制器与网络设备之间的通信协议,可以通过网络访问网络交换机或路由器的转发平面。
- OpenFlow 允许通过添加、修改和删除数据包匹配规则和操作来远程管理第 3 层交换机的数据包转发表。 这样,路由决策可以由控制器定期或临时做出,并转化为具有可配置生命周期的规则和操作
- OpenFlow 协议位于传输控制协议 (TCP) 之上,并规定使用传输层安全 (TLS)。 控制器应在 TCP 端口 6653 上侦听要建立连接的交换机。 OpenFlow 协议的早期版本非正式地使用端口 6633。一些网络控制平面实现使用该协议来管理网络转发元素。 OpenFlow 主要用于安全通道上的交换机和控制器之间。
NOTE:
一般情况下,Netconf传输的内容其实就是网络命令,而openflow传输的内容是二进制流表。
Netconf
Netconf的相关内容请参考我这篇博客:
https://www.cnblogs.com/yizhangheka/p/17237616.html#netconfxmlyang之间的关系
值得一提的是,由于华为SDN是伪SDN,网络设备与控制器之间使用的是Netconf协议,所以我们在搞华为的SDN方案时,通常网络设备初始化时通常会敲这样一条命令,用来将网络设备与控制器进行连接,如下所示:
agile control host <控制器IP> port <控制器Netconf进程侦听的端口>
另外,Netconf除了可以将控制器与网络设备连接到一起推送配置命令之外,我们还可以通过python库调用Netconf协议,这样的话我们就可以实现通过python给网络设备发送指令的方式进行控制网络设备,比如说下载网络设备配置、定时巡检等任务,实现网络自动化。