提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
认识NS
模拟:“将物理系统中的特征参数提取出来,进行行为描述
仿真:用数据来处理模拟的系统
通信网络模拟:用计算机程序对通信网络进行模型化,通过程序的允许模拟通信网络的运行过程
一、网络研究方法
1.分析方法
对所研究的对象和网络系统进行初步分析
根据一定的限定条件和合理假设
对研究对象和系统进行描述
抽象出研究对象的`数学分析模型`
利用数学分析模型对问题进行求解
2.实验方法
设计出研究所需要的硬件和软件配置环境
建立实验
在现实网络上对网络协议、网络行为和网络性能的研究
3.模拟方法
应用网络模拟软件,建立所研究的网络系统的模拟模型,运行模型,并分析运行的输出结果
二、使用原理
#离散时间模拟器.
- 事件规定了系统状态的改变,状态的修改仅在事件发生时进行
2. 模拟器所做的就是不停地处理一个个事件,直到所有的事件都被处理完或者某一特定的事件发生位置
2.丰富的构件库
1、用户可以充分利用这些已有对象,进行少量扩展,组合出所要研究的网络系统的模型,然后进行模型
3、分裂对象模型
C++:实现功能的模拟
Otcl:解释执行,可在不必重新编译的情况下随意修改模拟参数和模拟过程,提高了模拟的效率
Tcl的面向对象的扩展,在tcl中加入类、实例、继承等面向对象的概念;
NS中的构件一般是由C++类和Otcl的类相互作用的结果
2.代码
set ns [new Simulator] // 建立一个Simulator对象的实例,并将其赋值给ns
set tracefd [open example.tr w] //打开一个example.tr的trace的文件,
//用于记录跟踪的数据,并赋值给tracefd
$ns trace-all $tracefd
set namtracefd [open example1.nam w]//打开一个example1.nam的文件,
//用来记录nam的trace的数据
$ns namtrace-all $namtracefd
proc finish{} { //建立一个名为finish的过程,
//用来关闭两个trace文件,并调用nam程序
9 global ns tracefd namtracefd
10 $ns flush-trace
11 close $tracefd
12 close $nametracefd
13 exec nam example1.nam&
14 exit 0
15 }
16
17 set n0 [$ns node] //新建两个节点,并分别赋值给n0和n1
18 set n1 [$ns node]
19
20 $ns duplex-link $n0 $n1 1Mb 10ms Drop Tail//在两个节点间建立一个双向的link,
//该链路的带宽为1M,延迟为10ms
//队列类型为DropTail
21
22 set udp0 [new Agent/UDP] //新建一个UDP Agent并吧它绑定到n0上
23 $ns attach-agent $n0 $udp9
24
25 set cbr0 [new Application/Traffic/CBR] //新建一个CBR,
//(Constant Bit Rate,恒定流量速率)设置流量的类型,
//包含分组大小、间隔事件、并绑定到udp0上
26 $cbr0 set packetSize_ 500
27 $cbr0 set interval_ 0.005
28 $cbr0 attach-agent udp0
29
30 set null0 [new Agent/Null] //新建一个Null Agent并把它绑定到n1上,Null是一种数据接收器(traffic sink)
31 $ns attach-agent $n1 $null0 //将udp0和null0这两个Agent连接起来
32
33 $ns connect $udp0 $null0
34
35 $ns at 0.5 "$cbr0 start"//让cbr0在0.5s时发送数据
36 $ns at 4.5 "$cbr0 stop"//让cbr0在4.5s时结束数据
37
38 $ns at 5.0 "finish" //告知Simulation对象在5.0s调用finish过程
39
40 $ns runp