基于IEEE 802.11标准的WiFi MAC层协议性能仿真系统
项目介绍
本项目是一个基于MATLAB开发的离散时间驱动(Discrete Time-Driven)WiFi MAC层协议仿真平台。系统专注于IEEE 802.11标准中的核心机制,特别是分布式协调功能(DCF)下的载波侦听多路访问/冲突避免(CSMA/CA)协议。通过对物理载波侦听、虚拟载波侦听(NAV)、退避算法以及四次握手机制的精密建模,该系统能够深入分析无线网络在多节点并发访问环境下的动态行为,并量化评估网络吞吐量、时延和冲突概率指标。
功能特性
- 完整的握手机制实现:支持RTS(请求发送)、CTS(允许发送)、Data(数据传输)以及ACK(确认帧)的四次握手全过程。
- 虚拟载波侦听(NAV):实现了基于网络分配矢量的预约机制,节点可根据侦听到的帧长度信息更新自身的NAV状态,有效缓解隐藏终端问题。
- 二进制指数退避(BEB)算法:模拟了争用窗口(CW)在冲突发生后的指数级增长以及成功传输后的重置过程。
- 灵活的网络拓扑构建:支持在自定义区域内随机分布节点,并根据欧几里得距离计算节点间的通信可达性。
- 动态流量模型:采用泊松分布简化的随机业务到达模型,模拟真实世界的网络负载需求。
- 多维性能统计可视化:系统可自动生成累计吞吐量图、节点负载平衡柱状图、NAV状态时序图以及网络拓扑覆盖图。
系统要求
- 软件版本:MATLAB 2020a 或更高版本(需支持 struct 和基本绘图函数)。
- 硬件配置:基础运行内存 4GB 以上,CPU 双核及以上即可流畅运行仿真循环。
仿真实现逻辑说明
仿真系统通过一个主循环驱动,每个循环代表一个时隙(Slot),具体实现逻辑如下:
- 环境与参数初始化
* 设置基础时序参数:如20us的时隙长度(Slot Time)、SIFS(10us)以及DIFS(50us)。
* 计算各协议帧占用的时隙数:根据预设的载荷大小(如8000bit)和物理带宽(11Mbps)计算RTS、CTS、DATA、ACK各帧的时延跨度。
* 生成空间拓扑:在100x100的二维空间内布置节点,并设定通信半径(60m)以判定节点间的信号覆盖范围。
- 节点状态机管理
每个节点被建模为一个独立的状态机,包含以下核心状态转换:
*
IDLE(空闲):检测到缓冲区有数据包到达后,进入DIFS等待状态。
*
DIFS_WAIT(DIFS等待):执行物理载波侦听。若信道在DIFS期间保持空闲,则进入退避逻辑。
*
BACKOFF(退避):从[0, CW]中随机选取退避计数,信道空闲时递减。
*
SEND_RTS / WAIT_CTS:退避归零后发送RTS并侦听冲突。若成功,则锁定信道并通知通信覆盖范围内的其他节点更新NAV。
*
SEND_DATA / WAIT_ACK:在获取CTS后执行数据传输,并在接收到ACK后完成一次成功的传输任务。
*
NAV_BUSY(NAV占用):当节点监听到其他节点的握手信号时,进入该状态直到NAV计时器归零。
- 冲突检测模型
在RTS发送阶段,系统会检查当前信道中是否存在两个或多个节点同时处于发送状态。如果发生并发发送,则判定为冲突(Collision),触发二进制指数退避算法:争用窗口翻倍,节点重新进入退避循环。
- NAV机制的实现细节
当一个节点成功启动RTS/CTS过程时,系统会遍历所有在该节点通信半径内的其他节点,并基于后续握手过程所需的全部时间周期设置其NAV计时器值。在NAV计时期间,节点状态被强制锁定为繁忙,从而实现虚拟载波侦听。
- 数据采集与后处理
*
吞吐量统计:实时累计成功接收的Payload大小。
*
时延分析:基于总仿真时间和成功传输次数,计算平均报文访问时延。
*
冲突率监测:通过计数器记录RTS碰撞次数与成功传输次数的比值。
核心算法与代码细节分析
- 二进制指数退避逻辑
系统在发生冲突时通过公式
CW = min(CW_max, (CW+1)*2 - 1) 来更新争用窗口。这一机制通过动态调整竞争激烈程度,有效防止了在大节点规模下的持续碰撞,体现了802.11标准在公平性与效率之间的平衡。
- 逻辑信道状态判定
仿真通过判断
active_sending(当前处于发送状态的节点数量)来界定信道物理状态。只有当物理信道处于空闲且节点的NAV计时器为0时,节点才允许进行退避计数的递减,完整复刻了物理载波侦听与虚拟载波侦听的并行处理逻辑。
- 空间相关性处理
虽然代码在冲突判断上做了简化处理,但在NAV更新时严格遵循了距离矩阵。只有在通信范围(comm_range)内的节点才会受到NAV干扰,这为后续研究隐藏终端问题(即两个节点互不可见但同时发向同一个接收端导致的冲突)提供了基础拓扑支持。
- 自动化结果解析
仿真结束后,系统会自动进行数据清洗,将Slot单位的时间序列转换为对应的毫秒级数据。可视化模块通过多窗口绘图,展示了节点负载的分布情况。例如,通过条形图可以看出各节点发送成功的包数,从而直观判断网络是否存在明显的长期不公平现象。