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机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/mn3321/article/details/115710466
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/196810

相关文章

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

JVM垃圾回收机制之GC解读

《JVM垃圾回收机制之GC解读》:本文主要介绍JVM垃圾回收机制之GC,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、死亡对象的判断算法1.1 引用计数算法1.2 可达性分析算法二、垃圾回收算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法2.4

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触