Wi-Fi 总结
术语
术语 | 英文 | 中文 |
---|---|---|
WLAN | Wireless Local Area Networks | 无线局域网络 |
Wi-Fi | 无意义(Hi-Fi 双关) | 无线网络 |
WPA | Wi-Fi Protected Access | Wi-Fi 网络安全存取 |
Wi-Fi Alliance | Wi-Fi Alliance | Wi-Fi 联盟 |
MAC | media access control | - |
WPS(AOSS/QSS) | Wi-Fi Protected Setup | Wi-Fi 保护设置 |
PBC | Push Button Configuration | 按钮配置 |
PIN | Personal Information Number | PIN 码 |
UFD | USB Flash Device | 存储在USB接口的闪存设备上的信息 |
NFC | Near Field Communication | 近距离无线通信(通过刷卡) |
AP | Access Point | (无线)接入点 / 基站 |
STA | Station | 站点 / 工作站 |
Wi-Fi P2P | Wi-Fi peer-to-peer | 点对点() |
Wi-Fi Direct | Wi-Fi 直连 | |
SSID | Service Set Identifier | 服务集标识(无线网络名字) |
[wpa_supplicant | wpa_supplicant 后端 | wpa 请求者(ap, p2p) |
wpa_cli | wpa_supplicant 前端 | wpa 客户端面 |
Beacon | Beacon | 信标帧 |
WEP | Wired Equivalent Privacy | 有线等效保密 |
WEP:
Wired Equivalency Protection,一种Wi-Fi连接的安全标准,类似的安全标准还包括下面的WPA,WPA2。它可以使用64/128bit的ASCII/HEX(0-9,A-F)的Password,它的密钥是由Password和一个IV(初始化向量)组成,加密算法是stream cipher RC4,并使用 CRC-32校验和确保完整性。加密解密过程如下:AP发送的数据包(包括IV和加密过的数据)–>无线客户端收到此数据包–>提取其中的IV,用于和本地的Password形成密钥–>解密数据包。它有两种鉴权方式:Open System, Shared Key.
Open System:
这种鉴权方式不需要客户端提供任何credentials,因此,实际上任何客户端都可以尝试与AP进行鉴权和连接,这其中并不存在实际意义上的鉴权。鉴权连接结束,AP用WEP密钥加密数据,这时,客户端就需要正确的Password形成密钥来解密
Shared Key:
通过四次握手并使用WEP加密来完成鉴权。详细区别请参阅:opensystem_vs_sharedkey.txt
WPA:
Wi-Fi Protected Access,实现了802.11i的大部分标准,它和下面的WPA2有两种鉴权方式,一是使用802.1x,一种是使用Pre-Shared Key
WPA2:
Wi-Fi Protected Access,完全实现802.11i标准
WPA个人版/WPA-PSK:
使用Pre-Shared Key鉴权方式的WPA,设计给负担不起 802.1X 验证服务器的成本和复杂度的家庭和小型公司网络使用。同WPA2个人版/WPA2-PSK
WPA企业版:
使用802.1x鉴权方式给WPA。同WPA2企业版
802.1X:
802.1协议族中的一部分,它是一种基于端口的网络接入控制机制,它给希望接入LAN的设备提供了一种鉴权机制,它是基于EAP的.扩展阅读:http://en.wikipedia.org/wiki/802.1x
EAP:
Extensible Authentication Protocol,一种普遍使用的认证机制,它是一个认证框架,并不是一种特殊的认证机制。EAP提供一些公共的功能,并且允许协商所希望的认证机制。这些机制被叫做EAP方法,现在大约有40种不同的方法。当EAP被基于802.1x的网络接入设备(诸如802.11a/b/g ,无线接入点)调用时,现代的EAP方法可以提供一个安全认证机制,并且在用户和网络接入服务器之间协商一个安全的PMK(Pairwise Master Key)。该PMK可以用于使用TKIP和AES加密的无线会话。在Pre-Shared Key验证方式中,PMK=PSK。
PMKSA:
PMK Security Association,参考:pmksa.txt
TKIP:
Temporal Key Integrity Protocol,数据传输加密算法(类似于WEP加密的 RC4 算法)
AES:
Advanced Encryption Standard,数据传输加密算法(类似于WEP加密的 RC4 算法)
CCMP:
Counter Mode with Cipher Block Chaining Message Authentication Code Protocol,数据完整性编码校验算法(类似于WEP中 CRC32 算法)
MIC:
数据完整性编码校验算法(类似于WEP中 CRC32 算法)
总结Wifi连接过程大致如下:
客户端与AP的鉴权,与AP建立连接,若使用加密,AP发送并加密数据包,无线客户端接收并解密数据包。密码学中有两个概念:加密算法和密钥,通过这两个东西来解加密过的数据包。 密钥,对于WEP,WPA/WPA2个人版来说,总是由一个Pre-Shared Key,加上其他元素,经过一系列过程产生而来,这个Pre-shared Key就是我们平时接入Wi-Fi时需要输入的密码。对于WPA/WPA2企业版,这个Pre-Shared Key叫做PMK,形成密钥的过程原理相似。 目前,EAP方法基本上是与802.1x一起使用
目前Wi-Fi的加密模式主要有:WEP,WPA,WPA2-PSK。
2.4G 与 5G
随着无线设备数的增加. 2.4GWi-Fi 已满足不了人们的日常需求, 5GWi-Fi应运而生, 先看下标准定义
IEEE802.11协议对2.4GHz频段的规定:
频率范围:2.4GHz~2.4835GHz;14个信道,信道带宽20M(相邻多个信道频率重叠)。下面你看到的频率范围包含22M,是因为有2M被用作强制隔离频带,不参与数据传输。
在中国,2.4G这条高速公路上一共有13条车道(信道)。
虽然一共有13条车道,但由于资源有限。所以,不同车道之间,便会存在共用“路面”的问题。13条车道中,最多只有3条车道可以不相互影响,例如1、6、11车道互不相互干扰。
IEEE802.11协议对5GHz频段的规定:
频率范围:5.150-5.250GHz、5.250-5.350GHz、5.470-5.725GHz、5.745-5.825GHz;共201个信道,信道带宽40M/80M/160M(可选择,相邻多个信道频率重叠)。
虽然中国5G车道只有 4 个,但每个相邻的车道间距有20MHz(2.4G车道间距是5MHz),在20MHz时,车道之间不会有干扰。如果为了提升速率,把两个20MHz的车道合在一起,就形成了40MHz。以此类推,中国5G频段最多可以提供80MHz的超大车道,所以5G的速率自然快乐。
wpa_supplicant
wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令wpa_supplicant调动驱动来对WiFi芯片操作。
简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。
wpa_supplicant是支持WPA和WPA2(IEEE 802.11i / RSN)的Linux,BSD,Mac OS X和Windows的WPA请求者。它适用于台式机/笔记本电脑和嵌入式系统。请求者是在客户站中使用的IEEE 802.1X / WPA组件。
它实现与WPA身份验证器的密钥协商,并控制WLAN驱动程序的漫游和IEEE 802.11身份验证/关联。wpa_supplicant被设计成一个在后台运行的“守护程序”程序,并作为控制无线连接的后端组件。
wpa_supplicant支持单独的前端程序,包含基于文本的前端(wpa_cli)和GUI(wpa_gui)。
wifi 的 concurrent mode
所谓wifi的共存模式,有以下几种:
- station mode + station mode
- station mode + ap mode
- station mode + p2p mode
- p2p mode + ap mode
目前android自从JB version后,就开始支持station + p2p的共存,但其他的共存模式目前在android上都还未支持。现在市面上的wifi驱动主要是支持前三种共存,目前第四种共存模式,暂未见到;而station+ap mode,目前我们有在BXXX项目中使用,使用场景就是:
做Ap供其他的mid或phone来连接,同时自己又做station mode来连接外面可以上网的路由器,这样在mid或phone上,就可以在访问BXXX的同时,还可以上网。BXXX自己当然也可以上网了。
但需要主要的是,以上各模式中的station,ap,p2p在驱动中都需要对应的网络接口的,所以如果要支持concurrent mode,你的驱动insmod后,必须吐出两个网络接口才行,如果只有一个网络接口,那肯定是不支持concurrent mode的,见下图,加载驱动后就会出现wlan0,p2p0两个网络接口。
image.png另外需要注意,这两个网络接口,都是在驱动中虚拟出来的,共享同一个物理硬件,因此他们也共享物理硬件所能达到的throughput,由于他们共同一个物理硬件,所以wlan0和p2p0必须在同一个channel上,因此跟wlan0和p2p0连接的网络都在同一个channel上,这样这个大网络里所有的设备共同参与这个信道的载波侦听/冲突检测,即同一时间只能有一个站在空气中发送无线包。如果刚开始出现ap/p2p跟wlan0的channel不一致的情况,那一般都是ap/p2p断开之前的链接,重新调频到wlan0的信道建立新的链接。
wlan0,p2p0都是在linux下的wifi驱动中创建的,譬如进来一个数据包是根据什么标准来判断,该路由到wlan0还是该路由到p2p0,
这是一个很趣的问题;另外wlan0接口和p2p0接口他们的发送数据包是如何调度和管理的,也是一个值得关注的问题。
image.png2:station mode + ap mode
本节介绍station+ap的concurrent mode是如何建立的。先上一张整体的框架图:
在调试阶段,为了验证ap+sta是否正常工作,我们最好是step by step的先验证sta mode是ok的,然后验证ap
mode是ok的,最后才是sta+ap mode是否ok。
#define WPA_DRIVER_FLAGS_P2P_CONCURRENT 0x00000200 //Wifi驱动支持STA和P2P的并发运行