加入收藏 设为首页 联系站长
首页 | 虚拟动态 | Cisco模拟 | Juniper仿真 | 虚拟机 | 网络仿真 | 软件路由 | 技术专题 | 相关软件 | 交流论坛
>首页 -> 网络仿真 -> NS

TOP

error model
[ 录入者:admin | 时间:2007-10-28 00:54:52 | 作者: | 来源: | 浏览:813次 ]

不知道你具体遇到什么问题,下面我以前做的一些笔记。希望能有所帮助。我也是初学,也许理解的不正确,大家交流交流吧!

鉴于ns2 manual中写的不是很详细。今天下午系统的研究了一下。

比较关键的原文(Chaper13.1)

ErrorModel类是从基类Connector衍生而来。因此他继承了许多用于‘hooking up'对象的方法:targetdrop-target.”
             ……
drop-target用于接受ErrorModel产生的corrupted报文。否则ErrorModel只标记这个报文的common头的error_ flag,然后交给agents处理。”
             ……
ErrorModel定义了Tcl成员unit,它用作指定错误单元:pkt、bit、time等;还定义了ranvar成员用于指定错误的随机分别类型。”
             ……
要想在ns中引入错误机制,必须先创建错误模型,指定错误发生概率rate_,错误单元unit,错误随机分布ranvar等。基本方法如下:
 
   set error_module [new ErrorModel]
   $error_module set rate_ 0.01 ;# 0<=rate<=1

   $error_module unit pkt
   $error_module ranvar [new RandomVariable/Uniform]

   $error_module drop-target [new Agent/Null]
 

定义好了错误模型error_module,就可以在需要的地方插入“错误”了。

13.2节介绍了很多中方法,这里讲讲我认为比较好用的:
1、Simulator::lossmode <em> <src> <dst>
  这种方法在队列模型之前插入错误模型。
  Simulator就是我们在tcl脚本里的ns实例,比如如果你如下定义:set ns_ [new Simulator],那么这里Simulator就是ns_
在tcl脚本中不用使用成员访问符“::”,lossmodeSimulator的一个成员函数而已,em是我们定义的错误模型标识符,如上文的or_modulesrcdst决定了一条发生错误的链路,简单而言,就是:
   $ns_ lossmode $error_model $n0 $n1

2、Simulator:link-lossmodel <em> <src> <dst>
  这种方法在队列模型和延时模型之间插入错误模型。
  参数说明略,基本同上。

以上方法适用于有线链路。对于无线链路不照的。^_^
在无线链路中,错误模型的使用有些复杂。
首先,在无线链路中只能在macnetif模型之间插入错误模型。
其次,无线链路中需要分别定义outgoingincoming信道的错误模型。两者的区别在于:对于outgoing链路,错误模型是上面mac模型downtaget_所指向的对象,所有接受者接受的数据的错误模型相同;而对于incoming链路,错误模型必须是下面netif模型的uptaget_所指向的对象,每个接受者收到的报文的错误模型不同。

在无线协议栈中插入错误模型需要使用新的无线节点配置方法:node-config,它有两个选项IncomingErrProc(manual中多写了个'r')和OutgoingErrProc分别指定incoming错误模型和outgoing错误模型。

例子如manuel上的:

$ns node-config -IncomingErrProc UniformErr -Outgoing ErrProc UniformErr

proc UniformErr {} {
set err [new ErrorModel]
$err unit packet ;#好像pkt也可以;
$err set rate_ 0.356
$err ranvar [new RandomVariable/Uniform]
return $err
}

[上一篇]NS使用一些常用资源 [下一篇]在ns中添加新协议
※相关文章
 

评论

称  呼:
内  容:

相关栏目

最新文章

热门文章

推荐文章

赞助商链接