3.3.6 802.11 MAC管理实体[22][23]

802.11包括了MAC层和PHY层。根据图3-4可知这两层内部都对应有Entity,它们通过SAP(Service Access Point)为对应的上层提供服务。图3-27展示了802.11中的Entity和SAP。

3.3.6 802.11 MAC管理实体[22][23] - 图1

图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(Station Management Entity)。该实体独立于MAC和PHY层。使用者可通过SME实体来操作MAC层和PHY层中的SAP。

本节重点关注MAC的管理Entity(即MLME)及其对应的SAP。规范中关于MLME_SAP一共有82个原语,其中一部分如图3-28所示。

3.3.6 802.11 MAC管理实体[22][23] - 图2

图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原语用于扫描周围的无线网络,其原型如下。

  1. MLME-SCAN.request(
  2. BSSType,BSSID,SSID,ScanType,ProbeDelay,
  3. ChannelList,MinChannelTime,MaxChannelTime,
  4. RequestInformation, SSID List,
  5. ChannelUsage,AccessNetworkType,HESSID,MeshID,VendorSpecificInfo
  6. )

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用于通知扫描结果,其原型定义如下。

  1. MLME-SCAN.confirm
  2. BSSDescriptionSetBSSDescriptionFromMeasurementPilotSet
  3. ResultCodeVendorSpecificInfo

·BSSDescriptionSet:类型为BSSDescription列表。具体内容见下文。

·ResultCode:类型为枚举,可取值为SUCCESS和NOT_SUPPORTED。

BSSDescription包含很多内容,常见项如表3-12所示。

3.3.6 802.11 MAC管理实体[22][23] - 图3

获取周围的无线网络后,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原语原型如下。

  1. MLME-AUTHENTICATE.request(
  2. PeerSTAAddress,AuthenticationType, AuthenticateFailureTimeout,
  3. Content of FT Authentication elements,
  4. Content of SAE Authentication Frame,
  5. VendorSpecificInfo
  6. )
  7. // confirm原型
  8. MLME-AUTHENTICATE.confirm(
  9. PeerSTAAddress,AuthenticationType, ResultCode,
  10. Content of FT Authentication elements,
  11. Content of SAE Authentication Frame,
  12. VendorSpecificInfo
  13. )

上述原语定义说明如下。

·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基本一样。

  1. MLME-AUTHENTICATE.indication(
  2. PeerSTAAddress,AuthenticationType,
  3. Content of FT Authentication elements,
  4. Content of SAE Authentication Frame,
  5. VendorSpecificInfo
  6. )
  7. // response原型
  8. MLME-AUTHENTICATE.response(
  9. PeerSTAAddress,AuthenticationType, ResultCode,
  10. Content of FT Authentication elements,
  11. Content of SAE Authentication Frame,
  12. VendorSpecificInfo
  13. )

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原语定义如下。

  1. MLME-ASSOCIATE.request(
  2. PeerSTAAddress, AssociateFailureTimeout,CapabilityInformation,
  3. ListenInterval,Supported Channels,
  4. RSN,
  5. QoSCapability,Content of FT Authentication elements,SupportedOperatingClasses,
  6. HT Capabilities,Extended Capabilities,20/40 BSS Coexistence, QoSTrafficCapability,
  7. TIMBroadcastRequest,EmergencyServices,VendorSpecificInfo
  8. )
  9. // confirm原语
  10. MLME-ASSOCIATE.confirm(
  11. ResultCode,CapabilityInformation,AssociationID,SupportedRates,
  12. EDCAParameterSet,RCPI.request,RSNI.request,RCPI.response,
  13. RSNI.response,RMEnabledCapabilities,Content of FT Authentication elements,
  14. SupportedOperatingClasses,HT Capabilities,Extended Capabilities,
  15. 20/40 BSS Coexistence, TimeoutInterval,BSSMaxIdlePeriod,TIMBroadcastResponse,
  16. QosMapSet,VendorSpecificInfo
  17. )

上述原语中包含的参数信息如下。

·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原语定义如下。

  1. MLME-ASSOCIATE.indication(
  2. PeerSTAAddress,CapabilityInformation,ListenInterval,SSID,SupportedRates,
  3. RSN,QoSCapability,RCPI,RSNI,RMEnabledCapabilities,
  4. Content of FT Authentication elements,SupportedOperatingClasses,
  5. DSERegisteredLocation,
  6. HT Capabilities,Extended Capabilities,20/40 BSS Coexistence,QoSTrafficCapability,
  7. TIMBroadcastRequest,EmergencyServices,VendorSpecificInfo
  8. )
  9. // response原语
  10. MLME-ASSOCIATE.response(
  11. PeerSTAAddress,ResultCode,CapabilityInformation,AssociationID,
  12. EDCAParameterSet,RCPI,RSNI,RMEnabledCapabilities,
  13. Content of FT Authentication elements,
  14. SupportedOperatingClasses,DSERegisteredLocation,HTCapabilities,
  15. Extended Capabilities,
  16. 20/40 BSS Coexistence, TimeoutInterval,BSSMaxIdlePeriod,TIMBroadcastResponse,
  17. QoSMapSet,VendorSpecificInfo
  18. )

上述原语和参数中,只有indication的SSID略有不同,它代表发起关联请求的STA的MAC地址。

4.STA状态转换[24]

上面原语操作成功后,STA状态将发生变化。STA从最初到最终的状态切换如图3-29所示。

3.3.6 802.11 MAC管理实体[22][23] - 图4

图3-29 STA状态切换

图3-29中包含很多知识点,下面一一介绍它们。首先是MAC帧Frame的类别(Class),规范定义MAC帧一共有三种类别,分别是Class 1、Class 2和Class 3,各自包含不同的MAC帧,如表3-13所示。

3.3.6 802.11 MAC管理实体[22][23] - 图5

结合图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的时候,不妨多回顾本节内容。