《深刻理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第三章 Wi-Fi基础知识

首先感谢各位兄弟姐妹们的耐心等待。本书预计在3月中旬上市发售。从今天开始,我将在博客中连载此书的一些内容。注意,此处连载的是未经出版社编辑的原始稿件,因此样子会有些非专业。html

注意,以下是本章目录,本文节选3.1-3.3.4  3.4~3.4.2 及3.5节linux

 

为了方便读者深刻学习,本系列连载都会将做者研究过数据库

  

程中所学习的参考文献列出来编程

 

                                                                                      第3章  Wi-Fi基础知识数组

 

本章主要内容:

  • 介绍IEEE 802.11协议相关知识;
  • 介绍Linux Wireless Extension和NL80211编程。

本章所涉及的源代码文件名及位置:

  • wireless.h  external/kernel-headers/original/linux/wireless.h
  • driver_wext.c:external/wpa_supplicant_8/src/drivers/driver_wext.c
  • netlink.h:external/kernel-headers/original/linux/netlink.h
  • driver_nl80211.c:external/wpa_supplicant_8/src/drivers/driver_nl80211.c
  • nl80211_copy.h:external/wpa_supplicant8/wpa_supplicant/src/drivers/nl80211_copy.h

3.1  概述

Wi-FiWireless Fidelity)是一个无线网络通讯技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance,缩写为WFA)拥有。WFA专门负责Wi-Fi认证与商标受权工做。严格得说,Wi-Fi是一个认证的名称,该认证用于测试无线网络设备是否符合IEEE 802.11系列协议的规范。经过该认证的设备将被授予一个名为Wi-Fi CERTIFIED的商标。不过,随着得到Wi-Fi认证的设备普及,人们也就习觉得常得称无线网络为Wi-Fi网络了。缓存

提示:IEEE 802.11规范和Wi-Fi的关系很难用一两句话说清楚,读者可阅读参考资料[1]进行了解。简单来讲,IEEE 802.11是无线网络技术的官方标准,而WFA则参考802.11规范制订了一套Wi-Fi测试方案(Test Plan)。不过,Test Plan802.11的内容并不彻底一致。有些Test项包含了目前802.11还未涉及的内容。另外,Test Plan也未覆盖802.11全部内容。因此参考资料[1]Wi-Fi定义为802.11规范子集的扩展。安全

本章拟从如下几方面向读者介绍Wi-Fi技术:网络

  • 首先介绍IEEE 802.11协议涉及到的理论知识,包括无线频谱资源、IEEE 802.11/802.X协议中的相关内容、关键概念(例如Acess Point等)、MAC帧、无线网络安全等。
  • 介绍如何在Linux系统中经过Linux Wireless Extension以及nl80211 API操做无线网络设备。

提示:因为篇幅问题,本书将不拟讨论WFA制订的一些标准如Wi-Fi DisplayWi-Fi Simple Configuration等。不过作为Wi-Fi技术的重要组成部分,笔者将在博客中对它们进行系统介绍[1]数据结构

首先来看无线电频谱和802.11协议的发展历程。架构

3.2  无线电频谱和802.11协议的发展历程

本节将介绍无线电频谱和802.11协议发展历程。

3.2.1  无线电频谱知识介绍[2]

Wi-Fi依靠无线电波来传递数据。绝大多数状况下,这些能收发无线电波的设备每每被强制限制在某个无线频率范围内工做。这是由于无线频谱(即无线电波的频率,Radio Spectrum,单位为Hz)是一种很是重要的资源。因此目前大部分国家对无线频谱的使用都有国家级的管制。如下是几个主要国家的管制机构:

  • 美国的FCCFederal Communication Commission),美国联邦通讯委员会。
  • 欧洲的EROEuropean Radiocommunication Office),欧洲无线电通讯局。
  • 中国的MIITMinistry of industry and Information Technology),中国工信部下属的无线电管理局。
  • 国际电信联盟ITUInternational Telecomunication Union)。

上述这些机构是如何管理无线频谱资源的呢?通常而言,无线频谱资源将按照无线电频率的高低进行划分。有一些频率范围内的频谱资源必须获得这些管制机构的受权才可以使用,而有些频率范围的频谱资源无需管制机构的受权就可以使用。这些无需受权的频谱大部分集中在所谓的ISM国际共用频段中。

ISMIndustrial Scientific Medical的缩写。如其名所示,位于ISM频段的频谱资源被工业、科学和医学三个主要机构使用。ISM一词最先由FCC定义。不过,各国的ISM频段并不彻底一致。例如,美国有三个频段属于ISM,分别是902-908MHz2400-2483.5MHz5725-5850MHz。另外,各国都将2.4GHz频段划分于ISM范围,因此Wi-Fi、蓝牙等都可工做在此频段上。

注意:虽然无需受权就可使用这些频段资源,但管制机构对设备的功率却有要求,由于无线频谱具备易被污染的特色,而较大的功率则会干扰周围其余设备的使用。

3.2.2  IEEE 802.11发展历程介绍

使用过Wi-Fi的读者或多或少都接触过IEEE 802.11这个词,它到底表明什么呢?

IEEEInstitute of Electrical and Electronics Engineers)是美国电气和电子工程师协会的简称。802是该组织中一个专门负责制定局域网标准的委员会,也称为LMSCLAN/MAN Standards Committee,局域网/城域网标准委员会)。该委员会成立于19802月,其任务就是制定局域网和城域网标准。

因为工做量较大,该委员会被细分红多个工做组(Working Group),每一个工做组负责解决某个特定方面问题的标准。工做组也会被赋予一个编号(位于802编号的后面,中间用点号隔开),故802.11表明802项目的第11个工做组[3]。它专门负责制订无线局域网(Wireless LAN)的介质访问控制协议(MACMedium Access Control)及物理层(PHYPhysical Layer)技术规范。

和工做组划分相似,工做组内部还会细分为多个任务组(Task Group)。TG的任务是修改、更新标准的某个特定方面。TG的编号为英文字母,如abc等。

提示:TG编号可以使用大小写字母,但其含义不一样。小写字母的编号表明该标准不能单独存在。例如802.11b表明它是在802.11上进行的修订工做,其自己不能独立存在。而大写字母的编号表明这是一种体系完备的独立标准,如802.1X则是处理安全方面的一种独立标准。

