文档库 最新最全的文档下载
当前位置:文档库 › (完整word版)NS2网络仿真实验

(完整word版)NS2网络仿真实验

(完整word版)NS2网络仿真实验
(完整word版)NS2网络仿真实验

移动自组织网络

NS2网络仿真实验

何云瑞

13120073

电信研1301班

1.实验目的和要求

1.学会NS2的安装过程,并熟悉NS2的环境;

2.观察并解释NAM动画,分析Trace文档。

3.学会用awk和gnuplot分析吞吐量、封包延迟、抖动率和封包丢失率。2.实验环境

先在PC上安装VMware虚拟机,再在虚拟机上安装Ubuntu系统,最后再Ubuntu系统上安装NS2软件,本次实验采用的是NS-2.34版本。

3.基本概念

3.1 NS2简介

NS2是一款开放源代码的网络模拟软件,最初由UC Berkeley开发。它是一种面向对象的网络模拟器,它本质上是一个离散事件模拟器,其本身有一个模拟时钟,所有的模拟都由离散事件驱动。其采用了分裂对象模型的开发机制,采用C++和OTcl两种语言进行开发。它们之间采用TclCL进行自动连接和映射。考虑效率和操作便利等因素,NS2将数据通道和控制通道的实现相分离。为了减少封包和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++编写,这些对象通过TclCL映射对OTcl解释器可见。

目前,NS2可以用于模拟各种不同的通信网络,它功能强大,模块丰富,已经实现的主要模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、CBR、Web和VBR;路由队列管理机制,如Droptail、RED和CBQ;路由算法;以及无线网络WLAN、移动IP和卫星通信网络等模块。也为进行局域网的模拟实现了多播协议以及一些MAC子层协议。

3.2 NS2的功能模块

NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等,下面对各个模块进行简单的介绍:

(1)事件调度器:目前NS2提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。

(2)节点(node):是由TclObject对象组成的复合组件,在NS2中可以表示端节点和路由器。

(3)链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理封包的到达、离开和丢弃。

(4)代理(agent):负责网络层封包的产生和接收,也可以用在各个层次的协议实现中。每个agent连接到一个网络节点上,由该节点给它分配一个端口号。

(5)封包(packet):由头部和数据两部封包成。一般情况下,packet只有头部、没有数据部分。

(6)应用层(Application):流量产生器(Traffic generators)创建了各种不同的概率模型来模拟产生实际网络中的业务流,它建立在UDP代理之上;应用模拟器(Simulated application)产生建立在TCP代理之上的业务流。

(7)数据记录:Trace,功能是能够详细记录模拟过程,同时,用户也可以根据自己的需要记录模拟过程中的任何一个细节,模拟结束后会产生out.tr文件;Monitor,NS2中有两种监测,队列监测(Queue Monitoring)和流量监测(Per-Flow Monitoring)。

(8)动画演示Nam,是基于Tcl/Tk的动画演示工具,用来把模拟的过程用可视化的方式呈现出来,模拟结束后会产生out.man文件。

(9)数据分析:gawk。awk是一种程序语言。它具有一般程序语言常见的功能。由于awk语言具有使用直译器(Interpreter)不需先行编译;变量无型别之分(Typeless),可使用文字当数组的注标(Associative Array)等特色,所以使用awk 撰写程序比起使用其它语言更简洁便利且节省时间。awk还具有一些内建功能,使得awk擅于处理具资料列(Record),字段(Field)型态的资料。此外,awk内建有pipe的功能,可将处理中的资料传送给外部的Shell命令加以处理,再将Shell 命令处理后的资料传回awk程序,这个特点也使得awk程序很容易使用系统资源。而gawk是GNU所开发的awk,最初在1986年完成,之后不断改进和更新,gawk包含awk的所有功能。

3.3 Trace文件的格式

(1)Event发生的事件类型。

+ 表示封包进入链路队列(Enqueue)

- 表示封包离开链路队列(Dequeue)

r 表示目的队列接受(receive)事件

d 表示队列丢弃(drop)封包事件

(2)time表示事件发生的时间

(3)From node表示封包发送节点的id

(4)From node表示封包传送目的节点的id

(5)Pkt type表示封包类型

(6)Pkt size表示封包的大小

(7)Flags表示标志项

(8)Fid为Flow id的简写,流标识符

(9)Src addr表示源地址,格式为:node.port。node为封包发送节点的id,port代表发送封包节点的端口号。

(10)Dst addr表示目的地址,格式为:node.port。node为封包接收节点的id,port代表接收封包节点的端口号。

(11)Seq num封包的序列号

(12)Pkt id封包的唯一标识符,表示封包的id。

3.4 CBR和FTP简介

CBR:Constant Bit Rate,固定传输速率。这是一个用来形容通信服务质量(Quality of Service,QoS)的术语。和该词相对应的词是可变码率或可变比特率(Variable Bit Rate,缩写VBR)。当形容编解码器的时候,CBR编码指的是编码器的输出码率(或者解码器的输入码率)应该是固定制(常数)。当在一个带宽受限的信道中进行多媒体通信的时候CBR是非常有用的,因为这时候受限的是最高码率,CBR可以更好的易用这样的信道。但是CBR不适合进行存储,因为CBR将导致没有足够的码率对复杂的内容部分进行编码(从而导致质量下降),同时在简单的内容部分会浪费一些码率。

FTP:File Transfer Protocol,文件传输协议,中文简称为“文传协议”,用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC与世界各地所有运行FTP的服务器相连,访问服务器上的大量程序和信息。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上复制到本地计算机,或把本地计算机的文件送到远程计算机去。

3.5 其他概念

(1)丢包率:是一个比率,表示在单位时间内未收到的数据封包数与发送的数据封包数的比率,由于信号衰减、网络质量等诸多因素的影响,可能产生数据封包的丢失。

(2)端到端时延:是由各种因素引起的,包括打包和解包时延,以及网络传送时延,本文中主要讨论的是网络传输时延。

(3)吞吐量:单位时间内某个节点发送和接受的数据量,单位一般为b/s。

(4)抖动率:网络延迟的变化量,它是由同一应用的任意两个相邻数据包在传输路由中经过网络延迟而产生的,由相邻数据包延迟时间差除以数据包序号差得到。

4.实验步骤

4.1 NS2的安装

本文NS2的安装参照博文:

https://www.wendangku.net/doc/204882779.html,/s/blog_53e4f67d0101f5tr.html

最终运行NS2自带simple.tcl得到图1,以示成功:

