NS2网络仿真

article/2025/10/10 1:14:53
  • NS2安装与配置
  • TCP/UDP比较仿真
  • 静态/动态路由仿真

1.安装与配置
1.1更新系统

  • sudo apt-get update #更新源列表
  • sudo apt-get upgrade #更新已经安装的包
  • sudo apt-get dist-upgrade #更新软件,升级系统

1.2安装ns2需要的几个包

  • sudo apt-get install build-essential
  • sudo apt-get install tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev #for tcl and tk
  • sudo apt-get install libxmu-dev libxmu-headers #for nam

1.3下载安装包
官网下载地址(http://www.isi.edu/nsnam/ns/nsbuild.html#allinone)
下载allinone,将下载得到的压缩包放到自己指定的位置即可。

1.4解压安装包,并进行安装

  • tar xvfz ns-allinone-2.35.tar.gz
  • cd ns-allinone-2.35
  • sudo ./install #进行安装

第一次安装报错:
linkstate/ls.h:137:20: note: use ‘this->erase’ instead
make: * [linkstate/ls.o] Error 1
Ns make failed!

修改ls文件:ns-2.35/linkstate/ls.h
第137行
void eraseAll() { erase(baseMap::begin(), baseMap::end()); }
改为:void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); }
保存后

  • sudo ./install #重新安装顺利完成

1.5配置环境变量

  • gedit ~/.bashrc

(不是空白文件)
在文件末尾添加

# add path for ns2
export PATH=”$PATH:/home/安装文件夹名/ns-allinone-2.35/bin:/home/安装文件夹名/ns-allinone-2.35/tcl8.5.10/unix:/home/安装文件夹名/ns-allinone-2.35/tk8.5.10/unix”
export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/home/安装文件夹名/ns-allinone-2.35/otcl-1.14:/home/安装文件夹名/ns-allinone-2.35/lib”
export TCL_LIBRARY=”$TCL_LIBRARY:/home/安装文件夹名/ns-allinone-2.35/tcl8.5.10/library”

1.6验证ns2安装

关闭终端,重启终端,输入ns,出现%,说明ns2安装成功。
注意:环境变量配错的话,会提示
程序“ns”尚未安装。 您可以使用以下命令安装:
sudo apt-get install ns2”
请勿通过该命令安装,还是回到1.5修改环境变量吧!

1.7安装nam

进入nam目录:

  • cd ns-allinone-2.35/nam-1.15

进入后

  • sudo ./configure

,然后

  • sudo make

注意,此处会出错

提示为“installation of tcl seems incomplete or can’t be found automatically”忘记截图了

解决方法
sudo ./configure –with-tcl=/home/用户目录/文件存放目录/ns-allinone-2.35/tcl8.5.10 –with-tcl-ver=8.5.10 –with-tk=/home/用户目录/文件存放目录/ns-allinone-2.35/tk8.5.10 –with-tk-ver=8.5.10
最后

  • sudo make install

命令行输入nam弹出nam console说明nam安装成功。

这里写图片描述

注意:如果通过“sudo apt-get install nam”安装的nam,执行nam命令会报异常 “段错误,核心文件已转储”
遇到该问题的可以“sudo apt-get remove –purge nam”卸载nam及其配置后按1.7进行安装。

1.8测试simple.tcl

  • cd ns-allinone-2.35/ns-2.35/tcl/ex/
  • ns simple.tcl

显示下图则全部安装成功!
这里写图片描述

上述安装过程参考博客:
Ubuntu 16.04 安装ns2.35+nam

2.TCP/UDP比较

2.1网络结构图

这里写图片描述

2.2实验解释