如上所述,802.11制定了无线网络技术的规范,其发展历经好几个版本。如下是IEEE 802.11各版本的简单介绍[4]

  • 802.111997年发布,原始标准(2Mbit/s,工做在2.4GHz频段)。因为它在速率和传输距离上都不能知足人们的须要,所以,IEEE小组又相继推出了802.11b802.11a两个新标准。
  • 802.11a1999年发布,新增物理层补充(54Mbit/s,工做在5GHz频段)。
  • 802.11b1999年发布,新增物理层补充(11Mbit/s,工做在2.4GHz频段)。802.11b是全部无线局域网标准中最著名也是普及最广的标准。有时候它被称做Wi-Fi。不过根据前文的介绍,Wi-FiWFA的一个商标。
  • 802.11c:它在媒体接入控制/链路链接控制(MAC/LLC)层面上进行扩展,旨在制订无线桥接运做标准,但后来将标准追加到既有的802.1中,成为802.1d
  • 802.11d:它和802.11c同样在媒体接入控制/链路链接控制(MAC/LLC)层面上进行扩展,对应802.11b标准,解决Wi-Fi在某些不能使用2.4GHz频段国家中的使用问题。
  • 802.11e:新增对无线网络服务质量(Quality of ServiceQoS)的支持。其分布式控制模式可提供稳定合理的服务质量,而集中控制模式可灵活支持多种服务质量策略,让影音传输能及时、定量、保证多媒体的顺畅应用,WFA将此称为WMM(Wi-Fi Multi-Media
  • 802.11f:追加了IAPPinter-access point protocol)协定,确保用户端在不一样接入点间的漫游,让用户端能平顺、无形地切换区域。不过,此规范已被废除。
  • 802.11g2003年发布,它是IEEE 802.11b的后继标准,其传送速度为54Mbit/s802.11g是为了更高的传输速率而制定的标准,它采用2.4GHz频段,使用CCK技术与802.11b后向兼容,同时它又经过采用OFDM技术支持高达54Mbit/s的数据流,所提供的带宽是802.11a1.5倍。
  • 802.11h:是为了与欧洲的HiperLAN2相协调的修订标准。因为美国和欧洲在5GHz频段上的规划、应用上存在差别,故802.11h目的是为了减小对同处于5GHz频段的雷达的干扰。802.11h涉及两种技术,一种是动态频率选择(DFS),另外一种技术是传输功率控制(TPC)。
  • 802.11i2004年发布,新增无线网络安全方面的补充。于20047月完成。其定义了基于AES的全新加密协议CCMPCTR with CBC-MAC Protocol),以及向前兼容RC4的加密协议TKIPTemporal Key Integrity Protocol)。
  • 802.11j:它是为适应日本在5GHz频段以上的应用不一样而定制的标准。
  • 802.11k:它为无线局域网应该如何进行信道选择、漫游服务和传输功率控制提供了标准。
  • 802.11l:因为“11L”字样与安全规范“11i”容易混淆,而且很像“111”,所以被放弃编号使用。
  • 802.11m:该标准主要对802.11家族规范进行维护、修正、改进,以及为其提供解释文件。m表示Maintenance
  • 802.11n20041IEEE宣布成立一个新的单位来发展802.11标准,其标称支持的数据传输速度可达540Mbit/s。新增对MIMOMultiple-Input Multiple-Output)的支持。MIMO支持使用多个发射和接收天线来支持更高的数据传输速率和无线网络涵盖范围。
  • 802.11p:又称WAVEWireless Access in the Vehicular Environment,)是一个由IEEE 802.11标准扩充的通讯协议,主要用于车载电子无线通讯。它本质上是IEEE 802.11的扩充延伸,符合智能交通系统(ITSIntelligent Transportation Systems)的相关应用。
  • 802.11r2008年发布,新增快速基础服务转移(Fast Transition),主要是用来解决客户端在不一样无线网络AP间切换时的延迟问题。
  • 802.11s:制订与实现目前最早进的MESH网络,提供自主性组态(self-configuring),自主性修复(self-healing)等能力。无线Mesh网能够把多个无线局域网连在一块儿从而能覆盖一个大学校园或整个城市。Mesh本意是指全部节点都相互链接。无线Mesh网的核心思想是让网络中的每一个节点均可以收发信号。它能够增长无线系统的覆盖范围和带宽容量。
  • 802.11t:提供提升无线广播链路特征评估和衡量标准的一致性方法。
  • 802.11u:也称"与外部网络互通(InterWorking with External Networks)",它定义了不一样种类的无线网络之间的网络安全互连功能,让802.11无线网络可以访问蜂窝网络(Cellular Network)或者WiMax等其它无线网络。
  • 802.11v:该标准主要针对无线网络的管理。它提供了简化无线网络部署和管理的重要和高效率机制。无线终端设备控制、网络选择、网络优化和统计数据获取与监测都属于802.11v建议的功能。
  • 802.11w:其任务是经过保护管理帧(无线网络MAC帧的一种类型,还有数据帧和控制帧。详情见3.3.5.2节),以进一步提高无线网络的安全性。由于802.11i所涉及的安全技术只覆盖了数据帧,而随着无线技术的发展,愈来愈多的敏感信息(如基于位置的标识符以及快速传播的信息)倒是经过管理帧来传播的,因此安全保护也须要拓展到管理帧。
  • 802.11y:该标准的目标是对在与其余用户共享的美国3.65GHz3.7GHz频段中802.11无线局域网通讯的机制进行标准化。

提示:读者可从IEEE官方网站中下载802.11-2012标准PDF全文(下载地址为http://standards.ieee.org/about/get/802/802.11.html),长达2793页,包含并整理了从802.11a802.11z各个版本(包括abdeghijknprsuvwyz)所涉及的技术规范。

3.3  802.11无线网络技术介绍

从本节开始,咱们将向读者介绍802.11涉及到的无线网络技术。首先要介绍的是OSI基本参考模型。

3.3.1  OSI基本参考模型及相关基本概念

1.  OSI/RM介绍

ISOInternational Organization for Standardization,国际标准化组织)和IECInternational Electrotechnical Commission国际电工技术委员会)于1983年联合发布了ISO/IEC 7498标准。该标准定义了著名的Open Systems Interconnection Reference Model(开放系统互联参考模型,简写为OSI/RM[5])。

在OSI/RM中,计算机网络体系结构被划分红7层,其名称和对应关系如图3-1所示:

                               

3-1  OSI RMTCP/IP结构图

3-1绘制了OSI/RM以及另一个经常使用的网络体系TCP/IP的结构。先来看OSI/RM,它将网络划分红7层,由上到下分别是[6]

  • Application Layer(应用层):应用层能与应用程序界面沟通以达到向用户展现的目的。常见的协议有HTTPHTTPSFTPSMTP等。其数据单位为APDUApplication Protocol Data Unit)。
  • Presentation Layer(表示层):表示层能为不一样客户端提供数据和信息的语法转换,使系统能解读成正确的数据,同时它还能提供压缩解压、加密解密等服务。例如不一样格式图像(如GIFJPEGTIFF等)的显示就是由位于表示层的协议来支持的。其数据单位为PPDUPresentation Protocol Data Unit)。
  • Session Layer(会话层):会话层用于为通讯双方制定通讯方式,建立和注销会话(双方通讯)等。其数据单位为SPDUSession Protocol Data Unit)。常见的协议有ZIPAppleTalkSCP等。
  • Transport Layer(传输层):传输层用于控制数据流量,同时能进行调试及错误处理,以确保通讯顺利。发送端的传输层会为数据分组加上序号,以方便接收端把分组重组为有用的数据或文件。传输层的常见协议有TCPUDP等。其数据单位为TPDUTransport Protocol Data Unit)。
  • Network Layer(网络层):网络层为数据传送的目的地寻址,而后再选择一个传送数据的最佳路线。网络层数据的单位为PacketDatagram。常见的设备有路由器等。常见协议有IPIPv6
  • Data Link Layer(数据链路层):在物理层提供比特流服务的基础上,创建相邻结点之间的数据链路。经过差错控制提供数据帧(Frame)在信道上无差错的传输。数据链路层在不可靠的物理介质上提供可靠的传输。该层的做用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。数据链路层数据的单位为Frame(帧)。常见的设备有二层交换机、网桥等。
  • Physical Layer(物理层):物理层定义了通讯设备机械、电气、功能和过程等方面的特性,用以创建、维护和拆除物理链路链接。物理层数据的单位为bit

