/ns_web

网页版ns2通信仿真

Primary LanguageJavaScript

网页版 NS2 实验平台的搭建

一、需求分析

1.1 目标说明

NS (Network Simulator)是指一系列离散事件的网络仿真器。其中一个版本,NS2,是学术界广泛使用的一种网络模拟软件。它是一种针对网络技术的源代码公开的、免费的软件模拟平台。研究人员使用它 可以很容易的进行网络技术的开发,并且发展到今天,它所包含的模块几乎涉及到了网络技术的所有方面。此外,NS2 也可作为一种辅助教学的工具,现已被广泛应用在了网络技术的教学方面。
虽然 NS2 在网络仿真方面存在很大的优势,但在使用方面还存在一些不便之处。一是 NS2 的安装和运行。由于 NS2 必须在 UNIX/Linux 平台下运行,因此一般需要安装 UNIX/Linux 操作系统,若要在 Windows 下使用 NS 则需要采用Windows+虚拟机(VMware、VirtualBox)+NS组合的方式,或者是Windows+Cygwin(一个模拟的 Linux 平台)+NS 组合的方式。这就意味着,如果要在某台电脑上使用 NS2,必 须先进行繁琐的安装步骤。二是网络模型的构建。NS2 没有图形用户界面,用户必须学习特定的脚本语言,如 C++和 Otcl,以及排队理论和建模技术等很多必备的相关知识才能进行网络的仿真。这对于初学 者来说是很难掌握的,并且需要花费大量的时间。
所以,我们希望省去前面所有繁琐的时间,能够在网页上直接编写 tcl 代码,也可以通过操作图形界面直接生成代码,并能实时运行获取结果,既能方便老师教学,又能方便学生做实验。而整个开发过程中 ,我主要负责的后台的开发,整体需求如下:
1、建立 web 服务器,能够接收和处理浏览器的请求。
2、接收前台完整的代码块,处理之后用 ns2 仿真软件执行并返回执行结果。
3、根据前台指令,接收部分参数然后生成完整代码块并返回。
4、获取后台产生的 trace 文件并返回前台输出。
5、实现日志功能,能够记录前台的操作过程。

1.2 结果预期

预期目标主要有三个:
第一,通过代码输入框提交完整或者错误的代码后,能够返回正确的结果或者完整的错误提示。
第二,通过图形界面构建好完整的仿真模型后,可以正确输出相应的tcl代码。
第三,执行完仿真程序之后,可以在网页上获取在后台生成的 trace 文件。

二、可行性分析

2.1 网站架构

网页版 NS2 实验平台采用的是 B/S 架构(见图 1),即浏览器/服务器架构。在这种架构下,用户界面是通过浏览器来实现,只有极少部分事物逻辑在浏览器端实现,主要事务逻辑在服务器端实现。
本实验平台采用的是最简单的 B/S 架构,后台只有一台服务器,用户通过局域网内的浏览器发送请求,服务器端收到请求后做出处理并返回相应的结构给用户的浏览器。

2.2 客观条件

客观条件主要分外部条件和内部条件两部分,外部条件为一台装有 NS2 仿真软件的服务器,并接通网线。内部条件主要是知识储备,目前计算机语言储备有 Javascript 和 Python。网站的实现思路是:浏览 器和服务器之间的 http 请求通过基于 javascript 的 jquery 框架中的 ajax 异步通信实现,服务器端可以搭建基于 python 的 tornado 框架,tornado 框架自带一个 web 服务器,可以实现与浏览器通信 ,对于前端的请求内容可以使用 python 语言进行处理并与服务器上的 NS2 仿真软件交互。

2.3 业务逻辑

业务逻辑主要共有四条,网页获取、代码执行、代码生成和 trace 文件获取。
网页获取指的是浏览器根据 url 打开网页版 NS,业务逻辑见图 2。
代码执行指的是浏览器端把已经编写好的完整代码提交的后台进行执行,并要返回执行结果,业务逻辑见图 3。
代码生成指的是根据浏览器端的图形操作返回相应的 tcl 代码,业务逻辑见图 4。
Trace 文件获取指的是将执行完仿真程序之后生成的 trace 文件内容返回给浏览器端,业务逻辑见图 5。

