802.11协议栈帧结构

802.11协议栈帧结构

  • 首先选择合适的无线网卡
  • 了解基本操作
  • 学习协议栈帧结构
  • 实际抓包查看

命令

查看配置

  • iw list 查看无线网卡的配置信息

  • iwlist wlan0 frequency查看支持的频段

扫描附近AP

  • iw dev wlan0 scan

  • iw dev wlan0 scan|egrep "DS\ Parameter\ set|SSID"

  • iwlist wlan0 scannign|grep"ESSID|Channel"

添加删除侦听端口

  • iw dev wlan0 interface add wlan0mon type monitor

  • iw dev wlan0mon interface del

RADIOTAP头

  • 802.11帧发射和接收的事实标准,802.11依赖Radiotap完成通信过程
  • Linux系统在驱动和API中内建支持Radiotap
  • 802.11帧发射之前,网卡驱动在802.11头前添加Radiotap头,反之当网卡接收无线帧时,驱动通知MAC层,此帧头包含Radiotap头
  • Radiotap为802.11帧传递额外信息,厂家可以自定义,因此头长度不固定

802.11帧结构

  • DU(Data Unit)数据单元,信息传输的最小数据集合
  • SDU(Service Data Unit)/PDU(Protocol Data Unit)

字段

帧控制

  • Protocol Version(2bit) :802.11协议版本,始终为0,1,2,3
  • Type(2bit):规定帧的具体用途(3种类型):
Type Mean
00 管理帧
01 控制帧
10 数据帧
11 保留
  • SubType(4bit)
Subtype Mean Type
0000 Association request(连接请求) 00
0001 Association response(连接应答) 00
0010 Reassociation request(重新连接请求) 00
0011 Reassociation response(重新连接应答) 00
0100 Probe request(探查请求) 00
0101 Probe response(探查应答) 00
1000 Beacon(导引信号) 00
1001 Announcement traffic indication message (ATIM)(数据代传指示通知信号) 00
1010 Disassociation(解除连接) 00
1011 Authentication(身份验证) 00
1100 Deauthentication(解除认证) 00
Subtype Mean Type
0000-0110 保留
0111 Control Wrapper
1000 Block Ack Request(BlockAckReq)
1001 Block Ack (BlockAck)
1010 PS-Poll
1011 RTS(请求发送) 01
1100 CTS(允许发送) 01
1101 ACK(应答) 01
1110 CF-End(免竞争期间结束) 01
1111 CF-End(免竞争期间结束)+CF-Ack(免竞争期间回应) 01
Subtype Mean Type
0000 Data(数据) 10
0001 Data+CF-Ack 10
0010 Data+CF-Poll 10
0011 Data+CF-Ack+CF-Poll 10
0100 Null data (无数据:未发送数据) 10
0101 CF-Ack (未发送数据) 10
0110 CF-Poll (未发送数据) 10
0111 Data+CF-Ack+CF-Poll 10
1000 QoS Data 10
1001 QoS Data + CF-Ack 10
1010 QoS Data + CF-Poll 10
1011 QoS Data + CF-Ack + CF-Pol 10
1100 QoS Null (未发送数据) 10
1101 QoS CF-Ack (未发送数据) 10
1110 QoS CF-Poll (未发送数据) 10
1111 QoS CF-Ack+CF-Poll (未发送数据) 10
  • To DS/From DS(1/1 bit)

    • 0x00:出现在IBSS环境中(可能是Management帧或者是Control帧类型);或者是STSL(Station to Station Link)中两个STA之间通信,这种情况下不通过AP
    • 0x01:表示data从AP向STA传递
    • 0x02:表示data从STA向AP传递
    • 0x03:表示两个AP间通信,这是典型的WDS环境下AP间的通信;或者表示Mesh环境下MP间的通信,只有此时才会使用到Address4字段。
  • More frag(1bit):表示是否还有后续帧

    • 值为1时表示有后续分段,可能是data或者management帧类型。只有单播接收地址的帧会被分段,广播的直接发送。
  • retry(1bit):重传

    • 值为1表示重传帧,可能是data或者management帧类型,接收端进程使用此值防止帧重复;
  • PowerMgmt(1bit):活动模式(0)/省电模式(1)

    • STA处于省电模式时,向关联的AP发送该值为1的帧(AP从不使用此字段),省电模式下STA不接受数据,发送给它的Data帧由AP暂时缓存。
  • MoreData(1bit)

    • 当AP至少缓存了一个MSDU时,会向省电模式的STA发送该值为1的帧,表示有数据要传输给STA,接收到此帧的STA唤醒自己,并向AP发送PS-Poll帧,取回由AP为其缓存的数据。也被用于AP有更多的广播/多播帧需要发送的情况;
  • Protected Frame(bit)

    • 可能是data或者management帧类型,表示MSDU是否被加密,也被用于表示psk身份验证Frame#3帧;数据载荷为空时,该字段值为0;
  • Order(1bit)

    • 在非Qos帧的情况下,值为1表示数据必须严格按顺序处理,通常为0

Duration/ID

  • 所有Control帧都使用该字段,其作用随Type/SubType变化有所不同
  • 帧类型为PS Poll(type:1,subtype:10)时,表示STA关联的AID(association identity,在sta连上ap时,由ap发送给sta);
  • 其它情况下,该字段作为一种载波侦听机制,表示接收下一帧之前需要保持的时间间隔,用于(Network Allocation Vector)计算,单位是微秒;