3-1中左边所示为另一个经常使用的网络体系,即TCP/IP模型。对比图3-1中的两个模型,咱们可简单认为TCP/IP ModelOSI/RM的一个简化版本。

提示,关于OSI/RM的详细信息,请读者阅读本章参考资料[5]

2.  LLCMAC子层介绍

虽然ISO/IEC 7498标准所定义的OSI/RM只将网络划分为七层。但实际上每一层还可划分为多个子层(Sub Layer)。全部这些Sub Layer中,最为人熟知的就是ISO/IEC 8802[7]规范划分Data Link Layer而获得的Logic Link Control Sub Layer(简称LLC)和Medium Acess Control Sub Layer(简称MAC)。它们的信息如图3-2所示:

3-2  MACLLC SubLayer

3-2中,ISO/IEC 8802Data Link Layer划分红了两个Sub Layer,其中:

  • MAC Sub LayerMedia Acess Control SubLayer:媒介访问控制子层):该子层的目的是为了解决局域网(Local Area Network,之后简写为LAN)中共用信道的使用产生竞争时,如何分配信道的使用权问题。目前LAN中经常使用的媒介访问控制方法是CSMA/CD(争用型介质访问控制)。因为无线网络的特殊性,MAC的控制方法略有不一样。咱们将在下文介绍相关内容。
  • LLC Sub Layer(逻辑链路控制子层):该子层实现了两个站点之间帧的交换,实现端到端(源到目的),无差错的帧传输和应答功能及流量控制功能。

Data Link层划分的这两个子层中,802.11只涉及到MAC层。因为物理介质的不一样,无线和有线网络使用的MAC方法有较大差异,主要区别以下[8]

  • 有线(wired)网络最常使用的方法(此处仅考虑以太网)是CSMA/CDCarrier Sense Multiple Access/Collision Detect,载波监听多路访问/冲突检测机制)。其主要工做原理是:工做站发送数据前先监听信道是否空闲,若空闲则当即发送数据。而且工做站在发送数据时,边发送边继续监听。若监听到冲突,则当即中止发送数据并等待一段随机时间,而后再从新尝试发送。
  • 无线网络主要采用CSMA/CACarrier Sense Multiple Access/Collision Avoidance,译为载波监听多路访问/冲突避免机制)方法。无线网络没有采用冲突检测方法的缘由是:若是要支持冲突检测,必需要求无线设备能一边接受数据信号一边传送数据信号,而这种设计对无线网络设备来讲性价比过低。另外,冲突检测要求边发送数据包边监听,一旦有冲突则中止发送。很显然,这些因发送冲突而被中断的数据发送将会浪费很多的传输资源。因此,802.11CSMA/CD基础上进行了一些调整,从而获得了CSMA/CA方法。其主要工做原理见下节内容。

值得指出的是:CSMA/CA协议信道利用率低于CSMA/CD协议信道利用率。信道利用率受传输距离和空旷程度的影响,当距离远或者有障碍物影响时会存在隐藏终端问题,下降信道利用率。在802.11b WLAN中,在1Mb/s速率时最高信道利用率可到90%,而在11Mb/s时最高信道利用率只有65%左右。

3.  CSMA/CA介绍[8]

CSMA/CA主要使用两种方法来避免碰撞:

  • 设备发送数据前,先监听无线链路状态是否空闲。为了不发生冲突,当无线链路被其余设备占用时,设备会随机为每一帧选择一段退避(backoff)时间。这样就能减小冲突的发生。
  • RTS-CTS握手(handshake):设备发送帧前,先发送一个很小的RTSRequest to Send)帧给目标端,等待目标端回应CTSClear to Send)帧后,才开始传送。此方式能够确保接下来传送数据时,其余设备不会使用信道以免冲突。因为RTS帧与CTS帧长度很小,使得总体开销也较小。

下面咱们经过图3-3来介绍RTSCTS的做用。

3-3  RTS/CTS原理

在图3-3中:

  • 以工做站AB之间传输数据为例,站B、站C、站E在站A 的无线信号覆盖的范围内,而站D不在其内。站A、站E、站D在站B的无线信号覆盖的范围内,但站C不在其内。
  • 若是站A要向站B发送数据,那么,站A在发送数据帧以前,要先向站B发送一个请求发送帧RTSRequest To Send)。在RTS帧中会说明将要发送的数据帧的长度。站B收到RTS帧后就向站A回应一个容许发送帧CTSClear To Send)。在CTS帧中也附上A欲发送的数据帧的长度(从RTS帧中将此数据复制到CTS帧中)。站A收到CTS帧后就可发送其数据帧了。

那么怎么保证其余站不会干扰AB之间的数据传输呢?

  • 对于站C,站C处于站A的无线传输范围内,但不在站B的无线传输范围内。所以站C可以收听到站A发送的RTS帧,但通过一小段时间后,站C收听不到站B发送的CTS帧。这样,在站A向站B发送数据的同时,站C也能够发送本身的数据而不会干扰站B接收数据(注意:站C收听不到站B的信号代表,站B也收不听到站C的信号)
  • 对于站D,站D收听不到站A发送的RTS帧,但能收听到站B发送的CTS帧。所以,站D在收到站B发送的CTS帧后,应在站B随后接收数据帧的时间内关闭数据发送操做,以免干扰站B接收自A站发来的数据。
  • 对于站E,它能收到RTS帧和CTS帧,所以,站E在站A发送数据帧的整个过程当中不能发送数据。

整体而言,使用RTSCTS帧会使整个网络的效率有所降低。但因为这两种控制帧都很短(它们的长度分别为2014字节)。而802.11数据帧则最长可达2346字节,相比之下的开销并不算大。相反,若不使用这种控制帧,则一旦发生冲突而致使数据帧重发,则浪费的时间就更大。

另外,802.11提供了三种状况供用户选择以处理:

  • 使用RTSCTS帧。
  • 当数据帧的长度超过某一数值时才使用RTSCTS帧。
  • 不使用RTSCTS帧。

尽管协议通过了精心设计,但冲突仍然会发生。例如:站B和站C同时向站A发送RTS帧。这两个RTS帧发生冲突后,使得站A收不到正确的RTS帧于是站A就不会发送后续的CTS帧。这时,站B和站C像以太网发生冲突那样,各自随机地推迟一段时间后从新发送其RTS帧。

