基于Docker的网络仿真平台设计与实现
2023-06-25黄俊陈曦吴涛
黄俊 陈曦 吴涛
摘 要:网络模拟仿真类软件是计算机网络体系结构、协议、算法研究和教学的关键支撑,研发此类軟件对于网络强国战略具有重要意义。目前市面上此类软件存在保真度较低、部署不便等问题,需要一款高保真、易编程的网络模拟仿真软件。针对上述问题,在SDN理念及框架下,采用Docker等轻量级技术,搭建容器化网络仿真平台,一体化提供虚拟网络的拓扑部署、流量注入等功能,用于观察、验证、分析、优化网络,能够广泛支持计算机网络的研究与教学。
关键词:网络仿真;Docker;高保真;计算机网络
中图分类号:TP311.5 文献标识码:A 文章编号:2096-4706(2023)04-0001-06
Design and Implementation of Network Simulation Platform Based on Docker
HUANG Jun1, CHEN Xi1,2, WU Tao3
(1.School of Computer Science and Engineering, Southwest Minzu University, Chengdu 610041, China;
2.School of Information and Communication Engineering, University of Electronic Science and Technology of China, Chengdu 611731, China;
3.School of Computer Science, Chengdu University of Information Technology, Chengdu 610225, China)
Abstract: The software of network simulation is the key support of computer network system architecture, protocol, algorithm research and teaching. The development of such software is of great significance for network power strategy. At present, there are many problems in such software on the market, such as low fidelity and inconvenient deployment. A high fidelity and easy programming network simulation software is urgently needed. To solve these problems, under the SDN concept and framework, this paper adopts Docker and other lightweight technologies, builds a containerized network simulation platform. It provides the topology deployment, traffic injection and other functions of the virtual network for observation, verification, analysis, and optimization of the network to widely support the research and teaching of computer network.
Keywords: network simulation; Docker; high fidelity; computer network
0 引 言
当今世界互联网正处于飞速发展阶段,大数据、云计算和人工智能等IT领域相继兴起,这些行业的正常运作必须基于网络基础设施和网络技术,网络模拟仿真[1]就成了计算机网络体系结构、协议、算法研究的关键支撑。网络模拟仿真可以根据用户的需求自主设计和部署网络模型[2],在消耗相对较少的费用成本和时间成本的情况下,了解网络在不同条件下的各种特性[3],同时获取网络研究的海量高效的数据,提供了一个便捷、高效的观察、验证、分析、优化网络的手段,在现代互联网的设计和研究中的作用正变得越来越大。
然而现有网络仿真和模拟软件还存在着多方面的问题[4],主要集中在协议配置验证困难、用户流量注入困难、海量资源供应困难等[5],若能在网络协议、算法的设计和验证中,充分融合网络仿真的易编程性和网络模拟的高保真特性,这对于快速、便捷、准确、真实地实施网络验证,具有重要价值。针对上述问题,本文提出基于Docker[6]的网络仿真平台,采用Docker、Open vSwitch[7]等轻量级虚拟化技术,配合SDN控制器和Docker容器集群框架,利用PyQt5[8]开发前端操作界面,提供虚拟网络拓扑的设计部署、海量用户流量的灵活注入等关键功能,支撑网络仿真、网络协议验证,助力网络研发。
1 相关技术
1.1 Docker
Docker是一种开源容器引擎,其部署于宿主机中具有更高的启动效率和更少的性能开销。本平台以Docker容器为核心构建虚拟网络中的各虚拟节点,配合虚拟链路技术形成虚拟网络在物理宿主机上进行仿真。同时Docker具有完整的网络协议栈,结合Quagga创建支持多种路由协议的路由器,能够更加真实准确地再现网络,极大提高网络的保真度,方便对网络协议的监控和研究。
1.2 PyQt5
PyQt5是一个跨平台的Python开发库,包含一组Python模块,主要用于开发图形用户界面。本平台主要使用PyQt5中的QtCore、QtWidgets、QtGui模块开发前端界面,利用其信号槽特性与界面中的各功能按钮绑定,完成与平台后端各函数的交互,以实现平台各项功能。
1.3 OpenvSwitch
OpenvSwitch简称OVS,是一种开源的、支持多种协议的虚拟交换机,其作为虚拟端口灵活性更高,与传统交换机相比具有良好的编程可扩展性,同时也具备网络隔离和数据转发功能,本平台使用OVS技术并结合虚拟路由器实现不同局域网络中主机的数据转发。
1.4 veth-pair
veth-pair是Linux系统底下一种成对出现的虚拟网络设备,用于连接两个虚拟网络设备,本文平台中的网元与网元之间即通过veth-pair技术连接,其一端与网络协议栈连接,一端在网元之间彼此相连,以实现虚拟网络中的节点连通。
2 平台设计
2.1 框架设计
本文利用轻量级虚拟化技术,实现网络设备控制平面和数据平面的模拟,结合网络模拟的高保真性和网络仿真的易编程性,充分融合发挥两者技术优势,提出高保真、一体化的网络仿真平台,能够对网络协议进行监控,对网络流量进行统计,对网络配置进行验证,从而达到观察、分析、优化网络的目的。
结合以上对平台的描述,本平台架构如图1所示,根据前后端到计算机底层划分为4个层次,依次为用户界面层、网络实验层、虚拟网络层、基础设施层。下面对各层次进行详细介绍。
2.1.1 用户界面层
本平台利用PyQt5提供用户界面,呈现实验列表、实验手册、拓扑结构板块,利用X Server图形接口服务器提供进入节点内部的图形化UI,如Wireshark、packETH、Firefox等,Terminal终端提供进入节点内部的命令行UI。
2.1.2 网络实验层
呈现平台包含的实验,分为SDN实验、TCP/IP实验、路由与交换实验、网络安全实验等。
2.1.3 虚拟网络层
OVS虚拟交换机能够连接网络设备(如虚拟路由器、防火墙等)和终端设备(如虚拟计算机、服务器等),使网络可编程扩展,Docker容器可通过veth-pair与OVS交换机直连,实现容器间的通信。
2.1.4 基础设施层
平台所用到的Docker镜像存储在本地镜像仓库里,包括主机、路由器、服务器等镜像,所有镜像均可使用提供的Dockerfile通过Docker build命令构建。本平台部署在Linux系统上,在Python环境下运行。
2.2 功能设计
2.2.1 前后端设计
本平台采用前后端分离的方式开发,前端呈现用户操作界面,提供一键式部署拓扑结构、节点呈现、操控节点等功能,构成交互式网络模拟环境,同时界面提供显示拓扑结构的窗口,用于反应网络中各节点间连接情况,界面呈现虚拟网络中各节点操作台供用户调用节点功能。后端则为前端提供实现各功能实现、接口设计等,具体实现见3.1节前后端实现。
2.2.2 拓扑部署
后端部署拓扑设计阶段生成的shell文件,利用Docker、OVS等轻量级虚拟化技术,实现低开销的网络设备、拓扑结构模拟,生成虚拟网络并部署在底层宿主机(物理机、虚拟机均可)之上,各节点配置虚拟网络设备接口,实现节点之间的相互通信,具体实现见3.2节部署功能实现。
2.2.3 流量注入
一方面,Docker提供各主流编程语言的API支持(Python、Java、Go等),用于与容器交互,无须人工操作容器,同时利用Docker API可以方便地启停容器、调用容器内部功能,直接运行逻辑脚本即实现用户流量的灵活注入。另一方面,用户可通过进入容器内部的方式,执行输入命令或调用packETH、浏览器等图形化应用的形式向网络注入流量。与传统网络仿真工具通过编程对协议行为、时序、语义进行模仿不同,本平台搭建的整个虚拟网络运行的是真实的协议。本节具体实现见3.3节流量注入功能实现。
2.2.4 网络监控
采用非侵入式设计对部署的整个虚拟网络进行监控,监控模块和实验部署模块互不影响,实现高内聚低耦合,同时对Wireshark、Pyshark等抓包工具进行封装,利用X Server技术和Docker自带命令行工具实现容器级别的实时监控,对节点中抓取的流量进行预处理并用Python作图工具matplotlib作图,用户在需要的时候平台可准确直观地呈现网络中的流量,具体实现见3.4节网絡监控功能实现。
3 平台实现与应用
本节首先对2.2节各功能实现作具体阐述,之后展示本文设计并实现的网络仿真平台并作详细介绍,最后补充说明本平台投入实际应用的情况。
3.1 前后端实现
针对2.2节的第一部分前后端设计,平台前端利用PyQt5展示图形化用户界面,为用户提供操作接口,主要利用QTreeWidget呈现实验列表,QLabel空间呈现实验手册与拓扑结构图,部署与销毁操作按钮根据信号槽连接对应脚本命令,平台下方采用生成子界面的方式将节点分类展示(如主机、路由器等),每个节点的功能按钮均添加对应功能的信号槽,此部分核心代码如下:
self.tree = QTreeWidget(self)
self.tree.setColumnCount(1)
self.tree.setHeaderLabels([‘实验列表])
htm_name = setting[experiment_name][‘exp_doc]
png_name = setting[experiment_name][‘exp_topo]
self.button_run = QPushButton(self)
self.button_run.clicked.connect(self.run_topo)
self.button_del = QPushButton(self)
self.button_del.clicked.connect(self.del_topo)
后端主要采用Python开发,包含前端各功能按钮信号槽对应的功能函数,如部署与销毁拓扑等,后端提供平台所运行的实验脚本与所需命令工具。
3.2 部署功能实现
针对2.2节的第二部分部署功能,平台利用Docker+OVS+
veth-pair技术将拓扑结构的部署逻辑封装成shell腳本,用户点击前端实验列表中的实验,后端生成点击事件并发送到封装好的Python函数,传入参数并根据实验描述json文件将相应的实验手册、拓扑结构图传入前端控件,相应实验脚本被选中以等待部署。点击“部署拓扑”,后端判断是否有正在运行的Docker容器,如果有则提示“销毁拓扑”,销毁后再次点击部署,被选中的实验脚本参数传入已封装的执行shell命令的Python函数,部署拓扑首先执行拓扑工具utils内的x.sh打开图形接口服务器,之后运行clean.sh做必要的清理工作,停止并销毁正在运行的Docker容器、交换机等,再执行topos模块的相关实验脚本部署实验拓扑结构,以上描述表示一个“部署拓扑”事件完成。
shell脚本将部署拓扑结构的所有命令都组合起来,只需执行单独的shell脚本就能自动化部署整个实验拓扑,提高处理文本文件的速度也避免配置出错,首先通过docker run命令运行所需容器并给容器配置参数,如--net参数设置容器的网络模式,--privileged=true使容器内部拥有root权限等,ovs-vsctl命令添加和连接OVS交换机,ovs-docker将容器和交换机相连并配置容器的IP地址和子网掩码。shell脚本核心命令如下,其中cs-net-host为本平台自主构建的主机镜像:
docker run -itd --name host1 --hostname h1 --net=none --rm --privileged=true -e DISPLAY=$DISPLAY cs-net-host
docker run -itd --name host2 --hostname h2 --net=none --rm --privileged=true -e DISPLAY=$DISPLAY cs-net-host
ovs-vsctl add-br s1
ovs-docker add-port s1 eth0 host1 –ipaddress=192.168.0.1/24
ovs-docker add-port s1 eth0 host2 –ipaddress=192.168.0.2/24
3.3 流量注入功能实现
针对2.2.3节的流量注入,一方面可利用Terminal终端输入相关命令,向网络中注入流量,如图2所示,另一方面可采用图形化应用的方式,利用X server机制,调用容器内部的各种流量注入程序,如packETH、浏览器等,如图3所示,为主机利用packETH向网络中发送流量。
3.4 网络监控功能实现
针对2.2节的第四部分网络监控,本平台可以对实验网络中的各个网络节点的关键指标进行全程实时监控,监控分为主动测量和被动监控。
3.4.1 主动测量
如图4所示,点击“节点监控”按钮后,根据箭头流程操作并输入配置信息,平台后端通过下发流量的方式主动测量当前节点带宽、时延与丢包率,得到图右下角结果,图中TX与RX分别为上行速率与下行速率。
3.4.2 被动监控
被动监控在部署拓扑后便开始监控,用于测量CPU和内存利用率、每秒收发数据包的大小等,各组数据经后端处理后使用作图工具将结果以数据大屏的形式展示于前端界面,如图5所示,为平台对网络的被动监控效果。
3.5 基于Docker的网络模拟仿真平台实现
本平台实现如图6所示,前端总共分为菜单栏、实验目录、实验手册、拓扑结构、节点操作五大板块。
3.5.1 菜单栏
用户选中实验,只需点击部署拓扑,平台后端通过运行shell脚本将部署实验环境的操作进行批处理,用户也可自行设计拓扑结构供平台运行,实验结束后,点击销毁拓扑即可将后台部署的虚拟网络拓扑全部销毁。
3.5.2 实验列表
此部分是对平台所有实验进行合理的分类归纳并呈现。
3.5.3 实验手册
此部分是对整个实验的理论支持,其中包含实验目的、实验原理、实验步骤等。实验原理为用户提供了详细的理论讲解,实验步骤由浅入深,用户根据实验步骤进行操作,观察实验结果,切实体验整个实验过程。
3.5.4 拓扑结构
拓扑图采用统一清晰的绘图格式。向用户展示相应实验的网络拓扑结构以及相关网络设备的信息,用户只需将设备与说明文档进行一一对应,即可快速有效地完成操作步骤。
3.5.5 节点操作
此部分包含拓扑结构图内所有节点设备及其内部功能的调用,用户根据实验只需单击按键就能完成进入设备内部、调用图形化发包、抓包工具、启动节点内部浏览器、监控容器时延与丢包率、带宽、吞吐率等操作。
3.6 平台实际应用
本文所开发的网络仿真平台,已在西南民族大学计算机网络类相关课程中进行试点应用,如图7所示。目前平台提供了4种拓扑结构模板(树形、FatTree等)、4种路由协议(OSPF、RIP等)、5种服务器(Web、FTP等)、5种端系统(Ubuntu、CentOS等)、3种中间件(nginx、防火墙等)、5种网络应用(iperf等),通过拓扑结构设计功能自主设计大规模虚拟网络,支撑较大规模的网络仿真,用于教学、科研等工作,取得了良好的效果。
4 結 论
本文针对目前已有网络仿真软件存在的问题,基于Docker等技术全虚拟化地打造出一个网络仿真平台,平台在保证虚拟网络高保真特性的前提下,为用户提供拓扑部署、流量注入、网络监控等功能,有效支撑计算机网络的研究与教学。后续工作将结合虚拟网络映射算法开发Web版网络仿真平台,用户通过在线的方式将虚拟网络部署在服务器上。
参考文献:
[1] 邓伟健,陈曦.基于时变资源的容器化虚拟网络映射算法 [J].计算机应用,2022,42(2):550-556.
[2] 郭文普,陈天豪,杨百龙.基于eNSP的中小型企业组网实验设计 [J].实验室研究与探索,2022,41(2):125-129+296.
[3] 马乐,黄冬梅,王树鑫,等.网络性能仿真软件综述 [J].软件,2022,43(3):34-36.
[4] 任晓鹏,李伟华.基于Packet Tracer构建虚拟网络实训平台 [J].中国职业技术教育,2006(27):44+46.
[5] 马乐,黄冬梅,王树鑫,等.网络性能仿真软件综述 [J].软件,2022,43(3):34-36.
[6] VALANTASIS A,MAKRIS N,ZARAFETAS C,et al. Experimental Evaluation of Orchestration Software for Virtual Network Functions [C]//2021 IEEE Wireless Communications and Networking Conference(WCNC).Nanjing:IEEE,2021:1-6.
[7] YANG Z,YEUNG K L. SDN Candidate Selection in Hybrid IP/SDN Networks for Single Link Failure Protection [J].IEEE/ACM Transactions on Networking,2020,28(1):312-321.
[8] 高德伟,施鑫,王正,等.基于PyQt5平台的木材在线品质监测及评等系统 [J].林业机械与木工设备,2022,50(7):62-66.
作者简介:黄俊(1998—),男,汉族,四川自贡人,硕士研究生在读,研究方向:网络虚拟化、软件定义网络;通讯作者:陈曦(1985—),男,汉族,重庆永川人,副教授,博士,研究方向:软件定义网络、网络虚拟化、无线网路、异构网络融合等;吴涛(1984—),女,汉族,山东曲阜人,副教授,博士,研究方向:无线网络、机器学习等。
收稿日期:2022-10-08
基金项目:国家重点研发计划课题(2019YFB1802805);中国博士后科学基金(2018M643448);四川省重点研发计划项目(2022YFG0208,2022YFG0161);中央高校基本科研业务费专项资金(2021NYYXS53)