时间: 2007-3-27
地点:科技宾馆
实验内容:标准ns-2.28下面无线网络的模拟
实验步骤:
1. 在ns-2.28下面建立一个文件夹wlan,把建立的pw.tcl文件放在此文件夹下面。
2. pw.tcl源文件
1. #纯无线网络模拟pw.tcl
2. # Parameter for wireless nodes
3. set val(prop) Propagation/TwoRayGround ;# radio-propagation model
4. set val(netif) Phy/WirelessPhy ;# network interface type
5. set val(mac) Mac/802_11 ;# MAC type
6. set val(ifq) Queue/DropTail/PriQueue ;# interface queue type
7. set val(ll) LL ;# link layer type
8. set val(ant) Antenna/OmniAntenna ;# antenna model
9. set val(ifqlen) 50 ;# max packet in ifq
10. set val(rp) DSDV
11.
12.
13. # 建立一个simulator实例
14. set ns [new Simulator]
15.
16. #建立topology对象
17. set topo [new Topography]
18. $topo load_flatgrid 700 700
19.
20. #设置trace
21. set f [open pw.tr w]
22. $ns trace-all $f
23. $ns eventtrace-all $f
24. set nf [open pw.nam w]
25. $ns namtrace-all-wireless $nf 700 700
26.
27. #创建god
28. create-god 2
29.
30. #无线节点配置
31.
32. $ns node-config -adhocRouting $val(rp) /
33. -llType $val(ll) /
34. -macType $val(mac) /
35. -ifqType $val(ifq) /
36. -ifqLen $val(ifqlen) /
37. -antType $val(ant) /
38. -propType $val(prop) /
39. -phyType $val(netif) /
40. -channelType Channel/WirelessChannel /
41. -topoInstance $topo /
42. -agentTrace ON /
43. -routerTrace OFF /
44. -macTrace ON /
45. -movementTrace OFF
46.
47.
48. #新建节点
49. set node(0) [$ns node]
50. set node(1) [$ns node]
51. set node(2) [$ns node]
52.
53. #节点标签与初始位置设定
54. $node(0) label "Node 0"
55. $node(0) set X_ 150.0
56. $node(0) set Y_ 150.0
57. $node(0) set Z_ 0.0
58.
59. $node(1) label "Node 1"
60. $node(1) set X_ 300.0
61. $node(1) set Y_ 300.0
62. $node(1) set Z_ 0.0
63.
64. $node(2) label "Node 2"
65. $node(2) set X_ 450.0
66. $node(2) set Y_ 450.0
67. $node(2) set Z_ 0.0
68.
69. #建立FTP业务,基于TCP来承载
70. set tcp1 [new Agent/TCP]
71. set sink1 [new Agent/TCPSink]
72. $ns attach-agent $node(0) $tcp1
73. $ns attach-agent $node(2) $sink1
74. $ns connect $tcp1 $sink1
75. set ftp1 [new Application/FTP]
76. $ftp1 attach-agent $tcp1
77. $ns at 5.0 "$ftp1 start"
78.
79. $ns at 0.0 "$node(0) reset"
80. $ns at 0.0 "$node(1) reset"
81. $ns at 0.0 "$node(2) reset"
82.
83. #节点移动性
84. $ns at 0.6 "$node(0) setdest 150.0 151.0 1.0"
85. $ns at 0.6 "$node(1) setdest 300.0 301.0 1.0"
86. $ns at 0.6 "$node(2) setdest 450.0 451.0 1.0"
87.
88. #事件安排
89. $ns at 50.0 "finish"
90. $ns at 50.1 "puts /"NS EXISTING.../"; $ns halt"
91.
92.
93. proc finish {} {
94. global ns f nf val
95. $ns flush-trace
96. close $f
97. close $nf
98. }
99. puts "Start Simulation..."
100. # run the simulation
101. $ns run运行ns pw.tcl
3.运行ns pw.tcl之后,结果如图:
4.采用nam软件对pw.nam进行观察。其过程如下:
3个节点停留位置设置为(150,151)、(300,301)、(450,451),这样节点0发往节点2的包就必须经过节点1的转发才可以到达。
5.对trace文件的分析和统计结果的绘制
首先运行
gawk ‘ $7==”cbr”||$7==”tcp”{print $0} ’ pw.tr >tcpdatas
对数据进行处理,得到(局部)数据:
s 5.000000000 _0_ AGT --- 3 tcp 40 [0 0 0 0] ------- [0:0 2:0 32 0] [0 0] 0 0
s 11.000000000 _0_ AGT --- 4 tcp 40 [0 0 0 0] ------- [0:0 2:0 32 0] [0 0] 0 0
D 12.182997654 _0_ IFQ ARP 3 tcp 80 [0 0 0 800] ------- [0:0 2:0 32 1] [0 0] 0 0
s 12.191495725 _0_ MAC --- 4 tcp 132 [ 13a 1 0 800] ------- [0:0 2:0 32 1] [0 0] 0 0
r 12.192552432 _1_ MAC --- 4 tcp 80 [ 13a 1 0 800] ------- [0:0 2:0 32 1] [0 0] 1 0
s 12.196391675 _1_ MAC --- 4 tcp 132 [ 13a 2 1 800] ------- [0:0 2:0 31 2] [0 0] 1 0
r 12.197448382 _2_ MAC --- 4 tcp 80 [ 13a 2 1 800] ------- [0:0 2:0 31 2] [0 0] 2 0
r 12.197473382 _2_ AGT --- 4 tcp 80 [ 13a 2 1 800] ------- [0:0 2:0 31 2] [0 0] 2 0
s 23.000000000 _0_ AGT --- 13 tcp 40 [0 0 0 0] ------- [0:0 2:0 32 0] [0 0] 0 0
s 23.000972414 _0_ MAC --- 13 tcp 112 [ 13a 1 0 800] ------- [0:0 2:0 32 1] [0 0] 0 0
r 23.001869121 _1_ MAC --- 13 tcp 60 [ 13a 1 0 800] ------- [0:0 2:0 32 1] [0 0] 1 0
s 23.002990536 _1_ MAC --- 13 tcp 112 [ 13a 2 1 800] ------- [0:0 2:0 31 2] [0 0] 1 0
r 23.003887243 _2_ MAC --- 13 tcp 60 [ 13a 2 1 800] ------- [0:0 2:0 31 2] [0 0] 2 0
r 23.003912243 _2_ AGT --- 13 tcp 60 [ 13a 2 1 800] ------- [0:0 2:0 31 2] [0 0] 2 0
然后我们通过脚本pw.awk对tcpdatas文件进行处理。
pw.awk 源代码如下:
BEGIN {
largest_seq=0;
packet_send=0;
packet_rcvd=0;
}
{
if($1=="s"&&$7=="tcp")
{
if($6>largest_seq)
largest_seq=$6;
}
if($1=="s"&&$3=="_0_"&&$4=="AGT"&&$7=="tcp")
{
packet_send++;
send_time[$6]=$2;
}
if($1=="r"&&$3=="_2_"&&$4=="MAC"&&$7=="tcp")
{
packet_rcvd++;
rcvd_time[$6]=$2;
}
}
END {
#printf("packet_send %d,packet_rcvd %d/n",pakcket_send,packet_rcvd);
for(i=0;i<largest_seq;i++)
{
if(send_time[i]!=0&&rcvd_time[i]!=0)
#printf("%d %f %f/n",i,send_time[i],rcvd_time[i]);
#printf("%f %d/n", rcvd_time[i], i);
printf(" %f %d /n",send_time[i],i);
}
}
运行
awk –f pw.awk tcpdatas > node0_sent
得到node0_sent
4 11.000000
13 23.000000
20 40.265211
21 40.265211
24 40.312358
26 40.338870
27 40.343151
28 40.343151
30 40.367284
32 40.401985
34 40.415960
35 40.415960
40 40.507178
41 40.509297
42 40.511375
43 40.533451
46 40.580200
…
然后运行
gnuplot
进入后,输入命令
plot “node0_sent”with points
plot “node2_rcvd”with line
未解决问题:
(1) 如何用gnuplot把两个文件的数据同时放在一起画出图形
(2) 如何分析其它性能,不光是接收数据性能图。
2007-3-28
解决两个数据文件输入在同一个平面画图的问题。
采用的命令是:
set title “Wireless simulation”
set xlabel “simulation time”
set ylabel “packet sequence”
plot “node0_sent”using 1:2 title”node0_sent”,”node2_rcvd” using 1:2 title”node2_rcvd”
得到的结果:
gawk里面print $0代表整个一行数据