【80211-2022】【学习记录】【第九章】数据帧类型格式【1】

2024-01-16 09:52

本文主要是介绍【80211-2022】【学习记录】【第九章】数据帧类型格式【1】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、数据帧格式-概述

        数据帧的格式定义如图9-65所示。

        帧控制、持续时间、地址1、地址2、地址3和序列控制字段出现在所有数据帧子类型中。

        地址4字段的存在是由帧控制字段的To DS和From DS子字段的设置决定的(见下文)。

        QoS控制字段的存在取决于子类型子字段的QoS子字段的设置(参见帧控制字段的9.2.4.1.3)。HT控制字段的存在取决于帧控制字段的+HTC子场的设置(见9.2.4.1.10)。

        

        图9-65所示的最大帧体尺寸是针对最大尺寸a - msdu的GCMP加密(注意,在这种情况下不允许TKIP加密,并且任何网格控制字段都是a - msdu子帧的一部分)。对应的CCMP加密的最大值是7951个字节。如果不使用a -MSDU,则最大帧体大小为2346字节的GCMP加密的最大MSDU, 2338字节的CCMP加密的最大MSDU, 2342字节的TKIP加密的最大MSDU,包括在这两种情况下的18字节的网格控制字段。如果使用了厂商特定的密码套件,那么帧体的大小在所有情况下都可能会更大。

        Subtype子字段的QoS子字段(参见9.2.4.1.3)设置为1的数据帧名称中包含QoS,并在MAC头中包含QoS控制字段。根据上下文的不同,QoS数据帧要么指任何这样的帧,要么特指子类型为1000的数据帧。名称中包含QoS的其他特定数据框的引用(例如QoS Null或QoS Data +CF-Poll)通常建议使用后一种解释。

           QoS STA总是使用QoS数据帧向其他QoS STA传输数据。QoS STA使用Subtype子字段的QoS子字段为0的帧向非QoS STA传输数据。

        非QoS STA总是使用Subtype subfield的QoS子字段设置为0的帧向其他STA传输数据。

        对于非隐蔽的GCR广播数据帧,所有STA都使用Subtype子字段中QoS子字段为0的帧,除非发送STA知道BSS中的所有STA都具有QoS能力,此时发送STA使用QoS数据帧。

        对于非隐蔽的GCR组编址数据帧,所有sta使用Subtype subfield为0的数据帧,除非发送端知道属于组播组的BSS中的所有sta都具有QoS能力,此时sta使用QoS数据帧。

        其中dot11RobustAVStreamingImplemented为true的ap或dot11meshgcriplemented为true的mesh STAs使用具有QoS子字段的帧 Subtype子字段设置为1表示隐蔽的GCR帧,如11.21.16.3.5所述。

二、 Address and BSSID fields
        数据帧的地址字段的内容取决于帧控制字段中的To DS和From DS子字段的值,以及帧体字段是否包含一个MSDU(或其片段)或一个完整的A-MSDU,由QoS控制字段的A-MSDU Present子字段确定(参见9.2.4.5.9)。

        非mesh sta传输的地址字段内容定义如表9-30所示。mesh STAs传输的地址字段内容定义在9.3.5中,GLK STAs传输的地址字段内容定义在10.65中。如果某个字段的内容显示为不适用(N/ a),则该字段被省略。请注意,地址1总是保存预期接收方的接收地址(或者,在组寻址帧的情况下,保存接收方的地址),地址2总是保存传输帧的STA的地址。

        如果确认是必要的,STA使用Address 2字段的内容来指导确认。

        DA字段在Frame Body字段中包含MSDU(或其片段)或A-MSDU的目的。、

        注1-A SYNRA绝不是DA。当GLK AP使用SYNRA作为RA时,实际的DA在另一个字段中进行。见10.65。

        SA字段包含发起MSDU(或其分片)或A-MSDU的MAC实体的地址。

        当一个数据帧携带一个MSDU(或其分片)时,与该MSDU相关的DA和SA值在Address 1、Address 2、Address 3、Address 4字段中携带(根据to DS和From DS子字段的设置),如表9-30所示。

        当数据帧携带基本的a -MSDU时,a -MSDU携带的与每个MSDU相关的DA和SA值会在a -MSDU子帧首部中携带。表9-30中的Address 1和Address 2字段为0、1或同时为0、1和1。

        

        RA字段是帧的直接预期接收STA的个人地址,或者是帧的直接预期接收STA的组地址。

        当GLK AP数据帧通过groupcast RA发送4地址MAC首部时,RA是SYNRA(参见10.65)。当DA不被相应的IEEE 802.1Q桥接器所知道时,SYNRA也被使用。RA字段携带SYNRA时的格式如图9-66所示。

        

        注2:IEEE Std 802和IEEE Std 802.1CQ定义的组播MAC地址格式与SYNRA类似,但在IEEE Std 802.11中,组播MAC地址是DAs。由于SYNRAs只发生在RA领域,类似的格式可以通过在RA或DA中使用来消除歧义。

        SYNRA Type子字段用于在多种可能的SYNRA格式之间进行选择。SYNRA类型及其控制子字段格式如表9-31所示。

        每种SYNRA类型需要分别指定SYNRA Control子字段格式,定义如表9-31所示。

        

         

        基本SYNRA控制子字段中的辅助位图偏移子字段用于表示起始的辅助值,该值与辅助位图子字段的位0相关联。将其值乘以4以找到起始辅助值,对于非S1G STA,其值为0 ~ 494,对于S1G STA,其值为0 ~ 2040。其他值保留。

        注3 -这些与2007年(非S1G STAs)和8191 (S1G STAs)的最大AID值相匹配。

        基本SYNRA控制子字段中的辅助位图子字段为32个连续的辅助提供接受/丢弃指示。位B12到B43分别表示范围辅助位图偏移量× 4 + 1到辅助位图偏移量× 4 + 32中的辅助值。对于AID位图子字段中的每个比特,1表示接受,0表示丢弃。

        在基本SYNRA控制子字段中的其他辅助子字段为辅助位图子字段覆盖的值范围之外的辅助提供接受/丢弃指示。1表示接受,0表示丢弃。

        TA字段是发送帧的STA的地址。

        数据帧的BSSID字段设置如下:

        如果用户包含在AP中或与AP相关联,则BSSID是包含在AP中的用户当前使用的地址。

        如果该用户是IBSS用户,则BSSID为启动IBSS的用户选择的BSSID。

        如果STA在dot11OCBActivated为true时正在传输数据帧,则BSSID是通配符 BSSID。

        如果STA是MBSS的成员,则BSSID是发送端的地址,并且等于数据帧的TA。

        如果该用户参与了PBSS,则BSSID为PCP中包含的该用户的地址。

