你这有WiFi吗?
随着科技发展越来越快速,WiFi变成了生活中不可或缺,或者说是人尽皆知的角色。但是从发现WiFi到连接之后上网,这中间发生了什么呢?以手机为例,从打开设置界面,选择账号,输入密码,连接成功。本文简单聊一下这中间发生的事情。
打开无线局域网开关
如果我们打算连接到一个WiFi网络,那么第一步就是打开手机的“无线局域网”开关,打开之后我们可以看到界面开始loading,然后等了一会之后,会出现一个待连接的WiFi列表。当然,这个前提是你周围确实有WiFi,就像前言说的,“你这有WiFi吗”,并且你得到了正面的回答,“有”。
那么问题就来了,这个loading的时候,手机在做什么事情?那就是scan(扫描)。假如你去跳舞,那么第一件事情是不是要找到舞伴,那么扫描就是找舞伴的过程,扫描分为被动扫描和主动扫描两种。
扫描
- 被动扫描
以上就是被动扫描的示意图,手机(Client)处于接收状态,接收AP发出的beacon帧。被动扫描比较节省电量,因为不涉及发送,只是在不同的channel切换,侦听空中的beacon帧。beacon中包含加入某个AP需要的各项参数,手机接收之后,显示在待连接的列表中。
- 主动扫描
在主动扫描模式,手机扮演比较主动的角色,在每个channel上都会发送Probe request帧,请求对应的AP回应,从而得知是否有AP存在。当AP收到Probe request时,会以Probe response作为回应。另外,在Probe request帧中,可以使用广播SSID,这样收到的所有AP都会对这个帧做回复。
点击某个AP连接
打开无线开关,等待loading结束之后,除非你在偏远的地方或者在户外,那么相信你的列表中已经有很多待连接的AP了吧。那么接下来的步骤就是点击之后->输入密码->加入。这个操作手机又在做什么事情呢?那就是authentication(身份认证)和association(连接)。经过第一个阶段,相信你已经找到了舞伴,那么接下来就是确认一个舞伴,开始跳舞了。
身份认证
- 开放系统身份认证
上面提到,加入AP的步骤是点击->输入密码,其实生活中也会遇到不加密的AP,直接点击就可以加入,这就是开放系统身份认证,具体流程如下图:
首先手机端会主动发出一个帧,暂时叫做authentication request。这个帧里面有算法编号和认证帧的顺序编号,因为是开放系统身份认证,所以算法为0,顺序编号为1。然后AP收到这个帧之后,会处理然后做一个回复,回复帧包含算法编号、认证帧的顺序编号和状态码。算法编号同样为0,顺序编号为2,如果认证成功,状态码为0。如果出现问题,会有不同的状态码回复,具体状态码对应的问题,参考附录。
- 共享密钥身份认证
大多数的AP都是加密的,毕竟不希望蹭网的人数过多,影响自己的上网体验。加密AP的身份认证就是共享密钥身份验证,具体流程如下图:
第一帧依旧是由手机发出,叫做authentication request。这个帧里面也包含了算法编号和帧的顺序编号,只是这里的算法编号为1,代表使用共享密钥身份认证,顺序编号为1。在AP收到第一帧之后,会做处理然后有一个回复,回复帧包含算法编号,顺序编号为2、状态码,只有当状态码为0时,交互才能继续下去,而且会有第四个信息元素,挑战指令。挑战指令是128个位元组,由WEP生成,具体生成流程不做赘述了。
第三帧就是手机对于携带挑战指令的第二帧做出的回复,该帧包含了算法编号、顺序编号为3、挑战指令,除去标头之外,会把信息做一个WEP加密处理,然后发出。在AP收到第三帧之后,会做一个解密处理,然后校验完整性,解出挑战口令,并且通过完整性的校验。通过校验之后,证明手机已经设置好加入网络需要的WEP密钥,然后回复第四帧,包含算法编号、顺序编号为4、状态码,状态码为0。如果出现任何问题,都会以不同状态码返回。
连接
完成身份认证之后,手机就可以和AP做一个连接的操作了,从而可以获取网络的访问权,连接之后,传输系统会记录该手机,从而可以把发给手机的数据传送过去。具体连接的流程如下:
首先第一帧依旧是手机发出,叫做Association request。当AP收到这个帧之后,会做一个判断。关于是否返回成功,没有做一个完整的规范,不同的AP厂家都有不同的处理办法如果连接成功。如果连接失败,就会返回状态码,并中止整个交互流程。AP会发出第二帧。第二帧叫做Association response,包含成功状态码为0和Association ID简称AID。至此,连接成功了。
以上流程,是手机加入WiFi网络不可缺少的步骤,当然这其中的变化和场景多种多样,这里只是简单介绍扫描、认证、连接。不同的身份认证方式和重新连接,以及事先身份认证都没有提及,以后会慢慢写出。
附录
status code | Explanation |
0 | 成功 |
1 | 未指定失败原因 |
2-9 | 保留,未使用 |
10 | 所要求的能力范围过广无法支持 |
11 | 拒绝重新连接;之前的连接无法辨识与转移 |
12 | 拒绝重新连接,原因不在 802.11 标准指定范围内 |
13 | 不支持所使用的身份认证算法 |
14 | 超乎预期的身份认证序号 |
15 | 身份认证被拒绝;回应信息有误 |
16 | 身份认证被拒绝;下一个帧并未出现在预定的期间 |
17 | 连接被拒绝;基站资源有限 |
18 | 连接被拒绝;工作站并未支持BSS要求的所有数据传输速率 |
19 | 连接被拒绝;工作站并未支持 Short Preamble 功能 |
20 | 连接被拒绝;工作站并未支持 PBCC 调制技术 |
21 | 连接被拒绝;工作站并未支持 Channel Agility 功能 |
22 | 连接被拒绝;需要 Spectrum Management 功能 |
23 | 连接被拒绝;Power Capability不支持 |
24 | 连接被拒绝;Supported Channels不支持 |
25 | 连接被拒绝;工作站并未支持 Short slot Time 功能 |