NS2有两种运行方式:

1.“脚本方式”,输入命令: ns tclscripl.tcl,其中 tclscripl.tcl 是一个Tcl脚本的文件名;

2“命令行方式”,输入命令:ns,进入NS2的命令行环境,然后直接输入各种命令来交互式地运行NS2。(与Python类似)

运行NS2以后也有两种方法记录结果:

1.trace文件;

2.nam(动画演示程序)

Tcl脚本1:example1.tcl

 set ns [new Simulator]#建立一个新的模拟对象simulator

 set tracef [open example1.tr w]#变量tracef指向example1.tr文件
#ns trace-all $tacef#记录模拟过程trace数据
set namtf [open example1.nam w]#变量namtf指向example1.nam文件
$ns namtrace-all $namtf#记录nam的trace数据 proc finish {} {关闭两个trace文件,在模拟结束后调用nam程序
global ns tracef namtf
$ns flush-trace
close $tracef
close $namtf
exec nam example1.nam &
exit
) set n0 [$ns node]#创建节点n0
set n1 [$ns node]#创建节点n1 $ns duplex-link $n0 $n1 1Mb 10ms DropTail#在n0和n1之间建立一条双向的链路,带宽1Mbit/s,时延10ms,队列类型为DropTail。 set udp0 [new Agent/UDP]#创建一个udp0 Agent
$ns attach-agent $no $udp0#将udp0绑定到n0上 set cbr0 [new Application/Traffic/CBR]#创建一个CBR流量发生器
$cbr0 set packetSize_ #分组大小为500B
$cbr0 set interval_ 0.005#发送间隔为5ms
$cbr0 attach-agent $udp0#将CBR绑定到udp0上 set null0 [new Agent/Null]#创建一个Null Agent作为数据接收器
$ns attach-agent $n1 $null0#绑定到n1上 $ns connect $udp0 $null0#将两个Agent连接起来 $ns at 0.5 "$cbr0 start"#.5s时启动cbr0
$ns at 4.5 "$cbr0 stop"#.5s时停止cbr0 $ns at 5.0 "finish"#.0s时调用finish过程
$ns run#开始模拟

Tcl调用成员方法的格式为:$对象名 方法名

Tcl脚本2(无线模型):wireless.tcl

 set val(chan) Channel/WirelessChannel #channel type,val(chan)作为变量名是一个整体,下同
