Download presentation
Presentation is loading. Please wait.
Published byΞάνθη Νικηφόρος Στεφανόπουλος Modified 6年之前
1
NS2入门与提高 柯志亨 SeaSon 哈尔滨工业大学 计算机学院-数据库中心 SeaSon
2
目录 NS2 简介 安装 模拟流程 添加新协议 调试以及结果分析 计算机学院-数据库中心 SeaSon
3
NS2 简介 背景 NS2目标 NS2功能 NS2 组件 NS2体系结构 计算机学院-数据库中心 SeaSon
4
NS2 背景 1989 REAL network simulator
1995: DARPA VINT project at LBL,Xerox PARC, UCB, and USC/ISI Present: DARPA SAMAN project and NSF CONSER project Collaboration with other researchers including CIRI 计算机学院-数据库中心 SeaSon
5
NS2研究范围 支持网络协议的研究和教育 优点 与平台无关,有大量的协议、代码以及模型可供使用,开源的,不同的协议很容易进行比较。
通信协议的设计,数据流的研究等 不同协议的比较 优点 与平台无关,有大量的协议、代码以及模型可供使用,开源的,不同的协议很容易进行比较。 计算机学院-数据库中心 SeaSon
6
NS2目标 NS2不适合做的? 大多数任务都是单节点完成的,比如交换机的性能分析等。 计算机学院-数据库中心 SeaSon
7
NS2功能 有线网络 路由层 DV, LS, PIM-SM 传输层: TCP and UDP
流量产生:web, ftp, telnet, cbr, stochastic 队列模型:drop-tail, RED, FQ, SFQ QoS: IntServ and Diffserv 计算机学院-数据库中心 SeaSon
8
NS2功能 无线网络 网络类型:MANET, Sensor Networks
路由:AODV, DSR, DSDV,Mobile IP以及HMIPv6等 MAC: , ,Smac等 传输层、多种数据流模拟 计算机学院-数据库中心 SeaSon
9
NS2 组件 ns: 网络模拟器 nam: 网络 AniMator 模拟的流程
执行tcl脚本,进行模拟,并将所有的模拟结果以trace文件的个是输出。 nam: 网络 AniMator 将ns的结果可视化。 模拟的流程 Gawk gnuplot Trace文件 Nam文件 tcl 脚本 ns-2 nam 计算机学院-数据库中心 SeaSon
10
NS2体系结构 面向对象的设计 分裂对象模型 支持重用 容易维护 方便扩展,如添加新协议 C++是高效的编译执行语言,功能模拟,性能较好
Otcl 解释执行的,进行场景配置。不必重新编译更灵活 计算机学院-数据库中心 SeaSon
11
NS2体系结构 NS2结合两者的优点 C++ otcl 计算机学院-数据库中心 SeaSon
12
Tcl与C++对象绑定过程 以tcp为例,当你在tcl脚本中使用以下命令创建一个Tcp对象时
set tcp0 [new Agent/TCP] 首先创建tcl对象,即解释对象 proc new { className args } { set o [SplitObject getid] # 创建分裂对象 if [catch "$className create $o $args" msg] { … } return $o 计算机学院-数据库中心 SeaSon
13
Tcl与C++对象绑定过程 然后通过Tcl对象的init()函数中创建对应的shadow对象
SplitObject instproc init args { $self next if [catch "$self create-shadow $args"] { error "__FAILED_SHADOW_OBJECT_" "" } 计算机学院-数据库中心 SeaSon
14
Tcl与C++对象绑定过程 Create-shadow怎样找到tcl对象对应的C++对象? 答案就是TclClass类!!!
static class TcpClass : public TclClass { public: TcpClass() : TclClass("Agent/TCP") {} TclObject* create(int , const char*const*) { return (new TcpAgent()); } } class_tcp; 计算机学院-数据库中心 SeaSon
15
NS2系统结构 --离散事件模拟 把世界上的一切都看成事件 每一个事件都有一个预定的执行(虚拟的)时间,独立于真实执行时间。
维护一个基于发生时间排序的 事件(events)队列 维护一个系统的时间[virtual time] 重复的执行以下的过程: 从对首取出一个事件, set [virtual time]=event’s time 处理这个事件 如果在处理时间过程中产生新的event,插入queue 每一个事件都有一个预定的执行(虚拟的)时间,独立于真实执行时间。 CPU 执行的快慢不影响结果。 计算机学院-数据库中心 SeaSon
16
离散事件模拟示例 事件队列 S D A. 时间 事件 A. 1s S decides to send pkt to D
S starts sending pkt B. C. B. 1.005s S finishes transmitting pkt to D D. C. 1.01s D begins to recv pkt D. 1.015s D recvs entire pkt and delivers to application delay value transmission 0.005s propagation 0.01s S D 计算机学院-数据库中心 SeaSon
17
一个数据包怎样从源节点到目的节点 同一个节点内各层协议之间传数据? 节点之间怎么传? 计算机学院-数据库中心 SeaSon
18
计算机学院-数据库中心 SeaSon
19
安装 安装环境及方法 安装问题 计算机学院-数据库中心 SeaSon
20
安装(1) 推荐直接安装all-inone版本(最新all-inone-2.29) windows安装方法
Linux(直接install就行了) Windows+Cygwin+Ns2 windows安装方法 柯老师网站(不要看中文安装说明,选英文的) 计算机学院-数据库中心 SeaSon
21
安装(2) windows安装方法 柯老师网站上Cygwin可以成功安装的ns2版本有NS-2.26, NS-2.27, NS-2.28, ns-2.29 注:NS-2.26需要PATCH过..才能安装 柯老师的安装经验: 不過安裝的過程還是可能會有一些問題..最確保可以安裝成功的方法是:重新安裝WINDOWS..裝完馬上安裝CYGWIN + NS2,安裝後..在裝SERVICE PACK..或其他的軟件..這是我的經驗 计算机学院-数据库中心 SeaSon
22
安装(3) NS仿真软件-问题求助的地方 常见错误原因
常见错误原因 主要问题gcc版本 重装 计算机学院-数据库中心 SeaSon
23
开始进行摸拟 一个简单的无线网络的例子(1) 无线场景的产生 利用NS模拟前搞清楚的问题 添加新协议 编译NS2 计算机学院-数据库中心
SeaSon
24
一个简单的无线网络的例子(1) 场景配置 3 个mobile nodes 平面拓扑 670mX670m ad hoc 路由协议 DSDV
Random Waypoint mobility model TCP and CBR traffic 计算机学院-数据库中心 SeaSon
25
一个简单的无线网络的例子(2) #Define Global Variables
set ns_ [new Simulator] ; create a ns simulator instance set topo [new Topography] ; create a topology and $topo load_flatgrid ; define it in 670x670 area 计算机学院-数据库中心 SeaSon
26
一个简单的无线网络的例子(3) #Define standard ns/nam trace
set tracefd [open 694demo.tr w] $ns_ trace-all $tracefd set namtrace [open 694demo.nam w] $ns_ namtrace-all-wireless $namtrace 计算机学院-数据库中心 SeaSon
27
一个简单的无线网络的例子(4) God 用来保存一个结点到另外一个结点直接的跳部数. 例如:
#Create “God” set god_ [create-god 3] God 用来保存一个结点到另外一个结点直接的跳部数. 例如: $ns_ at “$god_ setdist 2 3 1” 计算机学院-数据库中心 SeaSon
28
一个简单的无线网络的例子(5) #Define how a mobile node should be created
$ns_ node-config -adhocRouting DSDV\ -llType LL \ -macType Mac/802_11\ -ifqLen 50 \ -ifqType Queue/DropTail/PriQueue \ -antType Antenna/OmniAntenna \ -propType Propagation/TwoRayGround \ -phyType Phy/WirelessPhy \ -channelType Channel/WirelessChannel \ -topoInstance $topo -agentTrace ON \ -routerTrace OFF \ -macTrace OFF 计算机学院-数据库中心 SeaSon
29
一个简单的无线网络的例子(6) Use “for loop” to create 3 nodes:
#Create a mobile node and attach it to the channel set node [$ns_ node] $node random-motion 0 ;# disable random motion Use “for loop” to create 3 nodes: for {set i < 0} {$i<3} {incr i} { set node_($i) [$ns_ node] } 计算机学院-数据库中心 SeaSon
30
一个简单的无线网络的例子(7) #Define node movement model
source movement-scenario-files #Define traffic model source traffic-scenario-files 计算机学院-数据库中心 SeaSon
31
一个简单的无线网络的例子(8) #Define node initial position in nam
for {set i 0} {$i < 3 } { incr i} { $ns_ initial_node_position $node_($i) 20 } #Tell ns/nam the simulation stop time $ns_ at “$ns_ halt” #Start your simulation $ns_ run 计算机学院-数据库中心 SeaSon
32
无线场景的产生(1) 生成节点运动模型 setdest -n <num_of_nodes> -p pausetime -s <maxspeed> -t <simtime> -x <maxx> -y <maxy> Source: See ns-2/indep-utils/cmu-scen-gen/setdest/ 网上还可以下载更多的模型,如组移动模型等 计算机学院-数据库中心 SeaSon
33
无线场景的产生(2) 生成无线网络数据流 CBR traffic
ns cbrgen.tcl [-type cbf|tcp] [-nn nodes] [-seed seed] [-mc connections] [-rate rate] Source: ns-allinone-2.29\ns-2.29\indep-utils\cmu-scen-gen 计算机学院-数据库中心 SeaSon
34
利用NS模拟前搞清楚的问题 计算机学院-数据库中心 SeaSon
35
NS2 源代码目录 sim tk8.0 otcl Tcl tcl8.0 ns-2 nam-1 tcl ex test lib ...
tcl code C++ code example validation test tcl code core 计算机学院-数据库中心 SeaSon
36
添加协议(1) 添加别人实现的协议 为什么我安装总是出错????? 环境问题,OS, gcc版本,ns版本 解决办法
2. 移植到新的环境,怎么移? gdb调试,没有别的办法!!! 计算机学院-数据库中心 SeaSon
37
添加新协议(2) 自己写协议 路由协议?应用层协议?MAC协议?
最好的方法就是模仿已有的协议,代表协议AODV, MAC802.11,Ping 添加路由协议,从Agent继承 添加应用层协议,从Agent(更灵活)或者Application(有些不能实现) 计算机学院-数据库中心 SeaSon
38
添加新协议(3) 示例:一个泛洪协议(Mflood) 协议类型:路由层协议 1.定义包头 struct hdr_mflood {
u_int32_t seq_; //根据需要定义变量,这个灵活决定 …. // 包头访问的方法,你只需要复制下来就OK了 static int offset_; // required by PacketHeaderManager inline static int& offset() { return offset_; } inline static hdr_sptree* access(const Packet* p) { return (hdr_sptree*) p->access(offset_); } }; 计算机学院-数据库中心 SeaSon
39
添加新协议(4) 2. 实现协议 class MFlood: public Agent { public: MFlood();
void recv(Packet *p, Handler *); int command(int, const char *const *); protected: inline int initialized() { return 1 && target_; } //发送函数,其实就是调用目的节点的接受函数 inline void send(Packet *p){ target_->recv(p); } }; 计算机学院-数据库中心 SeaSon
40
添加新协议(5) 3 关联tcl对象与C++对象(模板)
static class MFloodclass : public TclClass { public: MFloodclass() : TclClass("Agent/MFlood") {} TclObject* create(int argc, const char*const* argv) { assert(argc == 5); return (new MFlood((nsaddr_t) atoi(argv[4]))); // PBO agrv[4] is index_} } } class_rtProtoMFlood; 计算机学院-数据库中心 SeaSon
41
添加新协议(6) 4 关联tcl对象与C++对象的包头(模板) int hdr_mflood::offset_;
static class MFloodHeaderClass : public PacketHeaderClass { public: MFloodHeaderClass() : PacketHeaderClass("PacketHeader/MFlood", sizeof(hdr_mflood)) { bind_offset(&hdr_mflood::offset_); } } class_mfloodhdr; 计算机学院-数据库中心 SeaSon
42
添加新协议(7) 目前为止,所有的代码工作都已经完成了 生下的工作就是将这个协议编译到NS2中。 需要修改一下文件
1. ns-packet.tcl (ns-allinone-2.29\ns-2.29\tcl\lib) 2. packet.h (ns-allinone-2.29\ns-2.29\common) 3 ns-lib.tcl (ns-allinone-2.29\ns-2.29\tcl\lib) 对于我们这个应用层协议不需要修改 计算机学院-数据库中心 SeaSon
43
添加新协议(8) 1. 修改ns-packet.tcl(ns-2.29/tcl/lib) 目的:在NS启动的时候加载我们的包头。
foreach prot { # add by season MFlood …… } 目的:在NS启动的时候加载我们的包头。 计算机学院-数据库中心 SeaSon
44
添加新协议(9) 2.修改 packet.h(一共修改两处ns-2.29/common)
enum packet_t { // insert new packet types here //add by season PT_MFLOOD,//Trace用到 PT_NTYPE // This MUST be the LAST one } class p_info { public: p_info() { name_[PT_MFLOOD]= “MFlood”;//与前面对应 name_[PT_NTYPE]= "undefined"; 目的:Trace中使用,协议构造函数SpTreeAgent()初始化时使用 计算机学院-数据库中心 SeaSon
45
添加新协议(10) 如果是路由协议如(AODV) 还需要修改ns-lib.tcl
Simulator instproc create-wireless-node args { MFlood { set ragent [$self create-mflood-agent $node] } …} Simulator instproc create-mflood-agent { node } { set ragent [new Agent/MFlood [$node id]] $node set ragent_ $ragent return $ragent 计算机学院-数据库中心 SeaSon
46
添加新协议(11) 还有这段代码(Mflood未使用)~ns-mobilenode.tcl
# Special processing for AODV set aodvonly [string first "AODV" [$agent info class]] if {$aodvonly != -1 } { $agent if-queue [$self set ifq_(0)] ;# ifq between LL and MAC } 计算机学院-数据库中心 SeaSon
47
添加新协议总结 5c+2t+1m(521规则) 5c-必须实现的五个C++模块 MFlood与MFloodclass
hdr_mflood与MFloodHeaderClass packt.h添加包头类型 2t-修改两个tcl文件 ns-lib.tcl与ns-packet.tcl 有时候还会修改ns-defaut.tcl 1m-修改Makefile,将新协议添加 计算机学院-数据库中心 SeaSon
48
添加新协议总结 关于添加应用协议如ping,跟路由协议类似,甚至跟简单,如果从Agent继承,除了不需要修改ns-lib.tcl之外其它类似。 但是别忘了设置包头的大小,不然你发出的所有数据包头的大小都是0!!!! PingAgent::PingAgent() : Agent(PT_PING) { bind("packetSize_", &size_); } 修改Ns-defautl.tcl Agent/Ping set packetSize_ 64 计算机学院-数据库中心 SeaSon
49
编译NS2(1) mflood/mflood.o mflood/mflood-seqtable.o\
一般我们将我们所有的C++代码放在一个文件夹内,如mflood,然后放在ns-2.29/之下 修改Makefile(无任何后缀的) 添加如下红色所示代码,将mflood编译进NS2 OBJ_CC = \ # add by season mflood/mflood.o mflood/mflood-seqtable.o\ 计算机学院-数据库中心 SeaSon
50
编译NS2(2) 从cygwin进入ns-2.29目录下 执行 什么时候要make clean???
make clean # 删除所有的*.o文件 make depend make # 重新编译ns 如果没有错误,则可以编写场景测试 什么时候要make clean??? 计算机学院-数据库中心 SeaSon
51
编译NS2(3) 如果添加新协议,或者修改了多个协议公用的NS中头文件,如packet.h我们都需要重新make clean 然后make depend, make。 计算机学院-数据库中心 SeaSon
52
编译NS2(4) 修改了C++文件 对于NS中已有的代码修改 不需要修改makefile,只需要 make 添加新的模块或协议
Make clean Make depend Make 计算机学院-数据库中心 SeaSon
53
编译NS2(5) 修改了Otcl文件 修改NS中已有的代码 添加新的代码 都只需要make即可 recompile source
修改 Makefile (NS_TCL_LIB), tcl/ns-lib.tcl (source) and recompile 都只需要make即可 计算机学院-数据库中心 SeaSon
54
调试NS TCL的调试 Gdb的安装调试 计算机学院-数据库中心 SeaSon
55
调试(1) Tcl调试 C++代码的调试(segment fault) 个人觉得没什么用途,如果你感兴趣我的space有安装方法
Spaces.msn.com\wowseason C++代码的调试(segment fault) 调试工具gdb,另外自带的insight可视化界面,本质也是调用gdb 下面介绍gdb的安装调试 计算机学院-数据库中心 SeaSon
56
调试(2) gdb安装 安装gdb,以cygwin为例
重新运行cygwin的setup文件,选择界面中的keep(必须!!!否则会死的很惨的),然后找到gdb选择安装即可。 重新编译NS2,添加调试信息 修改Makefile在下面位置添加-g CCOPT = -g 进入ns-2.29目录下面执行 Make clean Make depend # 执行这个命令过程中如出错,不用管! Make 如果没有错误,就安装成功,V!! 计算机学院-数据库中心 SeaSon
57
调试(2) Gdb调试NS2 以命令行为例 进入ns-2.29(%为命令提示符) % gdb ns gdb〉 即进入调试
计算机学院-数据库中心 SeaSon
58
调试(3) 调试常用命令 NS中调试技巧以及演示 bt列出运行栈中信息
b sptree.cc:linenum 在sptree.cc文件linenum行设置断点,注意中间”:”不能丢 c 相当于vc中continue, n 相当于vc中next display var,显示变量var的值 其他的参看gdb文档 NS中调试技巧以及演示 计算机学院-数据库中心 SeaSon
59
结果分析 场景测试 工具使用及结果分析 其他 计算机学院-数据库中心 SeaSon
60
场景测试 为了使模拟更接近真实网络,参数选择,非常重要!可以参看相关论文 简单测试 用两三个节点测试一下首发数据,根据trace文件分析。
功能测试 测试每一个功能,对于无线网络的,要测试多跳,各种拓扑。 利用trace分析结果 计算机学院-数据库中心 SeaSon
61
参数选择(802.11b) The Antenna height of transmitter and receiver is 1.5m.
The propagation model is TwoRayGround model. Antenna/OmniAntenna set Gt_ 1 //Transmit antenna gain Antenna/OmniAntenna set Gr_ 1 //Receive antenna gain Phy/WirelessPhy set L_ //System Loss Factor Phy/WirelessPhy set freq_ 2.472e9 //channel GHz Phy/WirelessPhy set bandwidth_ 11Mb //Data Rate Phy/WirelessPhy set Pt_ //Transmit Power Phy/WirelessPhy set CPThresh_ //Collision Threshold Phy/WirelessPhy set CSThresh_ e-12 //Carrier Sense Power Phy/WirelessPhy set RXThresh_ e-09 //Receive Power Threshold; calculated under TwoRayGround model by tools from NS2. *Mac/802_11 set dataRate_ 11Mb //Rate for Data Frames *Mac/802_11 set basicRate_ 1Mb //Rate for Control Frames 计算机学院-数据库中心 SeaSon
62
常用工具以及结果分析 看代码 画图,gnuplot,xgraph 分析trace文件 推荐sourceinsight 命令格式如下,示例演示
% gnuplot delay.plot Windows下还有origin(收费的) 分析trace文件 使用gawk 命令格式 gawk –f delay.awk output.tr 计算机学院-数据库中心 SeaSon
63
常用工具以及结果分析 柯老师强烈推荐 模拟wireless网络 ,可以用 生成无线网络场景,免去写tcl脚本的痛苦 WIRED NETWORK,可以建議使用NSBENCH 计算机学院-数据库中心 SeaSon
64
计算机学院-数据库中心 SeaSon
65
常用工具以及结果分析 网络性能度量 details on 1.Bandwidth utilization The aggregate of all traffic currently being consumed on a hop or path. 2.Packets per second 3.Round Trip Time The elapsed time for transit of a signal over a closed circuit. 4.RTT variance 5.packet loss 6.Reachability 7.Circuit Performance 8.Bandwidth Utilization and Packets Per second 计算机学院-数据库中心 SeaSon
66
常用工具以及结果分析 必须了解各种协议的trace格式 分析协议性能的gawk代码 柯老师的网站 NS FAQ Question 14 示例
NS FAQ Question 14 示例 计算机学院-数据库中心 SeaSon
67
使用Gawk分析结果 Gawk简介 与NS相关的基本知识 具体例子 计算机学院-数据库中心 SeaSon
68
使用Gawk分析结果 无线通信的trace格式
s _1_ AGT tcp 43 [ ] [1:0 2:0 30 2] [13 0] 0 0 r _2_ AGT tcp 36 [ ] [1:0 2:0 30 2] [13 0] 1 0 计算机学院-数据库中心 SeaSon
69
Gawk简介 解释性的脚本语言 变量以及数组不用声明 按行处理 有pipe功能,可以将处理数据传给shell 计算机学院-数据库中心
SeaSon
70
Gawk相关语法 s 10.1 _1_ AGT tcp 43 [ ] [1:0 2:0 30 2] [13 0] 0 0 (1).Gawk读入trace中的一行 $0 $1 $2 $3 $4 $5 $6 $7 … 整行 s 10.1 _1_ AGT --- 22(uid) tcp 注:列之间一般用空格区分 计算机学院-数据库中心 SeaSon
71
Gawk相关语法 $0 $1 $2 $3 $4 $5 $6 $7 … 整行 s 10.1 _1_ AGT --- 22 tcp
(2)执行动作 Pattern1 { Actions1 } Pattern2 { Actions2 } …………………………… Pattern3 { Actions3 } 其中pattern为条件语句(或正则表达式)如: if ($1 == “s” && $4 == “AGT”) Actions为动作,如:AgtNum++; 计算机学院-数据库中心 SeaSon
72
Gawk相关语法 (3)IO操作 print 、 printf( ) 、getline ...... (4)控制语句
if ( ...) {...} else {…}、 while(…){…} …… 计算机学院-数据库中心 SeaSon
73
Gawk工作流程 Gawk反复执行以下四个步骤: 1. 自动从trace文件中读取一行。 2. 自动更新内建参数的值($n)。
3. 逐行执行程序中所有 的 Pattern { Actions } 代码。 4. 如果trace文件还有未读取的行,则循环执行上面步骤1~3。 计算机学院-数据库中心 SeaSon
74
Gawk程序的框架 BEGIN { AgtNum = 0; } { if ($1 == "s" && $4 == "AGT")
END{ printf(" Num of AGT pkts: %d \n", AgtNum); 最后保存文agtnum.awk文件 计算机学院-数据库中心 SeaSon
75
执行的命令(演示) 可以在cygwin或者xwin窗口下执行 命令格式 $ gawk –f agtnum.awk out.tr
对于mflood例子,输出结果 ~/ns-allinone-2.29/ns-2.29/test/ppt $ gawk -f agtnum.awk mflood.tr Num of AGT pkts: 50 计算机学院-数据库中心 SeaSon
76
一个分析协议的完整例子(推荐) Performance Evaluation of Ad Hoc Routing Protocols using ns2 simulations 文章对ad hoc routing protocol进行了比較,包括DSDV, AODV, DSR 其中TORA因为測不出來..就没进行比较 作者把如何比較的程式碼都附在上面... 下载网址:ww.cs.utk.edu/~gupta/Adhoc.doc 计算机学院-数据库中心 SeaSon
77
其他 获得节点的位置,速度信息 获得节点能量,使节点进入休眠模式 跨层设计 将真实数据导入NS2
static Node* get_node_by_address(nsaddr_t); 获得节点能量,使节点进入休眠模式 跨层设计 将真实数据导入NS2 Tcl与C++之间相互调用(演示) Tcl中调用C++函数 Command() C++中调用tcl命令 char out[100]; sprintf(out, "%s setColor %d ", name(),level); Tcl& tcl = Tcl::instance(); tcl.eval(out); 计算机学院-数据库中心 SeaSon
78
其他 threshold 计算通信半径 使用前先complier threshold.cc $ cd ns-2.29/indep-utils/propagation/ $ g++ -lm threshold.cc -o threshold 示例 $ threshold -m TwoRayGround 250 distance = 250 propagation model: TwoRayGround 计算机学院-数据库中心 SeaSon
79
联系我 Email:yuhui.wu@163.com MSN:yuhui.wu@hotmai.com QQ:67483698
NS仿真软件-season 计算机学院-数据库中心 SeaSon
80
参考文献 Introduction to Computer Networks 柯老师的网站
《NS与网络模拟》 ns-2 Tutorial Introduction to Computer Networks Network simulator 2 (ns-2) 计算机学院-数据库中心 SeaSon
81
OVER 谢谢 计算机学院-数据库中心 SeaSon
Similar presentations