qq_42596359 2019-06-16 18:18
浏览 584

NS2.35 中实现MAC/802.11 的PCF接入方式

本人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 ;#执行仿真

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥200 uniapp长期运行卡死问题解决
    • ¥15 latex怎么处理论文引理引用参考文献
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
    • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
    • ¥15 乘性高斯噪声在深度学习网络中的应用