本人NS2萌新一枚写了一个DCF100节点有AP的仿真例子代码后面附上。
请问NS2.35上是否已经实现了802.11的PCF接入方式,若已经实现了请大佬们给个简单的例子。
若没有请大佬们告诉我该怎么做,已自闭。。。。。。。。。。。。
DCF接入方式存在AP节点
set val(chan) Channel/WirelessChannel ;# 信道类型:无线
set val(prop) Propagation/TwoRayGround ;# 传输模型(两径模型:1.点到点间的直线。2.地面的反射)
set val(netif) Phy/WirelessPhy ;# 物理接口类型:无线
set val(mac) Mac/802_11 ;# MAC层类型802.11
set val(ifq) Queue/DropTail/PriQueue ;# 网卡队列丢失类型:尾部丢弃(远距离衰落)
set val(ll) LL ;# 逻辑链路层类型
set val(ant) Antenna/OmniAntenna ;# 天线类型:全向
set val(ifqlen) 50 ;# 网卡队列容量
set val(nn) 100 ;# 节点数量
set val(rp) AODV ;# 路由协议
set val(x) 500
set val(y) 500
PCF设置参数:
Mac/802_11 set Beacon 40
Mac/802_11 set CF-Poll 60
Mac/802_11 set CF-end 20
Mac/802_11 set CF-Null 34
#=========================545米通信范围其余均为默认========================================
通信(侦听)范围过大容易产生碰撞,使得丢包率大大增加,甚至无法传输到目的节点
#Phy/WirelessPhy set CPThresh_ 10.0 ;# 碰撞后功率强于另一个10倍的包被接收
Phy/WirelessPhy set CSThresh_ 1.55924e-11 ;# 550m侦听范围
Phy/WirelessPhy set RXThresh_ 1.61726e-11 ;# 545米通信范围值
#Phy/WirelessPhy set bandwidth_ 2e6 ;# 带宽2Mb
#Phy/WirelessPhy set Pt_ 0.28183815 ;# 传输功率
#Phy/WirelessPhy set freq_ 914e+6 ;# 射频频率
#Phy/WirelessPhy set L_ 1.0 ;# 系统损耗系数
#================================end=====================================================
#=============================NS2默认的802.11参数设定(802.11b)=====================================
修改以下参数可以实现802.11a、802.11b、802.11g等MAC层协议
DIFS = SIFS + (2 * Slot time) DCF采用DIFS
PIFS = SIFS + Slot time PCF的AP采用PIFS
DIFS > PIFS > SIFS,因此AP总比普通节点具有更高的访问信道的优先级(间隔越小优先级越高)
#
802.11 DCF使用CSMA/CA的方法来避免碰撞,在发送包之前,发送端会等待一个DIFS时间,
如果在这段期间內侦测到其它在使用信道的话,发送端会把这次的发送任务延迟到信道空闲后再经过DIFS时间后再开始发送
此时,传送端会会使用随机数的方法选一个时间槽去重新发送这个包
(随机数的范围由Contention Window,CW控制;初始只为CWmin,最大值为CWmax)。
随机退避时间:Backoff Time = Random()xSlotTime Random()取自[0,CW]中的一个随机数
CW的初始值 = CWmin ,每次退避时CW=CWx2,当增大到CWmax时不再增大,发送成功后重置(reset)
退避计数器值减至0时,一但信道空闲立即发送数据
#
#Mac/802_11 set CWMin_ 31 ;# 退避随机数最小值
#Mac/802_11 set CWMax_ 1023 ;# 退避随机数最大值
#Mac/802_11 set SlotTime_ 0.000020 ;# SlotTime=20us
#Mac/802_11 set SIFS_ 0.000010 ;# 最小帧间间隔 :10us; SIFS = 10us
#Mac/802_11 set PreambleLength_ 144 ;# 144 bit
#Mac/802_11 set PLCPHeaderLength_ 48 ;# 48 bits
#Mac/802_11 set PLCPDataRate_ 1.0e6 ;# 1Mbps
#Mac/802_11 set RTSThreshold_ 0 ;# 启用RTS/CTS机制的包大小0 bytes
#Mac/802_11 set ShortRetryLimit_ 7 ;# 短帧最大重传尝试次数,包大小
#Mac/802_11 set LongRetryLimit_ 4 ;# 长帧最大重传尝试次数,包大小>RTS/CTS阈值 = 长帧
#====================================end==========================================================
Mac/802_11 set dataRate_ 11Mb ;# 数据速率,DATA发送速率
Mac/802_11 set basicRate_ 1Mb ;# 控制信息发送速率
创建仿真器和相应trace数据存储文件
set ns_ [new Simulator]
set f [open PCF_100.tr w]
$ns_ trace-all $f
$ns_ eventtrace-all
set nf [open PCF_100.nam w]
$ns_ namtrace-all-wireless $nf val(x) val(y) ;# nam动画跟踪范围: 500 x 500
创建拓扑平面: val(x) x val(y) (500 x 500)
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
创建val(nn) 100 个GOD数据结构,以记录路由信息
create-god $val(nn)
set chan [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 \
-topoInstance $topo \
-agentTrace ON \
-routerTrace OFF \
-macTrace ON \
-movementTrace OFF
#===========================信标帧间隔和接入点模式说明==========================================
$mac_([expr $val(nn) - 1]) set BeaconInterval_ 0.2 ;#信标间隔时间
Beacon Interval间隔调高,有助于发挥无线网络效能 ,client 端省电
Beacon Interval间隔调低 ,可以加快wireless client 连结速度 .
#
ACTIVE模式:这种模式下,STA在每个Channel(信道)上都会发出Probe Request帧用来搜索某个网络。
PASSIVE模式:这种模式下,STA不发送任何信号,只是在ChannelList中各个信道间不断切换并等待Beacon帧。
#=====================================end======================================================
“for” 循环创建 node 0~99 并设定节点坐标 10 x 10的矩阵拓扑
for {set i 0} {$i < 10} {incr i} {
for {set j 0} {$j < 10} {incr j} {
set k [expr $i*10+$j]
set node_($k) [$ns_ node]
$node_($k) random-motion 0 ;#不移动
$node_($k) set X_ [expr $j*50]
$node_($k) set Y_ [expr $i*50]
$node_($k) set Z_ 0.0
set mac_($k) [$node_($k) getMac 0]
if {$k != 44} { ;# 其余节点为ACTIVE模式下的STA
$ns_ at 0.1 "$mac_($k) ScanType ACTIVE"
} else { ;# 设置node44为AP(PC)
set AP_ADDR1 [$mac_($k) id]
$mac_($k) ap $AP_ADDR1
$ns_ at 0.01 "$node_($k) color \"red\""
}
}
}
$mac_(44) set BeaconInterval_ 0.5
建立node0与done99的tcp连接(node0发,node99收),传输数据类型CBR
set tcp [new Agent/TCP]
$ns_ attach-agent $node_(0) $tcp
set null [new Agent/TCPSink]
$ns_ attach-agent $node_(99) $null
$ns_ connect $tcp $null
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $tcp
node0的恒定速率源的设定
$cbr set type_ CBR ;# 数据源类型恒定速率
$cbr set packet_size_ 1000 ;# 包大小 1000Byte
$cbr set rate_ 1Mb ;# 速率: 1 Mbit/s
$cbr set random_ false ;# 速率不变
$ns_ at 0.5 "$cbr start" ;# 0.5秒时产生数据
$ns_ at 26.0 "$cbr stop" ;# 26秒时结束数据的产生
结束时 “for” 循环重置node0~99
for {set i 0} {$i < 100} {incr i} {
$ns_ initial_node_pos $node_($i) 30
$ns_ at 28.0 "$node_($i) reset" ;# 28sec时将节点设置恢复为默认
}
30sec 调用finish函数,20.1 结束仿真
$ns_ at 30.0 "finish"
$ns_ at 30.1 "puts \"NS EXITING...\"; $ns_ halt"
finish函数,关闭trace文件并调用nam动画演示仿真
proc finish {} {
global ns_ f nf val
$ns_ flush-trace
close $f
close $nf
exec nam PCF_100.nam &
exit 0
}
$ns_ run ;#执行仿真