学习802.11之MAC帧格式(一篇就够!)
802.11规范的关键在于MAC(媒介访问控制层),MAC位于各式物理层之上,控制数据传输。负责核心成帧操作以及与有线骨干网络之间的交互。
802.11 MAC采用载波监听多路访问(CSMA)机制来控制对传输媒介的访问,不过冲突会浪费宝贵的传输资源,因而802.11采用冲突避免(CSMA/CA)机制,而非Ethernet所采用的冲突检测(CSMA/CD)机制。
在802.11无线局域网中,MAC帧是实现MAC协议和保证数据有效通讯的基础。802.11MAC帧格式很特别,它的长度是可变的。不同功能的数据帧长度不一样。

802.11 MAC一般格式
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈
Frame Control(帧控制)
所有帧的开头均为2个字节的Frame Control。

1:Protocol字段:有2位组成,用以显示该帧所使用的MAC版本,目前802.11 MAC只有1个版本,它的协议编号为0
2:Type与Subtype字段:用来指定使用的帧类型。
其中Type表示帧类型:
00: 管理帧(Management Frame)
01: 控制帧(Control Frame)
10: 数据帧(Data Frame)
- 管理帧:负责监督,主要用来加入或退出无线网络以及处理接入点之间关联的转移事宜。

SubType:
0000:Association Request(关联请求)
0001:Association Response(关联响应)
0010:Reassociation Request(重新关联请求)
0011:Reassocation response(重新关联响应)
0100:Probe Request(探测请求)
0101:Probe Response(探测响应)
1000:Beacon(信标)
1001:ATIM(通知传输指示消息)
1010:Disassociation(取消关联)
1011:Authentication(身份验证)
1100:Deauthentication(解除身份验证)
- 控制帧:通常与数据帧搭配使用,负责区域的清空、信道的取得、载波监听的维护,并于收到数据时予以肯定确认,借此提高工作站之间数据传输的可靠性。
SubType:
1010:Power Svae(PS)-Poll(省电-轮询)
1011:RTS(请求发送)
1100:CTS(清除发送)
1101:ACK(确认)
1110:CF-End(无竞争周期结束)
1111:CF-End(无竞争周期结束)+CF-ACK(无竞争周期确认)
- 数据帧:负责在工作站之间搬运数据。会将上层协议的数据置于帧主体中加以传递。
SubType:
0000:Data(数据)
0001:Data+CF-ACK
0010:Data+CF-Poll
0011:Data+CF-ACK+CF-Poll
0100:Null data(无数据:未传送数据)
0101:CF-ACK(未传送数据)
0110:CF-Poll(未传送数据)
0111:Data +CF-ACK+CF-Poll(未传送数据)
1000:QoS Data(数据)
1001:QoSData+CF-ACK
1010:QoSData+CF-Poll
1011:QoSData+CF-ACK+CF-Poll
1100:QoS Null(无数据:未传送数据)
1101:QoS CF-ACK(未传送数据)
1110:QoS CF-Poll(未传送数据)
1111:QoS CF-ACK+CF-Poll(未传送数据)
3:To DS与From DS:用来指示帧的目的地是否为分布式系统。
- To DS=0,From DS=0:表示Station之间的AD Hoc类似的通信,或者控制侦、管理侦。
- To DS=0,From DS=1:Station接收的侦。
- To DS=1,From DS = 0:Station发送的侦。
- To DS=1,From DS = 1:无线桥接器上的数据侦。
4:More Fragments:上层的封包经过MAC分段处理,除了最后一个片段,其他片段均会将该为置1。
5:Retry:重传标记,任何重传的帧都会将该为置位1,以协助接收端剔除重复的帧。
6:Power Management:用来指示工作站在完成当前原子帧交换之后是否进入省电(Power-Save)模式,1表示工作站即将进入深感模式,0表示工作站会一直保持清醒状态。接入点不允许进入省电模式,所以接入点传送的帧中此位必然为0。
7:More data:接入点会为处于省电模式的工作站缓存帧,接入点如果设置此位,表示至少有1个帧待传给休眠中的工作站。
8:Protected frame:该位被置1,帧收到链路层安全协议包含,
9:Order:该位被置1,帧与帧严格要求依次传送。
Duration/ID字段
紧跟在FrameControl字段之后,此字段有很多功能,有三种可能是形式:
1:Duration:持续时间,bit15被设定为0。用来记载网络分配矢量(NAV),访问媒介的时间限制由NAV指定。,Duration/ID字段被用来设定NAV。
2:无竞争周期所传送的帧(CFP)。bit15被设为1,bit14被设为0。其余所有位均为0,字段值为32768。
3:PS-Poll帧:bit15和bit14均被设为1,用于从省电模式醒来的Station发送
AID(关联标知符)以取得在AP中的缓存帧。
Address字段
一个802.11帧最多可以包含4个Address字段。通常有3个,SA、DA、BSSID,由To DS/From DS位来决定。
其中:
BSSID:基本服务集标识符
DA:目的地址
SA:源地址
RA:接收端地址
TA:发送端地址
SequenceControl(顺序控制)字段
此字段16位,用来重组帧片段及丢弃重复帧。它是由4位的片段编号(fragment number)字段以及12位的顺序(sequence nubmer)编号。
控制帧未使用顺序编号,无此字段。

