NS网络模拟和协议仿真源代码.docx
- 文档编号:24278924
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:176
- 大小:60.59KB
NS网络模拟和协议仿真源代码.docx
《NS网络模拟和协议仿真源代码.docx》由会员分享,可在线阅读,更多相关《NS网络模拟和协议仿真源代码.docx(176页珍藏版)》请在冰豆网上搜索。
NS网络模拟和协议仿真源代码
第4章
例1
#建立一个模拟
setns[newSimulator]
#定义不同数据流的颜色(NAM显示时用到)
$nscolor1Blue
$nscolor2Red
#开启Trace跟踪和NAM跟踪
settracefd[openwired.trw]
$nstrace-all$tracefd
setnf[openwired.namw]
$nsnamtrace-all$nf
#定义结束进程
procfinish{}{
globalnstracefdnf
$nsflush-trace
close$tracefd
close$nf
exit0
}
#定义节点
setn0[$nsnode]
setn1[$nsnode]
setn2[$nsnode]
setn3[$nsnode]
setn4[$nsnode]
setn5[$nsnode]
#$n5colorblack
$n5colorred
#定义节点间的链路
$nsduplex-link$n0$n12Mb10msDropTail
$nsduplex-link$n1$n22Mb10msDropTail
$nsduplex-link$n1$n42Mb20msDropTail
$nsduplex-link$n3$n42Mb10msDropTail
$nsduplex-link$n4$n52Mb10msDropTail
#定义链路的队列长度
$nsqueue-limit$n1$n410
#指定节点间的相互位置(NAM显示用到)
$nsduplex-link-op$n0$n1orientright-down
$nsduplex-link-op$n2$n1orientright-up
$nsduplex-link-op$n1$n4orientright
$nsduplex-link-op$n3$n4orientleft-down
$nsduplex-link-op$n5$n4orientleft-up
#监视链路的队列
$nsduplex-link-op$n1$n4queuePos0.5
#建立一个TCP连接
settcp[newAgent/TCP]
$tcpsetclass_2
$nsattach-agent$n0$tcp
setsink[newAgent/TCPSink]
$nsattach-agent$n5$sink
$nsconnect$tcp$sink
$tcpsetfid_1
#在TCP连接上建立FTP流
setftp[newApplication/FTP]
$ftpattach-agent$tcp
$ftpsettype_FTP
#建立一个UDP代理
setudp[newAgent/UDP];#建立一个数据发送代理
$nsattach-agent$n2$udp;#将数据发送代理绑定到发送节点
setnull[newAgent/Null];#建立一个数据接收代理
$nsattach-agent$n3$null;#将数据接收代理绑定到接收节点
$nsconnect$udp$null;#连接两个代理(也就决定了数据包的发送和接收节点)
$udpsetfid_2
#在UDP代理上建立CBR流
setcbr[newApplication/Traffic/CBR]
$cbrattach-agent$udp
$cbrsettype_CBR
$cbrsetpacket_size_1000
$cbrsetrate_1mb
$cbrsetrandom_false
#启动和结束流代理
$nsat0.5"$cbrstart"
$nsat1.0"$ftpstart"
$nsat9.0"$ftpstop"
$nsat9.5"$cbrstop"
$nsat9.5"$nsdetach-agent$n0$tcp;$nsdetach-agent$n5$sink"
#仿真结束时调用结束进程
$nsat10.0"finish"
#打印CBR数据包的大小和间隔
puts"CBRpacket_size_=[$cbrsetpacket_size_]"
puts"CBRinterval=[$cbrsetinterval_]"
#执行模拟
$nsrun
例2
#简单无线网络模型模拟
#无线节点参数
setval(chan)Channel/WirelessChannel;#channeltype信道类型:
无线信道
setval(prop)Propagation/TwoRayGround;#radio-propagationmodel信道模型:
TwoRayGround
setval(netif)Phy/WirelessPhy;#networkinterfacetype无线物理层
setval(mac)Mac/802_11;#MACtypeMAC层协议
setval(ifq)Queue/DropTail/PriQueue;#interfacequeuetype
setval(ll)LL;#linklayertype
setval(ant)Antenna/OmniAntenna;#antennamodel
setval(ifqlen)50;#maxpacketinifq
setval(rp)AODV;#路由协议
setval(x)600;#拓扑-长度
setval(y)200;#拓扑-宽度
setval(stop)10.0;#timeofsimulationend
#建立一个simulator实例
setns[newSimulator]
#$nsuse-newtrace
#开启Trace跟踪和NAM跟踪
settracefd[openwireless.trw]
setnamtrace[openwireless.namw]
$nstrace-all$tracefd
$nsnamtrace-all-wireless$namtrace$val(x)$val(y)
#建立topology对象
settopo[newTopography]
$topoload_flatgrid$val(x)$val(y)
#创建god
create-god3
setchan_1_[new$val(chan)]
#配置无线节点(包括使用何种路由协议,何种mac协议,无线信道的模型等等)
$nsnode-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)\
-channel$chan_1_\
-topoInstance$topo\
-agentTraceON\
-routerTraceON\
-macTraceON\
-movementTraceOFF
#建立无线节点并设置节点的位置(节点位置决定了拓扑结构)
setn(0)[$nsnode]
#$n(0)shapehexagon
#$n(0)labeln0
#$n(0)label-colorRed
$n(0)random-motion0
$n(0)setX_100.0
$n(0)setY_100.0
$n(0)setZ_0.0
$nsinitial_node_pos$n(0)20
setn
(1)[$nsnode]
$n
(1)random-motion0
$n
(1)setX_300.0
$n
(1)setY_100.0
$n
(1)setZ_0.0
$nsinitial_node_pos$n
(1)20
setn
(2)[$nsnode]
$n
(2)random-motion0
$n
(2)setX_500.0
$n
(2)setY_100.0
$n
(2)setZ_0.0
$nsinitial_node_pos$n
(2)20
#建立一个UDP代理
setudp0[newAgent/UDP];#建立一个数据发送代理
$nsattach-agent$n(0)$udp0;#将数据发送代理绑定到发送节点
setnull0[newAgent/Null];#建立一个数据接收代理
$nsattach-agent$n
(2)$null0;#将数据接收代理绑定到接收节点
$nsconnect$udp0$null0;#连接两个代理(也就决定了数据包的发送和接收节点)
#在UDP代理上建立CBR流
setcbr[newApplication/Traffic/CBR]
$cbrattach-agent$udp0
#仿真结束时重置节点
for{seti0}{$i<3}{incri}{
$nsat10.0"$n($i)reset";
}
#启动和结束流代理
$nsat0.5"$cbrstart"
$nsat9.5"$cbrstop"
#定义结束进程
procfinish{}{
globalnstracefdnamtrace
$nsflush-trace
close$tracefd
close$namtrace
exit0
}
#仿真结束时调用结束进程
$nsat$val(stop)"finish"
$nsat$val(stop)"puts\"NSEXISTING...\";$nshalt"
puts"StartSimulation..."
#runthesimulation
$nsrun
例3
#有线无线网络混合模拟
#无线节点参数
setval(chan)Channel/WirelessChannel;#channeltype信道类型:
无线信道
setval(prop)Propagation/TwoRayGround;#radio-propagationmodel信道模型:
TwoRayGround
setval(netif)Phy/WirelessPhy;#networkinterfacetype无线物理层
setval(mac)Mac/802_11;#MACtypeMAC层协议
setval(ifq)Queue/DropTail/PriQueue;#interfacequeuetype
setval(ll)LL;#linklayertype
setval(ant)Antenna/OmniAntenna;#antennamodel
setval(ifqlen)50;#maxpacketinifq
setval(rp)DSDV;#路由协议
setval(nn)4;#节点数目
setval(x)600;
setval(y)600;
setval(stop)10.0;#timeofsimulationend
#建立一个simulator实例
setns[newSimulator]
#设定分层路由地址
$nsnode-config-addressTypehierarchical
AddrParamssetdomain_num_2;#2个网络
lappendcluster_num11;#每个网络一个子网
AddrParamssetcluster_num_$cluster_num
lappendeilastlevel13;#2个子网的节点数目为1和3
AddrParamssetnodes_num_$eilastlevel
puts"Configurationofhierarchicaladdressingdone"
#$nsuse-newtrace
#设置trace
settracefd[openwired_wireless2.trw]
setnamtrace[openwired_wireless2.namw]
$nstrace-all$tracefd
$nsnamtrace-all-wireless$namtrace$val(x)$val(y)
#建立topology对象
settopo[newTopography]
$topoload_flatgrid$val(x)$val(y)
#创建god
create-god$val(nn)
setsinkNode[$nsnode0.0.0]
$sinkNodesetX_500
$sinkNodesetY_300
$sinkNodesetZ_0
$nsinitial_node_pos$sinkNode60
setchan_1_[new$val(chan)]
#无线节点配置
$nsnode-config-wiredRoutingON\
-adhocRouting$val(rp)\
-llType$val(ll)\
-macType$val(mac)\
-ifqType$val(ifq)\
-ifqLen$val(ifqlen)\
-antType$val(ant)\
-propType$val(prop)\
-phyType$val(netif)\
-channel$chan_1_\
-topoInstance$topo\
-agentTraceON\
-routerTraceON\
-macTraceON\
-movementTraceOFF
#新建BS节点
setbs(0)[$nsnode1.0.0]
$bs(0)random-motion0
#节点标签与初始位置设定
$bs(0)setX_200.0
$bs(0)setY_300.0
$bs(0)setZ_0.0
$nsinitial_node_pos$bs(0)60
#定义节点间的链路
$nsduplex-link$sinkNode$bs(0)10Mb1msDropTail
$nsduplex-link-op$sinkNode$bs(0)orientleft
#定义链路的队列长度
#$nsqueue-limit$bs(0)$sinkNode10
#监视链路的队列
#$nsduplex-link-op$bs(0)$sinkNodequeuePos0.5
$nsnode-config-wiredRoutingOFF\
-macTypeMac/802_11
#新建SS节点
setss(0)[$nsnode1.0.1]
$ss(0)base-station[AddrParamsaddr2id[$bs(0)node-addr]]
$ss(0)setX_50.0
$ss(0)setY_450.0
$ss(0)setZ_0.0
$nsinitial_node_pos$ss(0)60
setss
(1)[$nsnode1.0.2]
$ss
(1)base-station[AddrParamsaddr2id[$bs(0)node-addr]]
$ss
(1)setX_50.0
$ss
(1)setY_150.0
$ss
(1)setZ_0.0
$nsinitial_node_pos$ss
(1)60
setudp0[newAgent/UDP]
$nsattach-agent$ss(0)$udp0
setnull0[newAgent/Null]
$nsattach-agent$sinkNode$null0
$nsconnect$udp0$null0
setugs0[newApplication/Traffic/UGS]
$ugs0attach-agent$udp0
setudp1[newAgent/UDP]
$nsattach-agent$sinkNode$udp1
setnull1[newAgent/Null]
$nsattach-agent$ss
(1)$null1
$nsconnect$udp1$null1
setugs1[newApplication/Traffic/UGS]
$ugs1attach-agent$udp1
$nsat0.5"$ugs0start"
$nsat1.0"$ugs1start"
$nsat9.0"$ugs1stop"
$nsat9.5"$ugs0stop"
procfinish{}{
globalnstracefdnamtrace
$nsflush-trace
close$tracefd
close$namtrace
exit0
}
#事件安排
$nsat$val(stop)"finish"
$nsat$val(stop)"puts\"NSEXISTING...\";$nshalt"
puts"StartSimulation..."
#runthesimulation
$nsrun
第10章
delay.awk
BEGIN{
highest_uid=0;
}
{
event=$1;
time=$2;
node=$3;
len=length(node);
if(len==3){
node_=substr(node,2,1);
trace_type=$4;
flag=$5;
uid=$6;
pkt_type=$7;
pkt_size=$8;
}else{
from_node=$3;
to_node=$4;
pkt_type=$5;
pkt_size=$6;
flag=$7;
uid=$12;
}
if(len==3){
if(event=="s"&&node_==2&&trace_type=="AGT"&&pkt_type=="cbr")
start_time[uid]=time;
}else{
if(event=="r"&&to_node==0&&pkt_type=="cbr")
end_time[uid]=time;
}
if(highest_uid highest_uid=uid; } END{ id=1; k=0; total_delay=0; avg_delay=0; for(i=0;i<=highest_uid;i++) { start=start_time[i]; end=end_time[i]; delay=end-start; if(delay>0){ total_delay=total_delay+delay; k++; } } avg_delay=total_delay/k; printf("%f%.9f\n",rate,avg_delay); } get_perform #! /bin/sh i=1 while["$i"-le300];do nsw_w.tcl$i gawk–fdelay.awkrate=$iwired_wireless.tr>>delay gawk–floss.awkrate=$iwired_wireless.tr>>loss_rate gawk-fthroughtput.awkrate=$iwired_wireless.tr>>throughtput if["$i"-le225];then i=$(($i+20)) elif["$i"-le250];then i=$(($i+5)) else i=$(($i+2)) fi done exit0 jitter.awk BEGIN{ highest_uid=0; } { event=$1; time=$2; node=$3; len=length(node); if(len==3){ node_=substr(node,2,1); trace_type=$4; flag=$5; uid=$7; pkt_type=$8; pkt_size=$9; }else{ from_node=$3; to_node=$4; pkt_type=$5; pkt_size=$6; flag=$7; uid=$12; } if(len==3){ if(event=="s"&&node_==2&&trace_type=="AGT"&&pkt_type=="cbr") start_time[uid]=time; }else{ if(event=="r"&&to_node==0&&pkt_type=="cbr") end_time[uid]=time; } if(highest_uid highest_uid=uid; } EN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NS 网络 模拟 协议 仿真 源代码