读书频道 > 移动开发 > Android > 深入理解Android:Wi-Fi、NFC和GPS卷
2. MAC帧[15][16][17]
2014-05-24 14:07:07     我来说两句 
收藏    我要投稿   
本书是经典畅销书深入理解Android系列的新作,由资深Android系统专家邓凡平先生撰写。从通信专业知识和Android系统代码实现的角度,对Netd、Wi-Fi、NFC和GPS等模块的代码进行深入的剖析,旨在深刻揭示其实现原理  立即去当当网订购

802.11 MAC帧格式如图3-13所示。

 

由图3-13可知,MAC帧由以下三个基本域组成。

MAC Header:包括帧控制(Frame Control)、时长(Duration)、地址(Address)等。注意,每个方框上面的数字表示该域占据的字节数。例如Frame Control需要2字节。

Frame Body:代表数据域。这部分内容的长度可变,其具体存储的内容由帧类型(type)和子类型(sub type)决定。

FCS:(Frame Check Sequence,帧校验序列)用于保障帧数据完整性。

规范阅读提示

1)关于MAC帧的格式。规范中还指出,如果是QoS数据帧,还需要附加QoS Control字段。如果是HT(High Throughput,一种用于提高无线网络传输速率的技术)数据帧,还需要附加HT Control字段。

2)关于Frame body长度。规范中指出其长度是7951字节,它和Aggregate-MPDU(MAC报文聚合功能)以及HT有关。本文不拟讨论相关内容。故此处采用2312字节。

下面分别介绍MAC帧头中几个重要的域,首先是Frame Control域。

(1)Frame Control域

Frame Control域共2字节16位,其具体字段划分如图3-14所示。

 

Protocol Version:代表802.11 MAC帧的版本号。目前的值是0。

Type和Subtype:这两个字段用于指明MAC帧的类型。802.11中MAC帧可划分为三种类型,分别是control、data和management,每种类型的帧用于完成不同功能。详情见下文。

To DS和From DS:只用在数据类型的帧中。其意义见下文。

More Fragments:表明数据是否分片。只支持data和management帧类型。

Retry:如果该值为1,表明是重传包。

Power Management:表明发送该帧的STA处于活跃模式还是处于省电模式。

More Data:和省电模式有关。AP会为那些处于省电模式下的STA缓冲一些数据帧,而STA会定时查询是否有数据要接收。该参数表示AP中还有缓冲的数据帧。如果该值为0,表明STA已经接收完数据帧了(下节将介绍省电模式相关的内容)。

Protected Frame:表明数据是否加密。

Order:指明接收端必须按顺序处理该帧。

Type和Subtype的含义如表3-2所示。其中仅列出了部分Type和Subtype的取值。

表3-2 MAC帧Type和Subtype
Type(b3b2) 类型描述 Subtype(b7-b4) 子类型描述
00 Management 0000/1 Association Request/Response
00 Management 0100/1 Probe Request/Response
00 Management 1000 Beacon帧
00 Management 1101 Action帧
01 Control 1010 PS-POLL帧(省电轮询)
01 Control 1011 RTS
01 Control 1100 CTS
01 Control 1101 ACK
10 Data 0000 Data
11 保留 0000-1111 保留

From DS和To DS的取值如表3-3所示。
表3-3 From/To DS含义
To DS和From DS取值 含  义
To DS=0
From DS=0 1)同一个IBSS中,从一个STA到另一个STA
2)同一个BSS中,从一个非AP的STA到另一个非AP的STA或者BSS外部
To DS=1
From DS=0 代表发送给DS或AP的MAC帧。当然,发往DS的帧必须通过AP转发才行
To DS=0
From DS=1 代表来自DS或AP的数据帧
To DS=1
From DS=1 仅Mesh BSS支持。本书不讨论此种情况

扩展阅读 省电模式[18]

无线网络的使用者常见于笔记本电脑、智能手机等设备,它们最大的一个特点就是能够移动(无线技术的一个重要目的就是摆脱各种连接线的缠绕)。无线带来便捷的同时也引入了另外一个突出问题,即电量消耗。在当前电池技术还没有明显进步的现实情况下,802.11规范对电源管理也下了一番苦功。

规范为STA定义了两种和电源相关的状态,分别是Active模式和PS(Power Save)模式。处于PS模式下,无线设备将关闭收发器(transceiver)以节省电力。

