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

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