根据802.11协议,CSMA/CA具体运做时由所谓的协调功能(Coordination Function)来控制。协议规定有四种不一样的协调功能,分别是分布式协调功能(Distributed CF,简称DCF)、基于DCF之上的Point CFPoint CF,简称PCF)、混合型协调功能(Hybrid CF,简称HCF)以及用于Mesh网络的(Mesh CF,简称MCF)。因为无线网络是共享介质,因此,协调功能的目的就是用于控制各个无线网络设备使用无线媒介的时机以免冲突发生。形象点说,这就比如在一个会议室里,全部人均可以发言,但若是多我的同时发言的话又不知道谁和谁在说话。因此,每一个打算发言的人都须要检查下当前发言的状况。本章不拟详细介绍802.11CF相关的内容。感兴趣的读者可阅读802.11协议第9节“MAC sublayer functional description”。

另外,规范还定义了基于竞争的服务(contention-based service,使用DCF进行数据交换)和一种基于无竞争的服务(contention-free service,使用PCF进行数据交换)。本章也不拟讨论它们。

4.  MACService及其余概念介绍[5][9]

ISO/IEC 7498及相关的一些标准文档除了对网络体系进行了层次划分外,还定义了层和层之间交互方式及其余一些基本组件。它们可用图3-4来表示:

3-4  MAC EntityServiceClients

3-4绘制了MAC层相关的组件及交互方式,其中:

  • 协议规定了每一层所提供的功能,这些功能统一用Service来表示。图3-4中,MAC层为上层提供MAC Service。从Java编程角度来看,就比如定义了一个名为MACServiceJava Package
  • 每一层内部有数个EntityEntity表明封装了一组功能的模块。上面提到的Service就是由Entity提供的。根据OSI/RM的层次关系,第N层为第N+1层提供服务。因此,图3-4中,MAC Entity对上一层提供MAC Service。从Java编程角度来看,MAC Entity就比如MAC Service Package中定义的类,不一样的Entity表明该Package中实现不一样的功能类。一个Package中的Entity能够相互调用以完成某个功能。
  • N+1层要使用第N层服务时,必须经由Service Acess Point来完成。图3-3中,MACService必须借由MAC Service Access Point(缩写为MSAP)来访问。

根据上面的介绍,Entity定义了一个类,那其中是否认义了相应的功能函数呢?在标准文档中,和功能函数对应的术语是primitives(译为原语)及它们的parameters(参数)。图3-4列举了MAC Service的两个重要函数,分别是:

  • M_UNITDATA.requestClient调用该primitive发送数据。该primitive的参数是destination_address(目标地址)、source_address(源地址)、MSDUMAC Service Data Unit,即数据)、priority(优先级)。
  • M_UNITDATA.indication:当位于远端机器的MAC层收到上面发送的数据后,将经过indication原语来通知上一层以处理该数据。

关于MAC层的服务详细定义,请读者阅读本章3.3.5.1节。

值得指出的是,规范只是从逻辑上定义了上述内容,它并无指定具体的实现。关于MAC Service的详细定义,读者可阅读本章参考资料[10],即ISO/IEC 15802-1