图1 NS2安装成功

4.2 Tcl脚本运行

本实验中编写的脚本simulator.tcl见附录一。实际模拟的网络结构图如图2所示。包含4个node,各节点之间都是以全双工的链路相连。n0和n2之间链路的带宽为2Mbps,延迟为10ms,为DropTail队列方式;n1和n2之间链路带宽为2Mbps,延迟为10ms,也为DropTail队列方式;n2和n3之间链路的带宽为1.7Mbps,延迟为20ms,也为DropTail方式。n0处有一个FTP的TCP流量产生器,n1处为CBR的

UDP流量产生器,n3有一个接收TCP的sink和接收UDP的NULL。

图2 网络结构图

仿真结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把仿真的过程用可视化的方式呈现出来,这可以让我们很直观的方式去了解封包传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。

4.3 吞吐量、封包延迟、抖动率和封包丢失率

4.3.1 封包延迟

测量CBR封包端点到端点间延迟时间的程序写在measure-delay.awk中。measure-delay.awk的具体代码查看附录。

在终端输入如下命令:

gawk -f measure-delay.awk out.tr > cbr_delay

此指令将运行结果存储到cbr_delay文件中,以便进行绘图。

接着输入gnuplot,得到下图

接着按下图输入,为接下来要画的时延图做标识:

运行上图最后一条指令后得到图3:

图3 封包延迟随时间的变化

4.3.2 抖动率

抖动率就是延迟时间变化量delay variance,由于网络的状态随时都在变化,有时候流量大,有时候流量小,当流量大的时候,许多封包就必需在节点的队列中等待被传送,因此每个封包从传送端到目的地端的时间不一定会相同,而这个不同的差异就是所谓的Jitter。Jitter越大,则表示网络越不稳定。

量测CBR flow抖动率的代码写在measure-jitter.awk内,具体见附录。

运行方法仿照4.3.1,可得下图4:

图4 抖动率随封包序列的变化

4.3.3 封包丢失率

测量CBR封包丢失率的代码写在measure-drop.awk内,具体见附录。

运行awk -f measure-drop.awk out.tr > cbr_drop后,可在cbr_drop中找到如下信息:

其中第一行表示CBR总共送出了550个封包,丢失了8个。第二行表示总的丢包率为0.014545。接下来的几行中,第一列表示时间,第二列表示丢包率。

仿照上两例,只不不过为了利用gnuplot,要把先把前两行删除。最终可得

丢包率随时间的变化如图5所示:

图5 封包丢失率随时间的变化

4.3.4 吞吐量

量测CBR吞吐量的代码写在measure-throughput.awk内,具体见附录。

图6 吞吐量随时间的变化

5.实验结果分析

从丢包率、时延、吞吐量和抖动率的变化图中,可以看出当丢包率增加时,端到端之间的时延也在增加,而吞吐量则下降,丢包率、时延和吞吐量在表示网络性能的好坏时有一定的关系。

在时延的变化图中,在一刚开始的时候,由于只有CBR的封包,所以端到端时延都是固定的,但在1.0秒后,网络多了FTP的封包,这使得CBR封包和FTP封包必须互相的抢夺网络的资源,因此端到端时延变得不在固定,但等到FTP传输结束后,CBR封包的端到端时延又变成是固定值了。

在抖动率的变化图中,抖动率产生变化的原因同时延变化的原因相同,都是由于FTP封包的加入才使得端到端时延产生变化。

6.附录

6.1 网络拓扑仿真脚本simulator.tcl:

# 有线场景,四个节点,FTT+TCP用蓝色表示,CBR+UDP用红色表示

set ns [new Simulator]

#设置颜色

$ns color 1 Blue

$ns color 2 Red

set tracefd [open out.tr w]

$ns trace-all $tracefd

set namtracefd [open out.nam w]

$ns namtrace-all $namtracefd

proc finish {} {

global ns tracefd namtracefd

$ns flush-trace

close $tracefd

close $namtracefd

exec nam out.nam &

exit 0

}

set n0 [$ns node]

set n1 [$ns node]

set n2 [$ns node]

set n3 [$ns node]

$ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail $ns queue-limit $n2 $n3 10

#用于设置NAM显示时,各节点的相对位置$ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right

$ns duplex-link-op $n2 $n3 queuePos 0.5

set tcp [new Agent/TCP]

$tcp set class_ 2

$ns attach-agent $n0 $tcp

set sink [new Agent/TCPSink]

$ns attach-agent $n3 $sink

$ns connect $tcp $sink

$tcp set fid_ 1

set ftp [new Application/FTP]

$ftp attach-agent $tcp

$ftp set type_ FTP

set udp [new Agent/UDP]

$ns attach-agent $n1 $udp

set null [new Agent/Null]

$ns attach-agent $n3 $null

$ns connect $udp $null

$udp set fid_ 2

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"

#以下这一行可有可无

$ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink" $ns at 5.0 "finish"

puts "CBR packet size=[$cbr set packet_size_]"

puts "CBR interval=[$cbr set interval_]"

$ns run

6.2 丢包率awk处理脚本measure-drop.awk: BEGIN {

dropNum = 0;

totalNum = 0

i= 0 ;

lossrate[i] = 0;

timeArr[i] = 0;

}

{

event = $1;

time = $2;

fromNode = $3;

toNode = $4;

pktType = $5;

pktSize = $6;

flags = $7;

fid = $8;

srcAddr = $9;

stAddr = $10;

seqNum = $11;

pktId = $12;

if(fromNode==1 && toNode==2 && event == "+")

{

totalNum++;

timeArr[i]=time;

lossrate[i]=(float)(dropNum/totalNum);

i++;

}

if(fid==2 && event == "d")

dropNum++;

}

END {

printf("#number of packet sent:%d,lost:%d\n", totalNum, dropNum); printf("#lost rate of packets:%f\n", dropNum/totalNum);

printf("%f\t%f\n", timeArr[j], lossrate[j]);

}

6.3 处理时延的awk脚本measure-delay.awk:

BEGIN {

#程序初始化,设定一变量以记录目前最高处理封包的ID。highest_packet_id = 0;

}