STA为了节电而关闭数据收发无可厚非,怎么保证数据传输的连贯性呢?下面讨论基础结构型网络中省电模式的知识。在这种网络中,规范规定AP为了保证数据传输的连贯性,其有两个重要工作。

1)AP需要了解和它关联的STA的电源管理状态。当某个STA进入PS状态后,AP就要做好准备以缓存发给该STA的数据帧。一旦STA醒来并进入Active模式,AP就需要将这些缓存的数据发送给该STA。注意,AP无须PS模式,因为绝大多数情况下,AP是由外部电源供电(如无线路由器)。在AP中,每个和其关联的STA都会被分配一个AID(Association ID)。

2)AP需要定时发送自己的数据缓存状态。因为STA也会定期接收信息(相比发送数据而言,开启接收器所消耗的电力要小)。一旦STA从AP定时发送的数据缓存状态中了解到它还有未收的数据,STA则会进入Active模式并通过PS-POLL控制帧来接收它们。

现在来看MAC帧中Power Management的取值情况。

对于AP不缓存的管理帧,PM字段无用。

对于AP发送的帧,PM字段无用。

STA发送给还未与之关联的AP的帧中,PM字段无用。

其他情况下,PM为1表示STA将进入PS状态,否则将进入Active状态。

配合PM使用的字段就是More Data。根据前文介绍,STA通过PS-POLL来获取AP端为其缓存的数据帧。一次PS-POLL只能获取一个缓存帧。STA怎么知道缓存数据都获取完了呢?原来More Data值为1表示还有缓存帧,否则为0。虽然MAC帧中没有字段说明AP缓存了多少帧,但通过简单的0/1来标示是否还有剩余缓存帧也不失为一种好方法。

提示 规范中的PS处理比较复杂,建议阅读参考资料[18]。

(2)Duration/ID域

Duration/ID域占2字节共16位,其具体含义根据Type和Subtype的不同而变化,不过大体就两种,分别代表ID和Duration。

对于PS-POLL帧,该域表示AID的值。其中最后2位必须为1,而前14位取值为1~2007。这就是该域取名ID之意。

对于其他帧,代表离下一帧到来还有多长时间,单位是微秒。这就是该域取名Duration之意。

注意 Duration的用法和CSMA/CA的具体实现有关。本章不对它进行详细讨论,可阅读参考资料[8]。

(3)Address域

讲解Address域的用法之前,先介绍MAC地址相关的知识。根据IEEE 802.3[19]协议,MAC地址有如下特点。

MAC地址可用6字节的十六进制来表示,如笔者网卡的MAC地址为1C-6F-65-8C-47-D1。

MAC地址的组成包括两个部分。0~23位是厂商向IETF等机构申请用来标识厂商的代码,也称为“组织唯一标识符”(Organizationally Unique Identifier,OUI)。后24位是各个厂商制造的所有网卡的一个唯一编号。

第48位用于表示这个地址是组播地址还是单播地址。如果这一位是0,表示此MAC地址是单播地址;如果这位是1,表示此MAC地址是组播地址。例如01-XX-XX-XX-XX-XX为组播地址。另外,如果地址全为1,例如FF-FF-FF-FF-FF-FF,则为MAC广播地址。

第47位表示该MAC地址是全球唯一的还是本地唯一。故该位也称为G/L位。

图3-15所示为MAC地址示意图[19][20]。

 

注意图3-15中的字节序和比特序。

字节序为Big-endian,即最高字节在前。所以图中的first byte实际对应的MAC地址最左边一组。以Note 2 MAC地址90-18-7C-69-88-E2为例,first byte就是“90”(如果是Little-endian,则first byte是“E2”),其OUI是SamsungE,代表三星电子。

比特序为Little-endian,即最低位在前。这就是01-XX-XX-XX-XX-XX为组播地址的原因了。因为“01”对应的二进制是“0000-0001”,其第0位是1,应该放在图中first byte最左边一格。
提示 上面的数值按从左至右为最高位到最低位。一般情况下,字节序和比特序是一致的。但是以太网数据传输时,字节序采用Big-endian,比特序为Little-endian。

参考资料[19]中原文是这样描述的。

The first bit(LSB)shall be used in the Destination Address field as an address type designation bit to identify the DA either as an individual or as a group address. If this bit is 0,it shall be…individual address”,“Each octet of each address filed shall be transmitted least significant bit first。

802.11 MAC帧头部分共包含四个Address域,但规范中却有五种地址定义,分别如下[15]。

