柯老师NS2 AdHoc网络路由协议效果分析

本文介绍了在NS-2.35模拟器中如何生成移动网络场景和数据流,使用AODV路由协议,并利用awk脚本分析包发送、接收、延迟等性能指标。
摘要由CSDN通过智能技术生成

创建拓扑

在ns-2.35/indep-utils/cmu-scen-gen/setdest目录下,用setdes工具生成网络移动场景

./setdest -n100 -p 100.0 -M 10.0 -t 100 -x 300 -y 300 >scene_100n_100p_10M_100t_300_300

-n:节点数,
-p:某节点到达目的之后停留时间,
-M:指定节点随机移动时速度最大值,单位m/s,
-t:仿真持续时间,
-x:节点移动区域的长度
-y:节点移动区域的宽度


创建数据流:

在/ns-2.35/indep-utils/cmu-scen-gen目录下,用cbrgen来生成网络负载,文件名为scene_100n_100p_10M_100t_300_300。

ns cbrgen.tcl -type cbr -nn 100 -seed 1 -mc 10 -rate 10.0>cbr_n100_m10_r10

-type:数据流的类型,cbr流或tcp流
-nn:节点数
-seed:随机数
-mc:最大连接数量
-rete:源节点每秒发送的数据分组数量


tcl文件:

proc getopt { argc argv } {
     global opt
        lappend optlist nn
        for {set i 0} {$i < $argc} { incr i } {
        set opt($i) [lindex $argv $i]
        }
}

getopt $argc $argv

# 参数设置
set opt(chan)           Channel/WirelessChannel    ;# channel type
set opt(prop)           Propagation/TwoRayGround   ;# radio-propagation model
set opt(netif)          Phy/WirelessPhy            ;# network interface type

set opt(mac)            Mac/802_11                 ;# MAC type

#若使用的DSR 所使用的接口队列类型则用CMUPriQueue
if { $opt(0) == "DSR"} {
   set opt(ifq)         CMUPriQueue
} else {
   set opt(ifq)         Queue/DropTail/PriQueue
}
set opt(ll)             LL                         ;# link layer type
set opt(ant)            Antenna/OmniAntenna        ;# antenna model
set opt(x)              500                        ;# X dimension of topography
set opt(y)              500                        ;# Y dimension of topography
set opt(ifqlen)         2000                         ;# max packet in ifq
set opt(seed)           0.0
#设置trace file
set opt(tr)             trace1.tr                   ;#trace file
set namtrace      [open test.nam w]



set opt(adhocRouting) $opt(0)
set opt(nn)            100
#设置traffic pattren文件
set opt(cp)           "cbr_n100_m10_r10"
#设置节点移动场景
set opt(sc)           "scene_100n_100p_10M_100t_300_300"
set opt(stop)           100.0                       ;# time of simulation end


Mac/802_11 set CWMin_ 31

Mac/802_11 set CWMax_ 1023

Mac/802_11 set SlotTime_ 0.000020 ;# 20us

Mac/802_11 set SIFS_ 0.000010 ;# 10us

Mac/802_11 set PreambleLength_ 144 ;# 144 bit
Mac/802_11 set PreambleDataRate_ 1.0e6 ;# 1Mbps
Mac/802_11 set PLCPHeaderLength_ 48 ;# 48 bits
Mac/802_11 set PLCPDataRate_ 1.0e6 ;# 1Mbps
Mac/802_11 set RTSThreshold_ 3000 ;# bytes Disable RTS/CTS
Mac/802_11 set ShortRetryLimit_ 7 ;# retransmissions

Mac/802_11 set LongRetryLimit_ 4 ;# retransmissions

Mac/802_11 set dataRate_ 2Mb ;# 802.11 data transmission rate
Mac/802_11 set basicRate_ 1Mb ;# 802.11 basic transmission rate


set ns_          [new Simulator] 

# set up topography object
set wtopo       [new Topography]

set tracefd       [open $opt(tr) w]
$ns_ trace-all $tracefd
$ns_ namtrace-all-wireless $namtrace $opt(x) $opt(y)
$wtopo load_flatgrid $opt(x) $opt(y)

