CXD Linux Engineer

wifi的基本通信过程

2016-09-21

术语介绍

  • STA - (station)工作站,指手机或者电脑等连接wifi的设备。
  • AP - (Access Point)接入点,指无线路由器等产生wifi热点的设备。
  • DCF - (Distributed Coordination Function)分布式协调功能,一种信道接入方法。
  • BSS - (basic service set)基本服务集,一种网络类型。
  • SSID - (Service Set Identifier)服务集标识,就是wifi的名字。
  • RTS - (Request To Send)请求发送
  • CTS - (Clear To Send)允许发送

wifi识别

在无线领域中,STA要加入任何网络之前必须先经过一番识别的过程,在所在区域识别现有网络的过程称为扫描。扫描又分为了两种类型:主动扫描和被动扫描;

主动扫描

STA扮演着比较积极的角色。STA是主动试图寻找网络,而不是听候网络声明本身存在。STA会在每个信道上,工作站都会发出Probe Request帧来请求某个特定网络予以响应。使用主动扫描的工作站将会以如下的过程扫描信道列表的每个信道:

  1. 跳至某个信道,然后选修来帧指示或者等到ProbeDelay定时器过时。如果在这个信道收到帧,就证明该信道有使用。因此可以加以探测。此定时器可用来防止某个闲置信道让整个过程停止,因为STA 会一直等候帧的到来。
  2. 利用基本的DCF访问过程取得信道使用权,然后送出一个Probe Request帧。
  3. 至少等候一段最短的信道时间:
    • 如果媒介并不忙碌,表示没有网络存在,因此可以跳至下个信道;
    • 如果在最短的信道时间媒介非常忙碌,就继续等候一段时间,直到最长的信道时间超时,然后处理任何的Probe Respone帧。

wifi_1

被动扫描

被动扫描可以节省电池的电力,因为不需要传送任何信号。在被动扫描中,STA会在信道列表所列的各个信道之间不断切换并等候Beacon(信标)帧的到来。所收到的任何帧都会补暂存起来。Beacon在设计上是为了让工作站知道加入某个基本服务集所需要的参数以便进行通信。 下图(被动扫描)中,通过聆听来自前三个接入点的Beacon帧, 如果STA未收到AP4接入点发出的Beacon,就会汇报目前只发现三个BSS。

wifi_2

wifi认证

IEEE802.11定义的安全机制包括两大部分:身份认证和数据加密;认证方式分为:开放式系统认证、共享密钥认证。

前者为空认证方法,而后者依赖于WEP协议,因此安全性也受到WEP的影响。根据802.11 WLAN的工作原理,各厂商还广泛应用了其他两种认证:基于服务集标志符和基于MAC地址的认证机制。

开放式系统认证

OPEN+WEP采用空认证和WEP加密,无线终端无需经过验证,即可与相应的AP进行关联。

具体过程如下:申请者首先发送一个认证请求到AP,如果AP设置了MAC地址过 滤功能,则AP对申请者MAC地址进行核实,否则AP直接通过认证请求,认证成功后申 请者会向AP发送关联请求,AP回应关联应答,双方建立关联,然后就可以传递数据了。

wifi_3

  • 第一次STA向AP发起Auth认证请求

wifi_4

802.11management这个是管理帧,Auth Algorithm是说明是哪种认证方式,0就代表open system。Auth Seq Num:这个代表的是第几次握手。Status code:这个是说握手的状态。

  • 第二次握手,AP响应STA发起的认证请求,Status Code为0,代表认证成功。

wifi_5

共享密钥认证

SHARED+WEP 采用共享密钥认证和WEP 加密,与OPEN+WEP 方式相比,只是用户关联过程不同,加密过程完全一致。 在SHARED+WEP 方式中,无线终端与相应的AP 进行关联时,需提供双方事先约定好的WEP 口令,只有在双方的WEP 相匹配的情况下,才能关联成功。

具体过程如下: 在AP 收到认证请求后,AP 会随机产生一串字符(challenge 值)发送给申请者,申请者采用自己的WEP 口令加密该字符串后发回给AP,AP 收到后会进行解密,并对解密后的字符串和最初给申请者的字符串进行比较,如果内容准确无误则允许其做后面 的关联操作,如果内容不相符,那么将不会允许其接入。共享认证模式关联过程。

wifi_6

  • 第1次握手,STA向AP发出认证请求。

wifi_7

802.11management这个是管理帧,Auth Algorithm 是说明是哪种认证方式 如果是1就代表shared key,如果是0就代表open system。Auth Seq Num:这个代表的是第几次握手。Status code:这个是说握手的状态。

  • 第2次握手,AP响应STA,里面包含128的挑战字串