提醒:协议还定义了SDUPDU两个概念。当上一层调用MACrequest原语时,会把要发送的数据传给MAC层。这个数据被称为MAC Service Data Unit(简写为MSDU)。对MAC层来讲,MSDU其实就是MAC要发送的数据,即载荷(Payload)。MAC层处理Payload时还会封装MAC层本身的一些头信息。这些信息和MSDU共同构成了MAC层的Protocol Data Unit(简写为MPDU)。从OSI/RM角度来看,通过N+1层封装后的数据是(N+1-PDU。该数据传递给N层去处理时,对N层来讲就是(N-SDUN层封装这个SDU后就变成本身的(N-PDU了。

5.  MIB介绍[11]

在阅读802.11相关规范时,常常会碰到MIB一词,其全称是Management Information Base(译为管理信息库)。MIB是一个虚拟的数据库,里边存储了一些设备信息供查询和修改。MIB较常见的使用之处是网管利用SNMP协议管理远程主机、路由器等。

MIB内部采用树形结构来管理其数据。内部的每个管理条目(Entry)经过一个叫object identifier(简称OID)来访问。MIB定义了Entry的属性和可取的值。因为属性及其可取值的定义采用了与具体编程语言无关的方式,因此一个MIB库能够很轻松经过编译器(compiler)将其转换成对应的编程语言源码文件。

MIB的定义比较繁琐,本章不拟拘泥于这些细节。读者可阅读参考资料[11]中所引用的资料列表以学习完整的MIB知识。

从笔者角度来看,对802.11来讲,MIB就是定义了一组属性。802.11定义的MIB属性在http://www.ieee802.org/11/802.11mib.txt中。下载后将得一个名为802.11mib.txt文件。读者可经过JMIBBrowser工具(下载地址为http://sourceforge.net/projects/jmibbrowser/,它是一个用Java语言编写的可利用SNMP协议查看和设置指定设备MIB的小工具)去加载并查看其内容。如图3-5所示:

3-5  802.11 MIB内容示意

读者须要首先点击图3-5所示左下角的“Load MIB”按钮以加载802.11mib.txt文件,而后查看802.11mib定义的一些属性。由图3-5可知:

  • 左侧显示当前查看的是dot11MACAddress的条目。
  • 右侧显示该条目的信息,Acess中的"read only"表示只读。Description表示该条目的意义。

802.11mib定义了一个较全的属性集合,通常而言,设备可能只支持其中一部分属性。图3-6所示为笔者Note2wlan0设备的MIB信息截图(因为篇幅问题,图3-6只包含部分Note2 wlan0设备的MIB属性):

3-6 NOTE2 wlan0设备的MIB属性示意

以图3-6中第一条属性dot11RSNAOptionImplemented为例,其在802.11mib.txt的定义如图3-7所示:

3-7  dot11RSNAOptionImplemented内容示意

相比直接浏览802.11mib.txt文本文件而言,利用JMIBBrowser工具查看属性会更加方便和直观一些。

提示:之后分析wpa_supplicant源码时,会碰到802.11mib定义的属性,读者不妨在阅读本节时就下载相关文件和工具程序。

6.  知识总结

本节首先对OSI/RM进行了简单介绍,由此引出了MAC层的知识点。接着对802.11使用的MAC方法CSMA/CA进行了介绍。最后本节对MACService及其相关概念以及MIB进行了介绍。

提醒:以上内容涉及到的知识点是读者之后阅读802.11协议时必然会碰到的。因为802.11协议引用的参考资料很是多,故笔者在本节整理了其中最基础的知识点。请读者务必认真阅读本节内容。

 

3.3.2  802.11知识点介绍导读

802.11规范全称为《Part 11Wireless LAN Medium Acess ControlMAC and Physical LayerPHY Specifications》。从其标题可知,802.11规范定义了无线局域网中MAC层和PHY层的技术标准。2012年版的802.11协议全文共2793页,包含20个小节(clause),23个附录(从AW)。图3-8所示为802.11协议原文目录的一部分。

3-8  802.11协议原文目录示意图

由图3-8所示目录可知802.11协议内容很是丰富。读者可尝试去阅读该文档,但估计很快会发现这将是一件很是枯燥和使人头疼的事情。主要缘由是此规范相似于手册,它很是重视细节的精准,但各技术点先后逻辑上的连贯性较差,使得读者极难从散落在协议中各个角落的技术点中整理出一个内容有序,难度由浅入深的核心知识框架来。

基于上述缘由,本章后续小节拟打算从如下几个知识点向读者介绍802.11规范中的一些核心内容:

  • 3.3.3节将介绍802.11中的物理组件和网络结构。
  • 在物理组件和网络结构基础上,3.3.4节将介绍802.11为无线网络所定义的服务。这些服务对咱们从总体上理解无线网络的功能有重要意义。
  • 3.3.5节将介绍802.11 MAC服务和帧方面的内容。这部分知识比较具体,相信读者理解起来没有问题。
  • 3.3.6节将介绍MAC层管理实体方面的内容。搞清楚这部份内容有助于读者理解后续有关Linux Wi-Fi编程的知识。
  • 3.3.7节将为读者介绍802.11安全性方面的知识点。

因为篇幅缘由,本书不可能囊括规范的全部内容。但相信读者在理解本节内容的基础上,可以轻松开展更加深刻的研究。另外,为帮助读者理解规范,本章会在重要知识点之处添加“规范阅读提示”的内容。

提醒:因为802.11物理层涉及大量和无线电、信号处理相关的知识。这些知识不只内容枯燥繁杂,并且对软件工程师来讲并没有太大意义,故本章不拟介绍它们。愿意深刻研究的读者可阅读相关资料。


 

[1]笔者博客地址为blog.csdn.net/innost或者http://my.oschina.net/innost/blog

 

3.3.3  802.11组件介绍

本节介绍802.11规范中的物理组件和相关网络结构。首先来看无线网络中的物理组件。

1.  物理组件[12]

802.11无线网络包含四种主要物理组件,如图3-9所示:

3-9  802.11四大主要物理组件

3-9中定义了四个组件,它们分别是:

  • Wireless Medium(译为无线媒介):规范中缩写为WM。其本意指能传送无线MAC帧数据的物理层。规范最先定义了射频和红外两种物理层,但目前使用最多的是射频物理层。
  • Station(译为工做站):规范中缩写为STA,其英文定义是“A logical entity that is a singly addressable instance of a MAC and PHY interface to the WM”。通俗点说,STA就是指携带有无线网络接口卡(即无线网卡)的设备,例如笔记本、智能手机等。另外,无线网卡和有线网卡的MAC地址均分配自同一个地址池以确保其惟一性。。
  • Acess Point(译为接入点):规范中缩写为AP,其原文定义是“An entity that contains one STA and provides access to the distribution services, via the WM for associated STAs”。由其定义可知,AP自己也是一个STA,只不过它还能为那些已经关联的(associatedSTA提供分布式服务(distribution services)。什么是Distribution Services呢?请读者阅读下文。
  • Distribution system(译为分布式系统):规范中缩写为DS,其英文定义为“A system used to interconnect a set of basic service setsBSSsand integrated local area networksLANsto create an extended service setESS)”。DS的定义涉及到BSSESS等后文才介绍的无线网络架构,其解释见下文。

上述四个物理组件中最难解释清楚的就是DS了。笔者在仔细阅读规范后,感受其对DS的解释并不直观。此处将列举一个常见的应用场景以帮助读者理解:

通常家用无线路由器一端经过有线接入互联网,另外一端经过天线提供无线网络。当打开Android手机上的Wi-Fi功能,并成功链接到此无线路由器提供的无线网络(假设其网络名为“TP-LINK_1F9C5E”,可在路由器中设置)时,咱们将获得:

  • 路由器一端经过有线接入互联网,故可认为它整合(integrate)了LAN
  • 不论路由器是否接入有线网络(即本例中的互联网),手机(扮演STA的角色)和路由器(扮演AP的角色)之间创建了一个小的无线网络。该无线网络的覆盖范围由AP即路由器决定。这个小网络就是一个BSS。另外,定义中说起的ESS是对BSS的扩展。一个ESS可包含一或多个BSS。在本例中,ESS对应的ID就是“TP-LINK_1F9C5E”,即咱们为路由器设置的网络名。

上述内容中将BSSLAN结合到一块儿以构成一个ESS的“东西”就是DS。虽然规范中并未明示DS究竟是什么,但绝大部分状况下,DS是指有线网络(经过它能够接入互联网)。后文咱们将介绍DS所提供的分布式服务(即DSS)。如今对读者来讲,更重要的概念是其中和无线网络架构相关的BSSESS等。这部份内容将在下节介绍。

规范阅读提示:

1 上文介绍的APSTADS的定义都来自于802.113.1节。笔者我的以为该节所列的定义是最精确的。以DS为例,此节所定义的DS涉及到和有线网络的结合。但规范中其余关于DS的说明均未明示是否必定要和LAN结合。

2 关于STA,其定义只说明它是一个可singly addressable的实体,而没有说明其对应的功能。因此,读者会发现AP也是一个STA。另外还有提供QoSQuality of Service)的STA。除此以外,从可移动性的角度来看,还有Mobile STAPortable STA之分。Portable STA虽然能够移动,但只在固定地点使用(例如AP就是一个典型的Portable STA)。而Mobile STA表示那些只要在Wi-Fi覆盖范围内,均可以使用的STA(例如手机、平板等设备)。

2.  无线网络的构建[12]

有了上节所述的物理组件,如今就能够搭建由它们构成的无线网络了。802.11规范中,基本服务集(Basic Service Set,简写为BSS)是整个无线网络的基本构建组件(basic building block)。BSS如图3-10所示:

3-10  BSS的两种方式

由图3-10可知,BSS有两种类型,分别是:

  • Independent BSS(独立型BSS):这种类型的BSS不须要AP参与。各STA之间可直接交互。这种网络也叫ad-hoc BSS(通常译为自组网络或对等网络)。
  • Infrastructure BSS(基础结构型BSS):全部STA之间的交互必须通过APAP是基础结构型BSS的中控台。这也是家庭或工做中最多见的网络架构。在这种网络中,一个STA必须完成诸如关联、受权等步骤后才能加入某个BSS。注意,一个STA一次只能属于一个BSS

提示:

1 Independent BSS缩写为IBSS。而Infrastructure BSS没有对应的缩写。不过,通常用BSS表明Infrastrucutre BSS

2 根据前文所述,AP也是一个STA。但此处STAAP显然是两个不一样的设备。

由图3-10BSS的结构可知,其网络覆盖范围由该BSS中的AP决定。在某些状况下,须要几个BSS联合工做以构建一个覆盖面更大的网络,这就是一个ESSExtended Service Set:扩展服务集)。如图3-11所示:

3-11  ESS示意图

ESS在规范中的定义是“A set of one or one interconnected BSSs that appears as a single BSS to the LLC layer at any STA associated with one of those BSSs”。此定义包含几个关键点:

  • 一个ESS包含一到多个BSS。如图3-11中所示的BSS1BSS2
  • BSS1BSS2原本各自组成了本身的小网络。但在ESS结构中,它们在逻辑上又构成了一个更大的BSS。这意味着最初在BSS2中使用的STA4(利用STA3,即BSS2中的AP上网)能跑到BSS1的范围内利用它的AP(即STA2)上网而不用作任何无线网络切换之类的操做。此场景在手机通讯领域很常见。例如在移动的汽车上打电话。此时手机就会根据状况在物理位置不一样的基站间切换语音数据传输而不影响通话。

注意ESS中的BSS拥有相同的SSIDService Set Identification,详细内容见下文),而且彼此之间协同工做。这和目前随着Wi-Fi技术的推广,家庭和工做环境中存在多个无线网络(即存在多个ESS)的状况有本质不一样。在多个ESS状况下,用户必须手动选择才能切换到不一样的ESS。因为笔者平常工做和生活中,ESS只包含一个BSS,当某个AP停机时,笔者就得手动切换到其余无线网络中去了。

