您的位置:首页 > 理论基础 > 计算机网络

(转载)《ns2仿真实验-多媒体和无线网络通信》NS2队列管理机制报错

2017-04-09 22:54 274 查看
原文地址:http://www.cnblogs.com/leealways87/archive/2011/12/27/2303312.html

我在实验中尝试将链路参数直接设定为DropTail(而非myfifo),结果提示"$q_ attach $queuechan”处有错误,遂尝试其它链路类型,FQ等,均不对。查阅其它参考书,将这段代码替换为:

$ns monitor-queue $r1 $r2 [open q-$par1-$par2.tr w] 0.3

[$ns link $r1 $r2] queue-sample-timeout

  至此,可以在运行时将参数给定为正常的链路类型,DropTail,FQ,RED,等,myfifo仍然可以使用。但后面用gnuplot画图 时,需要使用

plot "q-myfifo-10.tr" using 1:5 with linespoints 1, "q-RED-10.tr" using 1:5 with linespoints 2

  而不是原来的

plot "q-myfifo-10.tr" using 2:3 with linespoints 1, "q-RED-10.tr" using 2:3 with linespoints 2

  因为新的输出文件的第1列和第5列才是所需数据。(顺便强调一下,plot命令中,using 2:3的意思是用第2列数据作为横坐标,用第3列数据作为纵坐标。 )同时,原来产生的队列长度记录文件中有一些数据的第3列是相同的,但第2列不同,不明白是怎么回事,但在我改变后的新的输出文件中就没有这种现象。

Q 0.0342079 1

Q 0.118126 2

Q 0.206406 3

Q 0.314605 4

Q 0.354894 2

Q 0.354977 3

Q 0.372965 4

Q 0.440528 5

Q 0.440612 6

Q 0.481177 7

Q 0.486243 8

Q 0.486326 9

Q 0.514977 10

Q 0.565884 11

Q 0.663466 10

Q 0.663549 11

Q 0.728868 12

Q 0.817834 13

Q 0.849159 14

Q 0.886479 15

Q 0.966323 14

Q 0.966406 15

Q 0.9891 16

Q 0.989183 17

Q 1.20069 18

Q 1.21196 19

Q 1.21204 20

Q 1.34918 19

Q 1.34926 20

  另外,书中的queue.tcl文件代码部分,在finish过程中计算吞吐量的循环中

for {set i 0} {$i<$par2} {incr i} {

set ackno_($i) [$tcp($i) set ack_]

set thgpt($i) [expr $ackno_($i)*1000.0*8.0/($time-$start($i))]

set sum_thgpt [expr $sum_thgpt+$thgpt($i)]

}

  开始时间的数组start($i),参照先前的习惯,以及该文件后面对该数组的使用,应该是startT($i)。我没看CD中给出的代码,不 知道那里的原代码是不是正确。

PS: $tcp($i) set ack_表示接收端收到的最大确认号。

运行错误注解

(1)$ ns queue.tcl myfifo 10
invalid command name "Queue/myfifo"
while executing
"Queue/myfifo create _o476 "
invoked from within
"catch "$className create $o $args" msg"
invoked from within
"if [catch "$className create $o $args" msg] {
if [string match "__FAILED_SHADOW_OBJECT_" $msg] {
delete $o
return ""
}
global errorInfo
error "class $..."
(procedure "new" line 3)
invoked from within
"new Queue/$qtype"
("default" arm line 3)
invoked from within
"switch -exact $qtype {
ErrorModule {
if { [llength $args] > 0 } {
set q [eval new $qtype $args]
} else {
set q [new $qtype Fid]
}
}
intserv {
set qtyp..."
(procedure "_o3" line 14)
(Simulator simplex-link line 14)
invoked from within
"_o3 simplex-link _o70 _o73 56k 10ms myfifo"
("eval" body line 1)
invoked from within
"eval $self simplex-link $n1 $n2 $bw $delay $type $args"
(procedure "_o3" line 8)
(Simulator duplex-link line 8)
invoked from within
"$ns duplex-link $r1 $r2 56k 10ms $par1"
(file "queue.tcl" line 55)

按照上面的提示应该是队列名myfifo有问题,但是输入FIFO也不行。但是输入RED队列时

$ ns queue.tcl RED 10

average throughput: 4643.743454368604 (bps)

输出正常,不知道是什么原因?
解决办法:http://140.116.72.80/~smallko/ns2/module.htm

并将$q_ attach $queuechan改为:

$ns monitor-queue $r1 $r2 [open q-$par1-$par2.tr w] 0.3

[$ns link $r1 $r2] queue-sample-timeout

(2)SplitObject::trace called in the base class of _o476

解决办法:全是 因为 空格 的格式 出现的问题 

所以 大家在要注意 这非常严谨的 语言


在這邊先做個小結,如何新增模組到ns2的核心步驟如下:

1.準備好模組檔(例如,a.cc 和 a.h)。

2.若有需要做初始設定的話,修改ns-default.tcl檔。

3.修改Makefile(把a.o加到OBJ_CC內)

4.重新編譯

5.測試模組
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: