一种软件定义网络带内控制连接建立方法*
2022-12-07安菲菲杨国东潘乐炳陈博文
安菲菲,杨国东,潘乐炳,陈博文
(中国电子科技集团公司第五十研究所,上海 200331)
0 引 言
近年来,伴随着云计算及其相关业务的发展,以服务器虚拟化为代表的虚拟化技术日益成为主流。利用虚拟化软件创建的虚拟机,用户所需的资源可以被动态地分配,这为相应的网络资源配置带来了巨大的压力。同时,随着移动互联网、物联网等业务领域的快速发展,大数据正日益成为研究焦点,其面向的海量数据处理也对网络提出了更高的要求。以云计算、大数据为代表的新兴业务提出的灵活的资源需求,使得传统的互联网网络面临着诸多问题。
在上述背景下,学术界和工业界开展了对未来互联网体系架构的相关研究。其中,软件定义网络(Software Defined Network,SDN)是由美国斯坦福大学Clean slate研究组提出的一种新型网络架构[1],其通过将网络控制面与数据面分离,只在网络硬件设备的底层保留转发功能,上层则可进行集中的控制,进而将网络的应用和功能都可编程化,即所谓的软件定义。SDN的上述特点使得网络的自动化管理和控制能力获得了空前的提升,能够有效地解决当前网络所面临的资源规模扩展受限、组网灵活性差、难以快速满足业务需求等问题。
因此,自SDN概念兴起以来,越来越多的学术界研发人员开始致力于SDN控制器设计[2]、SDN应用[3]、SDN实现[4]等多个方面的研究。由于集中SDN控制器的引入,SDN控制器和SDN交换机之间的网络连接如何建立和维护也成为了研究热点之一。文献[5]提出了一种软件定义网络带内控制连接建立方法,虽然能够通过两层网络实现转发设备与控制器之间带内控制连接的自动建立,但随着网络中转发设备数量的增加,转发设备(特别是与控制器直连的转发设备)的带内控制流表项条目也会越来越多,甚至会变得非常臃肿。另外,在进行大规模组网时,通常采用三层网络来完成控制器和转发设备之间的带内控制连接。文献[6]提到了采用动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)完成交换机IP的分配和控制器IP的分发,并通过ARP获取控制器MAC地址;之后交换机和控制器建立TCP session和OpenFlow session;最后由控制器通过链路层发现协议(Link Layer Discovery Protocol,LLDP)报文实现交换机间链路的发现。但整个过程中,针对SDN控制器和交换机之间的带内控制连接如何建立没有进行针对性的介绍。文献[7]提出了一种SDN控制器带内管理的连接方法,能够实现SDN控制器主动快速连接交换机并分配IP地址,减小了SDN交换机的管理网络的配置复杂度和部署难度,但主要研究对象为SDN控制器,对带内连接建立过程中的交换机之间的行为没有进行详细的描述。目前,较为常用的带内连接方式为用户自定义各个交换机端口的MAC地址与IP地址的对应关系,生成用户网络规划文件,之后SDN控制器采用LLDP协议按照用户网络规划文件对各个SDN交换机的IP进行分配;完成SDN交换机的IP配置后,还要在SDN交换机中建立全网节点的路由,即在各个交换机中增加网络中全部网段的路由。该方法在大规模组网时,同样会造成SDN交换机中的路由表条目庞大,影响数据转发效率。
根据以上分析,本文基于带内连接网络拓扑,提出了一种新的SDN带内控制连接建立方法。该方法分为前向和后向两个阶段:前向阶段采用基于可变长子网掩码(Variable Length Subnet Mask,VLSM)的全自动IP分配技术通过LLDP报文交互完成SDN控制器IP分发和SDN交换机IP分配;后向阶段借助于基于无类别域间路由(Classless Inter-Domain Routing,CIDR)的超网路由聚合技术实现带内路由自动构建。最后,搭建了基于Docker的SDN带内连接通信网络测试环境,验证了所提方法能够实现SDN交换机与SDN控制器带内控制连接的自动建立,减小了SDN网络的配置复杂度和部署难度,同时使得SDN交换机中的路由表条目数量得到了有效控制,从而降低了带内路由自动构建过程的复杂性。
1 系统模型
SDN交换机建立并维护到SDN控制器的网络连接,常用的方式有两种:一种是SDN交换机通过建立独立的控制信令网络和控制器通信,控制信令报文和用户业务数据报文不共用物理链路;另一种就是SDN交换机通过随路网络和控制器进行通信,控制信令报文和业务数据报文共用物理链路。前一种方式称为带外控制,而后一种方式则称为带内控制[8]。
考虑到网络信道资源有限及成本等问题,部署一个独立的控制信令网络代价较大,因此带内控制连接的建立成为本文的研究方向。带内控制不需要专用的控制信令端口和信道,与业务数据传输网络重合,即基于相同的物理基础设施,通过为控制信令提供高优先级来建立两个不同且相互独立的逻辑网络。
另外,考虑到若应用于战术环境,鉴于SDN控制器和SDN交换机之间的标准南向接口协议开销太大[9],可将SDN控制器的部分控制功能下发到数据平面[10],一方面达到减少协议开销的目的,另一方面使得数据平面具备一定的自主控制能力,故引入了控制器代理(Cproxy),并将其安装到SDN交换机中。控制器代理与SDN交换机之间采用标准南向接口协议,与SDN控制器之间则采用轻量化的南向接口协议(自研)。
综上,本文采用的SDN带内连接通信系统模型如图1所示。
图1 SDN带内连接通信系统模型
2 软件定义网络带内控制连接建立
基于带内连接网络拓扑,建立SDN交换机到SDN控制器的带内控制连接,可分为前向阶段和后向阶段:前向阶段通过LLDP报文交互完成SDN控制器IP下发和SDN交换机IP分配;后向阶段借助于超网路由聚合技术完成带内控制路由的自动构建及流表配置。
2.1 前向阶段
本文拟基于IP地址和端口建立SDN交换机到SDN控制器的网络连接,因此SDN交换机首先得配置自身IP地址,并获取SDN控制器IP地址。进行SDN交换机IP分配时,需进行三个方面考虑:首先,要防止IP地址分配冲突。如果IP地址分配冲突,将会导致整个网络路由无法建立。其次,要尽可能降低后续带内信令路由构建的复杂性。带内控制连接的建立,在完成前向阶段IP地址分配后,还需在后向阶段建立SDN交换机到SDN控制器的带内路由。而带内路由的构建方式依赖于IP地址分配方式,换句话说,复杂的IP地址分配方式也可能意味着复杂的带内构建路由构建。因此,SDN交换机IP分配还要考虑到带内路由构建的复杂性。最后,还要尽可能保证IP地址分配的灵活性,满足用户对于网络规划的需求。基于以上考虑,本文提出了一种基于VLSM的全自动IP地址分配方式进行SDN交换机IP分配。
2.1.1 基于VLSM的全自动IP地址分配
基于VLSM的全自动IP地址分配采用可变长子网掩码对子网进行划分,其基本思路是:首先划分主机数量最多(默认子网掩码长度)的子网,然后再继续划分主机数量次多(从主机号最高位开始,借出若干位数做网络号,也就是增加网络号的位数,获得新的子网掩码长度)的子网,重复进行,直到所有子网划分完成。在可变长子网掩码划分子网时,通过使用不同的子网掩码适应不同的网络规模,一方面提高了IP地址利用率;另一方面,对子网进行层次化编址,可在路由表内进行更好的路由归纳。下面以网络拓扑为1∶6∶36的树形拓扑为例,对基于VLSM的全自动IP地址分配的具体过程进行详细介绍。
在网络拓扑为1∶6∶36的网络中,与SDN控制器直接相连的SDN交换机称为直连交换机,两者连接的端口称为直连端口,SDN控制器连接1个直连交换机;通过直连交换机到达SDN控制器的SDN交换机称为二跳交换机,1个直连交换机下连接6个二跳交换机;依次通过二跳交换机和直连交换机到达SDN控制器的SDN交换机称为三跳交换机,每个二跳交换机分别连接6个三跳交换机。为了便于分级管理,首先,直连交换机采用VLSM技术将与其连接的二跳交换机划分出6个子网;之后,每个二跳交换机采用VLSM技术分别将与其连接的三跳交换机划分出6个子网。由于在该网络中,VLSM的作用是需要将一个网络划分出6个子网,故将可变子网掩码长度增量设置为3位(除去全0和全1子网,23-2=6)。本文选取10.0.0.1作为SDN控制器的IP,默认子网掩码长度为8位,10.0.0.2作为直连端口IP。网络配置如表1所示。
表1 网络配置
(1)直连交换机发送IP地址请求后,SDN控制器回复表1中的网络配置参数给直连交换机;直连交换机收到IP地址回复后,提取直连端口IP和SDN控制器IP进行配置,如图2所示。
图2 直连交换机IP分配
(2)二跳交换机1发送IP地址请求被直连交换机接收,直连交换机采用VLSM进行子网划分,去除子全为0或1的子网号,生成可用子网号列表,并按照顺序将子网号依次分配给发送IP请求的二跳交换机,如图3所示,将10.32.0.0/11分配给二跳交换机1所在子网,并将该子网中的IP分配给相应的端口。
图3 二跳交换机1的IP分配
(3)当三跳交换机1发送IP地址请求时,被二跳交换机1接收;二跳交换机1同样采用VLSM进行子网划分,并按照顺序将子网号依次分配给发送IP请求的三跳交换机,如图4所示,将10.36.0.0/14分配给三跳交换机1,并将该子网中的IP分配给相应的端口。
图4 三跳交换机1的IP分配
(4)所有SDN交换机的IP地址分配完成后,三层拓扑下的交换机配置如图5所示。由图5可以看出,可变长子网掩码长度增量影响着整个网络拓扑的宽度和深度。如果可变长子网掩码长度增量越大,则网络拓扑越宽,深度越小,即同一层的划分子网个数越多,但可划分的拓扑层级越少;反之则相反。因此,可变长子网掩码长度增量的取值一般取决于整个网络拓扑的宽度和深度。
图5 基于VLSM的三层拓扑交换机IP地址全自动分配
2.1.2 基于VLSM的全自动IP地址分配流程
基于VLSM的全自动IP地址分配通过链路发现协议来实现,SDN控制器IP的下发随着SDN交换机IP的分配过程一起进行。基于VLSM的全自动IP地址分配的LLDP报文交互流程如图6所示。
图6 基于VLSM的全自动IP分配的LLDP报文交互流程
首先,在SDN控制器收到直连交换机的IP地址请求后,会将预设的网络配置信息(详见表1)通过LLDP(IP_AUTO_RESP)报文回复给直连交换机,直连交换机在收到该LLDP报文后提取SDN控制器IP和直连端口IP并配置。之后,采用基于VLSM的全自动IP地址分配方式为请求IP地址的二跳交换机进行IP分配,并将分配的IP地址及子网掩码长度、可变子网掩码长度增量、SDN控制器IP地址封装到LLDP(IP_AUTO_RESP)报文发送给二跳交换机,二跳交换机在收到该LLDP报文后提取SDN控制器IP和分配的端口IP进行配置。
2.2 后向阶段
在SDN交换机完成相应端口的IP配置并获取到SDN控制器的IP后,需通过构建带内路由建立起与SDN控制器的连接,之后控制信令通过带内路由进行交互。前文提到,带内路由根据IP地址自动分配方式进行自动构建。本文在前向阶段采用了基于VLSM的全自动IP地址分配方式,目的之一就是为了有效地使用无类别域间路由和路由聚合来控制路由表的大小。于是,后向阶段的带内路由可借助于超网路由聚合技术来自动构建。该带内路由构建方式可使SDN交换机中的路由表条目数量得到有效限制,同时降低了带内路由构建过程的复杂性。
2.2.1 基于CIDR的带内路由自动构建
CIDR的基本思想是取消IP地址的分类结构,将多个地址块聚合在一起生成一个更大的网络——超网,以在单个路由表项中包含更多的主机。CIDR支持路由聚合,能够将路由表中的许多路由条目合并为更少的条目,因此可以限制路由表的大小。基于CIDR的路由聚合在某程度上可看作是基于VLSM的子网划分的逆过程,基于VLSM的子网划分是把一个大网络依次划分为几个小网络进行IP地址分配,而基于CIDR的路由聚合则是将几个小网络汇聚成一个大网络来做表示。
在图5所示的三层网络拓扑交换机IP地址全自动分配中,每个交换机设置一个上行路由指向SDN控制器IP,设置一个下行路由指向子网,而当前交换机子网是划分的下一层次交换机子网的超网,从而自动建立起控制面路由,如SDN控制器↔直连交换机↔二跳交换机1↔三跳交换机1之间的CIDR路由自动配置,如图7所示。
图7 基于CIDR的路由自动配置示意图
2.2.2 基于CIDR的带内路由控制面的流表配置
带内路由的正常工作还需要SDN交换机流表的特殊设置,要求流表能够识别出控制信令报文,转交给本地的路由表去进行数据转发。配置带内信令的流表遵循一定的规则,即如果一个SDN交换机物理端口与另一个SDN交换机的物理端口相连,则在这两个SDN交换机中应该分别对相应物理端口添加下述流表:
(1)如果源IP或目的IP为SDN控制器IP,则认为该信令为控制信令,交由路由表进行转发;
(2)除控制信令之外的数据则按照流表进行转发。
3 实验验证与结果分析
3.1 测试环境搭建
本文采用基于Intel x86架构PC机作为硬件平台,运行VMware Workstation Pro 16.0,利用Docker技术部署一个SDN带内通信网络测试环境,测试环境包括1个SDN控制器和3个SDN交换机,3个SDN交换机按照线性关系连接在一起,其中一个与SDN控制器直连,形成SDN控制器↔直连交换机↔二跳交换机1↔三跳交换机1的拓扑。
因此,利用Docker创建4个容器,每个容器的配置如表2所示。其中,Open vSwitch 2.5.9软件(简称OVS软件),支持OpenFlow1.3;Cproxy软件为控制器代理软件,是StarOS软件和OVS软件的适配层,和所控制的OVS软件运行在同一个容器中。
表2 容器配置
搭建完成的基于Docker的SDN带内连接通信网络测试环境如图8所示。网络配置参数详见表1。
图8 基于Docker搭建的SDN带内通信网络测试环境
3.2 实验结果分析
3.2.1 基于VLSM的全自动IP地址分配
(1)进入SDN控制器容器mycontroller1,输入ifconfig命令,查看其网口IP,如图9所示。SDN控制器读取配置文件获取到端口eth0的IP:10.0.0.1/8。
图9 SDN控制器IP分配
(2)进入直连交换机容器myswitch1,输入ifconfig命令,查看其网口IP,如图10所示。直连交换机通过接收SDN控制器发送的网络配置参数,获取与SDN控制器相连端口eth0的IP:10.0.0.2/11。同时,采用基于VLSM的全自动IP地址分配,获取与二跳交换机1相连端口eth1的IP:10.32.0.1/11。
图10 直连交换机IP分配
(3)进入二跳交换机1容器myswitch2,输入ifconfig命令,查看其网口IP,如图11所示。二跳交换机1通过接收直连交换机发送的IP地址回复报文,获取与直连交换机相连端口eth0的IP:10.32.0.2/14。同时,采用基于VLSM的全自动IP地址分配,获取与三跳交换机1相连端口eth1的IP:10.36.0.1/14。
图11 二跳交换机1-IP分配
(4)进入三跳交换机1容器myswitch3,输入ifconfig命令,查看其网口IP,如图12所示。三跳交换机1通过接收二跳交换机1发送的IP地址回复报文,获取与二跳交换机1相连端口eth0的IP:10.36.0.2/17。
图12 三跳交换机1-IP分配
如图9~12所示,采用基于VLSM的全自动IP地址分配方式成功实现了SDN网络中每个SDN交换机端口IP地址的自动配置,有效减小了SDN网络的配置复杂度和部署难度,提高了部署效率。
3.2.2 基于CIDR的带内路由自动构建
(1)进入SDN控制器容器mycontroller1,输入route-n命令,查看其路由表,如图13所示。
图13 控制器路由表
(2)进入直连交换机容器myswitch1,输入route-n命令,查看其路由表,如图14所示。
图14 直连交换机路由表
(3)进入二跳交换机1容器myswitch2,输入route-n命令,查看其路由表,如图15所示。
图15 二跳交换机1路由表
(4)进入三跳交换机1容器myswitch3,输入route-n命令,查看其路由表,如图16所示。
图16 三跳交换机1路由表
如图13~16所示,基于CIDR的带内路由自动构建把每个SDN交换机的路由表中的若干个路由汇聚成上行路由和下行路由。其中,上行路由指向SDN控制器,下行路由指向下一级划分子网,从而自动建立起SDN控制器↔直连交换机↔二跳交换机1↔三跳交换机1之间的控制面路由,成功实现了带内路由自动构建。
基于同样的带内连接测试环境,我们采用前文所述的基于用户网络规划文件的IP分配方式进行对比,假定SDN控制器的IP仍选取10.0.0.1/8,用户网络规划文件的内容如图17所示。
图17 用户网络规划文件
按照用户网络规划文件通过LLDP协议完成网络中各个SDN交换机的IP配置后,还需建立各个交换机到SDN控制器的带内路由,即在SDN控制器和各个交换机中均添加全部网段的路由,如图18~21所示。
图18 控制器路由表
图19 直连交换机路由表
图20 二跳交换机1路由表
图21 三跳交换机1路由表
进一步,以简单的线性拓扑为例(其他拓扑需另外讨论),若采用基于用户网络规划文件的IP分配方式,SDN控制器和各个交换机中的路由条目会随着交换机数量的增加而线性增加,时间复杂度为O(n);而采用基于VLSM的全自动IP地址分配+基于CIDR的带内路由自动构建,则将交换机路由表中的若干条路由汇聚成上行路由和下行路由,使SDN控制器和交换机路由表条目数量均不超过3条,且当交换机中的路由条目达到3条后就不会随着交换机数量的增加而变化,有效控制了SDN交换机中的路由表条目数量,降低了带内路由构建的复杂性,时间复杂度为O(1),如图22所示。
图22 交换机路由表条目
3.2.3 基于CIDR的带内路由控制面的流表配置
(1)进入直连交换机容器myswitch1,输入ovs-ofctl dump-flows br0 --protocols=OpenFlow13命令,查看其流表配置,如图23所示。
图23 直连交换机流表配置
(2)进入二跳交换机1容器myswitch2,输入ovs-ofctl dump-flows br0 --protocols=OpenFlow13命令,查看其流表配置,如图24所示。
图24 二跳交换机1流表配置
(3)进入三跳交换机1容器myswitch3,输入ovs-ofctl dump-flows br0 --protocols=OpenFlow13命令,查看其流表配置,如图25所示。
图25 三跳交换机1流表配置
如图23~25所示,每个SDN交换机均添加了两条流表,即若源IP为SDN控制器IP,执行actions=NORMAL;若目的IP为SDN控制器IP,执行actions=NORMAL。
SDN交换机通过配置上述流表识别出控制信令报文,并转交给本地的路由表去进行转发。
4 结束语
本文基于带内连接网络拓扑,提出了一种SDN带内控制连接建立方法。为验证该方法的可行性,搭建了基于Docker的SDN带内通信网络测试环境,并对测试结果进行了分析,验证了所提方法能够有效地实现SDN带内控制连接的自动建立,减小了SDN网络的配置复杂度和部署难度,同时对SDN交换机中的路由表条目数量进行了有效控制,从而降低了带内路由构建的复杂性。本文的研究成果将为软件定义网络控制平面与转发平面控制信道的建立提供一定的设计参考价值。
本文搭建的SDN带内通信网络测试环境是在基于Docker的虚拟平台上部署的,下一步可考虑在实际物理设备上进行部署实现。