一、SDN实现方案
1.基于专用接口的方案
实现思路是不改变传统网络的实现机制和工作方式,通过对网络设备的操作系统进行升级改造,
在网络设备上开发出专用的API接口,管理人员可以通过API接口实现网络设备的统一配置管理和下发,
改变原先需要一台台设备登录配置的手工操作方式,同时这些接口也可供用户开发网络应用,实现网络设备的可编程。
2.基于叠加(Overlay)网络的方案
实现思路是以现行的IP网络为基础,在其上建立叠加的逻辑网络,屏蔽掉底层物理网络差异,实现网络资源的虚拟化,使得多个逻辑上彼此隔离的网络分区,以及多种异构的虚拟网络可以在同一共享网络基础设施上共存。
3.基于开放协议的方案
当前SDN实现的主流方案,该类解决方案基于开放的网络协议,实现控制平面与转发平面分离,支持控制全局化,获得了最多的产业支持,相关技术进展很快,产业规模发展迅速,业界影响力最大。
二、交换机核心技术
“交换”即完成数据信息从设备入端口到出端口的转发。由此可见,当它被用来描述数据网络第二层的设备时,实际指的是交换机;而当它被用来描述数据网络第三层的设备时,通常指的是路由器或者三层交换机。
三、交换机实现技术
1.交换模式——直通,零碎片,存储转发
直通(Cut-Through):交换机仅对数据帧(二层网络对数据包的特有称呼)的前6个字节的信息进行接收和分析,并将数据帧的其余部分直接剪切(即所谓的Cut)到出端口上。这是因为数据帧的前6个字节包含了该数据帧的目的MAC地址,这已经足以供交换机做出转发决策。直通模式具有最小的转发延迟,但是它并不检查数据的完整性,因此可能会把能够导致以太网冲突的“坏包”转发出去,从而产生网络可靠性问题。
零碎片(Fragment-Free):交换机首先对数据帧的前64个字节进行接收和解析,再进行转发。之所以选择64个字节的长度,是因为经验表明在以太网络中,绝大多数的“坏包”都能在这些字节的处理过程中被检测到。这种模式虽然有可能造成极少量的“坏包”漏检,但是它对网络的整体性能影响不大,因此在很多应用场景中又被称为“快速转发(Fast-Forwarding)”。
存储转发(Store-and-Forward):交换机需要对整个数据帧的内容进行接受和解析,并开展数据帧的完整性检验等操作,以有效地避免出现错误。虽然该模式增加了转发延迟,但是考虑到当前的处理器或者ASIC已经具有足够的性能,因此,在SDN交换机的设计与实现中,仍旧建议其采用这种模式用于数据交换。
2.背板设计——交换机的背板是数据帧在交换机内部传输的通信通道,携带有转发决策信息及中继管理信息。
3.缓冲机制——用于解决数据包不能够被设备出端口及时转发的问题,而发生该情况的原因主要包括交换机的设备入端口和设备出端口速率不匹配、多个设备入端口向同一设备出端口发送数据、设备出端口处于半双工工作状态等。为了避免发生上述情况导致数据包被丢弃,当前有两种常用的缓冲机制可供SDN交换机选择。
4.数据转发——在OpenFlow交换机的运行过程中,其数据转发的依据就是流表。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层IP地址路由表,而OpenFlow交换机中使用的流表也是如此,不过在它的表项中整合了网络中各个层次的网络配置信息,从而在进行数据转发时可以使用更丰富的规则。
四、OpenFlow协议
支持三种消息类型:controller-to-switch、asynchronous(异步)和symmetric(对称)。其中controller-to-switch由控制器发起,用来管理或获取OpenFlow交换机的状态;asynchronous消息OpenFlow交换机发起,用来将网络事件或交换机状态变化更新到控制器;symmetric消息可由交换机或控制器发起。
五、流表匹配流程
OpenFlow v1.1报文输入从表0开始,如果匹配,更新计数器、执行指令-(更新动作集合、更新匹配域、更新元数据)、转到表n;如果不匹配,-发送到控制器或丢弃或继续下一个表项
OpenFlow v1.3报文输入从表0开始,如果匹配,更新计数器、执行指令-(更新动作集合、更新匹配域、更新元数据)、转到表n;如果不匹配,检查是否存在Table-Miss项,如果有,执行匹配操作,如果没有执行丢弃报文
六、OF-CONFIG配置管理协议
OpenFlow Configuration and Management Protocol
提供一个开放接口用于远程配置和控制OpenFlow交换机。具体地说,诸如构建流表和确定数据流走向等事项将由OpenFlow规范进行规定,而诸如如何在OpenFlow交换机上配置控制器IP地址、如何对交换机的各个端口进行enable/disable操作则由OF-CONFIG协议完成。
1)配置一至多个控制器的IP地址
2)配置设备的队列、端口等资源
3)支持远程修改设备的端口状态
七、OVS交换机实现分析
Open vSwitch就是一款基于软件实现的开源虚拟交换机。
1.OVS交换机工作原理
在虚拟交换机的实现中,其两端分别连接着物理网卡和多块虚拟网卡,同时虚拟交换机内部会维护一张映射表,根据MAC地址寻找对应的虚拟链路进而完成数据转发。
分析:当数据包从虚拟机发出后,首先将通过虚拟机上配置的虚拟网卡。虚拟网卡会根据一些既定的规则决定如何处理数据包,例如放行、阻隔或者修改。数据包在被网卡放行后将转发至虚拟交换机,与其他虚拟交换机不同的是,提供了OpenFlow支持能力的OVS将根据自身保存的流表对数据包进行匹配,如果匹配成功则按照相应的指令进行数据包操作,如果匹配未成功则将数据包发给控制器等待相关流表的指定和下发。当数据包需要通过物理网卡转发时,它将会被发送到与虚拟交换机相连的物理网卡上,进而被转发给外部网络设备。
八、控制器核心技术
1.南向网络控制技术
控制器的网络控制技术主要包括通过南向接口协议进行链路发现、拓扑管理、策略制定、表项下发。其中链路发现和拓扑管理主要是控制器利用南向接口的上行通道对底层交换设备上报信息进行统一监控和统计的技术,而策略制定和表项下发则是控制器利用南向接口的下行通道对网络设备实施统一控制的技术。
2.北向业务支撑技术
通过北向接口,网络业务的开发者能够以软件编程的方式调用局域网、广域网等各种各样的网络资源能力。同时,网络资源管理系统可以通过控制器提供的北向接口获知网络资源的工作状态并对网络资源进行调度,实现资源的统一交付,更好地支持云计算等新业务对网络资源的需求。
3.东西向控制器扩展技术
控制器的软件化使得服务器可以作为控制器的载体。控制器集群也可以以服务器集群为基础进行搭建。SDN可以充分利用当前已经非常成熟的服务器集群技术(例如Hazelcast)部署利用软件实现的控制器。而对一个分布式的集群而言,最关键的是控制器间的协作,因此系统中需要设置专门的集群通信机制用于控制器之间的信息传递,例如JGroups通信库已经成为了比较成熟的技术。
为了保证控制器集群对SDN网络的控制效果,有两个方面的设计与实现非常重要。第一是主控器的选举,主控制器主要负责生成和维护全网范围内的控制器和交换机的状态信息,一旦它出现失效,就需要从集群中的副控制器中选举一个新的主控制器以避免单点失效。 第二是控制器集群对交换机的透明化,即在SDN网络的运行过程中,交换机无需关心它当前接受的是哪台控制器发来的控制指令,同时在其向控制器发送数据包时,能够继续保持之前单一控制器时的操作方式,从而保证控制器在逻辑上的集中。
为了实现上述目标,控制器集群设计的关键技术要点如下。
1)主控制器选举。在网络运行过程中,集群中的副控制器需要周期性地监控主控制器的工作状态,一旦发现其访问不可达,就要启动主控制器选举过程。集群中的主节点选举,在业界已经有很多算法,例如基于paxos的分布式选举算法。在算法设计时,需要充分考虑算法实现的复杂度,特别是如果控制器集群部署在广域网中,还要考虑带宽、延迟等网络质量因素。
2)集群虚拟地址。为了实现控制器之间的负载均衡,控制器集群可以利用传统的负载均衡技术。例如当交换机向控制器进行注册时,可以向某个静态的虚拟IP地址发送,然后控制器集群会根据负载均衡算法,通过控制器间通信确定并记录该虚拟地址对应的控制器,并要求其负责对该交换机的控制,而控制器返回给交换机的数据包也将以虚拟IP地址为源地址,实现控制器集群对交换机的透明化。
3)全网拓扑获取。SDN网络中的拓扑信息是实现资源优化调度的关键。为了获得全网控制器和交换机的工作情况,需要各个控制器周期性地进行链路发现,并将采集回来的网络信息发给主控器汇总,再由主控制器统一发给各个控制器。如果在制定数据流的转发策略时,控制器发现数据流传输涉及的设备超出其控制的交换机范围时,将会根据全网拓扑告知交换机对应的控制器,并通过协商制定一致的策略进而统一下发给交换机。
4)控制器失效应对。无论是主控制器还是副控制器失效,集群都可以利用负载均衡技术,将此前指派给失效服务器的虚拟IP地址映射到其他工作正常的控制器上,同时触发对全网拓扑信息的更新和获取。
14.读书笔记二
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 原版OpenFlow Switch Specification Version 1.3.0 (Wire Proto...
- 摘要 OpenFlow 简史(SDN != OpenFlow ; 版本问题) OpenFlow 工作原理 Open...