三、Other MAC Header fields

        Sequence Control字段在9.2.4.4中定义。

        QoS控制字段定义在9.2.4.5中。QoS控制字段的存在是由帧控制字段的Subtype子字段决定的,如9.2.4.1.3所述。

        HT控制字段在9.2.4.6中定义。HT控制场的存在由帧控制场的+HTC子场决定,如9.2.4.1.10所述。

四、The frame body

     帧主体由以下任意一种组成:

     MSDU(或其片段),Mesh控制字段(如果帧由Mesh STA传输,并且QoS控制字段的Mesh控制present子字段为1,则存在),以及security header和trailer(如果帧控制字段中的Protected帧子字段为1,则存在)。

        a - msdu和一个security header和trailer(如果帧控制字段中的Protected帧子字段为1,则存在,否则不存在)。

        通过设置QoS控制字段的A-MSDU Present子字段为1来表示A-MSDU在帧体中存在,如表9-10所示。

        对于子类型为Null、QoS Null、QoS CF-Ack、QoS CF-Poll、QoS CF-Ack +CF-Poll的数据帧,帧体字段为Null(即长度为0个字节);这些子类型用于MAC控制。

        对于子类型Data的数据帧,帧体字段在经过任何封装后都包含MSDU的全部或一部分。对于子类型QoS数据帧、QoS数据帧+CF-Ack、QoS数据帧+CF-Poll、QoS数据帧+CF-Ack +CF-Poll,帧体字段经过任何封装后都包含一个MSDU(或其片段)或A-MSDU,以保证安全性。对于mesh STA传输的子类型QoS数据帧,帧体字段还包含一个mesh控制字段,如9.2.4.7.3所述。

        帧主体字段的最大长度可以由MSDU的最大长度加上Mesh控制字段的长度(如果存在的话)加上加密封装的开销(例如,在单个数据帧中使用MAC层提供的任何封装总是可以发送最大长度的MSDU)来确定。当帧体携带A-MSDU时,帧体场的大小受以下限制:

        PHY的最大PSDU (PHY service data unit)长度

        如果a -MPDU聚合被一个非vht和非dmg STA使用,最大MPDU长度为4095 octet(见9.7)。

五、Duration field

        在QoS STA发送的所有数据帧中,Duration字段包含9.2.5中定义的持续时间值。

        在所有非qos sta发送的数据帧中,Duration字段的设置规则如下:

        如果“地址1”字段中包含组地址,则“持续时间”字段设置为0。

        如果帧控制字段的More Fragments bit为0,且Address 1字段包含单个地址,则Duration字段设置为发送1个Ack帧+ 1个SIFS帧所需的时间,单位为微秒。

        如果一帧的帧控制字段的More Fragments bit为1,且Address 1字段包含一个单独的地址,则Duration字段设置为该数据帧的下一个fragment传输所需的时间,单位为微秒,加上2个Ack帧,再加上3个SIFSs帧。

        数据帧的持续时间字段计算基于10.6中的规则,该规则确定传输帧交换序列中的控制帧的数据速率。

        如果计算的持续时间包含小数微秒,则该值将四舍五入到下一个更大的整数。

        所有STAs进程持续时间字段值小于或等于32 767的有效数据帧(不考虑这些帧中可能出现的RA、DA和/或BSSID地址值),以根据协调功能规则更新其导航设置。

        说明1 - QoS Data子类型和QoS Null子类型是DMG STA唯一传输的Data子类型。

        注2:HT控制场不存在于DMG STA传输的框架中。

这篇关于【80211-2022】【学习记录】【第九章】数据帧类型格式【1】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速