set val(proc) Propagation/TwoRayGround #radio-propagation model
set val(netif) Phy/WirelessPhy #network interface type
set val(mac) Mac/802_11 #MAC type
set val(ifq) Queue/DropTail/PriQueue #interface queue type
set val(ll) LL #link layer type
set val(ant) Antenna/OmniAntenna #antenna model
set val(ifqlen) #max packet in ifq
set val(nn) #number of mobilenodes
set val(rp) AODV #routing protocol
set val(x) #X dimension of the topography
set val(y) #Y dimension of the topography set ns [new Simulator] set tracefd [open wireless.tr w]
$ns trace-all $tracefd
set namtracefd [new wireless.nam w]
$ns namtrace-all-wireless $namtracefd $val(x) $val(y) set topo [new Topography]#建立一个Topography对象,该对象可以保证节点在拓扑边界范围内运动
$topo load_flatgrid $val(x) $val(y)#设定模拟所用场景的大小 create-god $val(nn) #建立一个God对象,主要用来对路由协议做性能评价;节点的MAC对象会调用God对象,因此即使我们在这里并不适用God对象,仍然需要建立一个God对象 $ns node-config -adhocRouting $val(rp)\ #配置节点参数
-llType $val(ll)\
-macType $val(mac)\
-ifqType $val(ifq)\
-ifqLen $val(ifqlen)\
-antType $val(ant)\
-propType $val(prop)\
-phyType $val(netif)\
-channelType $val(chan)\
-topoInstance $topo\
-agentTrace ON\
-routerTrace ON\
-macTrace OFF\
-movementTrace OFF for{set i } {$i < $val(nn)} {incr i} {
set node_($i) [$ns node]
$node_($i) random-motion #disable random motion 禁止节点随机移动,让节点按脚本规定的方式移动 $node_() set X_ 5.0 #设定节点初始坐标X,Y,Z
$node_() set Y_ 2.0
$node_() set Z_ 0.0 $node_() set X_ 390.0
$node_() set Y_ 385.0
$node_() set Z_ 0.0 $ns at 5.0 "$node_(1) setdest 25.0 20.0 15.0"#节点1在5s时以15m/s的速度向坐标(25.0,20.0)的点运动
$ns at 1.0 "$node_(0) setdest 20.0 18.0 1.0" $ns at "$node_(1) setdest 490.0 480.0 15.0" set tcp [new Agent/TCP]
$tcp set class_
set sink [new Agent/TCPSink]
$ns attach-agent $node_() $tcp
$ns attach-agent $node_() $sink
$ns connect $tcp $sink
set ftp [new Appication/FTP]
$ftp attach-agent $tcp $ns at 1.0 "$ftp start"
for {set i } {$i < $val(nn)} {incr i} {
$ns at 15.0 "$node_($i) reset"
}
$ns at 15.0 "stop" proc stop{} {
global ns tracefd nametracefd
$ns flush-trace
close $tracefd
close $nametracefd
exec nam wireless nam &
exit
} $ns run

在节点很多的情况下,可以通过文件配置这些节点的初始位置和运动方式。

source "path" #读取定义位置和运动方式的文件,path是文件的路径名,文件中的内容包括node的set方法设定初始坐标,和simulator的at方法设定运动方式。与上面直接写入脚本的方法一致。

还可以通过这种引用文件的方式来设定绑定节点的Agent。

NS2学习笔记(一)的更多相关文章

  1. NS2学习笔记(四)

    这几天学习NS2,虽然国内很多人使用,但系统的教材资料不多,只能一边看中文教材,一边看英文手册,知识点也是零零散散.过段时间等能将所有知识点串上,再总结总结.现只讲一些零碎的点记录一下. 添加新的协议 ...

  2. NS2学习笔记(二)

    Tcl语言 变量和变量赋值 set a "Hello World!" #将字符串赋值给变量a puts "NS2 say $a" #输出字符串的内容,其中$a表 ...

  3. NS2学习笔记(五)

    对无线网络,生成nam文件要使用namtrace-all-wireless, 而不是namtrace-all: set nf [open test_1.nam w] $ns_ namtrace-all ...

  4. NS2学习笔记(三)

    代理(Agents) 代理是网络层数据包产生和使用的端点,用于实现多层的协议.Agent类部分用OTcl实现,部分用C++实现.C++的代码在~ns/agent.cc和~ns/agent.h中,OTc ...

  5. NS2学习笔记

    这两天在调一个仿真程序,比较奇怪的错误,就是一个节点广播消息,在它通信半径内的节点收不到消息,一直在通信上找问题,找了半天也没找到. 最后,用gdb调试,发现在一个操作指针处发生了段错误,引起的原因时 ...

  6. cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类

    前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类  __String . 使用cocos2d::__Str ...

  7. WebService学习笔记系列(二)

    soap(简单对象访问协议),它是在http基础之上传递xml格式数据的协议.soap协议分为两个版本,soap1.1和soap1.2. 在学习webservice时我们有一个必备工具叫做tcpmon ...

  8. HBASE学习笔记(四)

    这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. AC自动机模板浅讲

    Description 给你N个单词,然后给定一个字符串,问一共有多少单词在这个字符串中出现过(输入相同的字符串算不同的单词,同一个单词重复出现只计一次). Input 第一行一个整数N,表示给定单词 ...

  2. 根据判断数组不为空然后取他的值----数组不会为空---只能判断其size是否大于0

    private List<Integer> classId=new ArrayList<Integer>(); business.getClassId()!=null 以上为错 ...

  3. [K/3Cloud] K/3 Cloud1.0怎样和2.0共存在一台服务器上

    第一步:安装Cloud1.0,创建管理中心,创建业务数据中心,备份管理数据库和业务数据库,并且备份安装目录: 第二步:卸载Cloud1.0,清理安装目录,安装Cloud2.0,创建管理中心,创建业务数 ...

  4. 【BZOJ1014】火星人prefix(splay,Hash)

    题意: . 思路: ; ..,..]of longint; sum,size,fa,a,b,id,mi:..]of longint; n,m,i,x,y,s,k,j,cnt,root:longint; ...

  5. tyvj1117 拯救ice-cream

      背景 天好热……Tina顶着那炎炎的烈日,向Ice-cream home走去……可是……停电了……冰淇淋们躺在Ice-cream home的冰柜里,慢慢地……慢慢地……融化…………你说,她能赶在冰 ...

  6. 洛谷——P1103 书本整理

    https://www.luogu.org/problem/show?pid=1103 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所 ...

  7. Eureka集群的那些坑

    今天遇到一个Eureka集群的一个坑. 问题现场类似是这样的:两台Eureka组成的服务注册中心集群,两台服务提供方server1.server2,两个服务调用方client1.client2. 正常 ...

  8. MyBatis3错误:Parameter 'id' not found. Available parameters are [arg2, arg1, arg0, param3, param1, param2]或者Parameter '0' not found. Available parameters are [arg2, arg1, arg0, param3, param1, param2]

    这个问题涉及到MyBatis3在使用select节点查询时传递多个参数的问题.问题分析如下: 1.如果是单个查询一般是这样配置: <select id="getUserArticles ...

  9. Nginx源码分析:3张图看懂启动及进程工作原理

    编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享.转载请注明来自高可用架构公众号「ArchNotes」.   导读:很多工程师及架构师都希望了解及掌握高性能服务器 ...

  10. BC #62 div1 02

    /* 数位DP题,设dp[n][k][j]为前n位最后一位是k时mod为j的个数.操作都相同,可以使用矩阵加速.本来对于每一位是7*10,可以把它压向一个向量. 加速矩阵为70*70,再加一维计算前缀 ...