使用Tcl语言配置一个简单网络环境
2021-04-08 07:27
标签:移动 nal attach 初始化 设定 ati oba run 通过 (1) 使用Tcl语言配置一个简单网络环境 标签:移动 nal attach 初始化 设定 ati oba run 通过 原文地址:https://www.cnblogs.com/Sno-W-olF/p/13379343.html1. 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
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 = 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. 实验结果
将网络节点数设置为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文件进行分析。发现随着网络节点数的增加,导致丢包率和平均延时都增加了。