Wi-Fi网络的一个极其重要的特点就是移动性。例如,一个人可以在使用Wi-Fi电话进行通话或是从服务器上下载大数据量的文件时穿过一幢建筑物。用户设备内部的Wi-Fi无线电可以从一个接入点漫游至另一个接入点,这样就提供了无缝连接。至少,这是我们所希望实现的!

过去,我曾遇到过漫游的问题,所以我决定做一些测试,来看看其中的究竟。我尤其感到好奇的是漫游实际上有多快,以及它是否对无线应用造成破坏。

我的测试配置包含两个接入点,一个接入点(AP-1)设置为信道1,另外一个(AP-2)设置为信道6。其它设置都采用缺省值,比如信标间隔为 100毫秒,屏蔽RTS(请求发送)/CTS(允许发送)功能,等等。两个接入点被安装在一幢典型的办公建筑上,通过每一个接入点的广播蜂窝提供最低25分贝的信噪比,且蜂窝间有20%的重叠。这都是些无线语音应用的工业标准。在我的测试中,漫游客户端是一台内置了Centrino Wi-Fi 广播(Intel 2915ABG)的笔记本电脑。

当手持无线客户端站立在离AP-1几英尺距离内的时候,我使用AirMagnet笔记本电脑分析仪(通过另一个Wi-Fi卡插入笔记本电脑的PCMCIA插槽)来确保我与AP-1之间保持关联。然后,我开始从服务器向笔记本电脑进行FTP大文件传输,并且使用AirMagnet分析仪测量802.11数据包的踪迹。在整个测试过程中下载文件时,我向AP-2移动,直到我直接靠近它。有了数据包踪迹,我就能查看802.11数据帧的交换情况,计算漫游的延时,还能知道FTP流是否遭到明显的破坏。

一旦客户端广播决定重新关联,它就会向AP-1发送一些802.11解除关联帧来开始重新关联的过程。然后,广播发出802.11探测请求以在客户端的有效信号范围内获得接入点的响应。这样做是为了确保客户端广播能够在决定与哪个接入点关联之前收到这些候选的最新信息(信标信号强度)。

AP-2响应了802.11探测请求。因为仅有的响应来自AP-2,客户端射频卡决定与AP-2关联。正如我们所预料的,与AP-2关联的过程包括802.11认证帧和关联帧的交换(基于802.11公开系统认证)。重新关联的过程用时68毫秒,是指自客户端广播向AP-1发送第一帧解除关联帧起、到客户端收到来自AP-2的最终关联帧(响应)为止所经历的时间。还不错,我发现了一些与其它厂家生产的接入点相似的数值。

然而,整个漫游过程会中断无线应用,并且时间还挺长。例如,据我的测试,在射频卡开始重新关联过程(即,向AP-1发出第一个解除关联帧)之前,FTP过程平均暂停5秒。我测量的802.11数据包的踪迹显示,在放弃传输数据并开始与AP-2重新关联之前,客户端广播向AP-1反复重新传输数据(由于信号强度弱)。这些数量可观的重新传输打断了文件下载过程,使我测试中的实际漫游延迟达到平均5秒!我测试所使用的Centrino射频卡因为这种问题而受人诟病,但是我发现这也是大多数其它射频卡的问题。

生产厂商或许可以使射频卡拖延重新关联,来避免过早的、额外的重新关联(接入点跳跃?)。不幸的是,这样会中断一些无线应用。如果你打算部署移动无线应用,那么务必测试漫游如何影响你的应用。

各型号的射频卡在漫游过程中的工作方式各异,这缘于专有机制,而且,一些卡比其它卡要好些。只要记住漫游所需时间可能比预想的要长得多,所以在部署无线局域网应用的时候,尤其是无线语音,它对超过100毫秒的漫游延迟是无法接受的。

Wi-Fi漫游的工作原理的更多相关文章

  1. Android系统Recovery工作原理之使用update.zip升级过程分析(一)

    通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动 ...

  2. keeplived工作原理及配置

    一.keepalived简介及作用 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能 keepal ...

  3. 【科普】Web(瓦片)地图的工作原理

    [译者按:在看MapBox Guides文档时,看到这篇 How do web maps work?,这篇文档通俗易懂地阐述了Web地图是如何工作的,其实更偏向讲瓦片地图的工作原理,鉴于之前很多人不了 ...

  4. Wifi模块的工作原理

    http://www.wifitop1.com/news/content-98.html 在无线网络领域里面,无线wifi是最火的名词.对于串口wifi模块的工作是什么呢?串口wifi模块又有什么功能 ...

  5. Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7399822 这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过 ...

  6. WireGuard 教程:WireGuard 的工作原理

    原文链接:https://fuckcloudnative.io/posts/wireguard-docs-theory/ WireGuard 是由 Jason Donenfeld 等人用 C 语言编写 ...

  7. keepalived的工作原理解析以及安装使用

    一.keepalived keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalived官网http://www.keepali ...

  8. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  9. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

随机推荐

  1. MVC4数据访问EF查询linq语句的时候报错找不到表名问题

    一天做项目的时候遇到这样的问题,MVC4用EF访问数据查询用linq语句的时候报错找不到表名:报错如下图: 研究了几种情况,最后还是没有找到正真的问题所在,不过可能是和路由解析问题有关,暂时还没有进行 ...

  2. ADB错误“more than one device and emulator”(转)

    当我连着手机充电的时候,启动模拟器调试,执行ADB指令时,报错.C:\Users\gaojs>adb shellerror: more than one device and emulatorC ...

  3. HTTP头信息解读

    本文为多篇“HTTP请求头相关文章”及<HTTP权威指南>一书的阅读后个人汇总整理版,以便于理解. 通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.客户端向服务器发 ...

  4. java BigDecimal的操作

    今天给大家讲一下java中BigDecimal的操作.由于double,float的精度不够,因此在进行商业计算的时候要使用的BigDecimal.BigDecimal对象创建如下: BigDecim ...

  5. 如何在苹果官网下载旧版本的Xcode 方法

    1   在百度里输入“苹果开发者中心“,进入以下页面.点击页面中的“Member Center" 2  出现登录界面.这是需要苹果开发者帐号的,没有帐号的可以选择“Create Apple ...

  6. iOS 网络与多线程--7.Performselector消息处理方法

    创建一个IOSApp类 IOSApp.h文件 #import <Foundation/Foundation.h> @interface IOSApp : NSObject // 1.添加一 ...

  7. oracle单行函数之数字函数

    round--四舍五入函数 trunc--截断函数 mod--求余函数 round和trunc除了可以操作数字外还可以操作日期. Demo SQL),),),),) from dual ; ) ) ) ...

  8. tkinter之文件对话框

    from tkinter import * from tkinter.filedialog import * filetype = [('Python Files', '*.py *.pyw'), ( ...

  9. Menu之选项菜单

    Android有三种形式的菜单:选项菜单(optionMenu).上下文菜单(ContextMenu).子菜单(subMenu).最常用的是选项菜单,该菜单在点击menu按键后会在对应的Activit ...

  10. 关于C++条件运算符(三目运算符)右结合的说明

    C++条件运算符 a ? c : d;是右结合的,但是这个右结合要怎么理解呢? 对于a ? b : c ? d : e; 这样的表达式如果按照右结合来解读的话,那不应该是先运算c,然后返回d或者e,返 ...