simple.tcl代码解析+NS2调试运行simple.tcl脚本

1. Simple.tcl代码注释

  为了方便查看数据传输过程,我将原本的$ns color 2 white 改为了$ns color 2 yellow,使其与白色背景有所区别。

set ns [new Simulator]	#set设置变量,new Simulator创建对象,[]内为表达式,赋给ns变量

$ns color 0 blue	# $表示取变量值,此处设置颜色
$ns color 1 red
$ns color 2 white

set n0 [$ns node]	#创建新节点,赋值给n0变量
set n1 [$ns node]	#创建新节点,赋值给n1变量
set n2 [$ns node]	#创建新节点,赋值给n2变量
set n3 [$ns node]	#创建新节点,赋值给n3变量

set f [open out.tr w]	#以写的权限打开“跟踪文件”out.tr并把文件流赋给变量f
$ns trace-all $f		#将所有ns的跟踪数据都写到out.tr
set nf [open out.nam w]	#以写的权限打开“动画数据文件”out.nam并把文件流赋给变量nf
$ns namtrace-all $nf		#将所有的动画仿真数据写入out.nam

$ns duplex-link $n0 $n2 5Mb 2ms DropTail	#双向链路连接duplex-link,n0向n2发送数据的速率5MB/s,传输延迟2ms,队列管理机制:丢尾
$ns duplex-link $n1 $n2 5Mb 2ms DropTail	#双向链路连接duplex-link,n1向n2发送数据的速率5MB/s,传输延迟2ms,队列管理机制:丢尾
$ns duplex-link $n2 $n3 1.5Mb 10ms DropTail	#双向链路连接duplex-link,n2向n3发送数据的速率1.5MB/s,传输延迟10ms,队列管理机制:丢尾

$ns duplex-link-op $n0 $n2 orient right-up	#全双工链路操作,0到2的报文传输方向是右上↗
$ns duplex-link-op $n1 $n2 orient right-down	#全双工链路操作,1到2的报文传输方向是右下↘
$ns duplex-link-op $n2 $n3 orient right	#全双工链路操作,2到3的报文传输方向是右→

$ns duplex-link-op $n2 $n3 queuePos 0.5	#队列的位置0.5*π(N*π),数据包从上往下进入队列

set udp0 [new Agent/UDP]	#创建UDP代理上层的业务对象udp0
$ns attach-agent $n0 $udp0	#将节点0和udp0代理相连
set cbr0 [new Application/Traffic/CBR]	#传输数据流的应用程序对象cbr0
$cbr0 attach-agent $udp0	#将cbr0数据流程序与udp0代理相连

set udp1 [new Agent/UDP]	#创建UDP代理上层的业务对象udp1
$ns attach-agent $n3 $udp1	#将节点3和udp1代理相连
$udp1 set class_ 1	#udp1代理分为第一类,数据颜色为蓝色
set cbr1 [new Application/Traffic/CBR]	#传输数据流的应用程序对象cbr1
$cbr1 attach-agent $udp1	#将cbr1数据流程序与udp1代理相连

set null0 [new Agent/Null]	#创建一个Null0代理
$ns attach-agent $n3 $null0	#将节点3与Null0代理相连

set null1 [new Agent/Null]	#创建一个Null代理
$ns attach-agent $n1 $null1	#将节点1与Null1代理相连

$ns connect $udp0 $null0	#将udp0代理与Null0代理连接,由udp0向Null0发送
$ns connect $udp1 $null1	#将udp1代理与Null1代理连接,由udp1向Null1发送

$ns at 1.0 "$cbr0 start"	#在离散的时间启动离散的事件。在1.0min启动cbr0程序发送cbr流
$ns at 1.1 "$cbr1 start"	#在离散的时间启动离散的事件。在1.1min启动cbr1程序发送cbr流

set tcp [new Agent/TCP]	#设置变量,创建TCP代理上层的业务对象
$tcp set class_ 2	#$tcp代理分为第二类,数据颜色为红色。class_是一个在agent类中定义的整型变量。放在包头中的,用处大概就是分类。分类之后用于着色。而且,对于agent的所有派生类如tcp、udp等等都可以用set class_的语句来分类。
set sink [new Agent/TCPSink]	#创建sink接收器TCP代理
$ns attach-agent $n0 $tcp	#将代理$n0和$tcp相连
$ns attach-agent $n3 $sink	#将代理$n3和$sink相连
$ns connect $tcp $sink	#连接tcp代理和sink接收器,由tcp向sink发送
set ftp [new Application/FTP]	#创建ftp应用程序对象
$ftp attach-agent $tcp	#ftp应用程序和tcp代理相连
$ns at 1.2 "$ftp start"	#在1.2min启动ftp程序发送数据包

$ns at 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"	#在1.35min断开节点n0与tcp代理相连,同时断开节点n3与sink接收器相连

puts [$cbr0 set packetSize_]	#在终端输出cbr0程序对象发送的数据包大小
puts [$cbr0 set interval_]	#在终端输出cbr0发送数据包时间间隔

$ns at 3.0 "finish"	#仿真在3min完成

proc finish {} {	#进程完成,形参放在第一个{},形参用空格隔开
	global ns f nf	#定义了3个全局变量ns,f,nf
	$ns flush-trace	#清空内存缓冲区,将数据导入到out.文件
	close $f	#关闭文件
	close $nf	#关闭文件

	puts "running nam..."	#输出
	exec nam out.nam &	#执行动画,将数据从out.nam取出来,&是运行动画文件的固定格式
	exit 0
}

$ns run	#开始运行程序

2. 代码分析结果

3. NS2调试运行simple.tcl脚本

  输入命令ns simple.tcl,在终端输出了cbr0程序对象发送的数据包大小210和时间间隔0.0037499999999999999。

1.0min时

1.1min时

1.2min后

1.35min后


posted @ 2020-07-25 22:07  Sno_W_olF  阅读(609)  评论(0编辑  收藏  举报