基于NS3虚拟网络实验室构建及可视化实现
作者:陈显涛 金伟祖 于志安
来源:《电脑知识与技术》2014年第01
        摘要:随着网络的发展, 网络研究与实验也变得越来越复杂,但高校开展新颖网络实验却举步艰难,特别是针对某些需要大量物理设备才能顺利进行的实验,因为许多普通高校无法提供足够的硬件资源。因此,网络虚拟实验的实现就十分必要。当前,网络仿真实验以及网络仿真软件已有一定的发展基础,但在线可视化的虚拟网络平台上依旧是一块空缺。 本文采用Linux下流行的LAMP架构,使用HTML5JavaScript DjangoNS3等技术,开发了基于NS3的虚拟网络实验室构建及其在线可视化。
        关键词:NS3PythonDjangoJavaScriptHTML5
        中图分类号:TP393 文献标识码:A 文章编号:1009-3044201401-0020-04
        作为培养和提高学生动手实践能力、观察能力、分析问题和解决问题能力等方面有着先天优势的实验教学是高校教育改革的关键问题之一[1]。目前,我国传统实验教学环节不足、
实验资源投资不足,严重制约着实验教学的发展,虚拟实验可以有效解决解决上述问题,虚拟实验的建设有利于降低实验室建设成本,缓解财政压力给实验教学带来的不利影响,有利于培养学生实验操作能力[2]。因此,虚拟实验教学环境的研究已经成为当前教育研究的新热点,究其缘由主要是信息技术的蓬勃发展已经使部分虚拟实验环境的设计与开发成为现实,使各类虚拟实验室建设成为可能安抚奶嘴[3]。如今网络仿真实验以及网络仿真软件已有一定的发展基础,但在线可视化的网络仿真平台上依旧是一块空缺。
        1 系统设计
        1.1 体系架构
        本虚拟实验室在总体设计上,共分为四层架构,结构如图1所示。
        1 前端网页显示层,它定义了与页面中UI组件相关联的属性和处理逻辑,使用了HTMLJavaScript技术,通过网页来显示虚拟实验结果。
        2 服务层,提供页面处理服务,选用了Apache作为网站的服务器,Apache服务器具有安全性高和跨平台性等特点。
        3 控制层,它控制着各个页面的跳转以及页面间数据流的处理,并负责调用与NS3程序相关的模块。选用了身份证过期了还能买火车票吗Django网络开发框架,来负责页面数据处理和传递的控制。Django遵循MVC设计,强调代码复用,多个组件可以很方便的以插件形式服务于整个框架。除此以外,Django还有许多功能强大的第三方插件可使用。Django通过Apache HTTP 服务器的中mod_python来实现和Apache服务器的交互。
        4 逻辑业务层,它负责执行虚拟网络程序,并将仿真结果由返回给网页显示。采用了NS3程序。NS3程序通过Libpcap来返回PCAP[4]LibpcapUnix/Linux平台下的网络数据包捕获函数包,大多数的网络监控软件都以它为基础,在捕获数据包之后,Libpcap并非直接返还,而是添加部分信息,组装成PCAP数据包之后返还。
        1.2 可视化技术
        显示层的可视化技术采用了Web技术,在浏览器中由用HTML显示实验结果,并通过JavaScript处理一些业务逻辑和判断逻辑。
        HTML超文本标记语言,是一种用于描述网页文档的标记语言,是一种规范,一种标
准,通过各种不同的标签来告诉浏览器如何显示网页中的各个部分,有三个主要优势:简易型、可拓展性和平台无关性[5]
        JavaScript是一种面向对象的动态类型脚本语言,常用来给HTML网页添加动态功能,响应用户操作,可以处理一些简单的业务逻辑和判断逻辑[5]JavaScript也是一种具有相对安全性的脚本语言,其无法修改客户端浏览器内存范围之外数据。JavaScript内置的支持类, 有利于解决虚拟网络实验中的复杂数据结构,有利于提高代码的可读性,降低代码编写难度。
        JavaScript对事件的支持可以丰富客户端功能[6]。例如在用户输入IP地址时,限制用户输入0-9以外的字符,通过抓取onkeyup事件,对其进行相应的处理即可实现。
        虚拟网络实验对路由器、主机有任意拖拽的需求,该文采用HTML5新添的canvas标签来实现这一功能。
        Canvas标签是HTML5中新添加的特性,它可以定义图形、绘制图片和其他图像。Canvas标签只是图形容器,必须使用脚本来绘制图形[7]。如下,通过canvas来绘制一个红矩形。
       
       
        var ElementById'myCanvas');
        var Context'2d');
        ctx.fillStyle='#FF0000'
        ctx.fillRect00100100);
       
        Canvas控件加上JavaScript中的事件,可以迅速准确的对用户的操作做出反应,并直接在浏览器中进行显示,这两者的组合使得虚拟网络实验的可视化功能可以得到更好的体验。
        2 PCAP包解析算法
        PCAP包是NS3程序执行时所生成的数据包,包含了一个节点所发出和收到的所有IP数据包[8]。因此对于PCAP包的解析就显得十分重要,PCAP包的解析工作是由Django完成,DjangoNS3程序执行完所给的结果即PCAP包地址作为参数,调用编写的动态链接库。
        解析PCAP包需要使用C++编写的动态链接库,因为PCAP包拥有固定的文件格式,并且为二进制文件。在C++中,读文件函数fread可以按照参数中所给的数据结构,一次性读取数据结构长度的byte,按照数据结构的定义,将其转换为数据结构中的对应的成员变量,。因此,该文使用fread函数处理拥有固定格式的PCAP包。PCAP包解析流程如图2所示。
        PCAP解析中,有两个主要问题:第一,不同的数据链路层协议的帧头不同,需要事先判断PCAP包是哪种数据链路层协议;第二,在判断完数据链路层协议之后, 还要对网络层协议进行判断。该文采用如下解决方法:
        1 使用PCAP文件头中的linktype变量来判断该PCAP包数据链路层协议类型。
        2 用数据帧帧头中的FrameType来判断属于何种网络层协议。
        3 虚拟实验平台构建个税专项附加扣除政策的条件和标准
        本文采用了在Linux下流行的LAMP架构,网页部分即可视化部分使用HTMLJavaScript技术开发,后台逻辑处理使用Python模式C++开发。
        3.1网络拓扑结构处理模块
        网络实验需要的设备有路由器和主机(统称为节点)。因此,网络拓扑结构模块主要包括添加节点功能、删除节点功能、节点位置移动功能、设备IP地址配置实现和建立网络连接功能实现。网络拓扑结构模块如图3所示。怎样设置自动关机
        用户需要自行决定实验中路由器的数量,可以动态的对路由器进行添加和删除。对于主机可以进行动态添加,但是上限为两台主机,主机和路由器的添加实现功能类似。路由被删除后,它所连接的网段也应相应的被删除。动态路由配置实验中,可以对路由和主机进行自由的拖拽,使路由与主机的布局可由用户灵活的进行控制,以更好的体现网络拓扑结构。网络拓扑结构模块效果如图4所示。
        3.2虚拟网络实验运行模块
        3.2.1配置数据提交功能
        动态路由配置实验中,设备的数量可以无限的动态添加,路由器中路由表的项数也可以有无限多条。在用户全部配置完成后,数据量将会变得比较庞大和复杂,因此需要一种合适的数据标准来对这些数据进行有效的传输。
        本文采用JSON数据交换格式。JSON是一种轻量级的数据交换格式,是基于JavaScript的一个子集[9]JSON采用完全独立于语言的文本格式,既易于阅读和编写,也易于机器解析和生成。JSON拥有两种数据结构,简单说就是JavaScript中的对象和数组,使用这两种结构可以表示各种复杂的结构。
        使用JSON只需在网页端进行JSON字符串的组装,并且一些简单对象可以直接使用JavaScript库自带的JSON.stringify()函数转换成JSON字符串。在吴亦凡老炮儿Django后台,无需再对字符串进行解析,直接使用Django自带的simplejson库,将JSON字符串变为字典对象。
        在编码时,该文采用每个对象自行生成独自的JSON字符串,再对其进行组合形成最终的JSON字符串的方法,从而降低出错率。JSON字符串转换如图5所示。
        3.2.2虚拟实验运行功能
        动态路由配置实验,由网页进行实验结果显示,依靠NS3模拟实验过程。实验运行流程如图6南宁市公交车路线所示。
        NS3程序调用pythonctypes库,ctypes能够提供和C语言兼容的数据类型,可以很方便地调用C编译的静态库和动态库中的函数[10]。由于python的数据类型与C中的数据类型并不完全相同,因此ctypes库负责进行数据类型转换。
        4 结束语
        本课题以在Linux操作系统下较为流行的LAMP架构进行开发,即LinuxApacheMysqlPython四者的组合,再辅以NS3网络仿真软件,组成了一个完整的网络虚拟实验室系统,实现了虚拟实验室的网页可视化。由于本次网络虚拟实验室中实现的实验数量较少,对于各种实验的支持不够丰富,无法让学生能够进行各种虚拟实验。为此,在接下里的工作中,需要实现更多的实验项目来丰富虚拟实验室。
        参考文献:
        [1] 王艳丽,阴国富.计算机网络工程实验优化探索[J].现代电子技术,2008,(13):132-136.
        [2] 衷宗福,夏索霞.网络实验室的规划与设计[J].南京工程学院学报:自然科学版,200421):42-44.
        [3] 董付国,原达.NS-2仿真技术在计算机网络实验教学中的应用与研究[J].计算机教育,2005,(10):5l-53.