如何写一个NS脚本(可以参考前一天的sample来看)
一般来说,一个NS脚本以创建一个simulator对象开始:
#创建一个类型为simulator的变量ns
set ns [new Simulator]
simulator对象的成员函数有:node 和 link;设置网络组件参数;创建代理;设置nam参数
$ns color 1 Blue
设置NAM显示的一个颜色参数,对模拟过程没有影响
set tracetf [open *.tr w]
$ns trace-all &tracef
set namtf [open *.nam w]
$ns trace-all $namtf
前两行设定变量tracef指向*.tr,用来记录模拟过程的trace数据。
后两行设定变量namtf指向*.nam,用来记录nam的trace数据。
proc finish {}
建立名为finish的过程,在模拟结束后被调用,执行模拟后的过程。
set n0 [$ns node]
创建结点。结点是address和port classifier的混合体。
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
创建两个节点间的一条双向的链路,设定带宽,时延,队列类型。
$ns queue-limit $n2 $n3 10
设置链路中队列的限制。
$ns duplex-link-op $n0 $n2 orient right-down
设置NAM显示中结点的位置
至此,一个简单的网络已经建起,下一步是建立代理,如TCP和UDP
set tcp [new Agent/TCP]
创建一个类型为TCP的变量tcp
$ns attach-agent $n0 $tcp
将创建的的tcp对象与结点n0绑定。
$ns connect $tcp $sink
将创建好的两个代理连接起来。
至此,所有的网络设置已经完成。接下去要写的是模拟发生的情况。
$ns at 1.0 "$ftp start"
在给定的时间,simulator类的成员函数使schedule触发。
$ns run
最后,用这个命令启动模拟程序。
以上是最基础的tcl脚本,还有许多对象的属性设置没有记录,但其实思维模式有了,只需查查手册就可以了。NS推出的官方手册已经被强人翻译成了中文版,查找很方便,在这里顶一下。需要的可以留下邮件地址 :)
今天先到这里了。