NS2虚拟仿真环境搭建(Ubuntu 14.04)

一、基础环境搭建

首先我们需要搭建系统环境

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

其次下载ns2.35,下载地址: http://www.isi.edu/nsnam/ns/ns-build.html
在这里插入图片描述
将下载的.tar.gz文件复制到任意目录下,比如我复制到/home下,解压

tar -zxvf ns-allinone-2.35.tar.gz

解压之后,cd ns-allinone-2.35进入该解压目录,然后直接运行

./install

注意:安装过程可能遇到的问题:
例如:ns-2.35/linkstate中ls.h文件出错,我们可以根据提示,在erase函数前面加上this->,然后重新安装,便可成功。

配置环境变量

sudo vim ~/.bashrc

在文件中添加以下代码:

export PATH="/home/wnt/ns-allinone-2.35/bin:/home/wnt/ns-allinone-2.35/tcl8.5.10/unix:/home/wnt/ns-allinone-2.35/tk8.5.10/unix:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/wnt/ns-allinone-2.35/otcl-1.14:/home/wnt/ns-allinone-2.35/lib"
export TCL_LIBRARY="$TCL_LIBRARY:/home/wnt/ns-allinone-2.35/tcl8.5.10/library"

修改生效

source .bashrc 

如此,ns2的安装完成。

二、安装mUDP,mUdpSink,mTcpsink三个模块

下载地址mUDP、mUdpSink和mTcpSink
1、新建/ns-allinone-2.35/ns-2.35/measure文件夹,把下载的文件放入其中
在这里插入图片描述
2、修改/ns-allinone-2.31/ns-2.31/common/packet.h,把如下代码段加入struct hdr_cmn{}中。
我加在dir_t direction_;后面

int frametype_;
double sendtime_;
unsigned int pkt_id_;
unsigned int frame_pkt_id_;

3、修改/ns-allinone-2.35/ns-2.35/中的Makefile和Makefile.in两个文件,把如下代码段加入OBJ_CC中,我放在xcp/xcpq.o xcp/xcp.o xcp/xcp-end-sys.o \后面

measure/mtcpsink.o measure/mudp.o measure/mudpsink.o \

注意:Makefile中还需要修改CCOPT = -O2 -Wall -Wno-write-strings 后面增加-fpermissive

4、修改/ns-allinone-2.35/ns-2.35/tcl/lib/ns-default.tcl,把如下代码段加入Agent/Ping set packetSize_ 64下一行。

Agent/mUDP set packetSize_ 1000

当然还要修改mudp.cc源文件
将以下代码

mUdpAgent::mUdpAgent() : id_(0), openfile(0)  
{  
        bind("packetSize_", &size_);  
       UdpAgent::UdpAgent();  
}  

改为

mUdpAgent::mUdpAgent() :UdpAgent(), id_(0), openfile(0)  
{  
        bind("packetSize_", &size_);  
}  

5、在/ns-allinone-2.35/ns-2.35目录下依次执行 ./configure;make clean;make三个命令。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
當封包從應用程式層到 UDP 層時,就把封包的序號、時間、和大小紀錄到一個檔案中(發送端記錄檔) 當封包到達接收端時,同樣把收到的封包序號、傳送時間(在傳送端要發送封包時會把當時的時間放在封包的標頭檔(common header)中)、到達時間、封包延遲時間( = 到達時間 - 傳送時間)、和封包大小紀錄到另一個檔案中(接收端記錄檔) 有了這兩個記錄檔,我們要求得吞吐量、封包延遲、抖動率、或封包遺失率就變得很簡單了。 mUDP是UDP的延伸,除了具有UDP的功能外,還能記錄所發送的封包的訊息。mUdpSink可以把接收到的封包訊息記錄到文件中。 mTcpSink是TCPsink的延伸,除了具有TCPSink功能外,還能記錄所發出的封包的訊息。 1.下載 measure.zip 內容: mudp.cc mudp.h mudpsink.cc mudpsink.h mtcpsink.cc mtcpsink.h 2.新建 //ns-allinone-2.33/ns-2.33/measure 文件夾,把這些文件放入其中 3.修改 //ns-allinone-2.33/ns-2.33/common/packet.h 如下 struct hdr_cmn { ...... dir_t direction_; // direction: 0=none, 1=up, -1=down int frametype_; double sendtime_; unsigned int pkt_id_; unsigned int frame_pkt_id_; // source routing char src_rt_valid; ...... }; 4.修改 //ns-allinone-2.33/ns-2.33/Makefile 如下 OBJ_CC = \ ...... apps/pbc.o \ measure/mtcpsink.o measure/mudp.o measure/mudpsink.o \ $(OBJ_STL) ...... 5.修改 //ns-allinone-2.33/ns-2.33/tcl/lib/ns-default.tcl 如下 ...... Agent/Ping set packetSize_ 64 Agent/mUDP set packetSize_ 1000 Agent/UDP set packetSize_ 1000 ...... 6.重新編譯NS2 # make clean # make 若編譯成功,即加入完成 7.使用 於 tcl 檔內加入 ...... #使用mTcpSink set sink [new Agent/TCPSink/mTcpSink] $sink set_filename tcp_sink ...... ...... #使用mUDP set udp [new Agent/mUDP] $udp set_filename sd_udp #使用mUdpSink set null [new Agent/mUdpSink] $null set_filename rd_udp ...... 即可使用 [編輯] 使用threshold程式 由於 Hidden Terminal Problem 與有效的傳輸距離有關,所以如何計算出有效的傳輸距離和其相關參數就變的非常重要 NS2有提供一個小工具,讓使用者輸入有效的傳輸距離和使用的傳輸模型後,即顯示相對應的參數 1.編譯程式 # cd ns-allinone-2.33/ns-2.33/indep-utils/propagation # g++ -lm threshold.cc -o threshold 2.使用 # ./threshold USAGE: find receiving threshold for certain communication range (distance) SYNOPSIS: threshold -m [other-options] distance : FreeSpace, TwoRayGround or Shadowing [other-options]: set parameters other than default values: Common parameters: -Pt -fr -Gt -Gr -L For two-ray ground model: -ht -hr For shadowing model: -pl -std -d0 -r

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值