① 网络环境包含两个传输节点s1,s2,路由器r和数据接收端d;
② S1到r之间与s2到r之间的网络频宽都是2Mbps,传递延迟时间都是10ms。网络结构的频宽瓶颈是在r到d之间,频宽为1.7Mbps,传递延迟为20ms。
③ 所有链路的管理机制都是DropTail,且r到d之间的最大队列长度是10个封包的长度;
④ 在s1与d之间会有一条FTP的联机,FTP应用程序构建在TCP纸上,所以必须先建立一条FTP的联机,因此在s1上使用TCP agent产生“tcp”来发送TCP的封包;在目的地d使用TCPsink Agent产生“sink”来接收TCP的数据,并产生回复封包(ACK)返回发送端;
⑤ 在s2与d之间有一条固定的传输速率的联机,CBR应用程序的结构在UDP之上,为此必须在s2使用UDP agent来产生,“udp”来发送UDP封包,在d上用Null Agent 来产生“sink”,以接收由s2传送过来的UDP封包。
⑥ CBR是在0.1s开始发送,4.5s结束传输;FTP是在1.0s开始发送,4.0s结束传输。

2.3源代码分析

#产生一个仿真对象
set ns [new Simulator]#定义两种颜色,一种模拟TCP,一种模拟UDP
$ns color 1 Blue
$ns color 2 Red#nam文件
set nf [open tcp_udp.nam w]
$ns namtrace-all $nf#追踪文件(日志)
set nd [open tcp_udp.tr w]
$ns trace-all $nd#定义结束程序
proc finish {} {global ns nf nd$ns flush-traceclose $nfclose $nd exec nam out.nam &exit 0
}#建立源节点
set s1 [$ns node]
set s2 [$ns node]#路由器
set r [$ns node]
#目的节点
set d [$ns node]#建立链路,droptail的队列管理方式
$ns duplex-link $s1 $r 2Mb 10ms DropTail
$ns duplex-link $s2 $r 2Mb 10ms DropTail
$ns duplex-link $r $d 1.7Mb 20ms DropTail#设置r到d之间Queue Limit为10个封包大小
$ns queue-limit $r $d 10#建立nam中的位置关系
$ns duplex-link-op $s1 $r orient right-down
$ns duplex-link-op $s2 $r orient right-up
$ns duplex-link-op $r $d orient right# 观测r到d之间queue的变化
$ns duplex-link-op $r $d queuePos 0.5#建立一条TCP的联机
set tcp [new Agent/TCP]
$ns attach-agent $s1 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $d $sink
$ns connect $tcp $sink#nam中,TCP的联机会以蓝色表示
$tcp set fid_ 1#在TCP联机之上建立FTP应用程序
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP#建立udp联机
set udp [new Agent/UDP]
$ns attach-agent $s2 $udp
set null [new Agent/Null]
$ns attach-agent $d $null
$ns connect $udp $null#udp红色
$udp set fid_ 2#在UDP联机之上建立CBR应用程序
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
$cbr set type_ CBR#设置包大小速率
$cbr set packet_size_ 1000
$cbr set rate_ 1mb
$cbr set random_ false#设置开始结束时间
$ns at 0.1 "$cbr start"
$ns at 1.0 "$ftp start"
$ns at 4.0 "$ftp stop"
$ns at 4.5 "$cbr stop"#结束TCP联机
$ns at 4.5 "$ns detach-agent $s1 $tcp ; $ns detach-agent $d $sink"
#结束模拟
$ns at 5.0 "finish"
#执行模拟
$ns run

2.4执行结果

这里写图片描述

3.静态/动态路由(动态路由使用距离矢量路由算法)

3.1网络拓扑
这里写图片描述

3.2实验分析

该试验主要观察当链路状态发生变化时,使用静态路由和动态路由的差异性。
① 结点n0会使用FTP将数据传送给n4,传送时间为0.1~3.0s;
② 在1.0s时,链路n1到n3发生问题,数据无法从n1到n3之间的链路传送;
③ 在2.0s时,链路n1到n3问题解决,数据又可以从此链路传送。

3.3源代码分析