另外,切换相关的知识点属于Roaming(漫游)范畴,读者可阅读“Secure Roaming in 802.11 Networks”一书来了解相关细节。

上述网络都有所谓的Identification,它们分别是:

  • BSSID:每个BSS都有本身的惟一编号,称为BSS Identification。在基础结构型网络中,BSSID就是APMAC地址,该MAC地址是真实的地址。IBSS中,其BSSID也是一个MAC地址,不过这个MAC地址是随机生成的。
  • SSIDService Set Identification。通常而言,BSSID会和一个SSID关联。BSSIDMAC地址,而SSID就是网络名。网络名每每是一个可读字符串,由于网络名比MAC地址更方便人们记忆。
  • ESS包括一到多个BSS,而它对外看起来就像一个BSS。因此,对ESS的编号就由SSID来表达。只要设置其内部BSSSSID为同一个名称便可。通常状况下,ESSSSID就是其网络名(network name)。

规范阅读提示:

1 上述网络结构中,并未说起如何与有线网络(即LAN)的整合。规范中其实还定义了一个名为portal的逻辑模块(logical component)用于将WLANWireless LAN)和LAN结合起来。因为WLANLAN使用的MAC帧格式不一样,因此直白得说,portal的功能相似翻译,它在WLANLAN间转换MAC帧数据。目前,portal的功能由AP实现。

2 规范中还定义了QoS BSS。这主要为了在WLAN中支持那些对QoS有要求的程序。因为无线网络自己固有的特性,WLAN中的QoS实现比较复杂,效果也不如LAN中的QoS。初学者可先不接触这部份内容。

==============================================================================================略略略略略略略略略略略略略略===================================

3.4  Linux Wi-Fi编程API介绍

前面小节一直在介绍Wi-Fi规范方面的内容。从本节开始,咱们将向读者介绍Linux平台中Wi-Fi编程方面的知识。

提醒:相比前文而言,本节内容读起来将显得较为轻松。但从笔者我的经验来讲,编程只不过是规范的某种实现,掌握规范才是理解无线网络技术的核心。这也是本书内容组织和编排的指导原则。但愿读者能认真体会。

Linux平台上目前经常使用的专门针对无线网络设备编程的API有两套[40]

  • 最先的一套APIHP公司员工Jean Tourrilhes1997年开发,全称为Linux Wireless Extensions。通常缩写为wexwext。这套API使得用户空间的程序能经过ioctl函数来控制无线网卡驱动。
  • 因为利用ioctl开展编程的方式不太符合Linux驱动开发的要求,因此后来Linux又提供了cfg80211nl80211两套编程接口用于替代wext。其中,cfg80211用于驱动开发,而nl80211 API供用户空间进程使用以操做那些利用cfg80211 API开发的无线网卡驱动。

注意:ioctl不符合Linux驱动开发要求主要体如今:

1 ioctl的原型为int ioctl(int fd, unsigned long cmd, ...),最后三个点表明它支持可变个数的参数。但对于一个通过严格定义的系统调用来讲,支持可变个数参数的作法彷佛显得有些随性。

2 ioctl的参数不只个数不固定,其参数类型也没法经过函数原型来加以说明。这一样对于一个严谨的系统调用来讲,也是不可接受的。

本节将重点介绍用户空间中的Wi-Fi APIwextnl80211。不过在介绍它们以前,笔者先请读者思考这样一个问题:

为何Wi-Fi须要在用户空间进行编程呢?

答案:

目前的无线网卡分为两种,一种为SoftMAC。这类网卡中,MLME的处理基本上在软件层(即驱动或用户空间),这样可带来较大的灵活性。另外,一些认证相关的操做,也可由软件来控制。另外一种网卡称之为FullMAC。这类网卡的MLME全在硬件处理。相比SoftMAC而言,其灵活性很小。因此目前市面上SoftMAC网卡占绝大多数,而cfg80211就仅支持SoftMAC类型的网卡。

3.4.1  Linux Wireless Extensions介绍

从开发者角度来讲,wext的用法至关简单。Linux平台中,wext API定义于wireless.h文件。Android平台上,其文件位置在external/kernel-headers/original/linux目录下,主要供驱动开发者使用。

注意,bionic/libc/kernel/common/linux目录中也有一个wireless.h,不过此文件由工具程序根据kernel中的wireless.h自动生成而来,供用户空间使用。两个文件的区别主要是bionic下的wireless.h包含不多的注释。因此本节将分析kernel中的wireless.hAndroid 4.2中的wext版本为20,由wireless.h中的宏WIRELESS_EXT定义。

虽然前面提到说ioctl函数的一个缺点是其没有指明参数类型,但wext却比较严谨,它提供了本身的数据类型。

1.  经常使用数据结构介绍

首先,全部用户空间发起的请求都统一包括在struct iwreq中,其原型以下:

[-->wireless.h::struct iwreq]

//wext API在设计时参考了系统中现有数据结构及命名方式。作为区分,wext中几乎全部数据结构、类型、宏

//等名字中都带一个w以表明wireless。以下面的iwreq结构体,其对应的普通数据结构类型是ifreq。

//该结构体专门用于往socket句柄传递ioctrl控制参数。

struct    iwreq

{

    union

    {

        char    ifrn_name[IFNAMSIZ];    //用于指定要操做的网卡设备名,如wlan0

    } ifr_ifrn;

    union    iwreq_data    u; //用于存储具体的参数信息

};

iwreq结构所示,具体的参数信息存储在另一个联合体iwreq_data中,其原型以下:

[-->wireless.h::union:iwreq_data]

