3.1 服务:
前面一节我已经N次提到了Service(服务),在IT系统里面,服务向来是个不好理解的词汇。因为它所包含
和可能包含的含义太多,所以产生的语义交叉和起义就更多。在这里我只能尽我自己的理解对本文中的这个
词汇做个解释,至于能不能懂,全看您的个人理解了。
在wifi系统里面,Service又是一个相对比较"逻辑"的词汇,在这个上下文环境当中,服务的意思就是一个
子系统所能对其他子系统提供的 功能特性;而这个特性并不仅仅是提供资源的输出,还可能包括相关子系统
状态的改变。 例如STA服务中MSDU Delivery就提供一个资源--数据荷载,来提供给其他STA输出;而DS
服务中的Association,并不提供实质性的资源,但是它促成了双方STA的状态改变,以使双方能使用后继
服务所能提供的功能。概念就讲那么多,这一节里面,我们会对上一节中提到的九类服务进行逐一讲解,最后
给大家画出一个wifi运行逻辑图。
3.2 帧:
Service是功能本质的体现,那么Frame(帧)就是最物理最真实的功能载体了。对于帧这个概念大家一定不
陌生,在802.3以太网里,数据就是被分为一个个不定长的数据分片进行发送的,这个概念在OSI或TCP/IP
的各层都有体现,但是一般来说,我们把3层以上的分片叫做Packet(或package..)包,而二层的分片概念
统一为帧。
在WLAN网络里数据也是被分为一个个帧来发送的,而Service这个概念的物理体现就是由一个个帧构成的,
如同TCP/IP的三次握手和RST/FIN等结束过程构成一个完整的Session,在WLAN里每一个数据投递也同样
存在一个生命周期,这个周期中的每一个逻辑部分将体现出一个功能的实现,完成一种状态的切换,这样的
子过程,实际也就是我们所说的服务Service。在802.11里每种服务都会受到一种或几种帧的支持,它们
联合完成一个服务任务。
由于这样的一个原因,分开讲解这两个部分显然是不合理的,下面我们就穿插这两部分的内容--同一个东西
的概念和实现,让大家看到WLAN是怎样运行起来的。
3.3 帧结构:
802.11帧分为三个部分:帧头,帧实体,FCS域。
帧头是帧的控制部分,由 [帧控制域|持续时间域/关联识别码|地址|顺序控制信息] 组成。
*控制域是整个帧的核心部分,确定了帧的类型用途和管理信息,在后面一节单独详解;
*持续时间域和关联识别码是帧的发送时序确定,这一部分关联了每个STA的时间片信息,WLAN的发送竞争就
和这部分有关联,也是第一篇中很多人提出的一个疑问,不多解释,以后有空讲到那里再说;
*地址是帧的地址信息,分为三个子域,分别是[源MAC地址|目标MAC地址|BSSID MAC地址(关联AP)];
*顺序控制信息是一系列帧中的顺序ID,用来确认接受方接收到的帧排序。
帧实体是帧的独立数据荷载部分。这部分是可变长的,记录了相关子类型的特定数据。
FCS(Frame Check Sequence)帧校验序列长度固定为32位,包含整个帧的CRC校验码。
一个帧的格式可以如下图表示:
长度: 2 2 6 6 6 2 6 0 - 2312 4 (Byte)
=-----------------------------------------------------------------------------------------=
= | | | | | | | | =
=帧控制域 | 持续时间| 地址1 | 地址2 | 地址3 | 顺序控制 | 地址4 | 帧实体 | FCS =
= | /ID | | | | | | | =
=-----------------------------------------------------------------------------------------=
<-----------------------------------------------------------------> <-------------> <------>
|域: * 帧MAC头部 帧实体 FCS域
| *
| *
3.4 帧头: 控制域 *
| 在知其所以然之前,先知其然;控制域是一个帧的核心,WLAN中根据控制域承载的服务类型帧分为三种类型,每种类型又
| 分为若干种子类型,每种子类型都包含自己的数据结构和帧标志,整个802.11网络系统就通过这些数据来确定帧的功能
| 和使命。 *
| *
|3.4.1 帧控制域结构 *
| 帧控制域虽然只有短短的16bit,但它却包含了用于解释帧的其他部分的所有信息:
| [协议版本号|帧类型|帧子类型|输入发布系统|输出发布系统|分段标志|重传标志|功率管理|更多数据|WEP加密标志|顺序]
|在帧控制域中每一个bit都有独立的含义和功能,帧控制域格式如下: *
| **
b0 b1|b2 b3|b4 b7| b8 | b9 | b10 | b11 | b12 | b13 | b14 | b15 |
=------------------------------------------------------------------------------------------------=
= | | | | | | | | | | =
=协议版本 | 类型| 子类型| 输入DS | 输出DS| 分段标志| 重传标志| 功率管理|更多数据| WEP加密| 顺序 =
= | | | | | | | | | | =
=------------------------------------------------------------------------------------------------=
<--------><-----><-------><-------><------><--------><--------><-------><-------><-------><------>
2 2 2 4 1 1 1 1 1 1 1 (bit)
*协议版本: 当前总是为0,其余为保留值,不为0则丢弃;
*类型和子类型: 类型和子类型域确定帧的类型以及功能,802.11帧分为3种: 管理帧,控制帧 和 数据帧;
管理帧是用来进行网络链路层服务管理的特殊帧;
控制帧用来进行数据传输和网络节点状态的控制;
数据帧用来承载数据荷载,传送数据。
*输入DS和输出DS域当源或目标主机地址在BSS区域范围外时使用(一般情况代表这个地址是一个有线网络地址);
这两个标志与帧子类型中定义的地址位指针指向的帧头中的某个地址相关联,而确认最终的传输地址;
*分段标志代表数据超过2312字节,被分成多个数据包传送;
*重传标志代表当前帧是否是一个数据帧的重传拷贝;
*功率管理标志代表STA节能状态;
*更多数据域代表STA有更多数据需要发送,本标志与帧头中的持续时间/ID决定STA的发送竞争状态和碰撞检测;
*WEP控制标志代表数据帧实体部分是否加密;
*代表当前帧是一个数据帧,并正在按照有严格序列要求的帧类型发送数据。
3.4.2 帧类型及子类型
这是帧控制域中第2-7这6个bit的内容,它决定了帧的类型,本节特别重要,所以单独列出。
=======================================================================================================================
帧类型值 类型 子类型值 描述 子类型功能
(b3-b2) (b7 - b4)
00 管理帧 0000 Associate-Request 关联请求
00 管理帧 0001 Associate-Response 关联响应
00 管理帧 0010 Reassociate-Request 重新关联请求
00 管理帧 0011 Ressociate-Response 重新关联响应
00 管理帧 0100 Probe-Request 探测请求
00 管理帧 0101 Probe-Response 探测响应
00 管理帧 0110-0111 保留值
00 管理帧 1000 Beacon 信标帧
00 管理帧 1001 ATIM 广播传输提示信息
00 管理帧 1010 Disassociate 取消关联
00 管理帧 1011 Authentication 鉴权
00 管理帧 1100 Deuthentication 取消鉴权
00 管理帧 1101-1111 保留值
01 控制帧 0000-1001 保留值
01 控制帧 1010 PS-Poll 节能轮询
01 控制帧 1011 RTS 请求发送
01 控制帧 1100 CTS 允许发送
01 控制帧 1101 ACK 应答认可
01 控制帧 1110 CF-End 无竞争结束
01 控制帧 1111 CF-End + CF-Ack 无竞争结束+无应答认可
10 数据帧 0000 Data 普通数据帧
10 数据帧 0001 Data + CF-Ack 无竞争应答认可的数据帧
10 数据帧 0010 Data + CF-Poll 无竞争查询的数据帧
10 数据帧 0011 Data + CF-Poll + CF-ACK 无竞争查询+无竞争应答认可的数据帧
10 数据帧 0100 Null(no data) 空闲(无数据帧)
10 数据帧 0101 CF-Ack(No data) 无竞争应答认可的空闲
10 数据帧 0110 CF-Poll(No data) 无竞争轮询的空闲
10 数据帧 0111 CF-ACK + CF-Poll(No data) 无竞争结束+无应答认可的空闲
10 数据帧 1000-1111 保留值
11 保留值 0000-1111 保留值
3.5 帧头:地址域
前面大家一定已经注意到了,就是802.11帧头中有四个独立的地址域,而且并没有标明为源地址还是
目标地址。这是个奇怪的现象,不是么?
因为802.11网络中,引入了WM和DSM的概念,即目标主机并不一定确定是个STA,而有可能是有线网络
中的某一台主机,那么这种情况下,就需要DS去做转发,这样仅仅有两个地址就不够了,还需要加上
BSSID(一般是DS出口AP的MAC地址)甚至更多的地址信息才能维护这样复杂的链路状态。所以在802.11
网络中被分为了如下五种地址域:
SA/DA: SA和DA分别是正常的源地址和目标地址,分别都是48bit的MAC地址;这两个地址是通常情况
下使用的,并且在一个帧内必须存在;
BSSID: BSS的中心AP的MAC地址。当STA处于一个ESS网络(与iBSS/AD-Hoc相对的那个概念)中时,
所有的数据必须交由AP托管,通过AP的Distribution发布服务进行发布,类似有线网络中
的数据经由交换机进行端口转发。所以在非iBSS环境中传输的数据帧BSSID也一定存在。
TA/RA: 由于在ESS中数据转发时可能经由多个BSS转发,这时可能会存在TA/RA域,代表中间转发路由
的地址,可以有网络精性更复杂的链路状态维护和数据转发。
在通常的AP集中网络环境下,数据帧中的SA/DA/BSSID都一定是存在的。但是每个地址具体映射在帧
的那个物理字节位置并没有定论,这是由帧的数据子类型相关上下文环境定义的,在那个数据结构中
将会产生一个唯一关联。
3.6 帧头:其他
持续时间:这个域记录了数据的持续时间数,这个数值将用来被其他STA更新自己的NAV(网络分配矢量)
而NAV将被用来构造CSMA/CA的竞争状态,从而影响到STA的数据发送竞争状态。这不是本文所要讲述
的内容,在此不详述。
帧体:帧体包含的是数据帧的正文数据或管理/控制帧的扩展信息,长度可变。最小长度为0,正常的未
加密帧体最大长度为2304字节,如果是经过WEP加密的帧那么长度为2304+IV+ICV=2312字节。
FCS:帧校验序列域,本域记录了帧的32位CRC校验码,这个校验码是根据IEEE标准CRC算法对本域以前
部分校验生成的。
**
最后,我们还是来看一个实例,也许对这部分就会清楚些了。
下面是一个典型的Association Response(关联请求帧)。
** ** ** **
Frame Info //数据包统计信息
Flags: 0x02
Status: 0x00
Packet Length: 54
Timestamp: 15:10:54.328116400 11/26/2003
Data Rate: 4 2.0 Mbps //速率
Channel: 11 2462 MHz //频道
Signal Level: 1%
Noise Level: 0%
802.11 MAC Header --+-//MAC头
Version: 0 |
Type: %00 Management | //类型:00 管理
Subtype: %0001 Association Response | //子类型:0001 关联请求
Frame Control Flags: %10101011 | //帧控制域
1... .... Frames Must Be Strictly Ordered | //关联请求类型必须被顺序发送
.0.. .... WEP Not Enabled | //未加密
..1. .... More Data | //STA更多数据等待发送
...0 .... Power Management - active mode |
.... 1... This is a Re-Transmission |
.... .0.. Last or Unfragmented Frame |
.... ..1. Exit from the Distribution System |
.... ...1 To the Distribution System | //本域中由高位向低位二进制排列
|
Duration: 11744 Microseconds | //时间域
Destination: FF:FF:FF:FF:AB:F4 | //DA:目标地址
Source: 00:DE:B8:1F:5E:D2 | //SA:源地址
BSSID: 00:D0:72:1E:8B:D0 Broadlogic:1E:8B:D0 | //BSSID
Seq. Number: 63 | //序列号
Frag. Number: 0 --- //未分片
802.11 Management - Association Response --+-//帧主体,本帧上下文中包含关联请求相关数据
Capability Info: %0000110100111110 |
x....... ........ Reserved |
.x...... ........ Reserved |
..0..... ........ DSSS-OFDM is Not Allowed |
...x.... ........ Reserved |
....1... ........ Robust Security Network Enabled
.....1.. ........ G Mode Short Slot Time [9 microseconds]
......x. ........ Reserved |
.......x ........ Reserved |
........ 0....... Channel Agility Not Used |
........ .0...... PBCC Not Allowed |
........ ..1..... Short Preamble |
........ ...1.... Privacy Enabled |
........ ....1... CF Poll Requested |
........ .....1.. CF Pollable |
........ ......1. IBSS Type Network |
........ .......0 Not an ESS Type Network |
|
Status Code: 90 |
Association ID: 0x0001 | //关联ID
SSID |
Element ID: 0 SSID |
Length: 3 |
SSID: .YW | //SSID: .YW
|
Reserved 95 |
Element ID: 95 Reserved 95 |
Length: 13 |
Value: 0xD0C67C35E42888F2B100010000 --|
FCS - Frame Check Sequence --+-//FCS域
FCS (Calculated): 0xC081EBE9 --|
** ** ** **