#产生一个仿真对象
set ns [new Simulator]#若是使用者有指定使用距离矢量(distance vector)算法的动态路由方式
#则设定路由的方式为DV
if {$argc==1} {set par [lindex $argv 0]if {$par=="DV"} {$ns rtproto DV}
}#以藍色表示所传送的封包
$ns color 1 Blue#nam文件
set file1 [open out.nam w]
$ns namtrace-all $file1#結束程序
proc finish {} {global ns file1$ns flush-traceclose $file1exec nam routing.nam &exit 0
}#创建五个结点
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]#设置链路
$ns duplex-link $n0 $n1 0.5Mb 10ms DropTail
$ns duplex-link $n1 $n2 0.5Mb 10ms DropTail
$ns duplex-link $n1 $n3 0.5Mb 10ms DropTail
$ns duplex-link $n3 $n4 0.5Mb 10ms DropTail
$ns duplex-link $n3 $n2 0.5Mb 10ms DropTail#设定在nam中的位置关系
$ns duplex-link-op $n0 $n1 orient right
$ns duplex-link-op $n1 $n2 orient right
$ns duplex-link-op $n1 $n3 orient down
$ns duplex-link-op $n3 $n4 orient right
$ns duplex-link-op $n3 $n2 orient right-up#建立TCP联机
set tcp [new Agent/TCP]
$tcp set fid_ 1
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n4 $sink
$ns connect $tcp $sink#建立FTP联机
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP#设定在1.0秒時,n1到n3间的链路出现问题
$ns rtmodel-at 1.0 down $n1 $n3#设定在2.0秒時,n1到n3間的链路又恢复正常
$ns rtmodel-at 2.0 up $n1 $n3#在0.1秒時,FTP开始传送数据
$ns at 0.1 "$ftp start"#在3.0秒時,结束传送数据
$ns at 3.0 "finish"#模拟开始
$ns run

3.4实验结果

静态路由:
这里写图片描述

这里写图片描述

DV动态路由

这里写图片描述

这里写图片描述

参考书籍:

NS2仿真实验-多媒体和无线网络通信 柯志亨


http://chatgpt.dhexx.cn/article/2YwhFghl.shtml

相关文章

ns2安装详细过程与网络仿真

ns2安装详细过程与网络仿真 博客分类: Networks TclLinuxUnixGCCVC 简单的说,NS-2是一个网络模拟器,所以经常被用到网络课的教学中。 NS-2是OpenSource的,最早的版本是在linux/unix下运行的,后来有了wi…

NS2教程

柯老师的NS2新网址 Due to some reasons, my NS2 website is sometimes donw and unavailable for many users. Therefore, I provide another backup website. 1. NS2 http://csie.nqu.edu.tw/smallko/ns2/ns2.htm 2. old_NS2 (backup of NS2 Learning Guide) http://csie.n…

ns2安装和若干问题的解决方法

文章目录 1. 安装与配置2. 安装nam3. 配置环境变量4. 检查是否能够成功运行参考资料 在安装ns2的过程中遇到了很多问题,为了记录这些问题和为同样遇到这些问题的朋友提供思路,写下这篇博文。 安装ns2和nam主要分为如下几个步骤: 安装与配置…

Linux下安装ns2