BSSID:在基础型BSS中,它为AP的地址。而在IBSS中则是一个本地唯一MAC地址。该地址由一个46位的随机数生成,并且U/M位为0,G/L位为1。另外对MAC广播地址来说,其名称为wildcard BSSID。

目标地址(Destination Address,DA):用来描述MAC数据包最终接收者(final recipient),可以是单播或组播地址。

源地址(Source Address,SA):用来描述最初发出MAC数据包的STA地址。一般情况下都是单播地址。

发送STA地址(Transmitter Address,TA):用于描述将MAC数据包发送到WM中的STA地址。

接收STA地址(Receiver Address,RA):用于描述接收MAC帧数据的。如果某个MAC帧数据接收者也是STA,那么RA和DA一样。但如果接收者不是无线工作站,而是比如以太网中的某台PC,那么DA就是该机器的MAC地址,而RA则是AP的MAC地址。这就表明该帧将先发给AP,然后由AP转发给PC。

上述无线地址中,一般只使用Address 1~Address 3三个字段,故图3-13中它们的位置排在一起。表3-4展示了Address域的用法。

表3-4 Address域用法说明
网络类型 Address 1(接收端) Address 2(发送端) Address 3 Address 4
IBSS DA SA BSSID 未使用
To AP BSSID SA DA 未使用
From AP DA BSSID SA 未使用

由表3-4可知,Address 1用作接收端,Address 2用作发送端。Address 3携带其他信息用于帮助MAC帧的传输,针对不同类型,各个Address域的用法如下。

IBSS网络中,由于不存在DS,所以Address 1指明接收者,Address 2代表发送者。Address 3被设置为BSSID,其作用是:如果Address 1被设置为组播地址,那么只有位于同一个BSSID的STA才有必要接收数据。

基础结构型网络中,如果STA发送数据,Address 1必须是BSSID,代表AP。因为这种网络中,所有数据都必须通过AP。Address 3代表最终的接收者,一般是DS上的某个目标地址。

基础结构型网络中,如果数据从AP来,那么Address 1指明STA的地址,Address 2代表AP的地址,Address 3则代表DS上的某个源端地址。

Address 4只在无线网络桥接的时候才使用。本书不讨论这种情况。

图3-16描述了基础型结构网络和无线桥接情况下不同地址的使用场景。

 

如图3-16所示:

数据包发往DS的情况下,SA和TA一致,而RA和BSSID一致。

数据包来自DS的情况下,RA和DA一致,而TA和BSSID一致。

无线桥接的情况下,SA、TA、RA和DA四种地址都派上了用场。

提示 关于Address域的作用请读者务必清楚下面三个关键点。

1)MAC帧头中包含四个Address域,在不同的情况下,每个域中包含不同的地址。原则是Address 1代表接收地址,Address 2代表发送端地址,Address 3辅助用,Address 4用于无线桥接或Mesh BSS网络中。

2)规范定义了五种类型的地址,即BSSID、RA、SA、DA和TA。每种地址有不同的含义。

3)在某些情况下,有些类型地址的值相同,如图3-16所示。

(4)Sequence Control域

Sequence Control域长16位,前4位代表片段编号(Fragment Number),后12位为帧顺序编号(Sequence Number),域格式如图3-17所示。

 

Sequence Number:STA每次发送数据帧时都会设置一个帧顺序编号。注意,控制帧没有帧顺序编号。另外,重传帧不使用新的帧顺序编号。

Fragment Number:用于控制分片帧。如果数据量太大,则MAC层会将其分片发送。每个分片帧都有对应的分片编号。

(5)MAC帧相关知识总结

本节对MAC帧格式进行介绍。这部分内容难度并不大,但读起来肯定有些枯燥。笔者在阅读参考资料[15]时也有同样的感觉。后来笔者利用公司的AirPcap无线网络分析设备截获无线网络数据并使用wireshark软件进行分析后,感觉MAC帧信息直观多了,如图3-18所示。

 

AirPcap设备比较贵,但该工具对于将来Wi-Fi知识的学习、工作中的难题解决相当有帮助。

注意 本书的资源共享文件中提供几个Wi-Fi数据包捕获文件,读者可直接利用它们进行分析。详情见1.3节。

接下来介绍常见的几种具体的MAC帧。首先从控制帧开始。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.3.5 802.11 MAC服务和帧
下一篇:3. 控制帧[15][17]
相关文章
图文推荐
3.6.4 框架MVC实例分
3.6.3 框架MVC思路讲
3.5 认识Smarty模板
3.3 使用JSON通信
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站