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. php function_name($type=0,$order_ids='',$flag=2)

    $order_ids='',表示$order_ids是字符串,不是数组 foreach ($order_ids as $key=>$order_id){            //TODO} 这 ...

  2. axure RP Pro7.0加载日历控件的步骤

  3. 你确定你是一个合格的.Net开发人员吗?

    做.net开发已有近5年时间,自认掌握的知识比较全面.最近部门需要招人,今天抽空在网上看了一下,发现我了解的还是不够多啊.下面是我大致的罗列了一下作为一名.Net开发人员所需要掌握的只是.看看你是不是 ...

  4. C#基础学习第三天(.net菜鸟的成长之路-零基础到精通)

    1.复合赋值运算符 += -= *= /= %= 2.关系运算符  > < >= <= == !=  由关系运算符连接的表达式我们称之为关系表达式.  每一个表达式都可以求解出 ...

  5. php插入转义与查找转义

    //转义用于查找 function deepslashes($data) { //判断data表现形式 if(empty($data)) { return $data; } return is_arr ...

  6. 27 Java动态加载第三方jar包中的类

    我加载的方法是://参数fileName是jar包的路径,processorName 是业务类的包名+类名public static A load(String fileName, String pr ...

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

    Lower--转换为小写 upper--转换为大写 Initcap--首字母大写 concat--连接字符 substr--截取字符 length/length--获取字符串长度(字节长度) inst ...

  8. Linux "top" 命令解析

    TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况.   TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户 ...

  9. JQUERY1.9学习笔记 之层级选择器(四)

    下一个邻居选择器(“prev ~ siblings”) 描述:选择所有"prev"后的邻居选择器,他们有相同的父节点. 注意:prev + next 与 prev ~ siblin ...

  10. IO定时器

    IoInitializeTimer 初始化定时器 IoStartTime 开启定时器 IoStopTimer 停止定时器 回调函数 VOID IoTimer( __in struct DEVICE_O ...