1.MAC帧格式
1.1 地址格式
addr1:接收地址(所有包都包含它)
addr2:传输地址(除ACK和CTS包外的其他包都包含它)
addr3:只用于管理包和数据包。
addr4:无线分布系统模式下,FROM DS和TO DS都被置位时使用。
下图中,占两个字节的Frame control ,其To DS和From Ds决定了这四个地址的使用。
;
地址对应表如下:
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:无线桥接器上的数据侦。
各地址的解释:
SRC:源地址(SA),和以太网中的一样,就是发帧的最初地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
DST:目的地址(DA),和以太网中的一样,就是最终接受数据帧的地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
TX:也就是Transmiter(TA),表示无线网络中目前实际发送帧者的地址(可能是最初发帧的人,也可能是转发时候的路由)。
RX:也就是Receiver(RA),表示无线网络中,目前实际接收帧者的地址(可能是最终的接收者,也可能是接收帧以便转发给接收者的ap)。
注:无线网络中的Station想要通信,必须经过AP来进行“转发”。其实,Tx和Rx是无线网络中的发和收,也就是Radio;而Src和Dst是真正的发送源和接收者
2 帧类型
帧类型由frame control的type两位决定,目前有三种类型的帧:
00,管理帧。IEEE80211_TYPE_MGMT 用于执行管理操作,如关联、身份验证,扫描等。
01,控制帧。IEEE80211_TYPE_CTL 通常与数据包相关。如:PS-poll包用于从AP缓冲区取回数据包;另一个例子,STA若想数据传输,首先会发送RTS的控制数据包,如果介质空闲,目标客户端将发回一个名为允许发送(CTS)的控制数据包。
10,数据帧。IEEE80211_TYPE_DATA 原始数据包。注:空数据包是特殊的数据帧,其用于电源管理。
11,保留。
2.1 SubType
2.1.1 管理帧 type 00
下表为管理帧的subType对应的类型(即type为00时,subType的取值)
Type | FrameType | |
00 | 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(信标,被动扫描时AP 发出,notify) |
00 | 1001 | ATIM(通知传输指示消息) |
00 | 1010 | Disassociation(解除连接,notify) |
00 | 1011 | Authentication(身份验证) |
00 | 1100 | Deauthentication(解除认证,notify) |
00 | 1101~1111 | Reserved(保留,未使用) |
2.1.1.1(Beacon(信标)帧) subtype 1000
抓包显示的结果:
由于Beacon是广播包,因此DA为FF:FF:FF:FF:FF:FF。
作用:向STA广播AP的存在。也就是我们平时能够搜到AP的原因,其包含了AP的相关信息。
2.1.1.2 (Probe Request(探测请求)帧) subtype 0100
抓包显示的结果:
作用:STA广播发出,与AP建立关联的必然步骤,后面会具体说明。
2.1.1.3 (Probe Response(探测响应)帧) subtype 0101
2.1.1.4 (ATIM帧) subtype 1001
2.1.1.5 (Disassociation(解除关联)与Deauthentication(解除认证)帧) subtype 1010
2.1.1.6 (Association Request(关联请求)帧) subtype 0000
2.1.1.7 (Reassociation Request(重新关联请求)帧) subtype 0010
2.1.1.8 (Authentication(身份认证)帧) subtype 1011
2.1.2 数据帧 type 10
Type | Subtype | Frametype |
10 | 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-Poll |
10 | 1100 | QoS Null(未传送数据) |
10 | 1101 | QoS CF-ACK(未传送数据) |
10 | 1110 | QoS CF-Poll(未传送数据) |
10 | 1111 | QoS CF-ACK+ CF-Poll(未传送数据) |
|
2.1.2.1 IBSS subtype (0000 Data,0100NULL)
2.1.2.2 From AP subtype如图所示
2.1.2.3 To AP 帧
2.1.2.4 WDS帧 subtype null
2.1.3 控制帧 type 01
主要用于数据传输前的控制,相关过程请看4.0 RTS/CTS。
Type | Subtype | Frametype |
01 | 1010 | Power Save(PS)- Poll(省电-轮询) |
01 | 1011 | RTS(请求发送,即: Request To Send ,预约信道,帧长20字节) |
01 | 1100 | CTS(清除发送,即:Clear To Send ,同意预约,帧长14字节) |
01 | 1101 | ACK(确认) |
01 | 1110 | CF-End(无竞争周期结束) |
01 | 1111 |
CF-End(无竞争周期结束)+CF-ACK(无竞争周期确认) |
2.1.3.1 RTS帧 subtype 1011
2.1.3.2 CTS帧 subtype 1100
2.1.3.3 ACK帧 subtype 1101
2.1.3.4 PS-Poll帧 subtype 1010
作用:当sta从省电模式中苏醒,便发送一个PS-poll给基站。
3. Radiotap Header(monitor信息)
在monitor模式时,内核在MAC帧前面提供额外的信息。称为Radiotap Header,其包含的信息有MAC时间戳,SSI信号强度,频道频率等。
这里的it_len表明了radiotap_header的长度,按上面抓到的包,这里的值为26。
因此,在monitor模式得到的RAW包,我们首先要偏移it_len个字节,以此得到MAC头。
4. RTS/CTS 帧 (数据发送原子性)
这两个帧出现的原因是 无线收发器(STA)通常无法同时收发数据。使用这两个帧可以让STA处于收或发状态。
这样比较好理解,正是因为如此,当STA开始发送RTS,说明STA发数据;AP开始发送RTS,说明RTS接收数据。
当其他STA收到RTS时,将延后数据包的发送。而具体延迟多久,由正在传输的MAC头中的持续时间决定(Duration ID)。如:
RTS(Request-to-Send):请求发送数据。
CTS(Clear-to-Send):清空传送区域。
两个帧的过程如图:
①为 STA ②为AP
抓的两个包来看下,下面是STA作为请求方
下面是STA作为接收方:
上图的223.252.199.6(00:36:76:54:b4:a2)是ap,172.21.11.2(a4:d1:d2:60:bb:0d)是STA,其Qos数据数据如下:
RTS和CTS帧会延长帧传输过程,RTS,CTS,数据帧,以及ACK视为同一原子操作的一部分。
用户可以通过调整RTS阈值,来控制RTS/CTS交换过程。只要大于此阈值,RTS/CTS交换过程就会进行,小于该阈值就会直接传送帧。
对应的SOCK字段如下:
#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
5. WIFI建立关联过程
建立连接认证的过程主要由管理帧负责。
序号 | SubType | 说明 |
1 | 1000 | Beacon,STA接受AP信标帧,感知到AP,获取SSID及AP参数 |
2 | 0100 | STA主动发送Probe探测请求 |
3 | 0101 | AP应答STA Prob Response |
4 | 1011 | STA发送Authentication请求认证 |
5 | AP应答Authentication请求,指示STA认证成功或失败 | |
6 | 0000 | STA发送Association请求 |
7 | 0001 | AP应答Association Response |
以上是连接过程,当需要断开连接时,STA发送Disassociation
序号SubType说明81010断开连接
*********************************************************
××抓包类型总结××
Type value | Type description | Subtype value | Subtype description | Wireshark display filter |
00 | Management | 0000 | Association Request | wlan.fc.type_subtype == 0x00 |
00 | Management | 0001 | Association Response | wlan.fc.type_subtype == 0x01 |
00 | Management | 0010 | Reassociation Request | wlan.fc.type_subtype == 0x02 |
00 | Management | 0011 | Reassociation Response | wlan.fc.type_subtype == 0x03 |
00 | Management | 0100 | Probe Request | wlan.fc.type_subtype == 0x04 |
00 | Management | 0101 | Probe Response | wlan.fc.type_subtype == 0x05 |
00 | Management | 0110-0111 | Reserved | |
00 | Management | 1000 | Beacon | wlan.fc.type_subtype == 0x08 |
00 | Management | 1001 | ATIM | wlan.fc.type_subtype == 0x09 |
00 | Management | 1010 | Disassociation | wlan.fc.type_subtype == 0x0A |
00 | Management | 1011 | Authentication | wlan.fc.type_subtype == 0x0B |
00 | Management | 1100 | Deauthentication | wlan.fc.type_subtype == 0x0C |
00 | Management | 1101 | Action | wlan.fc.type_subtype == 0x0D |
00 | Management | 1110-1111 | Reserved |
Type value | Type description | Subtype value | Subtype description | Wireshark display filter | |
01 | Control | 0000-0111 | Reserved | ||
01 | Control | 1000 | Block Ack Request | wlan.fc.type_subtype == 0x18 | |
01 | Control | 1001 | Block Ack | wlan.fc.type_subtype == 0x19 | |
01 | Control | 1010 | PS-Poll | wlan.fc.type_subtype == 0x1A | |
01 | Control | 1011 | RTS | wlan.fc.type_subtype == 0x1B | |
01 | Control | 1100 | CTS | wlan.fc.type_subtype == 0x1C | |
01 | Control | 1101 | ACK | wlan.fc.type_subtype == 0x1D | |
01 | Control | 1110 | CF-end | wlan.fc.type_subtype == 0x1E | |
01 | Control | 1111 | CF-end + CF-ack | wlan.fc.type_subtype == 0x1F | |
Type value | Type description | Subtype value | Subtype description | Wireshark display filter | |
10 | Data | 0000 | Data | wlan.fc.type_subtype == 0x20 | |
10 | Data | 0001 | Data + CF-ack | wlan.fc.type_subtype == 0x21 | |
10 | Data | 0010 | Data + CF-poll | wlan.fc.type_subtype == 0x22 | |
10 | Data | 0011 | Data +CF-ack +CF-poll | wlan.fc.type_subtype == 0x23 | |
10 | Data | 0100 | Null | wlan.fc.type_subtype == 0x24 | |
10 | Data | 0101 | CF-ack | wlan.fc.type_subtype == 0x25 | |
10 | Data | 0110 | CF-poll | wlan.fc.type_subtype == 0x26 | |
10 | Data | 0111 | CF-ack +CF-poll | wlan.fc.type_subtype == 0x27 | |
10 | Data | 1000 | QoS data | wlan.fc.type_subtype == 0x28 | |
10 | Data | 1001 | QoS data + CF-ack | wlan.fc.type_subtype == 0x29 | |
10 | Data | 1010 | QoS data + CF-poll | wlan.fc.type_subtype == 0x2A | |
10 | Data | 1011 | QoS data + CF-ack + CF-poll | wlan.fc.type_subtype == 0x2B | |
10 | Data | 1100 | QoS Null | wlan.fc.type_subtype == 0x2C | |
10 | Data | 1101 | Reserved | wlan.fc.type_subtype == 0x2D | |
10 | Data | 1110 | QoS + CF-poll (no data) | wlan.fc.type_subtype == 0x2E | |
10 | Data | 1111 | Qos + CF-ack (no data) | wlan.fc.type_subtype == 0x2F | |
11 | Reserved | 0000-1111 | Reserved |
文参考《802.11无线网络 权威指南》
http://www.cnblogs.com/rainbowzc/p/5410876.html
http://blog.csdn.net/robertsong2004/article/details/42805803
http://blog.chinaunix.net/uid-9525959-id-3326047.html
最新评论