陈 宇,韩久江,刘 建,鲜 明,王会梅,张宇翔
国防科技大学 电子科学学院,长沙 410073
网络仿真实验场已经成为网络安全领域的一项重要科学装置,能够在安全可控的环境下为网络空间行为的观察、测量与分析提供支撑手段,为网络攻防行为的测试与评估、网络安全工具的测试与验证、专业人员的技战术训练演练提供灵活高效的软硬件基础设施。目前,主流的网络仿真实验场主要依赖数字仿真、虚拟化等技术构建虚拟环境中的仿真实体,然而考虑到真实的网络空间中设备复杂异构、厂家来源多样,而且某些设备(如密码机、专用设备等)不存在虚拟仿真模型或者镜像、某些复杂终端(如各类涉密目标信息系统、定制化的特殊终端)难以进行虚拟仿真构建等问题,迫切需要将实体终端与虚拟网络进行灵活集成,共同构建虚实融合的网络仿真实验场,为网络攻防演练提供高逼真的场景环境。
软件定义网络是近些年新兴的一种网络技术,其通过控制层面与数据转发层面的相互分离,为网络设备提供基于硬件基础的转发层面和基于软件控制的控制平面[1-2],通过SDN控制器实现对全域网络的控制、管理。鉴于SDN管控分离的特点,网络便具备了更好的灵活性和可拓展性。
文章提出一种基于SDN的虚实融合网络仿真实验场构建方法,其核心思想是实现网络仿真场景构建中虚拟实例与实体终端的共同组网,使得构建的网络仿真场景更加得全面、逼真,更好地满足网络安全实验需求。实验发现,基于SDN的网络仿真实验场构建方法能够快速实现虚实融合场景的构建,相比于传统的构建方法,能够满足大规模复杂网络场景生成,并有效规避网络节点链路堵塞等现象。通过SDN的方式将实体终端接入虚拟网络环境中,可以有效降低复杂网络的构建成本,实现网络规模灵活扩展、网络仿真真实有效。
文章的主要贡献包括三个方面:
(1)基于SDN,提出了一种虚实融合网络仿真实验场构建方法,并设计开发了一套用于虚实融合网络仿真的原型系统。
(2)基于Ryu控制器,提出了一种流表生成算法,实现虚实设备间的互联互通。
(3)通过实验证明所述基于SDN的虚实融合网络仿真实验场构建方法与流表生成算法的有效可行。
进入新世纪以来,随着网络规模逐步增大、网络结构越发复杂、网络需求日益剧增,对网络的灵活性要求也不断提高,SDN解决了传统网络架构复杂、结构分散等问题,突出了网络灵活性。SDN是斯坦福大学Nick教授在2008年提出的,在传统的TCP/IP网络中,数据平面与控制平面具有紧密耦合的特点,针对不同的网络架构都必须进行定制化的网络架构构建,导致网络后期维护复杂、成本巨大、,且对于如今用户更多功能、更加灵活、更复杂多变的网络需求明显显得力不从心,所面临的现实问题和业务挑战持续增大。SDN则更好地适应了网络发展趋势,采用分层思想,将网络的数据平面和控制平面完全解耦分离[3-4],SDN是一种新型网络体系结构,是网络功能虚拟化的一种实现方式。如图1所示,SDN架构从上往下可以分为应用层、控制层、基础设施层,应用层运行着大量的应用与软件,控制层是整个SDN架构的核心,基础设施层由基础物理设备组成,用于数据处理。在分层结构中,控制层通过提供北向接口和南向接口分别实现与应用层和基础设施层的通信,通过北向接口对接运营商的业务应用,便于维护人员通过编程的方式实现网络部署等服务;而通过南向接口可实现对数据平面网络设备的集中控制。因此SDN架构最突出的特点便体现在直接可编程、集中化管控、开放兼容等方面。
图1 SDN架构Fig.1 Structure of SDN
随着SDN技术的发展,SDN控制器也已经较为成熟多样,呈现出开源与商用SDN控制器并存的现状,较为常用的SDN控制器有Ryu、NOX、FloodLight、Open-Daylight[5]。其中,Ryu控制器因为具有更佳的轻量级优势,基于Python实现的代码更灵活简洁,同时提供了各种规范定义的API接口、网络组件等,也可支持多种实体和虚拟交换机,因而得到了广泛的应用。Ryu控制器主要由app、base、cmd、contrib、controller、lib、ofproto、services、tests、topology等组件构成[5],基于特定需求实现特定功能,只需结合上述组件构建自定义的app即可,因此在实验过程中便于开发人员进行快速的创建、管理和应用。
OpenFlow协议是SDN众多南向接口协议中最为出名、应用最广的协议[6-7],如表1所示,一条OpenFlow流表项包含Match Fields、Priority、Instructions、Counters等基本字段、条件字段和动作字段[8],其中Match Fields的主要作用是在流表项中进行规则匹配,可用于匹配in_port、dl_dst、dl_src、vlan、tun_id等关键报文字段;Priority定义了流表的优先级,流表在处理报文时按照流表优先级的高低依次进行报文处理;Instructions则为流表的动作指令集,通过一系列的Instructions定义流表的具体执行行为action,如执行output、drop、push_vlan、pop_vlan、set_field→tun_id等动作,而且在Instructions指令集中可以包含多种指令类型,通过一系列的action后才完成数据报文的处理[9]。
表1 流表项的部分组成情况Table 1 Composition of partial OpenFlow table
OVS(Open vStich)在SDN虚拟交换机中最具影响力、使用最广泛,已经广泛应用于商业界和学术界,尤其是随着近些年云产品规模的高速发展,OVS已经成熟运用于各类云平台中。在云平台中,对于多租户的各类场景,租户对网络的需求多种多样,且随时都会进行不同的增、删、改,传统的网络管理方式基本上需要管理人员不断地手动维护和操作,很难满足云平台的网络需求,因此基于SDN实现网络虚拟化、自动化、灵活化后,能更好地满足云平台的网络需求。基于云平台的虚拟资源编排能力,实现网络攻防训练场景的快速构建,是当前网络仿真实验场的主流技术方案。OpenStack作为主流的开源云平台,已广泛应用于各行各业,基于OpenStack云平台定制化构建网络仿真实验场,生成各类网络安全实验场景也已成为目前网络仿真实验研究中最常用的手段。在OpenStack云平台中,每台节点的OVS虚拟交换机共有br-tun、br-int、br-ex三个虚拟网桥,其中br-tun是隧道网桥,基于隧道技术的vxlan和GRE网络则是使用该网桥进行通信[10],br-int是集成网桥,网络场景生成的所有实例都将通过网卡等虚拟设备与集成网桥进行连接,br-ex则是用于连接外部网络的网桥。
在进行网络仿真场景生成的时候,不仅云平台内部需要构建复杂多样的拓扑环境,而且还经常需要将某些实体终端集成于虚拟网络中,共同构建虚实融合的网络仿真实验场场景[11]。云平台自带的技术方案主要是通过网络节点的br-ex网桥,搭建vlan或着flat网络实现云平台中虚拟实例与外界实体终端的通信互连,但基于上述两种方式分别存在以下不足:vlan使用12 bit标记的vlan_id,使得该技术最多只能够支持4 096个vlan号,不利于同时构建大规模网络场景;而flat网络又必须满足每一个flat网络独占一个网络节点的物理网卡,故受限于网络节点的物理网卡数量,在实际生产测试环境中,局限性和弊端性较大,同时上述两种方式均需要通过网络节点实现与外界的通信,会导致大流量数据传输时,网络节点存在阻塞的现象。
针对上述问题,部分学者也进行了虚实融合的研究,如:文献[12]结合OpenStck研究了多粒度虚拟化技术及虚实网络一体化融合技术,实物网络通过Cisco边界路由器接入OpenStack集群,通过BGP(external BGP,EBGP)协议与虚拟路由器实现有机融合组网,但是在实现过程中需要先在OpenStack数据库中查询虚拟实例网络ID,再结合查找对应的vlan号后,才能进行相应配置与连通,不利于实际应用,且所有实体网络数据也都是通过OpenStck网络节点与OpenStck集群中虚拟实例进行连通;文献[13]通过MPI技术实现了实体终端灵活接入NS3网络仿真平台,但其实体终端与仿真实例进行通信时,需要进行真实报文与虚拟报文的重构转发,结构复杂,不适用于大规模网络场景的仿真;文献[14]分别针对单实体终端和多网段实体终端提出了基于FloatingIP和基于路由节点的方式实现虚实融合,基于FloatingIP的方式造成了底层物理资源的大量消耗,基于路由节点的方式同样未能解决大规模OpenStck集群中网络节点通信瓶颈的问题;文献[15]通过将OpenStck中网络节点作为虚实互联服务器,由于受限于服务器网卡数量,便通过增加网络节点的数量和相应的网卡数量来增加实物终端接入的数量,该方法对接了OpenStack中Neutron数据库和OVS中ovs-db数据库,通过在Neutron数据库建立虚实互联的映射表,借助虚拟路由器实现了通连,但存在逻辑复杂、难以进行大规模自动化快速部署等问题。
上述研究工作虽然都实现了实体终端与虚拟实例的共同组网,但是却存在不支持大规模网络场景、结构复杂、不能适用于实际环境、容易出现通信瓶颈造成链路阻塞等问题。因此采取一种部署简便、高效、灵活、安全、适用于大规模网络场景构建的方式实现网络仿真实验场中虚拟实例与实体终端的互联互通、从任意位置接入后可共同组网构建融合仿真场景已成为一种迫切需求。为满足大规模网络场景构建需求,设计采取vxlan网络而并非flat或者vlan网络;为实现部署灵活、高效,采取基于SDN的方式,利用控制器实现虚实设备间的灵活组网;为规避由于云平台网络节点的通信瓶颈造成链路堵塞,采取将实体SDN交换机与各个计算节点的虚拟OVS交换机分别搭建vxlan隧道,实现多条虚实链路的互联互通,从根本上杜绝了由网络节点造成通信堵塞的可能。
主要介绍基于SDN软硬件交换机实现虚实融合网络仿真实验场构建,该设计依赖overlay网络,通过搭建vxlan隧道实现实体终端的接入。Vxlan网络具有和vlan网络相似的功能,能够提供二层的以太网服务,但vxlan相较于vlan却具备更好的灵活性和扩展性,其采取24 bit标记vxlan_id,能够支持更多的二层网络,达到1 600多万个二层网段,因此能够满足大规模复杂云平台中网络场景构建。
在OVS的云平台中,虚拟实例的数据包传输会经过一系列的虚拟网桥设备,下面以计算节点中虚拟实例数据包走向进行详细描述。
如图2所示,云平台中虚拟实例通过虚拟网卡等设备,将数据包通过OVS的br-int网桥传送至br-tun网桥,当数据包到达OVS的br-tun网桥时,会根据网桥中多级OpenFlow流表规则进行转发,其流表转发规则如图3所示。
图2 实例数据走向Fig.2 Instance flow direction
图3 流表间的走向Fig.3 Direction of OpenFlow
图3中各个OpenFlow流表的功能分别为:
table0:做分流处理,根据报文来源是云平台内部的br-int网桥或云平台外部(外部发送过来的数据是指数据由其余节点或设备传输至本节点,并非本节点中虚拟实例通过br-int网桥传输的数据报文),分别转发至不同的流表作后续处理,对于内部br-int网桥发送过来的数据报文则转发至table2处理,对于外部发送过来的数据报文则转发至table4处理;
table2:对于虚拟实例准备向外发送的数据报文,若是单播包则转至table20,若是多播包则转至table22处理;
table3:将满足该流表匹配条件的数据包直接丢弃;
table4:用于处理外部发送过来的数据报文,具体为剥除vxlan的tun-id,添加vlan tag,实现云平台内部vxlan与vlan的映射转换后转至table10进行处理;
table10:该流表是一条自学习流表,实现数据报文中mac地址表等的学习,并将学习到的内容放到table20中;
table20:根据报文的匹配域(vlan、目的mac等),剥离vlan_id,添加vxlan的tun-id,并从指定的vxlan port转发出去,若未能实现相应的匹配,则转至table22进行处理;
table22:同样是根据报文的匹配域(vlan、目的mac等),剥离vlan_id,添加vxlan的tun-id,然后进行泛洪广播,将数据报文发送至所有的vxlan隧道中,实现数据报文在云平台中不同节点间的传输。通过上述OpenFlow流表的转发规则,则实现了云平台中各个虚拟实例之间的相互通信。
3.2.1 系统架构
通过上节虚拟实例之间数据走向的分析可知,将实体交换机与云平台中计算节点的br-tun网桥通过vxlan隧道进行连接,便能实现实体终端与虚拟实例融合组网通信。为实现简便、高效、灵活、安全地将实体终端与云平台中虚拟实例共同组网构建高逼真的网络仿真实验场景,采取基于SDN的方式,实现实体终端的接入,构建虚实融合网络,其系统架构如图4所示。系统架构自下而上分别是硬件层、平台层、中间逻辑层、用户交互层,硬件层主要通过服务器、实体SDN交换机等为整个系统搭建硬件环境支撑;通过硬件构建出的OpenStack云平台、SDN控制器、数据库等组成了平台层,为中间逻辑层奠定软件环境基础;中间逻辑层通过与用户交互层的交互获得绘制和配置好的拓扑信息,再通过调用平台层的软件资源进行逻辑功能的实现。
图4 系统架构Fig.4 System architecture
系统各个模块间的详细功能如下所述:
用户交互层通过前端WEB交互界面实现虚实网络场景的拓扑构建,其中虚拟资源信息注册模块主要提供OpenStack云平台中虚拟实例的构建要素,如镜像名、实例大小等资源信息,可在生成具体实例时进行选择;实物设备信息注册模块主要是进行实体终端的注册入库,如型号、操作系统、功能和在实体SDN交换机上连接情况等;虚实融合网络拓扑绘制模块主要用于构建具体的网络实验场景,通过与虚拟资源信息注册模块和实物设备信息注册模块的交互,指定绘制的拓扑场景具体使用的虚拟实例和实体终端信息;虚实融合网络参数配置模块主要用于虚拟实例的磁盘、CPU、IP等参数的配置,即将绘制出的场景实例进行具体化配置;虚实网络场景生成模块主要通过与用户交互层中各个模块的交互,获取绘制和配置的拓扑场景,根据配置好的网络拓扑,进行拓扑解析,调用OpenStack后台资源按照绘制和配置的网络拓扑生成相应的虚拟实例;虚实融合处理模块则主要是结合SDN控制器实现相应的功能,其中虚实信息查询模块将查询到的实体终端在拓扑中所属vxlan信息反馈给流表构造模块,流表构造模块和流表下发模块通过与虚实信息查询模块的交互,结合相应的算法实现各级流表的构造下发,流表动作执行模块则根据下发的流表执行相应的具体操作,如数据包的组播、丢弃、打vxlan_tag标记后再转发等。
具体生成一次虚实融合网络场景的流程图如图5所示,用户交互层根据虚拟资源信息注册模块和实物设备信息注册模块的注册信息,绘制网络拓扑场景,主要绘制虚拟实例和实体终端组网情况;拓扑绘制完成后需要对虚拟实例进行详细参数配置,确定实例的镜像类型、网段参数等,如对每个实例确定使用Ubuntu或者Windows镜像,明确虚拟CPU、磁盘等大小。用户交互层完成上述拓扑绘制和配置后,将所得到的场景信息由中间逻辑层进行具体处理。其中网络拓扑解析模块首先处理场景描述中的网络部分信息,调用OpenStack的Neutron_API逐个生成虚拟网络、子网、端口等,再根据拓扑解析得到的实例信息,调用Nova_API,通过Nova_scheduler和Nova_compute服务完成虚拟实例创建请求,再通过调用OpenStack中Glance和Neutron等组件,结合解析得到的实例配置信息完成虚拟实例的创建。至此则完成了虚实融合场景构建中虚拟实例和网络环境的生成,接下来主要介绍通过虚实融合处理模块完成虚实链路的互联互通,首先通过调用Neutron数据库获取场景相应的vxlan_id信息、具体实体终端需要融入的虚拟网段等,将虚拟实例与实体终端间的报文数据上报SDN控制器进行解析处理,结合流表生成算法进行OpenFlow流表的构造并下发至实体SDN交换机,实体SDN交换机则依据流表指令完成相应的处理动作打通链路,实现虚实互通、融合组网,后面将详细介绍完成虚实融合中链路打通和流表生成算法的关键技术。
3.2.2 系统各模块交互关系
图6显示了基于SDN的虚实融合网络仿真实验系统中各模块之间的控制流信息。
图6 系统模块之间的控制流信息Fig.6 Control flow information between system modules
系统各模块之间的控制流为顺序执行的逻辑流程。首先,虚实融合网络拓扑绘制模块和虚实融合网络参数配置模块作为系统的输入端,通过绘制和配置拓扑得到构建的网络场景具体信息。将得到的网络场景具体信息发送至虚拟网络场景生成模块,虚拟网络场景生成模块进行场景要素的解析,主要解析得到场景构建的网段、实例的系统配置、端口连接情况等,解析后分别调用OpenStack的API生成对应的虚拟网络和虚拟实例等。虚实融合处理模块再根据所生成的网络信息,结合OpenStack的Neutron组件和SDN控制器完成流表的构造与下发,虚拟实例与实体终端则根据下发流表所对应的指令动作进行相关通信。
图7显示了基于SDN的虚实融合网络仿真实验系统中各模块之间的数据流信息。
图7 系统模块之间的数据流信息Fig.7 Date flow information between system modules
系统管理员通过虚拟资源信息注册模块和实物设备信息注册模块,将虚拟资源信息和实物设备信息存入数据库中。用户通过虚实融合网络拓扑绘制模块,在WEB交互界面绘制虚实融合网络拓扑场景,然后配置拓扑参数,完成拓扑参数配置后将场景具体信息存入数据库中,如IP段、虚拟实例数量、端口及实体终端连接情况等。场景生成模块读取数据库中存储的场景信息后,生成具体的虚拟网络和虚拟实例,同时将虚拟网络和虚拟实例的具体生成信息存入数据库中,如实例IP、实例mac、vxlan_id等。虚实融合处理模块再通过读取数据库中vxlan_id、实体终端连接情况等数据,将其作为关键参数反馈至SDN控制器,SDN控制器依据得到的关键参数结合流表生成算法完成具体流表的构造与下发。
上节所述系统架构的具体物理连接图如图8所示。
图8 基于SDN的虚实融合Fig.8 Virtual-real fusion based on SDN
3.3.1 构造vxlan隧道
Vxlan隧道是整个虚实融合系统的桥梁,控制器对实体SDN交换机进行全权管控,通过vxlan隧道打通实体SDN交换机与云平台各个计算节点OVS中br-tun隧道网桥之间的链路,这也是实现云平台与实体终端连通交互的前提。具体实现步骤为:
步骤1在云平台各个计算节点OVS虚拟交换机的br-tun隧道网桥和实体SDN交换机上分别增加相应的vtep_port端口对。
步骤2通过OVS相关命令,利用步骤1中的vtep_port端口对,创建vxlan隧道,实现实体SDN交换机与云平台各个计算节点OVS中br-tun隧道网桥的连通,进而便实现了云平台中虚拟实例与实体终端的链路连通。
步骤3在云平台各个计算节点的br-tun隧道网桥中添加守护进程,将新增加的vtep_port信息添加进入br-tun隧道网桥的各级流表中。
3.3.2 流表构造与下发
上述系统架构中最为核心的是虚实融合处理模块,其中流表的构造与下发是整个模块中最重要的一个部分,其核心则主要在于虚实网络信息的查询和流表构造的相应算法。SDN控制器流表构造和下发的具体过程如算法1所示,首先SDN实体交换机接收到数据报文后先判定是否有可匹配的流表项,如果无可匹配的流表,则触发Packet-in机制,以Packet-in消息的形式将数据报文上传至控制器。控制器接收到Packet-in消息形式的报文后,进行相关的关键信息提取,建立自学习机制,通过对in_port、eth_src、eth_dst、tunnel_id等关键字段的解析学习,将数据报文走向分为从虚拟实例发送至实体终端和从实体终端发送至虚拟实例两个方向,结合虚实网络信息查询模块的结果,分别向实体SDN交换机构造和下发不同优先级的OpenFlow流表,实现实体SDN交换机基于不同优先级的流表进行数据报文的处理。具体如算法1所示:
算法1SDN控制器流表构造下发算法
输入:Packet-in消息;
输出:OpenFlow流表项。
//未匹配到流表且数据为arp报文则上报控制器
1.If not match && protocols==arp:
//报文是实体终端发送的广播包
2.If in_port from Physical and type=Flood:
//学习报文的输入端口、mac等信息
3.Learn(in_port,mac)
//通过数据库获取vxlan_id信息
4.Request.ge(tvxlan)
//区分交换机端口进行直接转发和通过隧道转发组播流表构造
5.SetGroup table[setAction(forward),SetAction(setTun_id,forward)]
//下发优先级为A的流表
6.SetFlowEntry(setGroup table,priority=A)
//若报文是实体终端发送给虚拟实例的非广播包
7.Else:
8.Request.ge(tvxlan)
//进行隧道转发流表构造
9.SetAction(setTun_id,forward)]);
//下发优先级为B的流表
10.SetFlowEntry(setAction,priority=B)
//报文由虚拟实例通过隧道发送
11.If in_port from OpenStack && vxlan in pro-tocols:
12.If type!==Flood:
//学习报文中源端口、mac、vxlan_id等信息
13.Learn(in_port,mac,vni)
14.SetAction(forward);
//下发优先级同样为B的流表
15.SetFlowEntry(setAction,priority=B);
16.Else:
17.SetAction(Flood);
//下发优先级为C的流表
18.SetFlowEntry(setAction,priority=C)
19.Else:
20.Drop
将通过大量的仿真实验来测试所提出的虚实融合方案性能表现,从连通性、隔离性、发包延迟、吞吐量等方面对方案进行评估。
使用多节点部署的OpenStack云平台作为本地网络仿真实验平台,使用盛科V530型号的交换机作为实体SDN交换机,使用Ryu控制器作为SDN控制器,用于云平台和盛科交换机间的网络管理。通过四台服务器搭建分布式部署的OpenStack云平台,其中一台控制和网络复合节点的管理网段IP为192.168.36.50,三台计算节点的管理网段IP为192.168.36.51、192.168.36.52、192.168.36.53。以台式终端作为实体终端通过盛科交换机实现与OpenStack云平台的融合组网。
在实验中,通过虚实融合WEB用户交互界面进行虚实融合网络仿真实验场景的拓扑绘制,通过生成的不同场景进行不同实验验证。
4.2.1 虚实节点连通性与真实性测试
面向图9的虚实网络拓扑,完成虚实融合网络仿真实验场景的构建,将三台实物终端连接至实体SDN交换机,虚拟实例均设置为192.168.16.0/24网段,实体终端IP分别设置为192.168.16.197、192.168.16.198、192.168.16.199,首先从虚拟实例节点ping实物终端节点,显示ping成功;然后重新进行上述场景生成,再从实物终端节点ping各个虚拟实例节点,也显示ping成功,通过Wireshark抓包结果如图10所示。
图9 拓扑绘制Fig.9 Topology drawing
图10 终端和实例分别采集的报文Fig.10 Packets collected by physic and instances
抓包结果证明了虚实融合网络链路的连通性,其次通过对虚拟实例数据报文和实体终端数据报文的解析对比,可以发现两种数据报文的大小、内容、类型等完全一致,这说明虚实融合网络的数据报文在虚拟网络中的传输结果与实体网络中的传输结果完全一致,表明了虚实网络下数据的真实性。另外,无论是虚拟实例节点向实物终端节点请求建立通信,还是实物终端节点向虚拟实例节点请求建立通信,都可以建立正常通信,证明了本文方案的有效性。同时使用Zenmap探测软件,在实物终端节点上进行拓扑探测,可以清晰地显示出云平台中处于同网段的虚拟实例节点,也证明了虚实网络数据链路层面的连通性。图11中中心红色节点为实物终端,周边环绕的绿色节点为云平台中的90个同网段的虚拟实例和实体终端。
图11 Zenmap探测结果Fig.11 Result of Zenmap
表2为实体终端与随机选取的六个虚拟实例连通测试结果。
表2 部分实例连通性测试结果Table 2 Results of some VMs’connectivity test
4.2.2 流表构造结果正确性测试
根据4.2.1小节所述的虚实融合网络仿真实验场景,基于SDN控制器流表生成算法,设计了流表自动化配置代码,首先从虚拟实例节点ping实物终端节点,Ryu控制器通过该算法会自动构造和下发流表规则,虚实节点ping成功后,登录实体SDN交换机查看交换机流表信息配置情况如图12所示;在虚拟实例节点所在的计算节点服务器上,使用命令查看流表规则,结果如图13所示。
图12 实体SDN交换机部分流表Fig.12 Some OpenFlows of physical SDN switch
图13 计算节点部分流表Fig.13 Some OpenFlows of computing node
从上述流表信息可以看出,通过设计的流表构造和下发算法,生成的流表可以使虚拟实例与实体终端实现虚实链路的无缝互通。
4.2.3 虚实融合网络隔离性测试
在实际的网络实验中,往往会存在多个相同网络配置参数的虚实网络场景,它们分别属于不同的vxlan网络,但在这些不同场景中虚拟实例的IP属于同一个网段,构建了如图14所示的拓扑来验证方案的隔离性。其结合4.2.1小节所生成的网络,再创建一个不同vxlan下的192.168.16.0/24的虚拟网络,并生成多台IP段为192.168.16.0/24的虚拟实例。两个网络的vxlan_id分别为vxlan100和vxlan200,实体终端1、2的IP设备分别为192.168.16.199、192.168.16.200,实体终端1、2通过流表实现隔离,为实现实体终端1与vxlan100的网络互联互通,实体终端2与vxlan200的网络互联互通,用户交互层的前端页面具体拓扑绘制如图14所示。实验隔离性测试结果如表3所示。
图14 隔离性测试拓扑Fig.14 Topology of isolation test
表3 隔离性测试结果Table 3 Result of isolation test
如图14所示,在之前的流表算法自动构造与下发的基础上,场景中新增了一组除vxlan不同外,其余网段均相同的虚实融合网络。表3的测试结果显示,实体终端1只能与vxlan100的虚拟网络相互连通,实体终端2只能与vxlan200的虚拟网络相互连通,这是因为流表构造与下发算法是依据vxlan_id作为关键字段进行处理的,通过构造与下发的流表实现了不同虚拟网络的相互隔离,证明了方案具有网络隔离性,且具有实际可行性。
4.2.4 虚实融合网络性能测试
为了验证所述方案在虚实网络中的实际网络性能,在同一虚实网络中生成不同数量的虚拟实例进行实验测试。实验的三台计算节点服务器,配置均为16核256 GB,本次实验构建了一个虚拟网络,在该网络中仿真不同数量规模的虚拟实例节点,考虑到虚拟实例的配置参数对虚拟网络仿真规模的影响,本次实验时,将OpenStack中虚拟实例的Flavor配置参数分成三个等级,分别是小(RAM=512 MB,Root Disk=5 GB)、中(RAM=2 GB,Root Disk=10 GB)、大(RAM=4 GB,Root Disk=20 GB),对小、中、大三种虚拟实例的数量规模比例选取为5∶3∶2,针对生成的不同数量规模的虚实网络场景,分别从通信时延、吞吐量、丢包率等方面进行网络性能测试,测试结果如图15~17所示。
图15是本文方法虚实网络的通信时延与虚拟实例节点数量的关系曲线图,针对每一种虚拟实例数量,均测试10次然后取平均值。从图中可以看出随着虚拟节点数量规模增大,本文方法的通信时延也略微增加,但总体上时延依然保持在极低的水平。图16是虚实网络的吞吐量与虚拟实例节点数量的关系曲线图,针对每一种方法,同样测试10次然后取平均值。由于实验环境中服务器以及实物终端均为千兆网,所以在虚实网络中,吞吐量最大应接近1 000 Mb/s。本文所述方法是基于vxlan的网络模型,虚拟实例的数据报文直接从所在的计算节点网卡发出,通过实体SDN交换机直接与实体终端通信,由于实验中计算节点有三个,从图中可以看出,吞吐量受虚拟实例规模影响较小。图17是虚实网络的丢包率与虚拟实例节点数量的关系曲线图,在丢包率的测试中,通过在虚拟实例和实物终端之间不断发送UDP报文并且不断调整源主机的发送带宽,从而确定网络带宽的瓶颈。当调整发送带宽为940 Mb/s时,随着虚拟实例节点规模增大,本文方法的丢包率略微增加,但是依然在较低的水平。
图15 网络时延与虚拟实例数量关系曲线Fig.15 Relationship between network delay and number of virtual instances
图16 吞吐量与虚拟实例数量关系曲线Fig.16 Relationship between throughput and number of virtual instances
图17 丢包率与虚拟实例数量关系曲线Fig.17 Relationship between packet loss rate and number of virtual instances
从通信时延、吞吐量、丢包率的测试结果来看,基于SDN的虚实融合网络仿真具有很好的网络性能,并且在虚拟实例节点数量增大的情况下,网络性能优势依然保持在较好的水平。
提出了一种基于SDN的虚实融合网络仿真构建方法,通过实体SDN交换机,利用Ryu控制器将实物终端与OpenStack云平台构建的虚拟实例进行融合组网,实验证明基于SDN的方式能够有效适用于大规模虚实网络场景构建,在网络连通、时延、吞吐量、丢包率等方面较传统的方式均有较好的表现,该方法未将所有虚实流量全部通过云平台中网络节点进行传输,规避了网络节点堵塞的可能,同时该方法基于vxlan实现网络隔离,在确保虚实场景高可靠的同时也解决了规模受限的问题,且基于SDN的连接方式可以兼容除OpenStack之外的各类云平台,具有较好的实际应用前景。
当实体终端与云平台存在地域隔离时,在实现虚实网络仿真场景构建中,还需要将异地实体终端或者通信系统与本地云平台进行共同融合组网,下一步工作将主要解决以下两个方面。
(1)实现异地设备的跨域融合组网,构建多地兼容的虚实融合网络仿真实验场。
(2)实现不同云平台之间的多云组网,完成更大规模或者不同功能云平台之间的融合组网,为网络攻防演练提供更加复杂、更加逼真的仿真环境。