/*

   iwreq_data是一个联合体,其最大size为16字节

   wext还自定义了一些小的数据结构,如iw_point、iw_param、iw_freq等。它们的做用是:

   1 iw_point:当参数信息的长度超过16字节时,就只能经过iw_point指向另一块内存区域,而参数就存储

     在那个区域中。这个就是咱们经常使用的指针方式。

   2 iw_param:当参数信息不超过16字节时,能够把信息存储在iw_param中。

   3 iw_freq:用于存储频率或信道值。其原型的介绍见本小节最后。

union    iwreq_data

{

    char        name[IFNAMSIZ];

    struct iw_point    essid;    //存储essid,也就是ssid

    struct iw_param    nwid;     //network id

    //频率或信道。取值为0-1000时表明channel,大于1000则表明频率,单位为Hz

    struct iw_freq    freq;

    struct iw_param    sens;        //信号强度阈值

    struct iw_param    bitrate;    //码率

    struct iw_param    txpower;    

    struct iw_param    rts;        //RTS阈值时间

    struct iw_param    frag;       

    __u32        mode;        //操做模式

    struct iw_param    retry;

    struct iw_point    encoding;

    struct iw_param    power;

    struct iw_quality qual;

 

    struct sockaddr    ap_addr;    //AP地址

    struct sockaddr    addr;        //目标地址

 

    struct iw_param    param;  //其余参数

    struct iw_point    data;   //其余字节数超过16的参数

};

当参数字节超过16的时候,wext还定义了和功能相关的参数类型,下面来看专门用于触发无线网卡发起扫描请求的数据结构iw_scan_req,其原型以下所示:

[-->wireless.h::struct iw_scan_req]

struct    iw_scan_req

{

    __u8        scan_type; //可取值为IW_SCAN_TYPE_{ACTIVE,PASSIVE},表明主动或被动扫描

    __u8        essid_len; //essid字符串长度

    __u8        num_channels; // 指明信道个数,若是为0,则表示扫描全部可容许的信道

    __u8        flags; //目前仅用于字节对齐

    //bssid用于指明BSS的地址。若是全为FF则为广播BSSID,即wildcard bssid

    struct sockaddr    bssid;

 

    __u8        essid[IW_ESSID_MAX_SIZE];    //essid

 

    /*

      min_channel_time:指示扫描过程当中在每一个信道等待到第一个回复的时间。若是在此时间内没有等到回复,

      则跳到下一个信道去等待。若是等到一个回复的话,则一共在该信道等待的最大时间为max_channel_time。

      全部时间单位均为TU(Time Units),即1024ms

     */

    __u32        min_channel_time;

    __u32        max_channel_time;

 

    struct iw_freq    channel_list[IW_MAX_FREQUENCIES];//IW_MAX_FREQUENCIES值为32

};

下面来看最后一个常见的数据结构iw_freq,其原型以下:

[-->wireless.h::struct:iw_freq]

//当频率小于109,m直接等于频率。不然m=f/(10e)

struct    iw_freq

{

    __s32        m;       

    __s16        e;       

    __u8        i;        //该值表示此频率对象在channel_list数组中的索引

    __u8        flags;   //固定或自动

};

wext中的数据结构和定义还有许多。建议读者结合实际须要去学习wireless.h

提醒:wext API虽然简单,但相信读者已经体会到其背后所依赖的和802.11规范密切相关的理论知识了。

下面咱们经过一个实际的例子来看看用户空间如何经过wext API来触发无线网卡扫描工做的。

2.  wext API使用实例介绍

本例来源于wpa_supplicant,它是一个运行于用户空间的专门和无线网卡进行交互的程序。其详情将在下一章节进行介绍。本节仅经过一个函数看看wpa_supplicant如何利用wext API和无线网卡交互。

[-->driver_wext.c:wpa_driver_wext_scan]

int wpa_driver_wext_scan(void *priv, struct wpa_driver_scan_params *params)

{

    struct wpa_driver_wext_data *drv = priv;

 

    struct iwreq iwr;  //定义一个iwreq对象

    int ret = 0, timeout;

    struct iw_scan_req req; //定义一个iw_scan_req对象

 

   //获取调用者传递的ssid等参数

    const u8 *ssid = params->ssids[0].ssid;

    size_t ssid_len = params->ssids[0].ssid_len;

   ......

    os_memset(&iwr, 0, sizeof(iwr));

    //为iwr的ifr_name传递需操做的网卡设备名

    os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);

 

    if (ssid && ssid_len) {

        os_memset(&req, 0, sizeof(req));

        //设置iw_scan_req的信息

        req.essid_len = ssid_len;

        req.bssid.sa_family = ARPHRD_ETHER;

        //设置bssid的MAC地址全为0XFF,表明这是一个wildcard BSSID搜索

        os_memset(req.bssid.sa_data, 0xff, ETH_ALEN);

        os_memcpy(req.essid, ssid, ssid_len);

        //经过data域指向这个iw_sca_req对象

        iwr.u.data.pointer = (caddr_t) &req;

        iwr.u.data.length = sizeof(req);

        //IW_SCAN_THIS_ESSID表示只扫描指定ESSID的无线网络

        iwr.u.data.flags = IW_SCAN_THIS_ESSID;

    }

    /*

        ioctl_sock指向一个socket句柄,其建立时候的代码以下:

        ioctl_sock = socket(PF_INET,SOCK_DGRAM,0)

        SIOCSIWSCAN用于通知驱动进行无线网络扫描

    */

    if (ioctl(drv->ioctl_sock, SIOCSIWSCAN, &iwr) < 0) {

        //返回错误

     }

    ......//其余处理

    return ret;

}

3.  wext知识总结

wext相对比较简单,但其内部的数据结构定义、变量命名等都和规范中定义的原语有着莫大的关系。建议读者结合规范去阅读wireless.h以加深理解。

 

==============================================================================================略略略略略略略略略略略略略略===================================

 

 

3.5  本章总结和参考资料说明

3.5.1  本章总结

本章是全书关于Wi-Fi技术方面的一篇基础文章,涉及的面很广,内容也很杂,须要读者耐心阅读并理解。从大致上来讲,本章按以下逻辑开展:

  • 首先简单介绍了无线频谱资源和802.11发展历程。
  • 为了帮助读者之后能真正看懂802.11规范,本章介绍了OSI/RM模型以及其中关于EntitySAPMIB等基本概念。
  • 接着咱们正式介绍802.11规范中的一些重要内容,包括无线网络组件,网络结构、无线网络提供的服务等。
  • 在上述基础上,咱们着重对802.11 MAC层进行了介绍,包括MAC帧格式、MLME等。这部份内容是理解后续章节关于wpa_supplicant介绍的核心。
  • 最后一个关于802.11的知识点是其安全性问题。建议读者从机密性、完整性和身份验证三个考察点来理解其中的各类安全保护方法。
  • 本章最后对Linux Wi-Fi API进行了介绍,目前用得最多的应该是nl80211。不过读者可先从简单的wext开始学习。

本章是笔者从事Android写做以来耗时最长的一篇文章了(包括学习时间一共长达3个多月,并且还有不少技术点未能覆盖到)。在这个过程当中,笔者也经历过烦恼和痛苦,感受其难度比纯粹的代码分析要大得多。这也是笔者但愿读者把注意力放到代码背后的理论上来的初衷。

另外,从下一章开始,咱们将在分析wpa_supplicant的同时,经过背景知识介绍的方式来补充本节没有涵盖的内容。

3.5.2  参考资料说明

概述

[1]  Real 802.11 Security: Wi-Fi Protected Access and 802.11i 7.1节“Relationship Between Wi-Fi and IEEE 802.11

本书是笔者找到的关于802.11无线网络安全技术方面知识面最完整的书籍。惋惜是英文版,并须要有Wi-Fi的基础知识后才能真正理解。

无线电频谱知识

[2]  802.11无线网络权威指南(第二版)“无线网络导论”一节,P16-P17,“无线电频谱:关键资源”。

