NS2仿真:使用NS仿真软件模拟简单网络模型
NS2仿真实验报告1
实验名称:使用NS仿真软件模拟简单网络模型
实验日期:2015年3月2日~2015年3月7日
实验报告日期:2015年3月8日
一、实验环境(网络平台,操作系统,网络拓扑图)
运行平台:虚拟机VMwareWorkstation11.0
操作系统:Linux/CentOS6.5仿真分析工具:NS2.35中的仿真软件ns,图形界面nam,编译工具awk,图表编辑器xgraph
网络拓扑图:
二、 实验目的
掌握NS2仿真工具的使用方法,能够模拟真实场景中的网络传输模型,熟悉几种常用的网络协议,了解NS仿真软件的内部结构。通过仿真实验,模拟网络数据包收发、传输和丢失,并将实验数据记录到文件中,使用仿真软件对实验数据生成实验图表,分析实验结果。
三、实验内容及步骤(包括主要配置流程,重要部分截图)
3.1CentOS下安装ns2.35
3.11第一步:对软件的运行环境进行配置
CentOS中yum的使用方法:找到安装包yumsearch *lib*,例如:yum search lib,就可已找到以下的一些安装包;然后输入以下命令:
yum installlibX11-devel
yum installlibXt-devel
yum installgcc-c++
3.12第二步:下载和安装ns2.35
下载ns2.35安装包,下载后的文件格式是ns2.35.tar.gz,可以在装有vmware-tools的系统中,直接打开压缩文件,并且能够将其拖入到指定安装的目录下/home/byf。找到INSTALL文件所在的位置,输入
./install
3.13第三步:配置系统环境变量
在目录/etc下,找到profile文件,对该文件进行编译
sudo geditprogile
输入相应的路径:
exportPATH=$PATH:/home/byf/ns-allinone-2.35/bin:/home/byf/ns-allinone/2.35/tcl8.5.10/unix:/home/byf/ns-allinone/2.35/tk8.5.10/unix:/usr/sbin:/usr/bin:/usr/local/bin:usr/local/sbin:/bin:/sbin
exportLD_LIBRARY_PATH=/home/byf/ns-allinone-2.35/otcl-1.14:/home/byf/ns-allinone-2.35/lib
export TCL_LIBRARY=/home/byf/ns-allinone-2.35/tcl8.5.10/library
加粗的字体用作程序运行后,可能出现的一些常规错误。
3.14第四步:配置用户环境变量
接下来是环境变量的配置:在目录/home/username下(也就是/home/byf)操作:
#sudo gedit .bashrc
根据用户的习惯,来设置一些工作环境。
3.2编写一个tcl脚本一般分为以下几个步骤:
1) 创建模拟器对象,用来定义和控制模拟过程。在这个过程中,首先创建一个simulator 对象。
# 产生一个仿真的对象
set ns [new Simulator]
2) 配置节点属性。
#针对不同的资料流定义不同的颜色,这是要给NAM用的
$ns color 0 blue
$ns color 1 red
$ns color 2 white
#产生四个网络节点
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
2) 设置跟踪文件
#开启一个trace file,用来记录封包传送的过程
set f [open out.tr w]
$ns trace-all $f
#开启一个NAM trace file
set nf [open out.nam w]
$ns namtrace-all $nf
3) 创建节点拓扑结构。
#把节点连接起来
$ns duplex-link $n0 $n2 5Mb 2ms DropTail
$ns duplex-link $n1 $n2 5Mb 2ms DropTail
$ns duplex-link $n2 $n3 1.5Mb 10ms DropTail
#设定节点的位置,这是要给NAM用的
$ns duplex-link-op $n0 $n2 orient right-up
$ns duplex-link-op $n1 $n2 orient right-down
$ns duplex-link-op $n2 $n3 orient right
4) 设置代理和应用层协议,并进行绑定。
#建立一条UDP的联机
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
#建立一条UDP的联机
set udp1 [new Agent/UDP]
$ns attach-agent $n3 $udp1
#在NAM中,UDP的联机以红色表示
$udp1 set class_ 1
#在UDP联机之上建立CBR应用程序
set cbr1 [new Application/Traffic/CBR]
$cbr1 attach-agent $udp1
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
set null1 [new Agent/Null]
$ns attach-agent $n1 $null1
$ns connect $udp0 $null0
$ns connect $udp1 $null1
$ns at 1.0 "$cbr0 start"
$ns at 1.1 "$cbr1 start"
#建立一条TCP的联机
set tcp [new Agent/TCP]
$tcp set class_ 2
set sink [new Agent/TCPSink]
$ns attach-agent $n0 $tcp
$ns attach-agent $n3 $sink
$ns connect $tcp $sink
#在TCP联机之上建立FTP应用程序
set ftp [new Application/FTP]
5) 使用模拟器对象的at过程设置节点事件和时间的对应关系。
#设定FTP和CBR资料传送开始和结束时间
$ns at 1.2 "$ftp start"
#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)
$ns at 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3$sink"
puts $f "$now [expr(($bw0+$holdrate1)*8)/(2*$time*1000000)]"
puts [$cbr0 set packetSize_]
puts [$cbr0 set interval_]
6) 使用#定义一个结束的程序
proc finish {} {
global ns f nf
$ns flush-trace
close $f
close $nf
exec xgraph out.tr-geometry 800x400 &
puts "runningnam..."
exec nam out.nam &
exit 0
}
#执行仿真
$ns run模拟器对象的run过程开始模拟。
7) 结果分析。模拟结束后,将得到保存模拟过程的trace文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用gnuplot等画图工具直观的显示数据分析结果。
四、实验结果(包括最终实验结果,重要部分截图)
在1.0s时节点0开始通过节点2,向节点3传输用户数据包,代码为:
$ns at 1.0"$cbr0 start",执行结果如下图所示:
节点3在1.1s时通过节点2向节点1传输用户数据包,代码为:
$ns at 1.1"$cbr1 start",执行结果如下图所示:
在1.2s时,开始出现数据传输中断,数据包在节点2发生丢失现象,代码为:$ns at 1.2 "$ftp start",代码的执行结果如下图所示:
在1.35s左右数据回复传输,代码为:$nsat 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"执行的结果如下图所示:
五、试验中的问题及心得
5.1一些出现最多的问题:
nam: Can't finda usable tk.tcl in the following directories:
/home/byf/ns-allinone-2.35/tcl8.5.10/library/tk8.5/home/byf/ns-allinone-2.35/tcl8.5.10/tk8.5 ./lib/tk8.5/home/byf/ns-allinone-2.35/lib/tk8.5 ./library
……
This probablymeans that tk wasn't installed properly.
是由于环境变量的问题,例如环境变量的目录在/home/username/ns2.35,而用户执行的目录在/home/username下,这样就会出现上述的问题。
六、实验思考
通过本次实验,初步的了解到NS仿真工具的基本功能,并能够给一些简单的模型进行仿真实验分析,以及进一步对网络协议的了解,编写简单的网络协议算法,通过比较仿真的数据,反映网络协议的优劣。对已经存在的协议进一步提出改进的算法,来提升网络的传输性能。学习NS仿真软件的主要途径,是需要不断的阅读优质的源代码,对未知的代码行进行注释,反复的使用和修改成型的源代码,充分了解代码内部,各部分的函数、命令以及协议定义的方法,对以后学习代码库中的协议代码有非常重要的帮助。
实验途中可能会遇到各种问题,但是一定要坚持不断的阅读查找,并记录下来错误的地方,找到解决问题的方法。一旦学会使用,就会觉得学习起来非常的简单,对以后独立编写代码起着支撑的作用。
NS2仿真:使用NS仿真软件模拟简单网络模型的更多相关文章
- NS2仿真:两个移动节点网络连接及协议性能分析
NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图 ...
- NS2仿真:公交车移动周期模型及性能分析
NS2仿真实验报告3 实验名称:公交车移动周期模型及性能分析 实验日期:2015年3月16日~2015年3月21日 实验报告日期:2015年3月22日 一.实验环境(网络平台,操作系统,网络拓扑图) ...
- 网络拥塞控制与NS2仿真
准备工作: 1. 安装virtual box 虚拟机,并安装虚拟机增强功能,并配制共享文件夹. 共享文件夹自动挂载后的路径为/media/sf_xxx文件夹,xxx为所起的文件名. 解决virtual ...
- python入门:模拟简单用户登录(自写)
#!/usr/bin/env python # -*- coding: utf-8 -*- #模拟简单用户登录(自写) import getpass a = raw_input("Pleas ...
- nodejs与websocket模拟简单的聊天室
nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...
- java 模拟简单搜索
Java 模拟简单搜索 实体类 package org.dennisit.entity; /** * * * @version : 1.0 * * @author : 苏若年 <a href=& ...
- C语言程序设计:模拟简单运算器的工作
目录 C语言程序设计:模拟简单运算器的工作 1.题目 2.分析 3.代码实现 4.结尾 C语言程序设计:模拟简单运算器的工作 1.题目 模拟简单运算器的工作,输入一个算式(没有空格),遇等号&qu ...
- 简单的多对一传输ns2仿真
实验名称:简单的多对一传输仿真 实验目的:1.研究怎么实现多对一传输. 实验步骤: 1.写c++代码并注册报文头. 先说一下多对一传输的方式.最开始,接收端发送控制报文给所有的发送端,告诉他们要发送多 ...
- 【NS2仿真】RTP协议安装
来自: http://personales.upv.es/fboronat/Research/NS2_RTP/NS2_RTP_RTCP_module.htm 文件:http://pan.baidu.c ...
随机推荐
- linux下查看已经安装的jdk 并卸载jdk
一.查看Jdk的安装路径: whereis javawhich java (java执行路径)echo $JAVA_HOME echo $PATH 备注:如果是windows中,可以使用: set j ...
- 沙盒操作的核心函数 - NSSearchPathForDirectoriesInDomains用法
1. iPhone会为每一个应用程序生成一个私有目录,这个目录位于: /Users/sundfsun2009/Library/Application Support/iPhone Simulator/ ...
- Swift - 37 - 值类型和引用类型的简单理解
//: Playground - noun: a place where people can play import UIKit // 值类型:指的是当一个变量赋值给另外一个变量的时候, 是copy ...
- 武汉科技大学ACM :1008: A+B for Input-Output Practice (VIII)
Problem Description Your task is to calculate the sum of some integers. Input Input contains an inte ...
- 《Linux内核分析》 week2作业-时间片轮转
一.基于时间片轮转调度代码的解读 代码结构主要由三个文件组成: 1.mypcb.h 2.myinterrupt.c 3.mymain.c 1.进程控制块(mypcb.h) /* CPU-specifi ...
- rtmpdump代码分析 转
RTMPdump 源代码分析 1: main()函数 rtmpdump 是一个用来处理 RTMP 流媒体的工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, ...
- Java解析和生成XML
1.Jaxb处理java对象和xml之间转换常用的annotation有: @XmlType @XmlElement @XmlRootElement @XmlAttribute @XmlAccesso ...
- jquery在不同浏览器获取文件路径出现问题!
<input type="file" name="file" id="file1" src=""/> < ...
- 如何用PowerPoint制作闪烁的星星
在PPT中,PPT动画说是幻灯片PPT中的精华是当之无愧的!ppt文件有了动画,犹如插上翅膀的鸟,让PPT的色彩衍生出了更多的特色.只要你的ppt动画效果制作的对,你的幻灯片将明显与众不同,观众也更容 ...
- ARM汇编指令(未完待续)
ARM指令自己在看的时候,看完之后就忘了,根本记不住,而且有些ARM汇编指令在平常的时候可能根本就用不到,所以也没必要把所有的ARM指令都去记忆,所以自己就想着不去一遍一遍的复习ARM指令,而是在平常 ...