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后
转载文章请标识和保留出处和署名,谢谢ヾ(•ω•`。)