{

action = $1;

time = $2;

node_1 = $3;

node_2 = $4;

type = $5;

flow_id = $8;

node_1_address = $9;

node_2_address = $10;

seq_no = $11;

packet_id = $12;

#记录目前最高的packet ID

if ( packet_id > highest_packet_id )

highest_packet_id = packet_id;

#记录封包的传送时间

if ( start_time[packet_id] == 0 )

start_time[packet_id] = time;

#记录CBR (flow_id=2) 的接收时间

if ( flow_id == 2 && action != "d" ) {

if ( action == "r" )

{

end_time[packet_id] = time;

}

}

else {

#把不是flow_id=2 的封包或者是flow_id=2 但此封包被drop 的时间设为-1 end_time[packet_id] = -1;

}

}

END {

#当资料列全部读取完后,开始计算有效封包的端点到端点延迟时间

for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ )

{

start = start_time[packet_id];

end = end_time[packet_id];

packet_duration = end - start;

#只把接收时间大于传送时间的记录列出来

if ( start < end ) printf("%f %f\n", start, packet_duration);

}

}

6.4 吞吐量awk代码measure-throughput.awk:

BEGIN {

init=0;

i=0;

}

{

action = $1;

time = $2;

node_1 = $3;

node_2 = $4;

src = $5;

pktsize = $6;

flow_id = $8;

node_1_address = $9;

node_2_address = $10;

seq_no = $11;

packet_id = $12;

if(action=="r" && node_1==2 && node_2==3 && flow_id==2) { pkt_byte_sum[i+1]=pkt_byte_sum[i]+ pktsize;

if(init==0) {

start_time = time;

init = 1;

}

end_time[i] = time;

i = i+1;

}

}

END {

#为了画图好看,把第一笔记录的throughput 设为零,以表示传输开始printf("%.2f\t%.2f\n", end_time[0], 0);

for(j=1 ; j

th = pkt_byte_sum[j] / (end_time[j] -

start_time)*8/1000;

printf("%.2f\t%.2f\n", end_time[j], th);

}

#为了画图好看,把第后一笔记录的throughput 再设为零,以表示传输结束printf("%.2f\t%.2f\n", end_time[i-1], 0);

}

6.5 抖动率awk代码measure-jitter.awk:

BEGIN {

#程序初始化

old_time=0;

old_seq_no=0;

i=0;

}

{

action = $1;

time = $2;

node_1 = $3;

node_2 = $4;

type = $5;

flow_id = $8;

node_1_address = $9;

node_2_address = $10;

seq_no = $11;

packet_id = $12;

#判断是否为n2 传送到n3,且封包型态为cbr,动作为接受封包if(node_1==2 && node_2==3 && type=="cbr" && action=="r") { #求出目前封包的序号和上次成功接收的序号差值

dif=seq_no-old_seq_no;

#处理第一个接收封包

if(dif==0)

dif=1;

#求出jitter

jitter[i]=(time-old_time)/dif;

seq[i]=seq_no;

i=i+1;

old_seq_no=seq_no;

old_time=time;

}

}

END {

for (j=1; j

printf("%d\t%f\n",seq[j],jitter[j]);

}

NS2网络仿真实验

NS2网络仿真实验 实验目的: 通过修改NS2的TCP协议代码,来简单的观察窗口阈值的不同算法对网络资源利用率的影响。 实验步骤: 1. 实验环境搭建 (1)系统环境: 虚拟机:virtrulbox; 操作系统:linux/ubuntu 10.04 工作目录:/home/wangtao/workspace/ (2)NS2安装与使用: 下载NS2软件包到工作目录, 地址https://www.wendangku.net/doc/204882779.html,/sourceforge/nsnam/ns-allinone-2.33.tar.gz 解压(注:以下斜体字为命令行命令) tar -zxf ns-allinone-2.33.tar.gz cd ns-allinone-2.33 ./install (中间的两个bug已经修改,此处忽略) 耐心等待安装完毕后将出现如下画面说明安装正常: 接下来是系统环境配置,重新进入终端 cd ~ vim .bashrc(如果没有安装vim最好安装一下,sudo apt-get install vim) 在打开的.bashrc的末尾加上以下内容:

PATH="$PATH:/home/wangtao/worksapce/ns-allinone-2.33/bin:/home/wangtao/worksapce/ns-a llinone-2.33/tcl8.4.18/unix" export LD_LIBRARY_PATH="$LD_LIBRARY_PAHT:/home/wangtao/worksapce/ns-allinone-2.33/otcl-1.13,/ home/wangtao/worksapce/ns-allinone-2.33/lib" export TCL_LIBRARY="$TCL_LIBRARY:/home/wangtao/worksapce/ns-allinone-2.33/tcl8.4.18/library" 保存并退出,重新进入终端 安装xgraph sudo apt-get install xgraph 运行一个简单的例子,以证明环境安装完成: ns /home/wangtao/workspace/ ns-allinone-2.33/tcl/ex/simple.tcl 出现如下图说明成功: 2.修改https://www.wendangku.net/doc/204882779.html,代码 vim /home/wangtao/workspace/ns-allinone-2.33/tcp/https://www.wendangku.net/doc/204882779.html, (将窗口阈值一半变为的窗口阈值1/3——wt_https://www.wendangku.net/doc/204882779.html,) 第一处: …… if (cwnd_ < ssthresh_) slowstart = 1; if (precision_reduce_) { //halfwin = windowd() / 2; //wangtao halfwin = windowd() / 3;

NS2网络模拟

网络协议分析与仿真课程设计报告 网络模拟 一、课程设计目的 掌握网络模拟工具NS2的使用,学习基本的网络模拟方法。 二、课程设计内容 协议模拟 工具:NS2,awk,shell,perl等; 要求:掌握NS2网络模拟的基本流程; 内容:NS2网络模拟基本流程 编写TCL脚本,搭建如下图所示的一个网络,共6个节点,其中2、3节点用做ftp服务器和客户端,4、5节点用做cbr流量的源和目的,而0、1节点用做转发设备。各节点间的链路属性见图。 cbr null packet size = 1kbytes, rate=1Mbps 模拟时间设为13秒钟,在0.1秒开始产生cbr流量,在1.0秒开发发送发ftp流量; 8.0秒ftp流量结束,12.0秒cbr流量结束。编写脚本(可用shell,awk,或perl等) 分析模拟日志文件,统计每0.5s内0、1节点间链路通过的分组数以及字节数。 三、设计与实现过程 1.仿真脚本代码与详细注解 #Create a simulator object set ns [new Simulator] #Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #Open the Trace file

set tf [open out.tr w] $ns trace-all $tf #Define a 'finish' procedure proc finish {} { global ns nf tf $ns flush-trace close $nf close $tf exec nam out.nam & exit 0 } #Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 1.5Mb 10ms DropTail $ns duplex-link $n0 $n4 1.5Mb 10ms DropTail $ns duplex-link $n0 $n1 2Mb 20ms DropTail $ns duplex-link $n1 $n3 1.5Mb 10ms DropTail $ns duplex-link $n1 $n5 1.5Mb 10ms DropTail #Set Queue Size of link (n2-n3) to 10 $ns queue-limit $n0 $n1 10 #Setup a TCP connection set tcp [new Agent/TCP] $ns attach-agent $n2 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n4 $udp set null [new Agent/Null] $ns attach-agent $n5 $null

基于NS2的无线传感器网络软件仿真实验

目录 ●课程设计目的 ●课程设计内容 ●课程设计实验原理 ?WSN路由协议 ?WSN MAC层协议 ?修改的路由协议 ●课程设计小组分工 ●课程设计实验流程 ●课程设计实验结果分析 ●课程设计心得体会 ●课程设计总结 ●参考文献 ●源代码

一、课程设计目的 无线传感器网络是物联网的基本组成部分,是物联网用来感知和识别周围环境的信息生成和采集系统,传感器网络对信息处理来说如同人体的感觉突触一样重要。为了方便感知和部署并提高网络的可扩展性,传感器网络一般采用无线通信方式,从而形成了节点之间可自组织拓扑结构的无线传感器网络。本课程设计的目的综合应用学生所学知识,建立系统和完整的传感器网络概念,理解和巩固无线传感器网络基本理论、原理和方法,掌握无线传感器网络开发的基本技能。 二、课程设计内容 软件仿真实验。 要求使用相关软件仿真一个无线传感器网络,要求如下: ●自行参考相关资料,成功安装NS2(或OPNET也可以); ●利用NS2自带的范例,构建一个100个节点的无线传感器网络, 能够成功运行;最好能有界面显示; ●利用利用NS2自带的范例或其它已有脚本,仿真上述无线传感器 网络一种路由协议(例如一种多播路由协议); ●利用利用NS2自带的范例或其它已有脚本,仿真上述无线传感器 网络采用一种MAC协议; ●修改或自行编写一个简单路由协议或MAC协议,并进行仿真运 行。

三、课程设计实验原理 a)WSN路由协议 传统计算机网络对路由协议要求如下:正确性,健壮性,稳定性,公平性,最优性。除此之外,无线传感器网络对路由协议更注重以下特殊要求:能源有效性,简单性,多路性。无线传感器网络是以数据为中心(Data Centric)进行路由的,不同于传统Ad hoc网络以地址为中心(Address Centric)进行路由的模式。由于传感器最基本任务就是感知、采集数据,无线传感器网络邻近节点间采集的数据必然具有相似性,存在冗余信息,需经数据融合(Data Fusion)处理再进行路由。有研究表明,在分布密度为ρ(x, y)的随机区域,传感器间冗余数据为:η=ζSeρ。直接传输这些未经处理、存在冗余的数据,将会造成网络带宽、节点能源的巨大浪费,导致节点迅速死亡,缩短整个网路的生命周期。 无线传感器网络中的大部分节点不像传统Ad hoc网络中的节点一样快速移动,因此没有必要花费很大的代价频繁地更新路由表信息。常规路由协议通常认为底层的通信信道是双向的,但是在采用无线通信的无线传感器网络环境中,由于发射功率或地理位置等因素的影响,可能存在单向信道。它给常规路由协议带来三个严重的影响:认知单向性、路由单向性和汇点不可达。

