Wi-Fi 总结

2020-06-08  本文已影响0人  iOSDevLog

术语

术语 英文 中文
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一起使用

image.png

目前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的共存模式,有以下几种:

  1. station mode + station mode
  2. station mode + ap mode
  3. station mode + p2p mode
  4. 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.png

2:station mode + ap mode
本节介绍station+ap的concurrent mode是如何建立的。先上一张整体的框架图:

image.png

在调试阶段,为了验证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的并发运行
  1. https://w1.fi/wpa_supplicant/
  2. https://w1.fi/wpa_supplicant/devel/
  3. https://blog.csdn.net/kissinger_1984/java/article/details/83113056
  4. https://blog.csdn.net/xiaojsj111/article/details/30482001
  5. https://blog.csdn.net/ztguang/article/details/51015976
上一篇下一篇

猜你喜欢

热点阅读