set god_ [create-god $opt(nn)]
set chan_1_ [new $opt(chan) ]

# configure the nodes
        $ns_ node-config -adhocRouting $opt(adhocRouting) \
             -llType $opt(ll) \
             -macType $opt(mac) \
             -ifqType $opt(ifq) \
             -ifqLen $opt(ifqlen) \
             -antType $opt(ant) \
             -propType $opt(prop) \
             -phyType $opt(netif) \
             -channel  $chan_1_ \
             -topoInstance $wtopo \
             -agentTrace ON \
             -routerTrace ON \
             -macTrace OFF 

    for {set i 0} {$i <$opt(nn) } { incr i } {
        set node_($i) [$ns_ node]
        $node_($i) random-motion 0
    }
         #设置节点移动模式
         puts "Loading connection pattern..."
         #使用source去加载traffic pattern
         source $opt(cp)
         
         #设置联机传输模式
         puts "Loading scenario file..."
         #使用source去加载节点移动场景文件
         source $opt(sc)
         
# Define node initial position in nam
for {set i 0} {$i<$opt(nn)} { incr i } {
# 30 defines the node size for nam
$ns_ initial_node_pos $node_($i) 20
}

# Telling nodes when the simulation ends
for {set i 0} {$i < $opt(nn) } { incr i } {
    $ns_ at $opt(stop).1 "$node_($i) reset";
}

# ending nam and the simulation

$ns_ at $opt(stop) "$ns_ nam-end-wireless $opt(stop)"
$ns_ at $opt(stop).1 "puts \"ns exiting...\" ; $ns_ halt"
proc stop {} {
     global ns tracefd namtrace
     $ns_ flush-trace
    close $tracefd
    close $namtrace
	exec nam test.nam &
	exit 0
}

$ns_ run

实现方式:ns lab23.tcl AODV


awk分析文件:

awk文件分析路由协议发送的封包总数、接收的封包总数、封包接收率和平均端到端延迟以及第一个封包的接收时间。

#BEGIN表明这是程序开头执行的一段语句,且只执行一次。

BEGIN {

#程序初始化,设定一变量以记录目前处理的封包的最大ID号码。在awk环境下变量的使用不需要声明,直接赋值。

highest_packet_id = 0;
sends = 0;
receives = 0;
routing_packets = 0;
first_received_time = 0;
first = 0; 
}

#下面大括号里面的内容会针对要进行处理的记录(也就是我们的trace文件)的每一行都重复执行一次

{

	action = $1; #$1表示一行的第一栏,是事件的动作。每一栏默认是以空格分隔的。下同。
	time = $2; #事件发生的时间
	trace = $4; #trace文件跟踪事件的层次(指在路由层或mac层等等)
	packet_id = $6; 
	type = $7;




if ( action=="s"||action == "r" || action == "f" )

{
	if( action == "s" && trace =="AGT" && type=="cbr")
		
		{sends++;}

	if( packet_id> highest_packet_id )
		
		{highest_packet_id = packet_id;}

	if( start_time[packet_id] ==0 )
		
		{ start_time[packet_id] = time;}

	if( action == "r" && trace =="AGT" && type=="cbr")
		
	{
		if( first == 0){
			first_received_time = time;
			first=1;
		}

		receives++;
		end_time[packet_id]=time;
	}
	else
		end_time[packet_id]=-1;
	
}

}


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

	   packet_duration=end_time[packet_id]-start_time[packet_id];
	   if(  packet_duration>0 ) end_to_end_delay+= packet_duration;
	 }

	avg_end_to_end_delay=end_to_end_delay/(receives);

	pdfraction = (receives/sends)*100;

	printf("Total packet sends: %d\n",sends);
	printf("Total packet receives: %d\n",receives);
	printf("Packet delivery fraction: %s\n",pdfraction);
	printf("avg_end_to_end_delay: %f s\n",avg_end_to_end_delay);
	printf("first packet recevied time: %f s\n",first_received_time);

}

执行语句:awk -f parse.awk trace1.tr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值