MAC Layer Address

  • Basic service set ID(BSSID);它是BSS的2层唯一标识,Infrastructure模式中BSSID就是AP的MAC地址,当AP支持多BSS时,随机生成每个BSSID。

Sequence Control(16bit)

  • 这个字段包含两个子字段:Sequence Number和Fragment Number;
  • Sequence Number是每个帧的编号,数值范围是0-4095,当帧被分段时,同帧不同分段的sequenceNumber相同。
  • FragmentNumber是被分段的帧用于标识分段位置顺序的编号,数值范围是0-15,以1为步长递增。

Frame Body(变长)

  • 数据字段,未加密的最大MSDU长度为2304字节(其中包含最大256字节的上层头信息,和可被传递的 数据2048字节)。不同的加密方法会增加一定的内容长度。
    • WEP:+8bytes->2312bytes
    • TKIP(WPA1):+20bytes->2324bytes
    • CCMP(WPA2):+16bytes->2320bytes

FCS(32bit)

  • 发送端对全部MAC包头和FrameBody内容进行CRC计算,计算结果即为FCS(FrameCheckSequence)值,接收端进行同样的计算,结果一致时,则接收端向发送端返回ACK,否则丢弃帧(只对单播帧有效,FCS错误的广播/多播帧可能被接收)
  • 注:wireshark抓包时已经删除了FCS值

控制帧实例

ACK

  • 接收端正确接收数据后向发送端返回ACK确认
  • 每个单播帧需要立即确认
    • 组播和广播帧不需要确认、
  • 尽快响应
    • 由硬件完成,而非驱动层
  • Type/Subtype:1/13

PS-POLL

  • AID——Association ID
  • STA省电模式唤醒
    • 数据发送至AP(AP缓存数据包)
    • 通过Beacon发送TIM(traffic indication map)
      • 其中包含AID
    • STA对比AID后唤醒网卡
    • STA发送PS-Poll帧,请求从AP缓存中取回数据
      • 每个帧都需要ACK确认
      • ACK确认后AP从缓存中删除数据帧
      • 传输过程中STA保持唤醒状态,传输结束后STA恢复省电状态
  • Type/Subtype:1/10

RTS/CTS

  • RTS/CTS是CSMA/CA方法的一种补充手段

  • 降低冲突产生的可能性

  • 正式通信之前通过请求应答机制,确信通信介质的可用性

  • 锁定传输介质,预约通信时间

  • 只有在传输长帧时使用,传输短帧时不会使用

    • 驱动接口提供长帧阈值的自定义
  • A —-RTS—->B

    A<—-CTS—-B

    A—-Data—->B

    A<—-ACK—-B

    A—-Data—->B

    A<—-ACK—-B

    ……

管理帧实例

  • 管理帧用于协商和控制STA与AP之间的关系

Beacon Frame

  • AP发送的广播帧,通告无线网络的存在(BSSID)
  • 发包频率
    • 102.4ms(可变)
    • 单位时间1024microsecond()
  • SSID网络名
    • 隐藏AP不发SSID广播

Probe Request Frames

  • 用于STA扫描现有AP
    • 发现连接过的AP
    • 发现未连接的AP

Probe Response Frames

  • 发现连接过的AP时,速率和ESSID相同的AP会响应。

Authentication Frames

  • Authentication Algorithm身份认证类型
    • 0:开放系统身份验证
    • 1:共享密钥身份验证
  • 身份认证有多个帧交换过程组成
  • Authentication Seq
    • 每次身份验证过程Seq唯一
    • 1-65535
  • Challenge text
    • 只用共享密钥方式才有此字段
  • Status Code:成功/失败

Association/Reassociation Freames

  • 身份验证后,STA执行关联操作,加入无线网络

Disassociation/Deauthentication

  • 由AP发出,2字节

ATIM Frames

  • 只在ad-hoc网络下使用
    • STA使用此帧通知接收者其有缓存的数据要发送

数据帧

  • 传输用户数据
    • DATA Frame
  • 空数据帧
    • Null data frame
    • 只包含MAC头和FCS
    • STA用空数据帧声明自己要进入省电模式

连接到无线网络的过程

  • Probe
    • STA向所有信道发出probe帧,发现AP
    • AP应答Response
  • Authentication
    • STA向AP发出验证请求
    • 发生认证过程
    • AP响应STA认证结果
  • Association
    • STA发出关联请求
    • AP响应
    • 开始通信

WEP PSK认证过程

  • STA发认证请求
  • AP返回随机Challenge消息
  • STA使用PSK加密Cha并发回给AP
  • AP使用PSK解密,获得Cha并与原始Cha对比,相同则验证成功,不同则失败。
  • 大部分无线驱动首先尝试open验证,如果失败则尝试PSK
  • 无论使用什么加密架构,关联过程完全相同
    • STA向AP发送关联请求
    • AP向STA发送关联成功或者失败结果
  • 隐藏AP
    • STA关联包中必须包含目标AP的ESSID
    • 嗅探到此关联包,说明有隐藏AP存在

加密

  • 无线安全根源
    • 802.11基于无线电波发射信息
    • 嗅探侦听是主要问题
    • 加密机制是必须的手段
  • Wired Equivalent Privacy(WEP)
    • 802.11标准的一部分
    • 发布不久后被发现存在安全漏洞
  • WiFi Protected Access(WPA)取代WEP
    • WPA2(802.11i标准)

参考