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

相关文章

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

mac安装redis全过程

《mac安装redis全过程》文章内容主要介绍了如何从官网下载指定版本的Redis,以及如何在自定义目录下安装和启动Redis,还提到了如何修改Redis的密码和配置文件,以及使用RedisInsig... 目录MAC安装Redis安装启动redis 配置redis 常用命令总结mac安装redis官网下

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization