802.11包括了MAC层和PHY层。根据图3-4可知这两层内部都对应有Entity,它们通过SAP(Service Access Point)为对应的上层提供服务。图3-27展示了802.11中的Entity和SAP。
:-: ![](https://box.kancloud.cn/eceba8d428e5144060ecf802562ddcc8_1125x597.jpg)
图3-27 802.11 Entity模型
由图3-27可知:
* MAC_SAP为LLC层提供服务,其具体内容见3.3.5节“MAC服务定义”。
* MAC子层中还有专门负责管理的Entity,名为MLME(MAC Sublayer Management Entity),它对外提供的接口是MLME_SAP。
* PHY层还可细分为PLCP和PMD两层(本书不讨论)。
* 物理层对外提供的管理实体是PLME(PHY Sublayer Management Entity),对应的SAP缩写为PLME_SAP。
* 为了方便对802.11 MAC及PHY层统一操作和管理,规范还定义一个SME(StationManagement Entity)。该实体独立于MAC和PHY层。使用者可通过SME实体来操作MAC层和PHY层中的SAP。
本节重点关注MAC的管理Entity(即MLME)及其对应的SAP。规范中关于MLME_SAP一共有82个原语,其中一部分如图3-28所示。
:-: ![](https://box.kancloud.cn/4c2c930b954f60ba6f84ce722212c492_442x492.jpg)
图3-28 MLME SAP部分内容
原语的定义曾在3.3.5节MAC服务定义中见过,它其实就是通过定义API来表达自己所具有的功能。MLME_SAP非常多,本章不可能全部覆盖,此处仅介绍三个常用的原语。
* Scan:用于扫描周围的无线网络。
* Authenticate:关联到某个AP前,用于STA的身份验证。
* Associate:关联某个AP。关联成功后,STA就正式加入无线网络了。
* * * * *
**提醒** 请读者务必注意一点,理解MLME_SAP原语对掌握Wi-Fi技术非常重要。从编程角度来说,MLME_SAP相当于定义了一套接口函数,而后续章节将介绍的wpa_supplicant只是对它们的实现。
* * * * *
**1.Scan介绍**
原语的参数比较多,但并不是所有参数都需要(由对应的MIB项控制),本书仅介绍比较重要的参数(用加粗字体表示)。
(1)request
Scan.request原语用于扫描周围的无线网络,其原型如下。
~~~
MLME-SCAN.request(
BSSType,BSSID,SSID,ScanType,ProbeDelay,
ChannelList,MinChannelTime,MaxChannelTime,
RequestInformation, SSID List,
ChannelUsage,AccessNetworkType,HESSID,MeshID,VendorSpecificInfo
)
~~~
Scan参数中,比较几个重要的分别如下。
* BSSType:类型为枚举(Enumeration),可取值为INFRASTRUCTURE、INDEPENDENT、MESH、ANY_BSS。
* BSSID:类型为MAC地址。可以是某个指定的BSSID或者广播BSSID。
* SSID:类型为字符串。0~32字节长。指定网络名,如果长度为0,则为wild ssid。
* ScanType:类型为枚举,可取值为ACTIVE(主动)、PASSIVE(被动)。详情见下文。
* ProbeDelay:类型为整型,单位为微秒。用于ACTIVE模式的扫描,详情见下文。
* ChannelList:类型为有序整数列表(Ordered set of integers),扫描时使用。
* MinChannelTime和MaxChannelTime:类型均为整型。用于指示扫描过程中在每个信道上等待的最小和最长时间。时间单位为TU。
由Scan.request的ScanType参数可知,802.11规定了两种扫描模式。
* ACTIVE模式:这种模式下,STA在每个Channel(信道)上都会发出Probe Request帧用来搜索某个网络。具体工作方式是,STA首先调整到某个信道,然后等待来帧指示(表明该信道有人使用)或超时时间ProbeDelay。两个条件满足任意一个,STA都将发送Probe Request帧,然后STA在该信道上等待最少MinChannelTime时间(如果在此时间内信道一直空闲),最长MaxChannelTime时间。
* PASSIVE模式:这种模式下,STA不发送任何信号,只是在ChannelList中各个信道间不断切换并等待Beacon帧。根据前述介绍可知,在基础结构型网络中AP会定时发送Beacon帧以宣告网络的存在。所以,PASSIVE模式下,STA能根据Beacon帧来了解周围所存在的无线网络。
(2)confirm
Scan.confirm用于通知扫描结果,其原型定义如下。
~~~
MLME-SCAN.confirm(
BSSDescriptionSet,BSSDescriptionFromMeasurementPilotSet,
ResultCode,VendorSpecificInfo
)
~~~
* BSSDescriptionSet:类型为BSSDescription列表。具体内容见下文。
* ResultCode:类型为枚举,可取值为SUCCESS和NOT_SUPPORTED。
BSSDescription包含很多内容,常见项如表3-12所示。
:-: ![](https://box.kancloud.cn/ba8f0091ac8e5ebda41096d478590566_1264x467.jpg)
获取周围的无线网络后,STA可以选择加入(join)其中的一个BSS。规范没有定义网络加入的原语,但实际上大部分无线网卡在实现时,都需要join相关的处理。因为如果周围存在多个无线网络时,需要用户参与来选择加入哪一个网络。BSSDescription全部取值列表请参考规范6.3.3.3.2节。
**2.Authenticate介绍**
关联到某个AP前,STA必须通过身份验证。该处理由Authenticate对应的原语来完成。由于身份验证涉及两个STA(以基础结构型网络为例,一个是STA,另一个是AP),所以Authenticate包含4个原语,分别如下。
* MLME-Authenticate.request:STA A向AP B发起身份验证请求。
* MLME-Authenticate.confirm:STA A收到来自AP B的身份验证处理结果。
* MLME-Authenticate.indication:AP B收到来自STA A的身份验证处理请求。
* MLME-Authenticate.response:AP B向STA A发送身份验证处理结果。
先来看request和confirm原语。
(1)request和confirm
request和confirm原语原型如下。
~~~
MLME-AUTHENTICATE.request(
PeerSTAAddress,AuthenticationType, AuthenticateFailureTimeout,
Content of FT Authentication elements,
Content of SAE Authentication Frame,
VendorSpecificInfo
)
// confirm原型
MLME-AUTHENTICATE.confirm(
PeerSTAAddress,AuthenticationType, ResultCode,
Content of FT Authentication elements,
Content of SAE Authentication Frame,
VendorSpecificInfo
)
~~~
上述原语定义说明如下。
- PeerSTAAddress:类型为MAC地址,代表对端STA的地址。以本例而言,则是AP B的MAC地址。
- AuthenticationType:类型为枚举,可取值有OPEN_SYSTEN、SHARED_KEY、FAST_BSS_TRANSITION和SAE。用于表示认证过程中使用的认证类型。这部分内容见3.3.7节无线网络安全相关介绍。
- AuthenticateFailureTimeout:类型为整型,代表认证超时时间,单位为TU。
- ResultCode:代表认证处理结果。
MLME-AUTHENTICATE.request将触发STA A发送Authenticate帧。下面来看AP B如何处理收到的这个Authenticate帧呢?
(2)indication和response
这两个原语定义和request以及confirm基本一样。
~~~
MLME-AUTHENTICATE.indication(
PeerSTAAddress,AuthenticationType,
Content of FT Authentication elements,
Content of SAE Authentication Frame,
VendorSpecificInfo
)
// response原型
MLME-AUTHENTICATE.response(
PeerSTAAddress,AuthenticationType, ResultCode,
Content of FT Authentication elements,
Content of SAE Authentication Frame,
VendorSpecificInfo
)
~~~
indication和对应的response参数与request以及confirm一样,此处不详述。
**3.Associate介绍**
STA通过身份验证后,就需要和AP关联。只有关联成功后,STA才正式成为无线网络的一员。
* * * * *
**注意** 对于RSN,关联成功后还需通过802.1X身份验证。相关内容留待3.3.7节介绍。
* * * * *
Associate包含的原语和Authentication一样,都有request、confirm、indication和response。我们先来看request和confirm。
(1)request和confirm
request和confirm原语定义如下。
~~~
MLME-ASSOCIATE.request(
PeerSTAAddress, AssociateFailureTimeout,CapabilityInformation,
ListenInterval,Supported Channels,
RSN,
QoSCapability,Content of FT Authentication elements,SupportedOperatingClasses,
HT Capabilities,Extended Capabilities,20/40 BSS Coexistence, QoSTrafficCapability,
TIMBroadcastRequest,EmergencyServices,VendorSpecificInfo
)
// confirm原语
MLME-ASSOCIATE.confirm(
ResultCode,CapabilityInformation,AssociationID,SupportedRates,
EDCAParameterSet,RCPI.request,RSNI.request,RCPI.response,
RSNI.response,RMEnabledCapabilities,Content of FT Authentication elements,
SupportedOperatingClasses,HT Capabilities,Extended Capabilities,
20/40 BSS Coexistence, TimeoutInterval,BSSMaxIdlePeriod,TIMBroadcastResponse,
QosMapSet,VendorSpecificInfo
)
~~~
上述原语中包含的参数信息如下。
- PeerSTAAddress:响应Association请求的STA的MAC地址,即AP的地址。
- AssociateFailureTimeout:类型为整型,代表关联超时时间,单位为TU。
- CapabilityInformation:指定AP的性能信息。
- ListenInterval:用于告知AP,STA进入PS模式后,监听Beacon帧的间隔时间。
- RSN:类型为RSNE,指示STA选设置的安全方面的信息。详情见3.3.7节。
- ResultCode:AP返回的处理结果。
- AssociationID:AP返回的关联ID。
- SupportedRates:AP返回的所支持的传输速率列表。速率以500kbps为单位。
(2)indication和response
indication和response原语定义如下。
~~~
MLME-ASSOCIATE.indication(
PeerSTAAddress,CapabilityInformation,ListenInterval,SSID,SupportedRates,
RSN,QoSCapability,RCPI,RSNI,RMEnabledCapabilities,
Content of FT Authentication elements,SupportedOperatingClasses,
DSERegisteredLocation,
HT Capabilities,Extended Capabilities,20/40 BSS Coexistence,QoSTrafficCapability,
TIMBroadcastRequest,EmergencyServices,VendorSpecificInfo
)
// response原语
MLME-ASSOCIATE.response(
PeerSTAAddress,ResultCode,CapabilityInformation,AssociationID,
EDCAParameterSet,RCPI,RSNI,RMEnabledCapabilities,
Content of FT Authentication elements,
SupportedOperatingClasses,DSERegisteredLocation,HTCapabilities,
Extended Capabilities,
20/40 BSS Coexistence, TimeoutInterval,BSSMaxIdlePeriod,TIMBroadcastResponse,
QoSMapSet,VendorSpecificInfo
)
~~~
上述原语和参数中,只有indication的SSID略有不同,它代表发起关联请求的STA的MAC
地址。
**4.STA状态转换[24]**
上面原语操作成功后,STA状态将发生变化。STA从最初到最终的状态切换如图3-29所示。
:-: ![](https://box.kancloud.cn/ad23f383265732370f41e9f9a0deef15_624x735.jpg)
图3-29 STA状态切换
图3-29中包含很多知识点,下面一一介绍它们。首先是MAC帧Frame的类别(Class),规范定义MAC帧一共有三种类别,分别是Class 1、Class 2和Class 3,各自包含不同的MAC帧,如表3-13所示。
:-: ![](https://box.kancloud.cn/add56be813efe0b2f91bb3af8392cd44_1263x286.jpg)
结合图3-29,可知STA在不同状态下发送的MAC帧类别也不同。这主要是和网络安全有关,没有通过身份验证的STA是不允许随意传输数据的。图3-29中,STA的状态转换如下(以基础结构型网络为例)。
- STA首先处于State 1,即未认证和未关联的情况。为了能加入无线网络,它需要发送Authentication帧给AP。如果认证成功,将转入State 2。State 1情况下不能发送数据帧。
- State 2是已认证,未关联状态。STA将发送Association帧给AP进行关联。成功后,进入State 3。State 2情况下也不能发送数据帧。
- State 3属于已认证,已经关联,但还未通过RSN(Robust Security Network,强健安全网络)认证的状态。RSN采用802.1X进行控制。由于未通过RSN认证,所以只能发送处理认证的数据帧,即4-Way Handshake(四次握手)帧。这部分内容在3.3.7节介绍。
- 4-Way Handshake成功后,STA进入State 4。此时它完全加入无线网络,所有数据帧就能正常传输。
MAC管理实体包含的功能很多,不过对程序员来说,其理解难度反而较小,因为它定义的原语类似代码中的API,而且每个参数的作用有详尽的解释。读者以后在分析wpa_supplicant的时候,不妨多回顾本节内容。
- 前言
- 第1章 准备工作
- 1.1 Android系统架构
- 1.2 工具使用
- 1.2.1 Source Insight的使用
- 1.2.2 Eclipse的使用
- 1.2.3 BusyBox的使用
- 1.3 本书资源下载说明
- 第2章 深入理解Netd
- 2.1 概述
- 2.2 Netd工作流程
- 2.2.1 main函数分析
- 2.2.2 NetlinkManager分析
- 2.2.3 CommandListener分析
- 2.2.4 DnsProxyListener分析
- 2.2.5 MDnsSdListener分析
- 2.3 CommandListener中的命令
- 2.3.1 iptables、tc和ip命令
- 2.3.2 CommandListener构造函数和测试工具ndc
- 2.3.3 InterfaceCmd命令
- 2.3.4 IpFwd和FirewallCmd命令
- 2.3.5 ListTtysCmd和PppdCmd命令
- 2.3.6 BandwidthControlCmd和IdletimerControlCmd命令
- 2.3.7 NatCmd命令
- 2.3.8 TetherCmd和SoftapCmd命令
- 2.3.9 ResolverCmd命令
- 2.4 NetworkManagementService介绍
- 2.4.1 create函数详解
- 2.4.2 systemReady函数详解
- 2.5 本章总结和参考资料说明
- 2.5.1 本章总结
- 2.5.2 参考资料说明
- 第3章 Wi-Fi基础知识
- 3.1 概述
- 3.2 无线电频谱和802.11协议的发展历程
- 3.2.1 无线电频谱知识
- 3.2.2 IEEE 802.11发展历程
- 3.3 802.11无线网络技术
- 3.3.1 OSI基本参考模型及相关基本概念
- 3.3.2 802.11知识点导读
- 3.3.3 802.11组件
- 3.3.4 802.11 Service介绍
- 3.3.5 802.11 MAC服务和帧
- 3.3.6 802.11 MAC管理实体
- 3.3.7 无线网络安全技术知识点
- 3.4 Linux Wi-Fi编程API介绍
- 3.4.1 Linux Wireless Extensions介绍
- 3.4.2 nl80211介绍
- 3.5 本章总结和参考资料说明
- 3.5.1 本章总结
- 3.5.2 参考资料说明
- 第4章 深入理解wpa_supplicant
- 4.1 概述
- 4.2 初识wpa_supplicant
- 4.2.1 wpa_supplicant架构
- 4.2.2 wpa_supplicant编译配置
- 4.2.3 wpa_supplicant命令和控制API
- 4.2.4 git的使用
- 4.3 wpa_supplicant初始化流程
- 4.3.1 main函数分析
- 4.3.2 wpa_supplicant_init函数分析
- 4.3.3 wpa_supplicant_add_iface函数分析
- 4.3.4 wpa_supplicant_init_iface函数分析
- 4.4 EAP和EAPOL模块
- 4.4.1 EAP模块分析
- 4.4.2 EAPOL模块分析
- 4.5 wpa_supplicant连接无线网络分析
- 4.5.1 ADD_NETWORK命令处理
- 4.5.2 SET_NETWORK命令处理
- 4.5.3 ENABLE_NETWORK命令处理
- 4.6 本章总结和参考资料说明
- 4.6.1 本章总结
- 4.6.2 参考资料说明
- 第5章 深入理解WifiService
- 5.1 概述
- 5.2 WifiService的创建及初始化
- 5.2.1 HSM和AsyncChannel介绍
- 5.2.2 WifiService构造函数分析
- 5.2.3 WifiStateMachine介绍
- 5.3 加入无线网络分析
- 5.3.1 Settings操作Wi-Fi分析
- 5.3.2 WifiService操作Wi-Fi分析
- 5.4 WifiWatchdogStateMachine介绍
- 5.5 Captive Portal Check介绍
- 5.6 本章总结和参考资料说明
- 5.6.1 本章总结
- 5.6.2 参考资料说明
- 第6章 深入理解Wi-Fi Simple Configuration
- 6.1 概述
- 6.2 WSC基础知识
- 6.2.1 WSC应用场景
- 6.2.2 WSC核心组件及接口
- 6.3 Registration Protocol详解
- 6.3.1 WSC IE和Attribute介绍
- 6.3.2 802.11管理帧WSC IE设置
- 6.3.3 EAP-WSC介绍
- 6.4 WSC代码分析
- 6.4.1 Settings中的WSC处理
- 6.4.2 WifiStateMachine的处理
- 6.4.3 wpa_supplicant中的WSC处理
- 6.4.4 EAP-WSC处理流程分析
- 6.5 本章总结和参考资料说明
- 6.5.1 本章总结
- 6.5.2 参考资料说明
- 第7章 深入理解Wi-Fi P2P
- 7.1 概述
- 7.2 P2P基础知识
- 7.2.1 P2P架构
- 7.2.2 P2P Discovery技术
- 7.2.3 P2P工作流程
- 7.3 WifiP2pSettings和WifiP2pService介绍
- 7.3.1 WifiP2pSettings工作流程
- 7.3.2 WifiP2pService工作流程
- 7.4 wpa_supplicant中的P2P
- 7.4.1 P2P模块初始化
- 7.4.2 P2P Device Discovery流程分析
- 7.4.3 Provision Discovery流程分析
- 7.4.4 GO Negotiation流程分析
- 7.5 本章总结和参考资料说明
- 7.5.1 本章总结
- 7.5.2 参考资料说明
- 第8章 深入理解NFC
- 8.1 概述
- 8.2 NFC基础知识
- 8.2.1 NFC概述
- 8.2.2 NFC R/W运行模式
- 8.2.3 NFC P2P运行模式
- 8.2.4 NFC CE运行模式
- 8.2.5 NCI原理
- 8.2.6 NFC相关规范
- 8.3 Android中的NFC
- 8.3.1 NFC应用示例
- 8.3.2 NFC系统模块
- 8.4 NFC HAL层讨论
- 8.5 本章总结和参考资料说明
- 8.5.1 本章总结
- 8.5.2 参考资料说明
- 第9章 深入理解GPS
- 9.1 概述
- 9.2 GPS基础知识
- 9.2.1 卫星导航基本原理
- 9.2.2 GPS系统组成及原理
- 9.2.3 OMA-SUPL协议
- 9.3 Android中的位置管理
- 9.3.1 LocationManager架构
- 9.3.2 LocationManager应用示例
- 9.3.3 LocationManager系统模块
- 9.4 本章总结和参考资料说明
- 9.4.1 本章总结
- 9.4.2 参考资料说明
- 附录