网络模拟器NS2中仿真功能的问题分析及改进

第21卷第2期 系 统 仿 真 学 报? V ol. 21 No. 2 2009年1月 Journal of System Simulation Jan., 2009 网络模拟器NS2中仿真功能的问题分析及改进 况晓辉1, 赵 刚1,2, 郭 勇1, 3 (1.北京系统工程研究所, 北京 100101; 2.清华大学计算机科学与技术系, 北京 100084; 3.国防科技大学信息系统与管理学院, 长沙 410073) 摘 要:网络仿真技术为解决大规模网络规划、应用和协议设计面临的挑战提供了新的途径。作为广泛应用的网络模拟器,NS2为建立可扩展的网络仿真环境奠定了重要基础。在描述NS2仿真功能实现的基础上,重点分析了NS2仿真功能存在的不足。针对发现的问题,提出并实现了NS2仿真功能扩展,最后验证了仿真功能扩展的正确性。 关键词:网络仿真;NS2;报文转换;功能扩展 中图分类号:TP393 文献标识码:A 文章编号:1004-731X (2009) 02-0427-05 Improvement of Emulation Function in Network Simulator KUANG Xiao-hui 1, ZHAO Gang 1,2, GUO Yong 1, 3 (1. Beijing Institute of System and Engineering, Beijing 100101, China; 2. Department of Computer Science and Technology, Tsinghua University, Beijing 100084, China; 3. Department of Information System and Management of NUDT, Changsha 410073, China) Abstract: Network emulate technology which enables real hosts and a real network to interact with a virtual network, becomes a very important way to resolve the challenge faced in network plan, application and protocol design. As a famous network simulator, NS2 proposed a foundation to construct network emulate platform. The emulation function of NS2 was described firstly. Based on analysis the problem of emulation function in NS2, the extension of NS2 emulation function was proposed and implemented. The correctness of extension was dominated in the end. Key words: network emulation; NS2; packet reform; function extension 引 言互联网的迅速发展与膨胀对网络的规划、应用和协议的 设计提出了新的挑战。在试验环境中对网络规划、新的应用和协议进行评估是应对上述挑战的有效手段之一[1-3]。当前构建复杂网络试验环境的实现技术主要包括测试床、网络模拟(network simulation )和网络仿真(network emulation )[4]等三种类型。 测试床具有逼真度高的优点,但是造价较高、规模和复杂性有限。网络模拟具有可控性强、灵活性高、代价低以及能够实现复杂网络拓扑等优点,但是对于网络流量以及实现细节支持不够,交互性不高。网络仿真综合了测试床和网络模拟的优点。在仿真环境中,网络应用运行在实际的硬件平台上,且能够与实际的环境交互,扩展性和灵活性较高,同时网络试验环境可配置、可控制、可重复,能够生成真实网络流量,从而成为当前构建网络试验环境的重要技术。当前网络仿真技术研究思路分为两种:一种思路是将仿真网络看作简单的延迟黑盒(simple delay lines ),仅关注网络出入口的设置,该思路具有硬件要求低的优点。相关研究包括:Dummynet [5],NIST net [6]等。另一种思路是通过建立虚拟网络模拟进行实时网络仿真。真实网络流量能够通过仿真 收稿日期:2007-06-10 修回日期:2008-02-09 作者简介:况晓辉(1975-), 男, 湖南新化, 博士, 副研究员, 研究方向为计算机网络, 信息安全;赵刚(1969-), 男, 河北保定, 研究员, 研究方向为计算机网络, 信息安全; 郭勇(1966-), 男, 湖南常德, 研究员, 研究方向为计算机网络, 计算机软件。 器,虚拟网络能够根据交互生成网络流量。相关的研究包括VINT/nse [7],ModelNet [8],NetBed [9], Virtual Routers [10],PlanetLab [11]以及IP-TNE [1]等。 随着网络复杂性的提高,基于延迟黑盒的网络仿真环境难以满足应用需求。因此,建立在网络模拟基础上的仿真环境成为网络仿真技术的研究重点。在网络模拟器实现中,NS2 [12]能够支持有线和无线、本地或卫星、局域网和广域网等各种网络类型以及网络分层模型,具有强大的二次开发能力以及可扩展、易配置和编程的事件驱动特性,为构建网络仿真平台提供了良好基础。然而,NS2已有的仿真功能在IP 地址支持、路由机制、协议支持等方面存在不足,难以满足网络技术研究和协议设计开发的实际需求。 本文在深入分析NS2仿真功能的基础上,重点分析了已有功能存在的不足,描述并实现了NS2仿真功能扩展,解决了IP 地址支持、动态路由以及拓扑验证的问题。最后,通过试验验证了仿真功能的正确性和有效性。 1 NS2网络仿真功能分析 事件驱动的网络模拟器NS2是DARPA 支持的VINT 项目中的核心部分,由Berkeley, USC/ISI 、 LBL 和Xerox PARC 等大学和实验室合作开发,其目的是构造虚拟的网络平台和模拟工具,以支持网络协议的研究、设计和开发。 1.1 仿真功能 NS2仿真模块实现了模拟器与实际网络的连接功能,

