802.11 头部字段介绍
一、基本概念
- DU (Data Unit)即数据单元,信息传输的最小数据集合
- 传递过程逐层封装(Encapsulation)
- SDU (Service Data Unit) / PDU (Protocol Data Unit)
- MSDU → MIC → 分帧 → 添加IV → 加密 → 添加MAC头部 → MPDU
- MPDU/PSDU +物理头 = PPDU → RF发射
二、PDU和SDU补充
原文:http://www.elecfans.com/d/1690388.html
1、SDU(service Data Unit)
SDU(service Data Unit):服务数据单元,又叫业务数据单元,是指定层的用户服务的数据集,传送到接收方的时候同一协议层时数据没有发生变化,即业务部分,然后发给下层之后,下层将其封装在PDU中发送出去。服务数据单元是从高层协议来的信息单元传送到低层协议。第N层服务数据单元SDU,和上一层的协议数据单元(PDU)是一一对应的。根据协议数据单元的数据的不同,送到接收端的指定层。
2、PDU(Protocol Data Unit)
在电信领域,协议数据单元(PDU,Protocol Data Unit)有以下几层意义:
- 网络的对等实体传送的信息单元,包括了控制信息,地址信息,或者数据。
- 在协议系统里,在指定的协议层上传送的数据单元,包含了该层的协议控制信息和用户信息。
- 在OSI模型系统里,PDU和最底下四层相关
3、PDU和SDU的区别
(1)PDU的封装/解封装
在发送方,将用户递交的SDU加上协议控制信息PCI,封装成PDU;在接收方,讲接收到的PDU解封装,去掉PCI,还原成SDU送交接收方用户。
(2)SDU分段/装配
如果下层通道的带宽不能满足传递SDU的需要,就需要将一个SDU分成多段,分别封装成PDU发送出去(分段);在接收方再将这些PDU解封装后重新装配成SDU。
(3)SDU拼接/分离
拼接是指在发送方(n)层协议实体把多个长度较短的(n)SDU封装成一个(n)PDU来发送,在接收放再将接收到的(n)PDU解封装,将多个(n)SDU分离出来。采用拼接功能的目的是提高通道的利用率。
(4)PDU分割/组合
PDU分割是指在发送端(n)层协议实体把一个(n)PDU分割成多个(n-1)SDU,并行地从多个(n-1)通道发送出去;接收端再将收到的多个(n-1)SDU组合成一个(n)PDU。由于这是一个N层功能,所以组合操作在N层中进行,即N层先得到多个分割开的(n)PDU,然后把它们组合成一个(n)PDU。有时NSDU较长,而N协议所要求的NPDU较短。这时就要对NSDU进行分段处理,将一个SDU分成两个或多个PDU来传送。当PDU所要求的长度比SDU还大时,也可将几个SDU合并成为一个PDU。
三、802.11 头部分析
1、802.11 MAC头结构
备注:Sequence Control 和 IPID的意义相似
2、Frame control
(1)Protocol Version (2bit)
802.11协议版本,始终为0、1、2、3
(2)Type (2bit)
规定帧的具体用途(3种帧类型)
- 控制帧(1)
- 数据帧(2)
- 管理帧(0)
(3)SubType (4bit)
每个类型对应多个子类型,协议规定不同类型/子类型的帧完成不同功能的操作
Association……:关联帧,station向AP发起,Probe……:探测帧,Reserved:保留位,尚未使用
(4)ToDS/FromDS(1/1bit)
标识帧的传输方向,传向DS或者来自DS;这两个字段的值决定着MAC头中4个Address字段的不同定义,具体如下图所示(BSSID即AP地址)
0x00:出现在IBSS环境中(可能是Management帧或者是Control帧类型) ,或者是STSL (Station to Station Link)中两个STA间通信, 这种情况下通信不通过AP;
0x01:表示Data帧从AP向STA传递;
0x02:表示Data帧从STA向AP传 递;
0x03:表示两个AP间通信,这是典型的WDS (Wireless Distribution System)环境下AP间的通信,或者表示Mesh环境下MP间的通信,只有此时才会使用到Address4字段(RA,TA两个AP的地址)。
(5)More frag (1bit)
表示是否还有后续帧,值为1时表示有后续分段,可能是Data或Management帧类型。只有单播接收地址的帧会被分段;
(6)Retry (1bit)
重传,值为1表示重传帧(初次发送是被置为0的,当发完后没收到ACK则会置1重发),可能是Data或Management帧类型,接收端进程使用此值防止帧重复(该值为1且自己已经接收过该帧,则会直接丢弃);
(7)Power Mgmt (1bit)
活动模式(0) /省电模式(1),STA处于省电模式时,向关联的AP发送该值为1的帧(AP从不使用此字段,恒为0),省电模式下STA不接收数据(但会接收AP发的一些特殊帧,如有唤醒意义的帧(省电 → 活动模式)),发送给它的Data帧由AP暂时缓存,待AP将它唤醒后,它会主动取回相应缓存;
(8)More Data (1bit)
当AP缓存了至少一个MSDU时,会向省电模式的STA发送该值为1的帧,表示有数据要传输给STA,接收到此帧的STA唤醒自己并向AP发送PS- Poll帧,取回由AP为其缓存的数据。也被用于AP有更多的广播 / 多播帧需要发送的情况;
(9)Protected Frame (1bit)
可能是Data或Management帧类型,表示MSDU是否被加密,也被用于表示PSK身份验证Frame#3帧,数据载荷为空时,该字段值为0;
(10)Order (1bit)
在非QoS(质量控制)帧的情况下,值为表示数据必须按严格顺序处理(如按顺序发送),通常为0;
3、Duration/ID (16bit)
所有Control帧都使用该字段,其作用随Type/SubType变化有所不同;
帧类型为PS Poll (type:1, subtype:10)时,表示STA关联的AID (association identity) ,即当station在省电模式收到AP的唤醒帧后,会向AP发送该字段填充为AID的PS-Poll帧,在AP收到PS-Poll帧后,根据AID发送为其缓存的数据;
其他情况下该字段作为一种载波侦听机制,表示接收下一帧之前需要保持的时间间隔,用于NAV (Network Allocation Vector)计算,单位是微秒;
4、MAC Layer Address
参见ToDS/FromDS(1/1bit)字段的介绍
补充:Basic service set ID (BSSID),它是BSS的2层唯一标识,Infrastructure模式中BSSID就是AP的MAC地址,当AP支持多BSS时,随机生成每个BSSID。
5、Sequence Control (16bit)
这个字段包含两个子字段: Sequence Number和Fragment Number;
Sequence Number是每个帧的编号,数值范围是0- 4095,以1为步长递增。当帧被分段时,同一帧中不同分段的Sequence Number相同;
Fragment Number是被分段的帧用于标识分段位置顺序的编号,数值范围是0- 15, 以1为步长递增(即帧加上头部信息后过大,则该帧又会被分成多端传送,段的编号即为Fragment Number);
6、Frame Body (变长)
数据字段,未加密的最大MSDU长度为2304字节(其中包含最大256字节的.上层头信息,和可被传递的数据2048字节)。不同的加密方法会增加一定的内容长度;
WEP:8 bytes → 2312 bytes
TKIP (WPA1):20 bytes → 2324 bytes
CCMP (WPA2):16 bytes → 2320 bytes
注:Control类型的帧没有Frame Body内容
7、FCS (32bit)
发送端对全部MAC包头和Frame Body内容进行CRC计算,计算结果即为FCS (Frame Check Sequence)值,接收端进行同样的计算,结果一致时,则接收端向发送端返回ACK,否则丢弃帧(只对单播帧有效,FCS错误的广 播/多播帧可能被接收)。
注:wireshark抓包时已经删除了FCS值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?