wifi_8

Auth Seq Num:当前为2,表示第2次握手,status code:显示也是成功的。我们还可以看到128位的挑战字串。

  • 第3次握手,STA对挑战字串加密,丢给AP

wifi_9

这次我们看不到Auth Seq Num:因为它被加密了。这次我们看到了多了iv向量Wep data就是加密后的内容。

  • 第4次握手,AP对STA加密的进行解密,对比原来的明文

wifi_10

Auth Seq Num为4了,说明是第4次握手,状态是也显示成功的。

  • 基于SSID的认证 只要使用者能够提出正确的SSID,存取点AP就接受用户端的登入请求,通常情况下,无线接入点AP会向外广播其SSID,我们可以通过Disable SSID Broadcast来提高无线网络安全性。基于SSID的认证因是基于802.11协议来开发的一个功能,SSID就算认证成功了,仍需再经过OPEN或者SHARED认证过程。

  • 基于MAC地址的认证 MAC地址认证,路由器产品上常用到的无线MAC地址过滤功能。AP可以通过stations的MAC address来对特定的stations进行filter管理,从而可以表示是allow 还是deny这些stations来associate该AP。

关联

STA一旦完成身份验证,便可送出Association Request帧,以便获得网络的完全访问权。关联属于一种记录保持过程,它让AP能够记录每个移动式工作站的位置,以便将传送给移动式工作站的帧送给正确的接入点。

具体过程如下:

  1. 和身份验证一样,关联操作是由STA发起的,完成身份验证之后,STA送出Association Request帧。
  2. 接入点随后对关联请求进行处理:

    • 一旦关联请求获准,接入点就会以代表成功的状态代码0及关联标识符AID来响应
    • 关联请求如果失败,就只会返回状态码并且中止整个过程
  3. 关联成功后,接入点开始为STA处理帧。

wifi_11

数据传送

wifi的数据传送分两种情况:直接数据发送和RTS/CTS机制。

直接数据发送

首先STA给AP发送数据,AP受到数据后发送ACK帧确认收到数据。这两个步骤称为基本操作,指不可分割的单一处理单元。虽然整个处理过程包含 好几个步骤,但还是会被视为单一不可分割的过程。基本处理单元可说是“非成即败”。若不完成所有步骤,整个过程就被视为失败。数据帧的传送者必须收到应答,否则该帧即被视为已经丢 失。从传送者的角度而言,究竟是一开始的数据帧,或者是回应信息在传输过程中丢失并不重要。因为无论如何,数据帧还得必须重传。传输过程如图:

wifi_12

RTS/CTS机制

在无线网络中,由隐藏节点所导致的碰撞问题相当难以监听,因为无线收发器通常是半双工工作模式,即无法同时收发数据。为了防止碰撞发生,802.11 允许工作站使用请求发送(RTS) 和允许发送(CTS)帧来清空传送区域。由于RTS 与CTS 帧会延长数据交易过程,因此RTS帧、CTS 帧、数据帧以及最后的应答帧均被视为相同基本连接的一部分。下图说明了整个过程。

wifi_13

节点1 有个数据帧待传送,因此送出一个RTS 帧启动整个过程。RTS 帧本身带有两个目的:预约无线链路的使用权,并要求接收到这一消息的其他的工作站停止发言。一 旦收到RTS 帧,接收端会以CTS 帧应答。和RTS 帧一样,CTS 帧也会令附近的工作站保持沉默。等到RTS/CTS 完成交换过程,节点1 即可传送上面要传送的帧,无须担心来自其他隐藏节 点的干扰。整个RTS/CTS 传输过程会用到好几个帧,实际开始传输数据之前的延迟也会消耗相当的频 宽。因此,它通常只用在高用量的环境,以及传输竞争比较显著的场合。对低用量的环境而言,通常无此必要。

如果802.11 网卡的驱动程序支持,使用者可以通过调整RTS 门限值(数据帧的大小)来控制RTS/CTS 程序。只要大于此门限值,就会进行RTS/CTS 交换程序。小于此门限值则会直接传送数据帧。

隐藏节点的问题

如下图,节点2 可以之间跟节点1 和节点3 通信,不过某些因素导致节点1 与节点3 无法直接通信。(这与障碍物的关系并不大:节点1 与3 之间可能只是因为距离远,无法收到 对方的无线电波。)从节点1 的角度来看,节点3 属于隐藏节点。如果使用简单的transmit-and-pray 协议,节点1 与节点3 有可能在同一时间传送数据,这会造成节点2 无法辨 识任何信息。此外,节点1 与节点3 将无从得知错误发生,因为只有节点2 才知道有冲突发生。

wifi_14


Comments

Content