WLAN MAC子层DCF机制

2023-10-12 15:40
文章标签 mac 机制 wlan dcf 子层

本文主要是介绍WLAN MAC子层DCF机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

  1. DCF是IEEE 802.11 MAC的基本接入方法,采用CSMA/CA技术,属于节点(站点)间信道竞争方法;
  2. 在竞争过程中存在需要解决一些重点问题:
  • 节点监听信道时,如何判断信道空闲呢?
  • 节点发送数据时,如何规避数据发送冲突的问题?
  • 节点发送数据时,如果控制节点发送报文的顺序?

网络分配矢量(Network Allocation Vector NAV)

  1. 站点(节点)可通过两种方式确定媒介(信道)是否被占用:物理载波监听与虚拟载波监听。
  • 基于射频的媒介中实现物理载波监听硬件非常昂贵;
  • 由于隐藏节点随处都是,物理载波监听无法提供所有必要信息;
  • 因此802.11主要采用虚拟载波监听。
  1. 虚拟载波监听由网络分配矢量(NAV)提供。
  • NAV是一个计时器,用来指定媒体还要被占用多少时间;
  • 站点将NAV设为预计使用媒介的时间,其他工作站倒数NAV的值直到零,NAV不为零,代表媒介处于忙碌状态。
  • 由于无线传输的特殊性(广播),即其他站点可以监听到站点发送的数据帧,802.11帧的Duration字段中会记录NAV的值,那么其他站点的NAV可以被更新(符合要求时)。

示例

在这里插入图片描述

  1. A发送一个帧给C,因为无线媒介的特点是广播,B也可接收到这个帧。
  • 802.11帧包含一个duration字段,其中记载的时间足够发送完帧并收到确认帧。
  • B,C将会更新它的NAV=duration字段的值(针对不同的距离范围,节点更新自身NAV的值也不同),并且在NAV倒数为0前不会尝试发送。
  • 要求:工作站只会在duration字段的值大于当前NAV值时更新NAV。

帧间间隔(Inter Frame Space IFS)与优先级

  1. IEEE 802.11规定了一系列长度不等的帧I间间隔IFS,用于实现优先级模式,如下常用类型:
  • SIFS(short IFS):最短的IFS,被用于所有的立即响应动作中。
  • PIFS(point coordination function IFS,点协调功能IFS):一个中间长度的IFS,在发布轮询时,被中央控制器用于PCF模式
  • DIFS(distributed coordination function IFS,分布协调功能IFS):最长的IFS,用于非同步帧的接入竞争。

DCF工作原理

DCF工作流程图

在这里插入图片描述
在这里插入图片描述

(1)如果站点有帧发送时,会监听信道是否空闲:

  • 站点通过接收广播无线报文,获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;

(2)如果当前站点NAV值倒数为0,表示信道空闲:

  • 如果信道空闲,节点就再等待一个指定的时间DIFS(不同的帧间间隔确定了帧的优先级,优先级高的IFS有利于站点更快地发送报文);
  • 如果在DIFS结束前没有监听到其他站点的发送,则计算一个随机退避时间,启动随机退避机制(随机退避机制能够减少了同一时间点上的多个工作站之间的竞争碰撞概率),设置了一个退避时间计时器,否则重复步骤(1)

(3)站点每经历一个时隙的时间就检测一次信道:

  • 如果检测到信道空闲,退避计时器继续计时,否则冻结退避计时器的剩余时间,重复步骤(1)
  • 如果退避计时器的时间减小到零时,就开始发送整个数据帧

(4)发送报文时,并且监听信道:

  • 未监听到其他站点的报文,报文未发生碰撞,否则发送碰撞信号,记录碰撞次数(如果次数未超过16,继续尝试发送,否则判断发送失败,错误信息上报上层应用),重复步骤(1)
  • 每次发送的报文数据帧中duration字段记录站点占用信道的时间,即源站点和目标站点报文交互,报文发送完成的时间;
  • 如果站点报文发送完成,释放信道,信道空闲,其他站点有数据发送时,重复步骤(1)

DCF实例

在这里插入图片描述
(1)源站监听信道,发现信道空闲:

  • 并且等待DIFS时间后,信道仍然空闲,启动随机退避定时器(时间可以设置为0),定时器倒数为0时,开始发送控制帧RTS
  • 控制帧RTS中duration字段记录源站占用信道的时间(用于完成与目标站点的数据交互)

(2)由于报文属于无线广播报文,目标站点和其他站点都能收到 RTS数据帧报文:

  1. 目标站收到报文后:
  • 通过address等字段确定是发送给自己的报文,继续解析报文、获取数据、进行业务处理,并且等待SIFS时间后,发现信道仍然空闲,发送应答控制帧CTS
  • 应答控制帧CTS中duration字段同样记录目标站占用信道的时间(用于完成与源站点的数据交互)
  1. 其他站收到报文后:
  • 通过address等字段确定不是发送给自己的报文,不继续解析报文,不应答;
  • 同时获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;

(3)由于报文属于无线广播报文,目标站点和其他站点都能收到 CTS数据帧报文:

  1. 源站收到报文后:
  • 通过address等字段确定是发送给自己的报文,继续解析报文、获取数据、进行业务处理,并且等待SIFS时间后,发现信道仍然空闲,发送数据帧
  • 数据帧中duration字段同样记录源站占用信道的时间(用于完成与目标站点的数据交互)
  1. 其他站收到报文后:
  • 通过address等字段确定不是发送给自己的报文,不继续解析报文,不应答;
  • 同时获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;

(4)由于报文属于无线广播报文,目标站点和其他站点都能收到 数据帧报文:

  1. 目标站收到报文后:
  • 通过address等字段确定是发送给自己的报文,继续解析报文、获取数据、进行业务处理,并且等待SIFS时间后,发现信道仍然空闲,发送应答控制帧ACK
  • 应答控制帧ACK中duration字段同样记录目标站占用信道的时间(用于完成与源站点的数据交互)
  1. 其他站收到报文后:
  • 通过address等字段确定不是发送给自己的报文,不继续解析报文,不应答;
  • 同时获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;

(5)此时源站和目标站完成数据交互,占用信道时间结束,其他站点同样发现信道空闲(自身NAV为0):

  • 其他站监听信道,发现信道空闲,并且等待DIFS时间后,如果信道仍然空闲,启动随机退避定时器(时间可以设置为0),定时器倒数为0时,开始发送控制帧RTS
  • 报文中duration字段记录其他站占用信道的时间(用于完成与目标站点的数据交互)

这篇关于WLAN MAC子层DCF机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/196810

相关文章

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程