当上层帧交给MAC传送时,会被赋予一个顺序编号。此字段的作用相当于已传帧的计数器取4096的模,此计数器从0起算,MAC每处理一个上层封包它就会累加1,如果上层封包被分段处理,则所有帧片段都会具有相同的顺序编号。如果是重传帧,则顺序编号不会有任何改变。
帧片段之间的差异在于片段编号,第一个片段的编号为0,其后每个片段编号依次累加1,重传的片段编号会保持原始的顺序编号以协助重组。
FrameBody((帧主体)字段
也称为数据字段,负责在工作站之间传递上层有效载荷。
FCS(帧校验序列)字段
循环冗余校验(CRC)码,FCS让工作站能攻检查所收到的帧的完整性。FCS的计算范围涵盖MAC标头里所有字段以及帧主体。
当帧送至无线接口时会先计算FCS,然后在经过RF链路传送出去。接收端随后会为收到的帧计算FCS,然后与记录在帧中的FCS进行比较。如果两者相符,则该帧极有可能在传送过程中未受损。
最后来一张Omnipeek抓包截图:


相关文章:
学习802.11之MAC帧格式(一篇就够!)
802.11规范的关键在于MAC(媒介访问控制层),MAC位于各式物理层之上,控制数据传输。负责核心成帧操作以及与有线骨干网络之间的交互。 802.11 MAC采用载波监听多路访问(CSMA)机制来控制对传输媒介的访问&…...
使用阿里云IoT Studio建立物模型可视化界面
使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719 这次使用阿里云IoT Studio建立物模型的Web页面 阿里云IoT Studio: https://studio.i…...
HBase 复习 ---- chapter07
HBase 复习 ---- chapter07部署 HBase(运维) 1:部署 HBase 实际是部署了三个技术(hadoop zookeeper hbase) hadoop hdfs mapreduce common hdfs namenode datanode secondaryNamenode yarn ResourceManager&a…...
跟我一起写Makefile--个人总结
此篇笔记是根据陈皓大佬《跟我一起写Makefile》学习所得 文章目录换行符clean变量make的自动推导另类风格的Makefile清空目标文件的规则cleanMakefile总述显示规则隐晦规则变量的定义注释引用其它的Makefile环境变量MAKEFILESmake的工作方式书写规则规则举例规则的语法在规则中…...
设计模式之为什么要学好设计模式
目录1 回顾软件设计原则2 设计模式总览3 经典框架都在用设计模式解决问题1 回顾软件设计原则 不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的是解耦。设计模式天天都在用,但自己却无感知。我们把设…...
大数据时代的小数据神器 - asqlcell
自从Google发布了经典的MapReduce论文,以及Yahoo开源了Hadoop的实现,大数据这个词就成为了一个行业的热门。在不断提高的机器性能和各种层出不穷的工具框架加持下,数据分析开始从过去的采样抽查变成全量整体,原先被抽样丢弃的隐藏…...
【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案
前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点,有同学在后台提问: “做完前期的调研和准备工作,领导要求写一个落地方案并评审,自动化测试的落地方案该怎么写”? 首先这个要求我觉得挺正常&a…...
67. 二进制求和
文章目录题目描述竖式模拟转换为十进制计算题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” …...
1555数列极差(队列 优先队列 )
目录 题目描述 解题思路 代码部分 题目描述 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得…...
代码随想录算法训练营第二十七天 | 93.复原IP地址,78.子集,90.子集II
一、参考资料复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/子集题目链接/文章讲解:https://programmercarl.com/0078.…...
jvm类加载器
概念 Bootstarp ClassLoader (引导类加载器) 加载String等核心的类Ext ClassLoader (拓展类加载器)System ClassLoader (系统类加载器) 加载用户自定义的类 关系 BootstrapClassLoader 包含 ExtClassLoaderExtClassLoader 包含 SystemClassLoader彼此是包含关系,不…...
Rust学习入门--【7】Rust 数据类型
类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的,就是 …...
阅读MySQL必知必会,查缺补漏
MySQL自带数据库 information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。 performance_schema:是MySQL系统自…...
MySQL数据库10——多表连接查询
数据如果在多个表里面,需要进行连接查询。 一般在pandas里面merge合并会用到一个索引,按这个索引的规则进行合并叫做有规则的等值连接。若不按规则连接,遍历两两组合的所有可能性,叫做笛卡尔积。 笛卡尔积连接 通常人们都会设置…...
华为OD机试 - 括号检查(Python)| 真题含思路
括号检查 题目 现有一字符串 仅由 (,),{,},[,] 六种括号组成,若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出 0 0 <= 字符串长度 <= 100000 输入 一个只…...
安全渗透测试中的一款免费开源的超级关键词URL采集工具
安全渗透测试中的一款免费开源的超级关键词URL采集工具。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使…...
数据资产管理实践白皮书(6.0版)解读
目录 第一章数据资产管理概述 ( 一 ) 数据资产管理和数据要素的关系...
c/c++开发,无可避免的函数指针使用案例
一、函数指针简介 函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。例如: char* (*pf1)(char * p1,char *p2); 这是一个函数指针,其…...
QT(12)-QThreadPool
1 简介 QThreadPool是Qt框架中的一个类,提供了一组工作线程池。该线程池自动管理一组工作线程,在线程可用时分配任务。使用线程池的主要优点是,它可以减少创建和销毁线程的开销,因为可以重复使用线程。 线程池设计用于场景中&am…...
【Java|golang】1138. 字母板上的路径
我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。 在本题里,字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。 我们可以按下面的指令规则行动: 如果方格存…...
DexGraspNet与多指手抓取算法详解:从理论到工程实现
目录 DexGraspNet与多指手抓取算法详解:从理论到工程实现 第一部分:原理详解 第一章 绪论与灵巧抓取的挑战 1.1 机器人抓取技术演进 1.1.1 从平行夹爪到多指灵巧手 1.1.2 灵巧抓取的独特挑战 1.2 DexGraspNet的研究背景与意义 1.2.1 大规模数据驱动的必要性 1.2.2 D…...
为什么你的Java车载模块在-40℃冷启动失败?温度敏感型JIT编译失效分析与AOT预编译加固方案(ISO 26262 Part 6实证)
第一章:Java车载系统实时性优化技巧在车载嵌入式环境中,Java虚拟机(JVM)的默认行为往往难以满足毫秒级响应、确定性调度与低抖动等硬实时需求。尽管Java并非传统实时语言,但通过深度配置与架构约束,可显著提…...
【开题答辩全过程】以 基于JSP框架的医疗管理系统为例,包含答辩的问题和答案
个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...
【TC3xx芯片】Endinit机制实战:从解锁到上锁的完整代码解析
1. TC3xx芯片Endinit机制的核心作用 在嵌入式系统开发中,寄存器保护是确保系统稳定性的关键机制。TC3xx系列芯片采用的Endinit(End of initialization)保护方案,就像给重要寄存器装了一把智能密码锁。想象一下,你家的保…...
Vivado IP封装实战:从源码到GUI配置的完整避坑指南(含EDF/DCP对比)
Vivado IP封装实战:从源码到GUI配置的完整避坑指南(含EDF/DCP对比) 在FPGA开发中,团队协作和代码共享是常见需求,但如何平衡代码保护与功能灵活性一直是开发者面临的难题。Vivado提供了多种模块封装方案,每…...
如何让Windows任务栏变透明?TranslucentTB完整教程指南
如何让Windows任务栏变透明?TranslucentTB完整教程指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要为你的Windows桌面…...
Qwen3智能字幕系统效果展示:法庭庭审录音→高司法术语准确率字幕
Qwen3智能字幕系统效果展示:法庭庭审录音→高司法术语准确率字幕 1. 引言:当AI成为“数字书记员” 想象一下这样的场景:一场长达数小时的法庭庭审正在进行,书记员的手指在键盘上飞速敲击,试图跟上律师与证人间密集、…...
动漫IP商业化新路径:AnythingtoRealCharacters2511助力二次元角色真人化营销落地
动漫IP商业化新路径:AnythingtoRealCharacters2511助力二次元角色真人化营销落地 1. 动漫角色真人化的商业价值 动漫IP的商业化一直是内容产业的重要课题。传统的周边商品、联名合作虽然有效,但缺乏突破性创新。随着AI技术的发展,动漫角色真…...
TinyNAS子网硬件感知编译:针对T4 GPU的CUDA kernel自动调优
TinyNAS子网硬件感知编译:针对T4 GPU的CUDA kernel自动调优 1. 项目概述 1.1 这是什么技术? TinyNAS子网硬件感知编译是一项专门针对NVIDIA T4 GPU优化的深度学习编译技术。它通过智能分析神经网络结构和硬件特性,自动生成最优的CUDA kern…...
STM32一键下载电路设计与CH340应用
STM32一键下载电路设计与实现1. 项目概述1.1 功能需求STM32系列微控制器在开发过程中,通常需要通过串口进行程序下载。传统下载方式需要手动操作BOOT0和RESET引脚,过程繁琐且容易出错。本项目设计了一种基于CH340芯片的自动下载电路,通过软件…...
