Ubuntu16.04:NS2安装与入门实例

NS2是一个全开源的比较成熟的网络模拟器,与之相对有的有商业付费软件OPNet。因为工作需要,所以对NS2进行了调研,安装并简单使用了一下,做个记录。NS2早在2011年就已经不维护了,这算是考古了。

一:NS2简单介绍

NS2是面向对象的、开源的离散事件模拟器。可用于仿真各种不同的IP网,实现有一些MAC层协议。注重低级协议仿真,监视,分析包踪迹和队列行为

NS2采用系统编程语言C++和脚本编程语言OTcl共同开发。NS2作为OTcl的脚本解释器,由事件调度器网络组件对象网络组装模块库组成,其中事件调度器和网络组件(协议实现由C++完成),仿真配置由Tcl脚本实现。

二:NS2的安装

其实有很多博客都说到了NS2的安装,也说的很好。这里就简单说一下:

参考:

https://blog.csdn.net/liyongqi_/article/details/71774170

https://blog.csdn.net/mingyong_blog/article/details/41114421

1. 首先是NS2源码的下载,下载地址:http://www.isi.edu/nsnam/ns/ns-build.html,下这个就好了。

Ubuntu16.04:NS2安装与入门实例_第1张图片

 2. 然后就是依赖工具包的安装:

sudo apt-get install build-essential
sudo apt-get install tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev
sudo apt-get install libxmu-dev libxmu-headers

3. 解压资源文件并安装,因为NS2源码问题,会出现编译错误,需要修改ns/ns-2.35/linkstate/ls.h中的137行:

将 void eraseAll() { erase(baseMap::begin(), baseMap::end()); } 
改为: void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); }

tar -xvzf  ns-allinone-2.35.tar.gz 
mv ns-allinone-2.35 ns

cd ns
sudo ./install

4. 安装完成之后,会提示叫设置环境变量。在 ~/.bashrc中添加,主要是三个,一个PATH,一个LD_LIBRARY_PATH,一个TCL_LIBRARY。照着提示来就好了的,我设置的这样:

export NS_HOME=$HOME/workspace/ns-allinone-2.35
export TK_HOME=$NS_HOME/tk8.5.10
export TCl_HOME=$NS_HOME/tcl8.5.10
#为了简略后面的变量设置,额外设置了几个
export PATH=$PATH:$NS_HOME/bin:$TK_HOME/unix:$TCL_HOME/unix
export LD_LIBRARY_PATH=$NS_HOME/otcl-1.14:$NS_HOME/lib
export TCL_LIBRARY=$TCL_HOME/library

5. 测试。输入ns ,进入NS编辑界面,%开头。则安装成功

三、NS2入门实例

首先自己安装完NS2之后,就进入了一种懵逼状态(我在哪儿,我要干嘛...)。完全不知道后面要干什么的样子,怎么运用NS2进行模拟,这个过程全程懵逼,开始的第一步都不知道,哈哈哈哈。找了一段时间之后,终于知道怎么启动模拟了。

ns xxx.tcl    #就是这么简单

NS2内置很多协议,和模型,比如TCP/IP的五层网络模型以及其中的一些协议,初始用现成的模型与协议进行模拟就可以了。那还差的就是网络拓扑配置,以及参数配置了,网络流量(消息大小,消息间隔等等)的设置。之前介绍说过NS2的是由C++和TCL来完成模拟的,C++编写协议,TCL脚本则是用来编写网络配置。下面就介绍一个简单的TCL的示例及说说明,具体可参见NS2教程,一个中文PDF,《NS与网络模拟》。下面直接上脚本代码:

set    ns [new Simulator]              #建立一个Simulator对象的实例,赋值给ns
set    tracefd [open test.tr w]        #打开一个test.tr的文件,用来记录trace数据,名tracefd
$ns    trace-all $tracefd              
set    namtracefd [open test.nam w]    #打开一个test.nam的文件,用来记录nam的trace数据
$ns    namtrace-all $namtracefd

proc finish {} {          #一个procedure,用来关闭两个trace,调用nam程序
        global ns tracefd namtracefd
        $ns flush-trace
        close $tracefd
        close $namtracefd
        exec nam test.nam &
        exit 0
}

set n0  [$ns node]                         #设置ns节点,一个n0,一个n1
set n1  [$ns node]

#设置两个节点之间的链路,链路带宽1Mb/s,延时10ms,队列类型:DropTail
$ns duplex-link $n0 $n1 1Mb 10ms DropTail    

set udp0 [new Agent/UDP]                   #新建一个UDP Agent,udp0
$ns attach-agent $n0 $udp0                 #将 udp0 绑定到 n0  

#新建一个CBR(Constant Bit Rate)流量发生器(traffic generator)
set cbr0 [new Application/Traffic/CBR]    
$cbr0 set packetSize_ 500                  #设置分组大小
$cbr0 set interval_ 0.005                  #设置消息发送间隔
$cbr0 attach-agent $udp0                   #绑定到udp0

set null0 [new Agent/Null]            #新建一个Null Agent,一种数据接收器(traffic sink)
$ns attach-agent $n1 $null0           #绑定到n1

$ns connect $udp0 $null0              #将udp0和null0 两个Agent连接起来

$ns at 0.5 "$cbr0 start"              #设置启动时间
$ns at 4.5 "$cbr0 stop"               #设置停止发送时间

$ns at 5.0 "finish"                   #设置finish时间
$ns run                               #开始模拟

运行:ns test.tcl。就会出现的模拟界面了。

Ubuntu16.04:NS2安装与入门实例_第2张图片

至于怎么编写自己的协议,因为我没有继续下去了,所以Good Luck!

你可能感兴趣的:(Ubuntu16.04:NS2安装与入门实例)