三、程序编写及调试

3.1 程序设计

首先配置 tornado 自带的 web 服务器开放端口号,然后配置模板路径,即相应的 html、js、css 文件存储位置,接下来设置路由映射,即根据前台不同的http 请求提供不同的响应,最后就是设计 http 响 应。根据 2.4 节中所述四条业务逻辑,可以写出 4 个不同的响应,但网页获取和代码执行分别不同的 get 和post 请求,所以二者可以合二为一,最终形成三个响应,分别是主响应,代码生成响应和trace 文件获取响应。
主响应中有两个函数,分别对应 get 和 post 两个请求。收到 get 请求时,直接返回已有的 html 文件内容。收到 post 请求时,也就是执行代码的请求,先获取前台传输过来的代码块,非空就传给 tcl 代码执行函数,执行函数收到代码后先写入一个临时文件,然后调用系统命令用 NS2 仿真软件执行这个临时文件,并获取仿真软件的输出,取得输出之后调用日志记录函数,将时间、执行代码、执行结果等 写入日志,完成后将仿真输出返回给 post 响应,然后通过http 把结果传到前台,这样就完成了一次完整的 get 和 post 相应。
代码生成响应只有一个 post 响应函数,接收到 post 请求后用 json 模块解析传过来的数据,根据这些数据实例化这些节点和链路(数据结构见图 6),实例化之后调用代码生成函数遍历这些节点和链路的 属性生成相应的 tcl 代码,最后将生成的 tcl 代码转换成 json 格式之后传输给前台处理。
Trace 文件获取响应中也只包括了一个 post 响应函数,接收到 post 请求后,程序就先在本地服务器查看有没有 trace 文件,存在就获取文件内容并传输回前台,不存在就返回空。

3.2 程序调试

程序开发时会不可避免的碰到很多问题,或粗心,或对语言使用不够熟练,或考虑不周,问题多种多样。比如开始时不知道 http 传输的数据格式只能是 json、字符串和整型,而 javascript 的数组和 python 中的列表数据结构形式很像,以为传过来就能当做列表直接调用,这样就造成了后台无法获取有效数据,回传只能是空。后来才发现前台传过来的数组只是形似列表,而实际是一串字符串,所以必须 在前台就先转换成 json 格式再进行传输,后台收到后进行json 解析再进行列表类型强制转换后才能直接调用。还有,由于节点和链路采用了树形数据结构,所有的存储内容全都是对象,而我当时还保持着 陈旧的思维观念,遍历时一直带着下标索引,一路报错,正确的做法是应该直接遍历对象,不需要带下标索引了,由此发现自己面向对象的思维还不够牢固。当然,开发时碰到的问题远不止这些,刚开始时更 有一些非常低级的失误自己都想象不到,那些问题就不在此一一赘述了。

四、结果与分析

本次网页版 NS2 仿真实验程序设计成功实现了 NS2 仿真程序的大部分功能,对于预期的三个目标全部得以实现,结果见附件。网页版的 NS2 仿真实验平台让用户们不需要安装 linux 系统和 NS2 仿真软件 就可以在浏览器上直接编写仿真程序,可以为用户节约大量的时间。而图形界面的出现,使得原先不具备 tcl 语言基础的用户也可以迅速掌握并使用 NS2 仿真,图形加上 tcl 代码,让学习和教学更加的高 效便捷。
当然,目前的网站还是存在了许多不足之处。首先,网页本身全部使用的是 html 元素的原型,没有一点修饰,网页的美观程度不足。其次,图形界面的操作还不够完善,NS2 仿真软件本身功能甚多,而图形 界面的操作功能有限,不能完全发挥出 NS2 仿真软件的强大之处。所以,网页版 NS2 仿真实验平台目前还只是个雏形,还是有很多地方值得我们去完善的。

五、预期目标实现

一、代码执行:

二、代码生成:

三、trace文件获取: