首页 > 其他分享 >WLAN 帧详解

WLAN 帧详解

时间:2022-10-25 14:02:19浏览次数:37  
标签:WLAN Ack CF 详解 发送数据 QoS Poll Data

帧格式

如上是一个80211的帧格式,传输顺序是从左向右发送,也就是是说最高bit将会最后出现

FrameControl

FrameControl如下图所示

FrameControl的第一个字段是Protocal目前为0,其次是Type【bit3,bit2】与Subtype位【bit7,bit6,bit5,bit4】,在射频发送的时候的先发送bit0后发送bit7,发送时最高bit最后出现,在下面的描述中为了方便阅读,我们将最高位放在左边。

Subtype

管理帧类型type为00

子类型

  • 0000 Association request(连接要求)
  • 0001 Association response(连接应答)
  • 0010 Reassociation request(重新连接要求)
  • 0011 Reassociation response(重新连接应答)
  • 0100 Probe request(探查要求)
  • 0101 Probe response(探查应答)
  • 1000 Beacon(导引信号)
  • 1001 ATIM(数据代传指示通知信号)
  • 1010 Disassociation(解除连接)
  • 1011 Authentication(身份验证)
  • 1100 Deauthentication(解除认证)

FrameControl一共包含两个字节,在Linux中一般表示为 __le16 fc,__le表示小端模式,也就是说低字节保存在低地址,这样做的原因是在硬件发送时一般只给寄存器写一个开始地址由硬件自动发送,接收也是一样总是先接收到低地址的数据然后将数据保存在一段内存当中,程序在处理的时候直接将这段内存在进行拷贝和强制转换,如在Linux中的如下定义

struct ieee80211_hdr {

    __le16 frame_control;

    __le16 duration_id;

    u8 addr1[ETH_ALEN];

    u8 addr2[ETH_ALEN];

    u8 addr3[ETH_ALEN];

    __le16 seq_ctrl;

    u8 addr4[ETH_ALEN];

}

处理无线数据时直接进行强制转换如下,假设接收数据内存为buffer

struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)buffer

这样就可以通过hdr操作接收的数据,hdr->frame_control表示帧控制字段,在不同的架构上处理时需要将数据使用cpu_to_le16进行转化,如果获取FrameType

hdr->frame_countrol & cpu_to_le16(IEEE80211_FCTL_FTYPE) 、

将IEEE80211_FCTL_FTYPE转换为小端,之所以这样做,是因为IEEE80211_FCTL_FTYPE这个值0x000c在不同的架构内存分布是不一样的

  • 小端下0x000c = 0x00 0x0c
  • 大端下0x000c = 0x0c 0x00

这样的话程序处理起来就会很方便,而且在使用硬件DMA发送时传递地址即可

同样的我们可以知道控制帧type为01,并有如下类型

  • 1010 Power Save-Poll(省电模式-轮询)
  • 1011 RTS(请求发送)
  • 1100 CTS(允许发送)
  • 1101 ACK(应答)
  • 1110 CF-End(免竞争期间结束)
  • 1111 CF-End(免竞争期间结束)+CF-Ack(免竞争期间回应)

数据帧的type为10

并有如下子类型

  • 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 QoS Data + CF-Ack
  • 1010 QoS Data + CF-Poll
  • 1011 QoS Data + CF-Ack + CF-Poll
  • 1100 QoS Null (未发送数据)
  • 1101 QoS CF-Ack (未发送数据)
  • 1110 QoS CF-Poll (未发送数据)
  • 1111 QoS CF-Ack+CF-Poll (未发送数据)

我们可以看到QoS数据的高位为1,因此也把第一个bit称为QoSbit

标签:WLAN,Ack,CF,详解,发送数据,QoS,Poll,Data
From: https://www.cnblogs.com/sudochen/p/16824623.html

相关文章

  • Flask学习笔记(十五)-Flask 上下文详解
    一、上下文说明上下文:在程序中可以理解为在代码执行到某一时刻时,根据之前代码所做的操作以及下文即将要执行的逻辑,可以决定在当前时刻下可以使用到的变量,或者可以完成的事......
  • Redis的数据类型详解
    作者:IT邦德中国DBA联盟(ACDU)成员,目前从事DBA及程序编程(Web\java\Python)工作,主要服务于生产制造现拥有Oracle11gOCP/OCM、Mysql、Oceanbase(OBCA)认证分布式TBase\TDSQL数......
  • MySQL 5.7临时表空间如何玩才能不掉坑里详解
    转载自:https://www.jb51.net/article/147268.htmMySQL5.7临时表空间如何玩才能不掉坑里详解导读MySQL5.7的目标是成为发布以来最安全的MySQL服务器,其在SSL/TLS和全面......
  • MySQL,MVCC详解,快照读在RC、RR下的区别
    MySQL,MVCC详解,快照读在RC、RR下的区别  一、什么是MVCC我们在操作数据库的时候总是这四大类 读读 读写 写读 写写,读读肯定是没有任务数据问题的,但对事物有......
  • Oracle-11g静默安装-db_install.rsp详解
    Oracle11g静默安装文件配置和解释,大部分的数据是不需要变更的,只变更你需要改动的地方,和图形界面安装结合起来,可快速理解。详解快速查看#标注响应文件版本,这个版本必须和要安......
  • App - Appium系统Keyevent详解
    1.keyevent()键盘事件只限于安卓设备使用。fromappiumimportwebdriverimporttimedesired_caps={"platformName":"Android",#测试版本(IOS/Android)"de......
  • 力扣 114. 二叉树展开为链表-原地算法(O(1) 额外空间)详解
    114.二叉树展开为链表给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而......
  • Python的数据类型详解
    1.字符串及其常用函数1.字符串中访问指定的值字符串中访问指定的值1.用[i]下标表示,从左到右顺序从0开始,从右到左顺序从-1开始2.变量[头下标:尾下标],截取......
  • 【Python基础学习】第十一节 内置函数详解
    Python基础学习之内置函数Python3.5版本中的68个内置函数,按顺序逐个进行了自认为详细的解析,现在是时候进行个总结了。为了方便记忆,将这些内置函数进行了如下分类:1.数学运......
  • 数组之reduce方法详解
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>数组之reduce方法</title></head><body><script>//reduce()方法不会改变原始数组......