🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
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的时候,不妨多回顾本节内容。