- 浏览: 899624 次
- 性别:
- 来自: 太原
-
文章分类
- 全部博客 (198)
- Linux/Unix (38)
- TinyOS / NS-2 for『WSN』 (44)
- 思想的拼图 (5)
- 开源 OpenSource (2)
- Framework 开发框架 (0)
- Software Engineering 软件工程 (2)
- IT项目管理 (6)
- Networking 网络技术 (2)
- Java (6)
- C语言 ANSI C (22)
- .NET / C# (9)
- C++ (12)
- Web 语言 Html/Xml (5)
- Groovy on Grails (1)
- Algorithm 算法 (1)
- Database 数据库技术 (5)
- Tools (21)
- VM 虚拟机 (3)
- WSN (wireless sensor network) (2)
- Linux 命令专辑 (3)
- PHP (0)
- 办公软件 (3)
最新评论
-
cfczdws:
感谢楼主,查了半天终于发现居然是htmlentities()做 ...
htmlentities()函数把中文转成了乱码 -
decoxiaohan:
这本书的名字 有谁知道????~~~
OMNeT++中文用户手册(完全版) -
huonie:
怎么下载啊
OMNeT++中文用户手册(完全版) -
huonie:
没有内容啊
OMNeT++中文用户手册(完全版) -
kyx0413:
谢谢先 先看看
OMNeT++中文用户手册(完全版)
介绍了如何建立一个简单的网络模拟
网络中有4个节点(n0, n1, n2, n3) , n0 与 n2, n1 与 n2 相连(双工)并且有 2 Mbps 带宽和 10 ms 的延迟。 n2 与 n3 相连, 带宽 1.7 Mbps 并且延迟 20 ms。 每个节点使用 DropTail 队列, 且队列的最大的大小为10。 一个"tcp" 代理附加到 n0, 并且连接到一个 tcp "sink" 代理 附加在n3。 默认情况下, "tcp" 代理生成的packet 包的大小是1KByte。 "sink" 代理生成并发送ACK包给发送者(tcp agent)然后释放收到的包。 n1 附加上一个 "udp" 代理, 连接到一个 "null" 代理附属在 n3. "null" 代理释放收到的所有包. "ftp" 和 "cbr" 2个流量生成器分别附到 "tcp" and "udp" 代理上, 且"cbr" 以1 Mbps的速率生成1 KByte包. 设置"cbr" 开始在0.1 sec 然后停止于4.5 sec, 而 "ftp" 在1.0 sec 开始然后在4.0 sec停止。
#Create a simulator object set ns [new Simulator] #Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #Define a 'finish' procedure proc finish {} { global ns nf $ns flush-trace #Close the NAM trace file close $nf #Execute NAM on the trace file exec nam out.nam & exit 0 } #Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail #Set Queue Size of link (n2-n3) to 10 $ns queue-limit $n2 $n3 10 #Give node position (for NAM) $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right #Monitor the queue for link (n2-n3). (for NAM) $ns duplex-link-op $n2 $n3 queuePos 0.5 #Setup a TCP connection set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #Setup a FTP over TCP connection set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2 #Setup a CBR over UDP connection set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false #Schedule events for the CBR and FTP agents $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" #Detach tcp and sink agents (not really necessary) $ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink" #Call the finish procedure after 5 seconds of simulation time $ns at 5.0 "finish" #Print CBR packet size and interval puts "CBR packet size = [$cbr set packet_size_]" puts "CBR interval = [$cbr set interval_]" #Run the simulation $ns run
在ns脚本中,一般首先建立模拟对象的实例
set ns [new Simulator]: 生成模拟对象的实例, 赋值到变量ns中 。代码执行一下步骤:
- 初始化包的格式
- 建立调度程序scheduler (默认是calendar scheduler)
- 选择默认的地址格式
"Simulator" 对象中的成员函数的作用:
- 建立compound(复合)对象, 比如nodes 和 links
- 建立连到网络的组件对象(component objects)(例如 attach-agent)
- 设定网络组件的参数
- 建立代理之间的连接 (例如 "tcp" 和 "sink"的连接)
- 指定NAM的显示选项
- 其他
大多数函数用来建立模拟和调度,有些用于NAM的显示。 "Simulator" 类中函数的实现可以参考 "ns-2/tcl/lib/ns-lib.tcl" 文件.
$ns color fid color: 设定传输的包的颜色,颜色由 flow id (fid) 定义. 这个 "Simulator" 对象的函数用于NAM的显示, 并且对实际的模拟没有影响.
$ns namtrace-all file-descriptor: 函数告知模拟器记录模拟的轨迹到NAM输入格式,之后用$ns flush-trace命令写入到名为file-descriptor的文件。 相似的, 如果用 trace-all 就以普通格式保存模拟的轨迹。
proc finish {}: 在$ns at 5.0 "finish"(结束模拟)运行后调用。这个函数指定了模拟完成后的操作。
set n0 [$ns node]: 成员函数 node 建立一个节点. 在NS中节点node是由地址和端口分级器组成的compound对象。建立node的具体过程见 "ns-2/tcl/libs/ns-lib.tcl" 和 "ns-2/tcl/libs/ns-node.tcl"文件。
$ns duplex-link node1 node2 bandwidth delay queue-type: 建立连接两个节点并指明了带宽和延迟的链接。NS中, 节点的输出队列是链接的一部分, 所以需要在建立链接时指明队列类型queue-type。代码中用到DropTail queue这个队列类型。 如果想用RED queue, 只需用RED替换DropTail。 link也是一种compound对象,并且可以建立他的子对象并把他们连接到节点。Link 的 source codes位于"ns-2/tcl/libs/ns-lib.tcl" 和 "ns-2/tcl/libs/ns-link.tcl" 文件. 特别注意,我们可以在link组件中插入error modules去模拟lossy link (事实上可以建立并插入任何网络对象), 详见NS的文档。
$ns queue-limit node1 node2 number: 指定相连node1和node2的连接的队列限度为number。具体参考 "ns-2/tcl/libs/ns-lib.tcl" and "ns-2/tcl/libs/ns-link.tcl", 或者 NS 文档。
$ns duplex-link-op node1 node2 ...: 之后的几行代码都是用于 NAM 的显示. 注释掉这几行然后再模拟,就能发现这几行的效果。
到这里,网络的基本设置已经完成, 下面我们需要去设定流量代理比如 TCP 和 UDP, 流量源traffic source 比如 FTP 和 CBR, 并附加到相应的节点上。
set tcp [new Agent/TCP]: 建立TCP代理。也可以用这个方法建立任意的代理或流量源。 Agents 和 traffic sources 是基本对象而不是 compound 对象, 大多数用C++实现并连接到OTcl. 所以没有明确的模拟对象的成员函数去建立这些对象的实例。 建立他们时需要知道类名(比如 Agent/TCP, Agnet/TCPSink, Application/FTP 等等), 可以查阅 NS 文档, 但更快的方式是查看"ns-2/tcl/libs/ns-default.tcl"文件。 这个文件包含了可用网络对象的默认并可配置的参数值, 因此他很好的说明了哪类网络对象在NS中可用和他们对应的参数。
$ns attach-agent node agent: attach-agent 函数把建立好的代理对象附加到节点对象上。其实这个函数调用了节点中的attach函数, attach函数把代理附给节点本身。 因此,$n0 attach $tcp得到同样的效果。 同样的,每个代理也有 attach-agent 函数去附加 traffic source 流量源对象给他本身。
$ns connect agent1 agent2: 在2个代理之间建立逻辑上的连接。通过设置目的地地址和端口地址到相互的网络去建立连接。
网络配置完成之后,我们就需要定义模拟的场景(模拟行程 simulation scheduling)。 模拟对象有许多安排函数,下面是一个最常用到的:
$ns at time "string": 这个函数让调度程序去安排指定的命令"string"的执行时间,代码起始处的[new Scheduler]命令建立了scheduler对象并赋在变量 scheduler_ 中。 例如, $ns at 0.1 "$cbr start" 让调度程序去调用CBR traffic source 对象的 start 函数, 然后 CBR 开始传输数据。 NS中, traffic source 通常并非传输实际的数据, 而是通知底层的代理他有一定数量数据要传输, 并且代理只知道有多少数据要发送,然后建立包并发送他们。
在配置完所有的网络,行程安排和模拟后执行的程序之后,加入代码 $ns run 在脚本最后去运行模拟。
发表评论
-
几种用于WSN的仿真工具
2009-12-09 15:26 4272为评价无线传感器网络协议算法的性能,仅通过实验是无法实现的,特 ... -
OMNeT++中文用户手册(完全版)
2009-11-18 22:36 16704http://www.netforum.com.cn/view ... -
改变Telos 系列节点Serial baud rate
2009-08-21 18:50 2213如果节点与PC通信时出现非正常丢包或者serial不稳定当收包 ... -
TinyOS编译问题
2009-08-18 20:47 13391. 有时候编译提示找不到某个文件时, 可能是由于在linux ... -
改变节点transmission power, radio power level (tx_power)
2009-08-11 20:03 4330使用 CC2420Packet 中 setPower 来改变每 ... -
Tcl/tk 小记
2009-07-22 23:43 15541. 检查variable变量是否声明 在使用Tcl时候会经常 ... -
NS无线仿真中无法设置节点颜色的解决方案
2009-07-22 18:57 1949NS中提供了配置节点与 ... -
awk: malloc(): memory corruption 错误
2009-07-09 21:56 7275问题如下: *** glibc detected *** aw ... -
ns2 对无线网络模拟
2009-07-06 19:52 2683在模拟无线网络时需要对tcl模拟脚本文件的参数进行设置,比如P ... -
使用Gnuplot 绘制ns2模拟结果图
2009-06-25 17:48 8228Gnuplot(command-driven inter ... -
ns2模拟无线网络的NAM动画
2009-06-24 22:26 5029无线的各个参数 ####################### ... -
ns2 模拟WSN协议之手记
2009-06-23 23:55 2983ns2中模拟WSN,用Timestamp时间戳计算点对点Del ... -
ns2 中得到Agent的实例
2009-06-16 21:02 2925下面代码说明了如何访问其他节点的Agent,以AODV协议为例 ... -
TinyOS使用MIG时报错!
2009-04-06 01:30 1837在Makefile中加入启用MIG的选项后,编译出现一下错误: ... -
Tinyos 2.0 笔记小结(1)
2009-03-16 20:11 23791. configure组件注意事项 一般在confi ... -
Tinyos 2.0使用笔记
2009-03-06 19:48 28161.编译与安装程序到节点 引用 $ make mica2 ... -
Tinyos 中常用术语
2009-03-05 03:32 1113EOFF 关断能量损耗 用于 device off, stop ... -
什么是 nx_ type
2009-03-01 03:29 1532nx_ types 是在nesC 1.2,tinyos中用到的 ... -
TinyOS 下安装 JNI 的问题
2009-02-25 00:05 32471. "java not found, not i ... -
『TinyOS』学习笔记 #11?
2009-02-20 01:09 3833Lesson 11 TOSSIM Compiling ...
相关推荐
Computer Network Simulations Using NS2 provides a solid foundation of computer networking knowledge and skills, covering everything from simple operating system commands to the analysis of complex ...
### NS by Example: A Comprehensive Guide for Beginners #### Introduction NS (version 2) is an advanced and powerful network simulator developed at the University of California, Berkeley. It is ...
NS (version 2) is an object-oriented, discrete event driven network simulator developed at UC Berkely written in C++ and OTcl. NS is primarily useful for simulating local and wide area networks. ...
本资料“ns_by_Example.rar”正是为初学者提供的一份深入学习NS2的宝贵资源。 NS2是由UC Berkeley和Lawrence Berkeley National Laboratory合作开发的,其主要特点是支持TCP/IP协议栈和各种无线网络模型。通过NS2,...
Simple Simulation Example A basic NS simulation involves creating nodes, connecting them with links, and configuring network components like traffic sources and routers. For instance, you could set up...
学习网络模拟的好教程,很经典.很辛苦才找到的
"ROS by Example Vol 2 Indigo" 是一套教程,旨在帮助用户通过实际示例深入理解ROS的使用,特别是针对Indigo版本。Indigo是ROS的一个发行版本,发布于2014年,提供了稳定且功能丰富的软件包集合。 这本书的第二版...
本压缩包"ns2.tcl.zip"包含了用于VANET模拟的代码,主要基于NS-2(Network Simulator 2)这一广泛使用的网络仿真工具。 NS-2是一个开源的网络仿真软件,它允许研究人员和工程师模拟各种网络协议和场景。在VANET模拟...
### ROS By Example Volume 2: Packages and Programs for Advanced Robot Behaviors #### Introduction "ROS By Example Volume 2: Packages and Programs for Advanced Robot Behaviors" is a comprehensive ...
本资源"**aodv.rar**"提供了AODV协议在NS-2(Network Simulator 2)环境下的仿真实现,这对于理解和研究AODV的工作原理及其性能具有重要意义。 NS-2是一款开源的网络模拟器,主要用于研究和测试各种网络协议,如TCP...
2. 学习ns3教程:通过官方文档和教程了解基本操作和网络模型。 3. 设计数据中心网络拓扑:根据课程要求设计一个合适的数据中心网络结构。 4. 编写ns3模拟脚本:用C++或Python编写模拟代码,包括网络设备、协议和应用...
2. 遵循ns-3教程,动手实践模拟实验,加深理论知识的理解。 3. 参与ns-3社区,获取最新的开发信息和问题解决方案。 4. 结合实际项目需求,利用ns-3进行定制化模拟,解决实际问题。 总的来说,ns-3是网络研究和工程...
- 使用`ns <your_simulation_file>.tcl`命令运行NS2模拟脚本。这里的`<your_simulation_file>`指的是你的模拟配置文件,例如`example.tcl`。 4. **NS2的配置** - 在使用NS2之前,可能需要对几个关键文件进行修改...
很不错的ns2入门学习资料,讲解详细,欢迎下载
在“Demo.rar_DEMO_WSN_basic_ns2_network_simulation”这个压缩包中,包含了一个针对初学者的基础ns2配置和程序,为深入理解WSN和ns2提供了实用的学习资源。 ns2(Network Simulator 2)是一款广泛使用的开源网络...
描述 "simulation aodv avec ns2" 表明这个压缩包内容主要是关于使用NS2进行AODV路由协议的模拟实验。这通常涉及创建网络拓扑,配置节点,设置AODV路由协议,并运行模拟来分析协议性能。 标签 "ns2_aodv aodv aodv_...
Simple Traffic Simulation based on JADEX
7. **脚本语言**:NS使用OSSIE(Open Simulation of Systems Interoperating with Everything)框架,结合Tcl/Tk和C++进行建模和控制。Tcl脚本用于定义网络配置、事件和性能测量,而C++库用于实现底层的网络行为。 ...