NS2实验报告

NS2实验报告 一、实验平台和环境 本实验是在Windows XP操作系统平台下安装了Cygwin软件以模仿Linux 下的编程环境,然后在Cygwin模仿的环境中安装了ns-allinone-2.34软件包,该软件包包含nam、otcl、tcl、tclcl、tk以及xgraph等软件包和辅助分析工具。 二、实验步骤 2.1 安装与配置 1.安装cygwin a)在cygwin官方网站下载setup.exe。 b)运行setup.exe,使用默认配置选择unix安装。 c)在选择安装组件时确认安装以下内容:XFree86-base, XFree86-bin, XFree86-prog,XFree86-lib, XFree86-etc,make,patch,perl,gcc,gcc-g++, gawk,gnuplot,tar 和gzip。 Diffstat,diffutils,libXmu,libXmu-devel,libXmu6,libXmuu1, X-startup-scripts xorg-x11-base xorg-x11-bin xorg-x11-devel xorg-x11-bin-dlls xorg-x11-bin-lndir xorg-x11-etc xorg-x11-fenc xorg-x11-fnts xorg-x11-libs-data xorg-x11-xwin 2.安装NS2 a)在NS2官方网站下载ns2-allinone-2.34.tar.gz安装包。 b)将ns2-allinone-2.34.tar.gz拷贝放入cygwin用户目录下。 c)运行cygwin,命令行下输入tar xvfz ns2-allinone-2.34.tar.gz。 d)进入ns2-allinone-2.34目录,执行./install开始安装。

基于NS2的UDP仿真报告

基于NS2的UDP协议仿真 1. UDP协议的特点 UDP 是OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。UDP协议称为不可靠的传输协议。 UDP报头由4个域组成,其中每个域各占用2个字节,具体如表1所示: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1819 20 21 22 23 24 25 26 27 28 29 30 31 源端口目的端口 段长校验和 表1 UDP报头结构 UDP协议使用端口号为不同的应用保留其各自的数据传输通道。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。 2. NS2软件的安装与配置 2.1 ubuntu实验环境 Ubuntu是Linux的一个版本,是一款免费的操作系统,Ubuntu 项目完全遵从开源软件开发的原则;用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。NS2在linux环境下运行比在windows下更稳定,出现更少的错误,还可以更改linux内核,使得仿真效果更好。 2.2 软件安装 NS2可以再Linux平台下运行,因此一般需要安装Linux操作系统。也可以采用Windows+虚拟机(VMware,Virtual PC)+NS组合的方式。 若要在Ubuntu上运行NS2,下面的软件是在安装和使用NS2中需要用到的,必须先行安装。

NS2仿真实例汇总

NS-2仿真模拟实例汇总 (以方路平的书为主) 1.例4.5a:DropTail队列管理的NS_2模拟实例(P161) set ns [new Simulator] set nf [open out.nam w] $ns namtrace-all $nf set tf [open out.tr w] set windowVsTime [open win w] set param [open parameters w] $ns trace-all $tf proc finish {} { global ns nf tf $ns flush-trace close $nf close $tf exec nam out.nam & exit 0 } set n2 [$ns node] set n3 [$ns node] $ns duplex-link $n2 $n3 0.7Mb 20ms DropTail set NumbSrc 3 set Duration 50 for {set j 1} {$j <=$NumbSrc} {incr j} { set S($j) [$ns node] } set rng [new RNG] $rng seed 2 set RVstart [new RandomVariable/Uniform] $RVstart set min_ 0 $RVstart set max_ 7 $RVstart use-rng $rng for {set i 1} {$i <=$NumbSrc} {incr i} { set startT($i) [expr [$RVstart value]]

NS2仿真实验报告

Ns2简单有线网络仿真实验报告 一、实验概述 1、在windows系统下安装Centos虚拟机 2、在Centos系统下安装NS2仿真工具包 3、Nam方式示例 二、实验内容 1)NS2仿真工具包安装说明 1.在Centos系统下设置root账户 2.解压NS2文件 3.安装ns-allinone-2.35 设置环境变量 4.验证NS2工具包安装情况 2)Nam方式 Otcl脚本 # 产生一个仿真的对象 set ns [new Simulator] #针对不同的资料流定义不同的颜色,这是要给NAM用的 $ns color 1 Green $ns color 2 Red #开启一个NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #开启一个trace file,用来记录封包传送的过程 set nd [open out.tr w] $ns trace-all $nd #定义一个结束的程序 proc finish {} { global ns nf nd $ns flush-trace close $nf close $nd #以背景执行的方式去执行NAM exec nam out.nam & exit 0 } #产生6个网络节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node]

