Adhoc网络仿真.docx
- 文档编号:23636245
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:13
- 大小:150.36KB
Adhoc网络仿真.docx
《Adhoc网络仿真.docx》由会员分享,可在线阅读,更多相关《Adhoc网络仿真.docx(13页珍藏版)》请在冰豆网上搜索。
Adhoc网络仿真
HarbinInstituteofTechnology
无线自组织网络
课程报告
*******
学号:
**********
班级:
1305102
*******
院系:
电子与信息工程学院
时间:
2016年12月
RTS/CTS机制下802.11b的最大吞吐量仿真
一、背景知识
1、Adhoc网络中MAC协议
(1)IEEE802.11的分布式协调功能(DCF)
DCF的基本思路:
在无线网络上不可能进行冲突检测,故不设置冲突检测机制,采用规则延迟来处理,以保证MAC控制的可操作性和公平性。
基本原则为:
节点要发送MAC帧,首先监听无线信道,若空闲,则可以发送该帧;否则延迟等待,再次竞争发送。
(2)面临的主要问题:
“隐藏”终端问题
假设:
A正在向B传输数据,C也要向B发送数据
隐藏终端:
在接收者的通信范围内而在发送者的通信范围外的终端。
带来的问题是A向B发送报文,C听不到A的发送。
C也发送报文时在B发生碰撞。
单频网络的信道接入控制协议,使用RTS-CTS握手机制,力求解决Adhoc网络中的隐藏终端和暴露终端问题,是构成其他机制的基础。
(3)解决隐藏终端的方法—RTS/CTS
a)节点A向节点B发送RTS,表明A需要向B发送数据。
RTS帧有两个目的:
预约无线链路的使用权,并要求接收到这一消息的其他的工作站停止发送。
(发送端清场)
b)B接收到A的RTS后,向周边所有节点发出CTS信号,表明已准备就绪,A可以发送。
而其他欲向B发送数据的节点则暂停发送。
(接收端清场)
c)在A、B双方成功交换RTS/CTS信号后,即完成握手后A向B开始发送数据。
这种机制保证了多个互不可见的发送节点同时向一个接受节点发送信息时,实际上只能是收到接受节点回应CTS的那个节点能够发送,避免了冲突发生。
实际上,冲突还是有可能发生,即A、C同时向B发送RTS时,两者的RTS在B上冲突,B无法接收准确的信息,则不发送任何回应的CTS。
这样,A和C都收不到B的CTS消息,则采用退避竞争机制分配一个随机定时值,再竞争发送RTS,直到成功为止。
(4)RTS-CTS握手机制
a)当一个终端要发送数据给另一个终端时,它首先发送一个RTS给目标终端。
b)接收节点准备好接收工作,则回复一个CTS。
c)发送者确认来自接收节点的CTS,则开始发送报文。
d)如果发送者没有收到接收节点的CTS,则重发RTS,并等待回应。
e)其他接收到RTS或CTS的节点采用二进制指数退避算法延迟数据发送,以避免冲突。
(5)分析侦听到RTS或CTS控制报文的其他终端的反应过程
a)侦听到RTS控制报文的任何其他终端均向A关闭,而且在足够长的时间保持沉默,使A可以无冲突的收到CTS控制报文。
b)所有侦听到CTS控制报文的终端均向B关闭,而且在后继数据到来期间保持沉默,时间长短可以从CTS报文中得到。
可能冲突:
C、B同时向A发送RTS,则二进制指数退避。
每次冲突退避加倍,每次成功发送后,减少到最小的退避窗口。
在多终端单一小区环境下,将会总有利于成功发送的节点再次发送,从而影响公平性。
2、带有RTS/CTS的扩展DCF
(1)RTS/CTS机制
机制的使用是可选的,每个802.11节点必须实现该功能。
明确预留信道,避免“隐藏”终端冲突
a)发送者发送短的RTS(请求发送);
b)接收者用短的CTS(清除发送);
c)CTS为发送者预留了带宽同时通告所有的站点(包括隐藏站点);
d)RTS/CTS长度很短,冲突的概率小;
(2)带RTS/CTS的DCF机制工作过程
当发射端希望发送数据时,首先检测信道是否空闲,若是信道为空闲时,送出RTS,RTS信号包括发射端的地址、接收端的地址、下一笔数据将持续发送的时间等信息。
接收端收到RTS信号后,将响应短信号,CTS信号上也包含根据RTS内记录修正后的剩余的持续发送的时间。
当发射端收到CTS包后,随即开始发送数据包。
接收端收到数据包后,将以包内的CRC的数值来检验包数据是否正确,若结果正确,接收端将响应ACK包,告知发射端数据已经被成功地接收。
当发射端没有收到接收端的ACK包时,将认为包在传输过程中丢失,而一直重新发送包。
3、吞吐量
随着物理层传输速率的提高,系统中的吞吐量是否也会成正比的提高呢?
其实不然。
首先,无线网络中存在一些无法避免的开销,如采用CSMA/CA策略时,传送前必须先等待DIFS的时间,这意味着通道并不是时时刻刻都在传送数据。
其次,像RTS/CTS、ACK等控制包也会带来额外的开销。
下面分析PLCP的longpreamble、shortpreamble对吞吐量的影响。
(1)802.11b物理层(PhysicalLayer)
首先,802.11b的物理层是由两个部分组成的,分别为PhysicalLayerConvergenceProtocol(PLCP)和PhysicalMediumDependent(PMD)。
PMD主要负责无线信号的调制和解调,PLCP则负责将MAC层传下来的数据包传给PMD,以及检测通道的状态是处于忙碌还是闲置,然后将结果返回给MAC层,即ClearChannelAssessment(CCA)。
在PLCP里提供两种类型的preambleLongpreamble和shortpreamble,在标准中,长前导是必须提供的,短前导则为可有可无的选项,主要用来缩减开销,提升传输效果。
(2)IEEE802.11b的MAC层
在MAC层也有header,如下图所示,header加CRC占了34bytes,此部分即为开销。
但大部分时候只会用到Address1到Address3,Address4不会用到,所以一般来说,MAC层的开销都会设为28bytes。
二、实验内容
1、802.11bRTS/CTS模式下的吞吐量推导
接下来推导在802.11b的基本模式的环境的基础上推导RTS/CTS模式系统能达到的最大的吞吐量。
下表是推导时使用的符号及其含义。
2、计算结果
在基本模式下,数据包传送的周期是要先等待Channelidle和TDIFS,然后传送数据包,再等待一个TSIFS,由接收端送出ACK,才完成整个数据的传送过程。
在最理想情况下,如果传送的数据包没有发生碰撞,则:
如果是LDATA为2000B,数据传输速率为11Mbps,且使用longpreamble时,传送DATA的延迟时间为:
三、
传送ACK的延迟时间为:
四、
传送RTS的延迟时间为:
五、
传送CTS的延迟时间为:
六、
最大可达到的吞吐量为:
如果使用shortpreamble时:
七、
八、
九、
十、
最大可达到的吞吐量:
十一、
三、仿真验证
使用长导时的结果:
四、程序代码
#ThisscriptiscreatedbyNSG2beta1
#<
procgetopt{argcargv}{
globalopt
lappendoptlistnn
for{seti0}{$i<$argc}{incri}{
setopt($i)[lindex$argv$i]
}
}
getopt$argc$argv
#opt(0):
封包的大小
#opt
(1):
选择是longpreamble还是shortpreamble
#removeuselessheaders
remove-all-packet-headers;#removesallexceptcommon
add-packet-headerIPLLMacARPTCP;#neededheaders
Mac/802_11setCWMin_31
Mac/802_11setCWMax_1023
Mac/802_11setSlotTime_0.000020;#20us
Mac/802_11setSIFS_0.000010;#10us
Mac/802_11setPreambleLength_72;#144bit
Mac/802_11setShortPreambleLength_72;#72bit
Mac/802_11setPreambleDataRate_1.0e6;#1Mbps
Mac/802_11setPLCPHeaderLength_48;#48bits
Mac/802_11setPLCPDataRate_1.0e6;#1Mbps
Mac/802_11setShortPLCPDataRate_2.0e6;#2Mbps
Mac/802_11setRTSThreshold_1000;#bytesDisableRTS/CTS
Mac/802_11setShortRetryLimit_7;#retransmissions
Mac/802_11setLongRetryLimit_4;#retransmissions
Mac/802_11setnewchipset_false;
#usenewchipset,allowingamorerecentpackettobecorrectlyreceivedin#placeofthefirstsensedpacket
Mac/802_11setdataRate_11Mb;#802.11datatransmissionrate
Mac/802_11setbasicRate_1Mb;#802.11basictransmissionrate
#Mac/802_11setaarf_false;#802.11AutoRateFallback
#opt
(1)1:
shortpreamble0:
longpreamble
#if{$opt
(1)>0}{
#ErrorModel80211shortpreamble1;#toggle802.11shortpreambleon/off
#}
#===================================
#Simulationparameterssetup
#===================================
setval(chan)Channel/WirelessChannel;#channeltype
setval(prop)Propagation/TwoRayGround;#radio-propagationmodel
setval(netif)Phy/WirelessPhy;#networkinterfacetype
setval(mac)Mac/802_11;#MACtype
setval(ifq)Queue/DropTail/PriQueue;#interfacequeuetype
setval(ll)LL;#linklayertype
setval(ant)Antenna/OmniAntenna;#antennamodel
setval(ifqlen)10;#maxpacketinifq
setval(nn)2;#numberofmobilenodes
setval(rp)DSDV;#routingprotocol
setval(stop)100.0;#timeofsimulationend
#产生一个仿真的对象
setns_[newSimulator]
#定义一个记录文件,用来记录封包传送的过程
settracefd[opensimple.trw]
$ns_trace-all$tracefd
#打开一个NAMtrace文件
setnf[openout.namw]
$ns_namtrace-all-wireless$nf100100
#setuptopographyobject
#建立一个拓扑对象
settopo[newTopography]
#拓扑的范围为100mx100m
$topoload_flatgrid100100
#CreateGod
create-god$val(nn)
setchan_1_[new$val(chan)]
#设置结点参数
$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)\
-channel$chan_1_\
-topoInstance$topo\
-agentTraceON\
-routerTraceOFF\
-macTraceON\
-movementTraceOFF
for{seti0}{$i<$val(nn)}{incri}{
setnode_($i)[$ns_node]
$node_($i)random-motion0;#disablerandommotion
}
setrng[newRNG]
$rngseed1
setrand1[newRandomVariable/Uniform]
for{seti0}{$i<$val(nn)}{incri}{
puts"wirelessnode$icreated..."
setx[expr50+[$rand1value]*50]
sety[expr50+[$rand1value]*50]
$node_($i)setX_$x
$node_($i)setY_$y
$node_($i)setZ_0.0
puts"X_:
$xY_:
$y"
}
for{seti0}{$i<$val(nn)}{incri}{
setudp_($i)[newAgent/UDP]
$udp_($i)setpacketSize_2000
$ns_attach-agent$node_($i)$udp_($i)
setnull_($i)[newAgent/LossMonitor]
$ns_attach-agent$node_($i)$null_($i)
}
for{seti0}{$i<$val(nn)}{incri}{
if{$i==($val(nn)-1)}{
$ns_connect$udp_($i)$null_(0)
}else{
setj[expr$i+1]
$ns_connect$udp_($i)$null_($j)
}
setcbr_($i)[newApplication/Traffic/CBR]
$cbr_($i)attach-agent$udp_($i)
$cbr_($i)settype_CBR
#使用者所使用的packetsize包含了IPheader,所以要先扣除20bytes
$cbr_($i)setpacket_size_[expr$opt(0)-20]
$cbr_($i)setrate_5Mb
$cbr_($i)setrandom_false
}
for{seti0}{$i<$val(nn)}{incri}{
$ns_at1.1"$cbr_($i)start"
$ns_at5.1"$cbr_($i)stop"
}
#Tellnodeswhenthesimulationends
for{seti0}{$i<$val(nn)}{incri}{
$ns_at100.0"$node_($i)reset";
}
$ns_at100.0"stop"
$ns_at100.01"puts\"NSEXITING...\";$ns_halt"
$ns_at45.0"record"
setfirst_time10000.0
setlast_time0.0
procrecord{}{
globalns_null_valfirst_timelast_time
setsum0
for{seti0}{$i<$val(nn)}{incri}{
setth0
#统计接收端收了多少个bytes
seta[$null_($i)setbytes_]
#最后一笔接收封包时间丁
setb[$null_($i)setlastPktTime_]
#第一笔接收封包时间丁
setc[$null_($i)setfirstPktTime_]
#判断系统中,最后一笔接收封包时间丁
if{$first_time>$c}{
setfirst_time$c
}
#统计系统中,最后一笔接收封包时间
if{$last_time<$b}{
setlast_time$b
}
if{$b>$c}{
#统计系统中,接收了多少个bytes
sett_bytes[expr$a*8]
setsum[expr$sum+$t_bytes]
}
}
#统计系统中,平均吞吐量
puts"totalthroughput:
[expr$sum/($last_time-$first_time)]bps"
}
procstop{}{
globalns_tracefd
$ns_flush-trace
close$tracefd
execnamout.nam&
}
puts"StartingSimulation..."
$ns_run
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Adhoc 网络 仿真