DDR爱好者之家 Design By 杰米
1. Tcl脚本文件circle.tcl代码注释
#设定模拟需要的一些属性 set val(chan) Channel/WirelessChannel set val(prop) Propagation/TwoRayGround set val(netif) Phy/WirelessPhy set val(mac) Mac/802_11 #将协议设置为 DSR 后,同时将队列设置为 CMUPriQueue set val(ifq) CMUPriQueue set val(ll) LL set val(ant) Antenna/OmniAntenna set val(ifqlen) 50 #将节点个数预设为 0,待用户输入。此项要求用户一定输入,否则不执行模拟。 set val(nn) 0 set val(rp) DSR #场景大小默认值为 1000*1000 set val(x) 1000 set val(y) 1000 #圆的半径缺省值为 400 set val(r) 400 #该过程用于在屏幕上打印在终端输入 ns circle.tcl 后添加参数的格式 proc usage {} { global argv0 puts "\nusage: $argv0 \[-nn nodes\] \[-r r\] \[-x x\] \[-y y\]\n" puts "note: \[-nn nodes\] is essential, and the others are optional.\n" } #该过程用来根据用户的输入更改一些预设参数的值 proc getval {argc argv} { global val lappend vallist nn r x y z #argc 为参数的个数,argv 为整条参数构成的字符串 for {set i 0} {$i < $argc} {incr i} { #变量 arg 为 argv 的第 i 部分,以空格为分界 set arg [lindex $argv $i] #略过无字符“-”的字符串,一般是用户键入的数字 #string range $arg m n 表示取字符串$arg 的第 m 个字符到第 n 个字符 if {[string range $arg 0 0] != "-"} continue set name [string range $arg 1 end] #更改预设变量(节点个数,半径,场景大小) set val($name) [lindex $argv [expr $i+1]] } } #调用 getval 过程 getval $argc $argv #用户没有输入参数,只键入了 ns circle.Tcl,则节点个数认为0 if { $val(nn) == 0 } { #打印用法 usage exit } #创建模拟实例 set ns [new Simulator] #设置记录文件 set tracefd [open circle.tr w] $ns trace-all $tracefd set namtracefd [open circle.nam w] $ns namtrace-all-wireless $namtracefd $val(x) $val(y) #关闭trace文件并调用nam程序演示动画 proc finish { } { global ns tracefd namtracefd $ns flush-trace close $tracefd close $namtracefd exec nam circle.nam & exit 0 } set topo [new Topography] $topo load_flatgrid $val(x) $val(y) create-god $val(nn) #节点配置。由于版本原因,addressType设为def $ns node-config -addressType def-adhocRouting $val(rp) -llType $val(ll) -macType $val(mac) -ifqType $val(ifq) -ifqLen $val(ifqlen) -antType $val(ant) -propType $val(prop) -phyType $val(netif) -channelType $val(chan) -topoInstance $topo -agenttrace ON -routertrace ON -mactrace OFF -movementtrace OFF #初始化节点 for {set i 0} {$i < $val(nn)} {incr i} { #创建节点 set node_($i) [$ns node] $node_($i) random-motion 0 #计算节点位置并设置,使用三角函数进行计算 $node_($i) set X_ [expr $val(r) * cos($i * 2 * 3.14159 / $val(nn))] $node_($i) set Y_ [expr $val(r) * sin($i * 2 * 3.14159 / $val(nn))] $node_($i) set Z_ 0 #设置在nam中移动节点显示大小,否则,nam中无法显示节点 $ns initial_node_pos $node_($i) [expr $val(x) / 10] } #在node_(0)节点上建立一个UDP代理 set tcp [new Agent/UDP] $ns attach-agent $node_(0) $tcp #在node(0)节点沿直径对面的节点上建立一个数据接收器 set null [new Agent/Null] $ns attach-agent $node_([expr $val(nn)/2]) $null #新建CBR流量发生器,分组大小500B,间隔0.05s set cbr [new Application/Traffic/CBR] $cbr set packetSize_ 5000 $cbr set interval_ 0.05 #连接UDP和Null $cbr attach-agent $tcp $ns connect $tcp $null #在0.1s时发送数据,3.0s时停止发送数据,5.0s时调用finish过程 $ns at 0.1 "$cbr start" $ns at 3.0 "$cbr stop" $ns at 5.0 "finish" $ns run
2. gawk脚本代码analysis.awk注释
BEGIN { #设置初始变量 num_D = 0; #丢包数 num_s = 0; #发送包数 num_r = 0 ; #收到包数 rate_drop = 0; #丢包率 sum_delay = 0; #总延迟时间 average_delay = 0; #平均延迟时间 } { #读取trace文件记录 event = $1; #第一列为包的操作(s为发送包,r为接收包) time = $2; #第二列为操作时间 node = $3; #第三列为节点号 trace_type = $4; #第四列为操作层 flag = $5; #第五列为标志位 uid = $6; #第六列为节点标识 pkt_type = $7; #第七列为包类型 pkt_size = $8; #第八列为包的大小 #操作 if (event == "s" && trace_type == "AGT" && pkt_type == "cbr") { send_time[uid] = time; #创建数组记录发包时间 num_s++; #记录发送包总数 } if (event == "r" && trace_type == "AGT" && pkt_type =="cbr") { delay[uid] = time - send_time[uid]; #创建数组记录延迟时间 num_r++; #记录收到包总数 } if (event == "D" && pkt_type == "cbr") delay[uid] = -1; #-1表示包丢失,该包不会记入延迟时间 } END { #计算丢包数和丢包率 num_D =num_s-num_r; #丢包总数 rate_drop = num_D / num_s * 100.0; #计算丢包率 #计算延迟 for ( i = 0; i < num_s; i++) {if (delay[i] >= 0) sum_delay += delay[i]; }#总延迟时间 average_delay = sum_delay / num_r; #平均延迟时间 #打印结果 printf("number of packets droped: %d \n",num_D); printf("number of packets sent: %d \n",num_s); printf("drop rate: %.3f%% \n",rate_drop); printf("average delay time: %.9f \n",average_delay); }
3. 实验结果
(1)
将网络节点数设置为12,运行结果如下,生成了两个记录文件nam文件和trace文件。
此时的trace文件大小为91.8kb,nam文件大小为76.0kb。
接下来通过gawk工具对生成的trace文件进行分析。如果没有安装gawk工具,使用命令sudo apt-get install gawk进行安装。
结果得到网络模拟过程的丢包数、发包数、丢包率和平均延时。
(2)重新修改节点数为8,运行结果如下,但此时文件夹中并没有新增额外的circle.nam和circle.tr文件。
查看两文件的属性,发现大小发生了改变,说明应该是新建的网络模拟环境的记录文件发生了覆盖。
同样适用gawk对生成的trace文件进行分析。发现随着网络节点数的增加,导致丢包率和平均延时都增加了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年12月24日
2024年12月24日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]