最近为了项目需要用到NS2软件用于网络仿真实验,从Windows到Linux折腾了我将近一周的时间。在Windows装了卸、卸了装十几遍还是不成功,最后放弃了,回到了Linux系统,又折腾了两天终于安装测试成功!(安装其实蛮…

企业微信第三方扫码登录

为什么写这个文章 公司后台突然需要扫码登录,网上的企业微信扫码都是基于自建应用的扫码登录,对第三方的扫码并没有多加介绍 概述 企业微信的管理员和成员,可通过单点登录机制,登录到第三方网站。第三方可通过接口,…

微信第三方登录有两种登录方式, 1. 微信开放平台登录 2. 微信公众平台授权登录?

https://www.v2ex.com/amp/t/390333 微信开放平台登录与微信公众平台授权登录区别在哪? 2017-09-13 12:05:41 08:00 xoxo419 微信第三方登录有两种登录方式, 1. 微信开放平台登录 2. 微信公众平台授权登录? 问: 两者区别在哪? 壹号店 http://m.yhd.com 微信第三方登录属…

Android APP微信第三方登录踩坑 - 微信开放平台修改应用包名后微信第三方登录失败

在微信开放平台注册移动应用,才能在APP里实现「微信登录」和「微信支付」。 近期因为业务需要,需要修改应用的包名,因此在微信开发平台重新提交了应用「基本信息」修改申请,顺便吐槽下,现在微信开发平台对应用审核真是…

微信第三方登录redirect_uri 参数错误

微信第三方登录 先说解决方案:redirect_uri 参数错误 在开放平台设置好回调地址,例如地址是 www.niezhiliang.com 那么在生成二维码的时候回调只能写该域名下的地址 在申请二维码页面回调地址(你的redirect_uri) 还必须加上http或者https,…

微信第三方登录接口

随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式。 第一步:获取AppID AppSecret(不做解释,自己去微信公众平台申请) 第二步:生成扫描二维码&…

微信 第三方登录

转自:http://www.cnblogs.com/linjunjie/p/6378166.html#3902595 从http://www.cnblogs.com/v-weiwang/p/5732423.html 申请开发者账号之内的就不累赘了,网上一大堆: 说下需求,一个网页要在三类容器运行,公司app&#…

微信第三方登录

微信第三方登录 步骤: 1.申请你的AppID 请到微信开放平台https://open.weixin.qq.com/注册成为开发者,然后创建应用并提交审核,只有审核通过的应用才能进行开发。 2.下载SDK及API文档 Android Studio环境下: 在build.gradle文件…

流程图了解微信第三方登录

1.首先是,浏览器显示微信登录 2.用户扫描,发送请求到微信服务器,前端也会发送一个请求到自己的后台服务器,后台服务器提供微信服务器获取第三方验证授权地址,携带回调路径 3.微信服务器验证成功,返回code…

Oracle官网下载JDK

进入Oracle官网:https://www.oracle.com/index.html 1、选择support(支持)software Download 2、选择 java 3、选择jdk 4、拉到底选择java archive(档案文件) 5、选择要下载的版本

解决JDK官网下载龟速的问题

在JDK的官网下载JDK时还需要登录Oracle 且下载的时候那速度相当缓慢 可以使用华为的镜像下载,超快的 下载仓库地址:x​​​​​​​ Index of java-local/jdk

如何在官网下载java JDK

1.打开Oracle官网,准备下载java JDK (下载时需要使用注册用户登陆,可以免费注册) 官网地址:http://www.oracle.com/ 登录Oracle账号 选择适合自己的JDK版本 选择适合的版本 勾选 下载

JDK1.8u162以及JDK1.8所有历史版本官网下载地址

很多网友想看JDK1.8里面所有的版本,今天我就给大家带来了所以JDK1.8版本的官方下载地址,其中包括Windows版本和Linux版本 JDK1.8所有版本官网下载链接 Java Archive Downloads - Java SE 8 Attention!!! Java Archive | Oraclehttps://www.oracle.c…

JDK 的 ORACLE 官网下载步骤

下面以下载 jdk-8u181-linux-x64.tar.gz 为例,说明下在 ORACLE官网下载的具体步骤 1、进入oracle官网–>Resource–>Software Downloads,如下截图: 2、进入页面后,下滑选择“java”,然后点击“Java(JDK) for De…

eclipse jdk官网下载不了

最近在学习java的简单语法,在下载eclipse时受挫,通过浏览器怎么都下载不下来。 最后,我是通过迅雷下载的,速度杠杠滴。哈哈,莫名给迅雷打个call。 1、eclipse下载地址:https://www.eclipse.org/downloads…

JDK官网下载与安装过程

一、JRE与JDK介绍 java是当前比较流行的一种编程语言,当我们开始学习java的时候肯定会先要安装jdk,然后进行环境变量控制。 JRE(Java Runtime Environment ) Java运行环境,用来运行JAVA程序的。 JDK(Java Development Kit) Java开发工具包&…

ubuntu下载安装jdk

1.首先进入Oracle官网 2.点击Products中的Software中的Java 3.下拉到如下位置,点击Oracle JDK 4.进入后选择自己所想要的版本,这里我选择Java SE8版本的jdk 5.下拉页面,这里我选择LInux x64位版本的压缩包文件,点击右侧下载 …