set n4 [$ns node] set n5 [$ns node] #把节点连接起来 $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail $ns duplex-link $n3 $n4 1.7Mb 30ms DropTail $ns duplex-link $n3 $n5 1.5Mb 30ms DropTail #设定ns2到n3之间的Queue Size为10个封包大小$ns queue-limit $n2 $n3 10 $ns queue-limit $n3 $n4 5 #$ns queue-limit $n3 $n5 10 #设定节点的位置,这是要给NAM用的 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right $ns duplex-link-op $n3 $n4 orient right-up $ns duplex-link-op $n3 $n5 orient right-down #观测n2到n3之间queue的变化,这是要给NAM用的$ns duplex-link-op $n2 $n3 queuePos 0.5 #建立一条n0-n5TCP的联机 set tcp [new Agent/TCP] $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n5 $sink $ns connect $tcp $sink #在NAM中,TCP的联机会以Green表示 $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 $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null #在NAM中,UDP的联机会以红色表示 $udp set fid_ 2 #在UDP联机之上建立CBR应用程序 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp

(完整word版)NS2网络仿真实验

移动自组织网络 实 验 报 告 NS2网络仿真实验 何云瑞 13120073 电信研1301班

1.实验目的和要求 1.学会NS2的安装过程,并熟悉NS2的环境; 2.观察并解释NAM动画,分析Trace文档。 3.学会用awk和gnuplot分析吞吐量、封包延迟、抖动率和封包丢失率。2.实验环境 先在PC上安装VMware虚拟机,再在虚拟机上安装Ubuntu系统,最后再Ubuntu系统上安装NS2软件,本次实验采用的是NS-2.34版本。 3.基本概念 3.1 NS2简介 NS2是一款开放源代码的网络模拟软件,最初由UC Berkeley开发。它是一种面向对象的网络模拟器,它本质上是一个离散事件模拟器,其本身有一个模拟时钟,所有的模拟都由离散事件驱动。其采用了分裂对象模型的开发机制,采用C++和OTcl两种语言进行开发。它们之间采用TclCL进行自动连接和映射。考虑效率和操作便利等因素,NS2将数据通道和控制通道的实现相分离。为了减少封包和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++编写,这些对象通过TclCL映射对OTcl解释器可见。 目前,NS2可以用于模拟各种不同的通信网络,它功能强大,模块丰富,已经实现的主要模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、CBR、Web和VBR;路由队列管理机制,如Droptail、RED和CBQ;路由算法;以及无线网络WLAN、移动IP和卫星通信网络等模块。也为进行局域网的模拟实现了多播协议以及一些MAC子层协议。 3.2 NS2的功能模块 NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等,下面对各个模块进行简单的介绍: (1)事件调度器:目前NS2提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。

网络性能的仿真+ns2

实验一:网络性能的仿真 一、实验要求 1)对64个计算机结点,每个计算机采用若干100Mbps集线器(HUB)的 方式连接到一台服务器上。采用NS2仿真软件,对于以上的具体环节进 行网络性能的仿真,给出网络的吞吐量,丢包率,总时延,抖动率等参 数的仿真曲线,并对结果进行分析。 2)将以上环境中的集线器(HUB)换成交换机(switch),给出网络的信道 利用率,吞吐量,传输时延,排队延迟等参数的仿真曲线,并对结果进 行分析。 二、实验目的 通过本次实验的完成,首先能够学会在Ubuntu环境下安装搭建NS2运行的环境。其次对于tcl语言有了更加全面的了解。通过对具体环境的网络环境进行仿真,可以加深对网络的信道利用率,吞吐量,传输时延,排队延迟等参数的计算及了解。最后通过仿真环境中集线器(HUB)和交换机(Switch)之间的仿真的区别,加深对HUB和交换机之间差别的理解。 三、实验原理 1、NS2( Network Simulator version 2),NS(Network Simulator)是一种针对网络技术的源代码公开的,免费的软件模拟平台。计算机网络是一个相当复杂的系统,包含了各种通信协议和网络技术,而网络仿真是网路通信技术研究的重要手段之一,网络仿真是指采用计算机软件对网络协议,网络拓扑,网络性能进行模拟分析的一种研究手段。NS2是一种面向对象的网络仿真器,本质是一个离散事件模拟器,它可以仿真各种不同的IP网,实现一些网络传输协议,比如TCP和UDP,还包括业务源流量产生器,比如FTP,CBR等。NS2使用C++和Otcl作为开发语言。NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。NS是用Otcl和C++编写的。由于效率的原因,NS将数据通道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++写出并编译的,这些对象通过映射对Otcl解释器可见。当仿真完成以后,NS将会产生一个或多个基于文本的跟踪文件。只要在Tcl脚本中加入一些简单的语句,这些文件中就

浅析Opnet,Ns2,Matlab网络仿真工具

浅析Opnet,Ns2,Matlab网络仿真工具 【摘要】网络仿真可以有效提高网络规划和设计的可靠性和准确性,明显地降低网络投资风险,减少不必要的投资浪费。本文就常见的三种网络仿真工具(OPNET、NS2及MATLAB),从它们的基本情况及特点进行了分析。 【关键字】网络仿真;OPNET;NS2;MATLAB 引言 随着网络结构和规模越来越复杂化以及网络的应用越来越多样化,单纯地依靠经验进行网络的规划和设计、网络设备的研发以及网络协议的开发,已经不能适应网络的发展,因而急需一种科学的手段来反映和预测网络的性能,网络仿真技术应运而生。网络仿真可以有效提高网络规划和设计的可靠性和准确性,明显地降低网络投资风险,减少不必要的投资浪费。各种网络仿真工具在此背景下应运而生。本文就常见的三种网络仿真工具(OPNET、NS2及MATLAB),从它们的基本情况及特点进行了分析。 基本情况及特点分析 1.OPNET OPNET公司最初只有一种产品OPNET Modeler,到目前已经拥有Modeler、ITGuru、SPGuru、WDMGuru、ODK等一系列产品。 对于网络的设计和管理,一般分为3个阶段:第1阶段为设计阶段,包括网络拓扑结构的设计,协议的设计和配置以及网络中设备的设计和选择;第2阶段为发布阶段,设计出的网络能够具有一定性能,如吞吐率、响应时间等等;第3阶段为实际运营中的故障诊断、排错和升级优化。而OPNET公司的整个产品线正好能面向网络研发的不同阶段,即可以作网络的设计,也可以作为发布网络性能的依据,还可以作为已投入运营的网络的优化和故障诊断工具。OPNET公司也是当前业界智能化网络管理分析解决方案的主要提供商。 OPNET的主要特点: 层次化的网络模型。使用无限嵌套的子网来建立复杂的网络拓扑结构。 简单明了的建模方法。Modeler建模过程分为3个层次:过程(process)层次、节点(Node)层次以及网络(Network)层次。在过程层次模拟单个对象的行为,在节点层次中将其互连成设备,在网络层次中将这些设备互连组成网络。几个不同的网络场景组成“项目”,用以比较不同的设计方案。这也是Modeler建模的重要机制,这种机制有利于项目的管理和分工。

ns2使用及实验报告级计算机网络实验

高级计算机网络实验 吴德云 SC11011042- SC11011042-吴德云一、实验目的 学生能够初步掌握NS2网络模拟平台,并且能够利用网络模拟平台进行简单的实验,加深对TCP拥塞控制与流量控制机制的理解,并且能够为实验需要简单修改NS2的核心模块。 二、实验要求 1、了解NS2基本原理。 2、熟悉Tcl和Otcl脚本语言。 3、熟悉分裂对象模型和Tcl。 4、熟悉NS的基本模块。 5、按照《NS2安装与使用.doc》的操作流程搭好实验必需的环境。 6、本次实验室的核心是,按照预设改变修改NS2核心模块(即C++代码),并用利用NS2模拟出修改后的效果。 三、实验过程 1、安装NS2 点击https://www.wendangku.net/doc/204882779.html,/sourceforge/nsnam/ns-allinone-2.33.tar.gz下载。下载的版本是有问题的,源文件有两个bug。 1、选择解压缩位置 本演示实验在当前用户下新建PROGRAM目录:

图2:解压缩位置 2、解压缩 鼠标右击软件包选择解压缩到此处: 图3:解压缩 3、在终端安装 (1)打开一个终端(位置:应用程序>系统工具>终端): 在终端里输入sudo-i,回车;按提示输入密码,回车,进入root权限操作:

图4:进入root权限 (2)下载并安装下一步安装ns-2.33时所必需要的系统包: 首先,在终端里输入apt-get install build-essential进行下载、安装,这一步是为了gcc and some essential的安装; 接着,在终端里输入apt-get install tcl8.4tcl8.4-dev tk8.4tk8.4-dev进行下载、安装,这一步是为了tcl and tk的安装;(注意4个名字中间用空格隔开)最后,在终端里输入apt-get install libxmu-dev进行下载、安装,这一步是为了nam的安装。 以上三步示意图如下:

基于NS2的TCP拥塞控制仿真

基于NS2的TCP建模与仿真 摘要:TCP/IP协议是计算机之间常用的组网形式,是互联网事实上的工业标准,由IETF负责制定,其具体内容通过RFC文档公开发布。本文利用NS2网络仿真器对TCP/IP中的拥塞控制与拥塞窗口,快速重传与快速恢复算法进行了仿真,使对协议中的几种机制和算法有了形象的理解。 关键字:TCP/IP协议,NS2仿真,拥塞控制,快速重传,快速恢复 一、引言 TCP/IP协议是计算机之间常用的组网形式,是互联网事实上的工业标准,由IETF负责制定,其具体内容通过RFC文档公开发布。例如,TCP协议在RFC793中正式定义;RFC1122对如何检测错误和不一致性以及解决方法进行了说明;RFC1323给出了对TCP的一些扩展功能;RFC2518中重点阐述了TCP的拥塞控制机制描述了更新后避免过度拥塞的算法;RFC3168描述了对显示拥塞的报告等。据统计,当前在所有因特网的数据包中,大约有95%包的传送使用了TCP 协议,因此针对TCP协议相关机制的研究很有实际意义。 在TCP协议的研究中,仿真是一种有效又经济的研究方法,而且可以给人以更加形象的认识。目前的网络仿真工具主要包括两类:一是基于大型网络开发的网络仿真工具,如OPNET、GloMoSim等;二是基于小型网络开发的网络仿真工具,如NS2、COMNET III等。大多数网络仿真工具的价格昂贵,而本文采用的NS2是一种应用广泛、影响力较大和源代码公开的免费网络模拟软件。 二、网络仿真器NS2 NS是Network Simulator的英文缩写,又称网络仿真器。它是一款开放源代码的网络模拟软件,最初由加州大学伯克利分校(UC Berkeley)开发。NS-2支持Windows、Linux、Unix、Mac以及其他支持POSIX标准的操作系统,它主要支持的操作系统是Linux系统,目前几乎支持所有主流的Linux发行版本,本文使用的是Windows+Cygwin平台。 NS2是一个可扩展、易配置和可编程的事件驱动网络仿真引擎。底层的仿真

NS2仿真实验分析报告

NS2仿真实验分析报告 一引言 1 NS2简介 NS2是一款开放源代码的网络模拟软件,最初由UC Berkeley开发。它是一种向象的网络模拟器,它本质上是一个离散事件模拟器,其本身有一个模拟时钟,所有的模拟都由离散事件驱动。其采用了分裂对象模型的开发机制,采用C++和OTcl两种语言进行开发。它们之间采用Tclcl 进行自动连接和映射。考虑效率和操作便利等因素,NS2将数据通道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++编写,这些对象通过Tclcl映射对OTcl解释器可见。 目前NS2可以用于模拟各种不同的通信网络,它功能强大,模块丰富,已经实现的主要模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、CBR、We b和VBR;路由队列管理机制,如DropTail、RED和CBQ;路由算法;以及无线网络WLAN、移动IP和卫星通信网络等模块,也为进行局域网的模拟实现了多播协议以及一些MAC子层协议。 2 基本概念 (1)RED:随机早期探测(Random Early Detect,RED)。RED属于主动队列管(Active Queue Management, AQW),是目前常见的TCP上防止拥塞的手段。它通过以一定概率丢失或标记报文来通知端系统网络的拥塞情况。RED使用平均队列长度度量网络的拥塞程度,然后以线性方式将拥塞信息反馈给端系统。RED使用最小阈值,最大阈值和最大概率等几个参数。 RED的基本思想是通过监控路由器输出端口队列的平均长度来探测拥塞,一旦发现拥塞逼近,就随机地选择连接来通知拥塞,使它们在队列溢出导致丢包之前减少拥塞窗口,降低发送数据速度,缓解网络拥塞。RED配置在路由器监视网络流量以便避免拥塞,当拥塞即将发生时,它随机丢弃进来的分组,而不是等到队列缓冲区满是才开始丢弃所有进来的分组,这样可以最少化全局同步的发生。当拥塞发生时,RED丢弃每个连接分组的概率与该连接占用的带宽成比例,它监视每个输出队列的平均队列长度,随机选择分组丢弃。 (2)丢包率:是一个比率,表示在单位时间内未收到的数据分组数与发送的数据分组数的比率,由于信号衰减、网络质量等诸多因素的影响,可能产生数据分组的丢失。 (3)端到端时延:是由各种因素引起的,包括打包和解包时延,以及网络传送时延,本文中主要讨论的是网络传输时延。

