学习802.11之MAC帧格式(一篇就够!)

news2024/12/24 21:57:01

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抓包截图:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/339926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统闲谈05——内存管理

操作系统闲谈05——内存管理 一、 内存管理的基本方式 01 段式内存管理 将程序按照逻辑关系划分为段,每个段的大小不等,比如从下到上(代码段、数据段、bss段、栈、文件映射、堆等等),然后通过地址映射机制转换为实际…

阻抗匹配之反射波形测量

稍微接触过高速信号的朋友,一定对阻抗匹配和信号反射都有所了解,甚至可以按照公式,把反射波形一路推导出来。但是,纸上得来终绝浅,绝知此事要躬行。 今天,我们就来实测一下信号反射波形,测试环…

【MySQL】MyCat分库分表分片规则配置详解与实战(MySQL专栏启动)

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公…

2023年美国大学生数学建模时间、分析及算法代码

美国大学生数学建模——干货2023年美赛比赛日期和时间赛题类型算法代码美赛常见数模问题分类问题判别分析:聚类分析:神经网络分类:优化问题线性规划:非线性规划:整数规划:动态规划:多目标规划&a…

超详细讲解字符串查找函数(保姆级教程!!!)

超详细讲解字符串查找函数(保姆级教程!!!)字符串查找函数strstr函数strstr函数的使用strstr函数的模拟实现strtok函数strtok函数的使用strtok函数的模拟实现strpbrk函数strpbrk函数的使用strpbrk函数的模拟实现strcspn…

地级市用电、用水、用气数据指标

用电用水量和煤气及液化石油气供应及利用情况可以反映出城市基础设施的建设情况!之前我们基于历年的《中国城市统计年鉴》整理了1999—2020年的人口数量数据指标、人口变动数据指标、用地相关数据指标、污染物排放和环境治理相关数据指标、地区生产总值及一二三产构…

【MyBatis】| MyBatis的逆向⼯程

目录 一:MyBatis的逆向⼯程 1. 逆向⼯程配置与⽣成 2. 测试生成的逆向⼯程 一:MyBatis的逆向⼯程 (1)所谓的逆向⼯程是:根据数据库表逆向⽣成Java的pojo类,SqlMapper.xml⽂件,以及Mapper接⼝…

redis高可用之主从复制

一、前置知识 分布式系统理论基石CAP:consistent-一致性,availability-可用性,partition tolerance-分区容忍性。网络分区:网络断开也叫网络分区,当网络分区发生时,一致性会被破坏,除非牺牲可用…

磁盘管理(8)

磁盘管理 0 引言 速度是影响文件系统性能的主要因素,因此提高磁盘I/O速度的主要途径:选择性能好的磁盘、采用好的磁盘调度算法和设置磁盘高速缓冲区。 1 磁盘的性能 影响磁盘性能的因素: 数据的结构磁盘的类型磁盘访问时间 2 磁盘的结构…

Vscode使用ChatGPT插件

文章目录1.下载vscode插件2.登录ChatGPT,生成APIKeys3.测试4.使用5.其他功能1.下载vscode插件 2.登录ChatGPT,生成APIKeys 地址:https://beta.openai.com/account/api-keys 3.测试 4.使用 (1)请求简单的模版代码 …

Pycharm 2020 社区版常用快捷键

版本确实有点旧不过快捷键应该不会怎么 变记录一下。 Ctrl Space 基本的代码完成(类、方法、属性) Ctrl Alt Space 快速导入任意类 Ctrl Shift Enter 语句完成 Ctrl P 参数信息(在方法中调用参数) Ctrl Q 快速查看文档…

Golang 结构体笔记

结构体是一个自定义的数据类型,是值类型声明结构体type 结构体名称 struct {field_1 typefield_2 type}注意事项字段声明语法同变量,示例:字段名 字段类型字段的类型可以为:基本类型、数组或引用类型创建一个结构体变量后&#xf…

谷粒商城--品牌管理详情

目录 1.简单上传测试 2.Aliyun Spring Boot OSS 3.模块mall-third-service 4.前端 5.数据校验 6.JSR303数据校验 7.分组校验功能 8.自定义校验功能 9.完善代码 1.简单上传测试 OSS是对象存储服务,有什么用呢?把图片存储到云服务器上能让所有人…

杨校老师课堂之JavaScript定时器案例的红绿灯设计--原始写法

主要介绍了JavaScript定时器设置、使用与倒计时案例,详细分析了javascript定时器的设置、取消、循环调用并附带一个倒计时功能应用案例,需要的朋友可以参考下&#xff1a; 运行效果图&#xff1a; 配套视频课程 基于JavaScript的红绿灯设计演示代码如下: <!DOCTYPE html>…

《Keras深度学习:入门、实战与进阶》之印第安人糖尿病诊断

本文摘自《Keras深度学习&#xff1a;入门、实战与进阶》。 1、数据理解 本节使用Pima Indians糖尿病发病情况数据集。该数据集最初来自国家糖尿病/消化/肾脏疾病研究所。数据集的目标是基于数据集中包含的某些诊断测量来诊断性的预测患者是否患有糖尿病。数据集由多个医学预…

python+django大学生成绩综合考评系统pycharm项目

开发语言&#xff1a;Python 框架&#xff1a;django Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;PyCharm 通常 一个Django model 对应一张数据表&#xff0c;model是以类的形式表现的 实现了ORM 对象…

Unity SRP自定义渲染管线学习2.2: 合批(Batching) SRP Batcher

接下来我们要来学习下自定义渲染管线中的合批&#xff0c;这一节主要学习SRP Batcher 每一次的Draw Call都需要CPU和GPU之间的通信&#xff0c;如果有大量的数据需要从CPU发送到GPU中&#xff0c;那GPU就可能因为等待数据而浪费时间&#xff0c;而CPU会因为忙于发送数据导致无…

第五章:Windows server加域

加入AD域&#xff1a;教学视频&#xff1a;https://www.bilibili.com/video/BV1xM4y1D7oL/?spm_id_from333.999.0.0首先我们选择一个干净的&#xff0c;也就是新建的没动过的Windows server虚拟机。我们将DNS改成域的ip地址&#xff0c;还要保证它们之间能ping的通&#xff0c…

详细解读ChatGPT:如何调用ChatGPT的API接口到官方例子的说明以及GitHub上的源码应用

文章目录1. 解读ChatGPT1.1 词语解释1.2 功能解读2. GitHub上ChatGPT的应用源码3. 调用ChatGPT的API4. 官方例子说明5. 集成ChatGPT自ChatGPT出来到如今&#xff0c;始终走在火热的道路上&#xff0c;如今日活用户破亿&#xff0c;他为何有如此大的魅力&#xff0c;深受广大用户…

opencv保存图片

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…