此书是目前市面上关于802.11无线网络书籍的圣经。不过其排版奇特,连章节号都没有,读起来着实有些费劲。读者可首先阅读这本书以对Wi-Fi有个基本了解。另外,该书涉及到和物理层有关的内容能够略去不读。

[3]  802.11无线网络权威指南(第二版)“无线网络导论”一节,P20-P22

[4]  http://baike.baidu.com/view/345218.htm 

摘抄自百度百科词条“802.11”。笔者对其内容作了必要的增删改。

OSI基本参考模型及相关基本概念

[5]  ISO/IEC 7498-1 Basic Reference ModelThe Basic Model

OSI模型的官方文档,不过和其余官方文档同样,极难理清楚其间的逻辑关系,作手册用还能够。

[6]  http://baike.baidu.com/view/486949.htm

百度百科词条“开放系统互连参考模型”。

[7]  ISO/IEC 8802-2 Part 2 Logical Link Control

Logical Link Control层的官方标准。不过读者只需阅读第一节“Overview”便可。

CSMA/CA介绍

[8]  http://baike.baidu.com/view/645723.htm

百度百科词条“CSMA/CA”,以很是通俗的方式解释了CSMA/CA的工做原理。除非特别须要,读者也可参考“802.11无线网络权威指南(第二版)”一书第三章“802.11 MAC基础”,P47-P55

MACService及其余概念介绍

[9]  IEEE 802.1X-2010 Port-Based Network Access Control”,Annex D Basic architectural concepts and terms

大名鼎鼎的802.1X规范。不过这些规范引用的其余标准很是多,因此802.1X在附录D中对一些基本概念和术语进行了一番介绍。建议读者阅读此文档。

[10]  http://www.doc88.com/p-696270935777.html

SO/IEC 15802-1电子文档,由doc88提供。全名为“Part 1 Medium Access ControlMAC service definition”。定义了MAC service和相关的原语。

MIB介绍

[11]  http://en.wikipedia.org/wiki/Management_information_base

维基百科词条“Management Information Base”,英文介绍,还算比较好理解。

802.11组件介绍

[12]  802.11-20124.1节“General description of the architecture”、4.2节“How WLAN systems are different”、4.3节“Components of the IEEE 802.11 architecture

802.11 Service介绍

[13]  802.11-20124.5节“Overview of the Services”。

注意,802.11-20124节“General description”很是重要,里边的许多基本概念都须要了解。注意,该节包括的内容很是多,读者应有选择的阅读。

802.11 MAC服务和帧介绍

[14]  802.11-20125节“MAC service definition

802.11 MAC服务进行了完整说明。

[15]  802.11-20128节“Frame formats

802.11 MAC帧完整说明。固然,读者可把它当作手册来用。

[16]  http://technet.microsoft.com/en-us/library/cc757419(v=ws.10).aspx

微软技术文章“How 802.11 Wireless Works”。很是通俗易懂,包含的知识面也比较全。读者可经过它对802.11有一个大体的认识。

[17]  802.11无线网络权威指南(第二版)第四章“802.11成帧细节”,P78-P127

[18]  802.11无线网络权威指南(第二版)第八章“管理操做”中的“节省电力”,P200-P208

很是详细得介绍了Power Save的原理和过程。

[19]  802.3-2008CSMA/CD Access Method and Physical Layer Specifications”第3.2.3节“Address fields

LANMAC层的官方文档。其中有对MAC地址格式的说明。

[20]  http://www.doc88.com/p-905531556977.html

doc88上关于MAC组播地址的中文说明。建议读者阅读此文档。

[21]  802.11无线网络权威指南(第二版)第三章“802.11 MAC帧基础”中的“802.11对上层协议的封装”,P65-P66

802.11 MAC管理实体介绍

[22]  802.11-20126节“Layer management

MLME的官方说明,很是详细。请读者当手册使用。

[23]  802.11无线网络权威指南(第二版)第八章“管理操做”,P182-P224

逻辑还算清晰,建议读者结合[22]一块儿阅读。

[24]  802.11-20124.10节“IEEE Std 802.11 and IEEE Std 802.1X-2004

介绍802.1X如何与802.11相结合。

WEP介绍

[25]  802.11无线网络权威指南(第二版)第五章“有线等效加密”,P127-P142

关于WEP的详细介绍。但有些内容用得很是少(例如关于动态WEP密匙的说明)。

[26]  802.11-201211.2.2节“Wired equivalent privacy (WEP)

官方对WEP的说明,很是详细。

[27]  802.11-201211.2.3节“Pre-RSNA authentication

官方对WEP中身份验证方法的说明。

[28]  http://documentation.netgear.com/reference/ita/wireless/pdfs/FullManual.pdf

Wireless Networking Basics”,Netgear贵公司提供的关于Wi-Fi安全方面的一些简单介绍。

RSN数据加密及完整性校验介绍

[29]  802.11-201211.4节“RSNA confidentiality and integrity protocols

官方文档关于TKIPCCMP的介绍。

[30]  802.11无线网络权威指南(第二版)第七章“802.11RSNTKIPCCMP”,P162-P176

请读者结合[29]一块儿研究。

EAP802.1X介绍

[31]  RFC3748 Extensible Authentication Protocol (EAP)

EAP的官方文档,总长68页,难度不是特别大,建议读者阅读全文。

[32]  http://en.wikipedia.org/wiki/IEEE_802.1X

维基百科词条“IEEE 802.1X”。图文并茂,读者可仔细阅读此文。

[33]  802.11无线网络权威指南(第二版)第六章“802.1X 用户身份验证”,P142-P154

[34]  http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Technology_recommend/200812/624138_30003_0.htm

H3C公司关于802.1X的介绍,很是详细,难度较小。读者可先阅读此文档。

[35]  802.1X-201011节“EAPOL PDUs

官方对EAPOL格式的详细说明。

RSNA介绍

[36]  http://www.docin.com/p-439759696.html

“一种针对RSNA无线网络的安全等级回滚攻击研究”,来自豆丁网。3页内容,比较容易理解。

[37]  Real 802.11 Security: Wi-Fi Protected Access and 802.11i,第7章“WPA, RSN, and IEEE 802.11i”和第9章”WPA and RSN Key Hierarchy

此书是目前笔者找到的关于Wi-Fi安全性方面覆盖面最齐全的资料。建议读者深刻阅读。

[38]  802.11-201211.6节“Keys and key distribution

官方文档关于密匙派生的说明。

[39]  802.11无线网络权威指南(第二版)第七章“802.11RSNTKIPCCMP”,P176-P182

介绍了RSN的运做方式,对密匙派生和缓存有较为详细的说明。

Linux Wi-Fi编程API介绍

[40]  http://wireless.kernel.org/en/developers/Documentation/Wireless-Extensions

Linux Wireless Kernel官方网站,内容很是丰富。建议读者仔细阅读。

netlink编程介绍

[41]  http://www.infradead.org/~tgr/libnl/

libnl官方网站,文档较为丰富。读者可阅读其中关于libnl的文档。

相关文章
相关标签/搜索