网络仿真软件NS2中队列调度算法的扩展

第 18 卷第 2 期 2006 年 2 月
系 统 仿 真 学 报? Journal of System Simulation
Vol. 18 No. 2 Feb., 2006
网络仿真软件 NS2 中队列调度算法的扩展
高文宇 1, 2,王建新 1,陈松乔 1
(1.中南大学信息科学与工程学院, 湖南长沙 410083; 2.广东商学院信息学院, 广东广州 510320)
摘 要:结合一个新的队列调度算法,深入全面地探讨了如何对网络仿真软件 NS2(Network Simulator)进行扩展,特别是如何在 NS2 中实现复杂的队列调度算法。对在 NS2 中实现新算法的 基本原理和过程,以及一些关键细节给出了较为详细的描述,如通过分组来携带用于调度的流状态 信息,以及如何使用这些信息进行队列调度,增加对分组队列的基本操作等。最后还给出了新算法 的仿真实验结果,实验结果表明新算法在公平性方面的性能良好。通过扩展 NS2 来验证新的网络 协议和算法,大大提高了效率、降低了成本,并更具灵活性。 关键词:网络仿真;NS2;队列调度;虚拟时钟 中图分类号:TP393 文献标识码:A 文章编号:1004-731X (2006) 02-0521-05
Extension of Queue Scheduling Algorithm in NS2
GAO Wen-yu1,2,WANG Jian-xin1,CHEN Song-qiao1
(1.School of Information Science and Engineering, Central South University, Changsha 410083, China; https://www.wendangku.net/doc/204882779.html,rmation Science School, Guangdong University of Business Studies, Guangzhou 510320, China)
Abstract: It was discussed how to extend the network simulator—NS2, especially how to extend queue scheduling algorithm in NS2, and the discussion was illustrated by implementation of a queue scheduling algorithm. The basic idea and key details of NS2 extension were given a detailed description, such as how to use packet header to carry scheduling information, how to schedule packet according to this information, and how to extend basic operation of packet queue. Moreover, simulation results were given, which showed that this new algorithm achieved good performance on fairness. Verifying new network protocol and algorithm through extension of NS2 can improve efficiency, reduce cost, and be more flexible. Key words: network simulation; NS2; queue scheduling; virtual clock

言1
由于 Internet 的复杂性和高度动态性,因此进行网络仿
对于 NS2 的一般使用和简单扩展,已有一些相关的文 献[3-7],但是大多数文献是介绍 NS2 的基本原理和使用, 或针对 NS2 中已实现的算法或协议进行较小的改进,这样 难以全面、深入地阐述对 NS2 的扩展。在本文中,结合我 们最近的研究成果, 以我们设计的一个核心无状态的虚拟时 钟队列调度算法[8]为例来阐述在 NS2 中如何进行扩展。 本文第 1 部分简单介绍了 NS2 的基本结构以及进行扩 展的基本知识; 2 部分介绍了我们设计的核心无状态的虚 第 拟时钟调度算法的基本原理以及在 NS2 中的实现细节; 3 第 部分是算法的仿真实验结果;第 4 部分是结束语。
而且随着 Internet 的不断发展, 真是一项非常复杂的工作[1]。 也不断地提出新问题,而对于新问题的解决方案,如提出的 新协议、新算法等,除了在理论上的分析和证明之外,大多 还需要进行实验验证,然后才能考虑在实际网络中的应用。 NS2(Network Simulator,version 2)[2]就是一个非常优秀的 IP 网络仿真软件。 NS2 是由美国加州大学的 LNBL 网络研究组于 1989 年开发 的一个开放源代码网络仿真软件,并一直处于不断的完善之中, 其开放性和灵活的可扩展性受到了广大网络研究者的好评。 对于网络研究者来说,可以利用 NS2 中已经实现的协 议和算法,通过编写一些脚本程序就能实现网络的仿真,为 网络设计和网络性能评价提供参考。另一方面,对于新设计 的网络协议和算法,则需编写新的 C++和 Otcl(Object tcl) 实现代码,并将它们编译连接到现有的 NS2 内核中去,从 而使 NS2 支持新的协议或算法,这就是对 NS2 进行扩展。
收稿日期:2004-11-06 修回日期:2005-06-15 基金项目:国家自然科学基金(90304010) 作者简介:高文宇(1972-), 男, 湖南永州人, 博士, 教授, 研究方向为计 算机网络;王建新(1969-), 男, 湖南邵东人, 教授, 博士, 博导, 研究方 向为计算机网络优化算法、 虚拟实验环境; 陈松乔(1940-), 男, 教授, 博 导, 研究方向为软件工程、计算机网络。
1 NS2 的基本结构
NS2 是一个面向对象 IP 网络仿真软件,其核心模块使用 C++和 Otcl(Object tcl)开发的。 NS2 可以在多种平台上运行, 如 Linux,Unix,Solaris、Windows 等。从 NS2 的官方网站[2]可以 下载 NS2 软件包, 然后就可以在不同的平台上安装。 安装的过 程主要就是对软件包中的源代码在不同的系统平台上进行编 译和连接,形成可执行程序。NS2 在类 Unix 平台上的安装较 为容易,因为 NS2 的安装需要 C++编译器,而在类 Unix 系统 中,C++编译器都是系统自带的。在 Windows 平台上,由于没 有集成 C++编译器,因此安装要麻烦一些。目前在 Windows 平台上的安装有两种选择。 一是使用 VC++作为 NS2 的编译 器。另一种选择是在 Windows 平台上安装一个 Linux 的仿
? 521 ?

相关文档 最新文档