一种轻量级大规模自主网络协议功能测试方法与流程

文档序号:20019967发布日期:2020-02-25 11:26阅读:522来源:国知局
一种轻量级大规模自主网络协议功能测试方法与流程

本发明主要涉及到计算机网络协议测试领域,特指一种轻量级大规模自主网络协议功能测试方法,即运用轻量级虚拟化技术(如docker)和用户态协议栈技术(如click)构建虚拟自主路由器网元,执行网络协议功能测试。



背景技术:

对网络性能进行分析时主要用到网络仿真器与网络模拟器两种工具。网络模拟器是一种脱离真实网络而独立运行的软件程序,它通过建立实际网络系统的数学模型并按照相同的运行机理来模拟真实系统的动态行为。与网络模拟器不同的是,网络仿真器与真实网络之间存在交互,它通过软件的方式为网络协议或应用构建一个虚拟的网络运行环境并影响真实的数据流,如emulab、core、neptune等仿真平台就采用软件交换机和tc/netem、dummynet等链路仿真工具来仿真网络设备和链路。

虚拟化技术早已从耗费资源的vmware虚拟机向轻量级的容器虚拟化技术进行演进,如早期的core采用linuxlxc技术、emulab采用freebsdjails、netmirage采用命名空间隔离的技术、mininet采用linuxcontainer架构仿真网络节点,上述技术均是标准化容器技术docker的前身,代表了大规模网络仿真技术的发展方向。

然而,上述软件较多已针对特定场景如软件定义网络(sdn)、数据中心网络(tor)进行网元设定,或者并不具备良好的多服务器扩展特性,不能直接用于自定义协议测试场景。因此,在本发明中,我们采用轻量级的容器虚拟化技术进行节点和网络的功能性仿真,每个虚拟的网络节点运行自主协议应用,虚拟节点之间采用虚拟以太网设备互连,有效解决了网络测试的真实性问题。联合多台包含多个虚拟节点的服务器搭建大规模虚拟网络测试平台,同时包含实际被测设备构成虚实结合的测试环境,以硬件测试仪设备为性能支撑,解决了构建大规模虚拟网络测试环境的时效性和可扩展性问题。



技术实现要素:

本发明要解决的技术问题就在于:针对现有网元仿真技术不灵活的问题,本发明提供一种能够自定义网络协议控制与数据平面,同时避免传统虚拟机资源开销大的大规模功能性测试方法。

为解决上述技术问题,本发明采用以下技术方案:

一种轻量级大规模自主网络协议功能测试方法,其步骤为:

s1:基于控制平面代码实现网络交互协议,基于数据平面代码实现报文转发功能,然后将控制平面代码和数据平面代码打包到容器镜像中;

s2:将宿主服务器和实体设备按照测试拓扑互连,配置合适的ip地址,保证直连物理设备之间能相互通信;

s3:在宿主服务器内安装上述打包的容器镜像,按照测试拓扑和规模创建并运行容器实例,同一服务器内的容器创建虚拟网卡(vethpair)完成互连,跨越服务器的容器之间创建vxlan隧道进行互连,服务器与实体设备之间创建macvlan容器网络进行互连;

s4:通过主控服务器下发消息启动全网虚拟路由器网元与实体设备的协议实例,进行大规模协议功能测试。

与现有技术相比,本发明的优点在于:

本发明对大规模自主协议功能测试方法进行了优化,相较于普通的协议功能测试方法,能有效降低虚拟机网元对系统资源的消耗,同时可根据测试需要自主定制协议的控制平面和数据平面,降低协议实现复杂度。

附图说明

图1是轻量级大规模自主网络协议功能测试方法示意图。

具体实施方式

以下将结合说明书附图和具体实施例对本发明做进一步详细说明。

如图1所示,本发明所提出的一种轻量级大规模自主网络协议功能测试方法,其步骤为:

s1:基于控制平面代码实现网络交互协议,基于数据平面代码实现报文转发功能,然后将控制平面代码和数据平面代码打包到容器镜像中;

s1.1:宿主机中容器中运行的quagga作为控制平面,运行多种路由协议,完成整个网络的路由信息收敛与计算,在cd/usr/local/etc目录下编写需要运行的自主协议(如selfprotocol)配置文件selfprotocol.conf,配置文件后启动协议:zebra-d,selfprotocol协议进程-d;

s1.2:宿主机中容器运行的click作为数据平面,通过网络接口驱动与数据收发来完成报文的转发;

s1.2.1:数据平面的报文转发流程。数据平面在接收网络数据包后对数据包进行分类,提取数据包的报头并生成系统支持的摘要结构,摘要内容丢弃数据包中的真实数据而只保留指向保存在内存缓冲区中真实数据的指针,后面的操作之间只传递摘要内容而不传递整个数据包,提取协议报头中的目的地址信息,并前递数据包。

s1.2.2:控制平面与数据平面的交互。在交互前需启动click命令,进入到click目录下,运行clickselfprotocol.click。click启动文件需要根据设备的接口信息来配置,quagga与click之间通过socket通信。click创建一个特定的端口号作为宿主机调用socket的接口,如果被测协议为路由协议,当接收到控制平面发送的路由信息后click将路由信息写入linearxxlookup组件中自定义的动态转发表(linearxxlookup维护两张转发表:static_fib和dynamic_fib)。整个过程在click配置文件的体现方式为cs::socket(协议类型,ip,端口号,ip,端口号);

s2:将宿主服务器和实体设备按照测试拓扑互连,配置合适的ip地址,保证直连物理设备之间能相互通信;

s3:在宿主服务器内安装上述打包的容器镜像,按照测试拓扑和规模创建并运行容器实例,同一服务器内的容器创建虚拟网卡(vethpair)完成互连,跨服务器的容器之间创建vxlan隧道进行互连,服务器与实体设备之间创建macvlan容器网络进行互连;

s3.1:服务器与服务器间容器创建vxlan隧道建立连接。在各宿主机上创建一个networknamespace,然后在这个空间中创建网桥,并创建一个vxlan的虚拟网络设备连接至网桥上,添加vxlan类型端口,创建容器并指定网口绑定宿主机的网桥,vxlan设备上会在创建容器时为其分配vxlan隧道id,起到网络隔离的作用。

s3.2:同宿主机内创建虚拟网卡(vethpair)完成互联。将同一宿主机内的容器创建为无网络模式:dockerrun-itd-name=容器名-network=none容器镜像路径bin/bash,创建各容器的网络空间及名字:dockerinspect-f'{{.state.pid}}'+容器名,该命令后会生成一个容器网络空间进程号:mkdir-p/var/run/netns,ln-s/proc/容器进程号/ns/net/var/run/netns/容器进程号,根据测试拓扑给互相连接的两个容器的网口建立peer连接:iplinkadd容器1网口typevethpeername容器2网口,将建立peer连接的网口分别加入到各容器生成的网络空间进程号中:iplinksetnetns+容器网络空间进程号,并为创建的网口配置ip地址:ipnetnsexec容器网络空间进程号ipaddraddip地址dev网口号;

s3.3:服务器与实体设备间容器创建macvlan网络完成互联。分别在宿主机上创建macvlan网络,dockernetworkcreate-dmacvlan--subnet=xxx--gateway=xxx-oparent=端口名网络名称;创建后在宿主机上输入命令dockernetworkls能看到命名的macvlan网络则表示创建网络成功,创建容器并指定使用macvlan网络;

s4:通过主控服务器下发消息启动全网虚拟路由器网元与实体设备的协议实例,进行大规模协议功能测试。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1