WLAN网下一种实现用户漫游的机制

2018-08-15 08:02:42王新峰曾明星
计算机应用与软件 2018年8期
关键词:漫游报文关联

王新峰 曾明星

(吉首大学软件学院 湖南 张家界 427000)

0 引 言

在今天,用户走在任何地方都可以将手机、PAD等设备接入网络,而这背后都是无线局域网(WLAN)的功劳。WLAN是一种无线通信方式,一般由接入控制器AC(Access Controller)和无线接入点AP(Access Point)组成。早期WLAN只有AP部分,所有的802.11功能,即802.11物理层和媒体接入控制(MAC)功能,都实现在AP中。在这种WLAN结构中,必须对接入点进行单个管理,而且不易实施负载平衡控制,也不可能根据话音之类的实时应用需求执行快速切换等,上述因素决定了这种网络不适宜于大规模的部署。后来采用的AC+AP结构是WLAN 的最佳结构,在这种结构中,存在一个集中式的设备——接入控制器(AC)或者WLAN Switch。它利用一个或多个集中式设备来对接入点进行管理、控制和配置,将802.11 的功能实现在接入点和集中式设备之间,使其具有很好的管理性和扩展性,是当前WLAN的主流结构,如图1所示,无线客户端STA(Station)如:手机、PAD等通过AP接入网络。

图1 典型WLAN结构

WLAN的初衷是针对家庭、小办公室应用,因为无线AP的覆盖范围是有限的,AP的覆盖范围和其提供的接入速率是紧密相关的,STA距离AP越远,AP提供的接入速率越低,如图2所示。

图2 距离与接入速度关系图

要大范围覆盖无线网络,只能通过安装多个AP实现,如图3所示,STA从AP3范围移动到AP1范围再关联到AP1时会断线,这在WLAN网络早期人们是可以接受的。

图3 大范围内AP覆盖场景

随着无线网络应用的逐步扩大,用户对访问网络的移动性要求越来越高。即用户希望能够边移动边正常使用网络,这对现有的技术提出了极大的挑战。如何有效地满足用户在使用无线WLAN网络时的快速无缝漫游问题,成为亟待解决的问题。

1 漫游应用场景

漫游是指 STA在移动到两个BSS基础服务集(Basic Service Set,俗称WIFI名)覆盖范围的临界处时,STA与新AP重新关联并与原AP断开关联的过程,整个漫游过程中STA的IP地址和访问域保持不变。对于用户来说,漫游的行为通常是透明的无缝漫游,即用户及其使用的应用程序,不会感知到漫游的发生。

根据STA漫游前后所涉及的AC,可以将漫游分为AC内漫游和AC间漫游。

AC内漫游:针对小范围WLAN覆盖场景,AP数量少且全部由一台AC控制,STA漫游前后所关联的AP都在同一AC控制下,如图4所示,STA从原来所在的AP1范围移动进入AP2的范围。

图4 AC内漫游

AC间漫游:是针对大范围WLAN覆盖场景,整个网络中有多个AC,每个AC下连多个AP,STA漫游前后所关联的AP归属于不同的AC控制,如图5所示,图中虚线代表STA漫游方向从AP1漫游到AP2。

图5 AC间漫游

2 漫游原理

2.1 STA正常关联过程

漫游是STA与新AP重新关联并与原AP断开关联的过程,要实现漫游需要先了解STA正常的关联以及各模块的功能。

AC:负责AP和STA的管理,当有STA从AP接入时存储STA相关的信息(有MAC、IP、接入AP、QoS、Security等),以及负责数据的控制和转发。

AP:发送BSS让STA接入,有STA接入后负责在AC与STA之间传递数据。AP形象点描述就像一座桥连接AC与STA,只传递数据不处理数据。

STA:发出关联请求和重关联请求,关联上AC后即可为用户获取网络数据。关联请求是STA正常关联AP的请求,而重关联请求是当STA已关联上AP后,发现有相同名称且信号更好的BSS服务时发出的请求。正是由于重关联请求的存在,才有了漫游实现的可能。

STA正常上线过程会涉及到很多模块如快速转发、安全模块和AP模块(为了只关注漫游,这些模块只简单列出几个描述)等,最终建立了STA信息,如图6所示。整个STA上线建立所有相关模块信息的时间大致是几百毫秒,由于是第一次上线,这个时间用户是可接受的。当用户从当前AP覆盖范围进入到另一个AP的范围时,会发送重关联请求,在没有漫游机制的情况下,这时AC的处理跟正常处理一致,会重新建立一个新的STA信息同时把相关模块的数据更新,而这个过程耗时跟之前一样也是几百毫秒,在这个时间内用户的网络会断开,严重影响用户体验,这正是问题之所在。

图6 STA正常关联过程图

2.2 漫游原理

漫游的目标是让用户对漫游过程无感知,用户无感知即对用户使用的网络通信无影响,对于像VoWLAN这样的对实时性要求很高的应用来说,切换时,用户数据通信中断的时间必须少于50 ms(人耳能感觉到的时间间隔),因此漫游过程耗时必须小于50 ms。而正常关联过程涉及众多模块耗时几百毫秒,远大于50 ms,这就是需要解决的问题。

当STA发生漫游时,更新各模块相关的数据耗时几百毫秒,如果不更新数据就无耗时,这里引入一种机制“欺骗”各个相关模块,让它们以为STA漫游前后并没有什么变化,并将实现该机制的功能叫漫游模块。

用户对漫游无感知的本质是漫游前后用户与网络通信数据正常,因此必须分析漫游前后STA通信数据的上下行通道,数据上行是指STA通过AC把数据发送到网络,下行是指AC从网络接受数据发送到STA,通俗讲上下行就是STA上网数据传输过程。图7描述了一个最简单的漫游过程对比,STA从图中AP1漫游到AP2,图中双向箭头线代表数据上下行的传输通路,其中虚线是漫游前的,实线是漫游后的。下面是漫游前后相同与不同点对比:

1) 相同点:STA上下行数据传输还是由AC来转发,对于网络来说STA是通过AP1还是通过AP2传输数据是不用关心的。

2) 不同点:漫游前下行的数据需要AC通过各模块检测后从AP1传到STA,漫游后需要把下行数据通过AP2传到STA。漫游前上行数据是STA通过AP1上传到AC经各模块检测后上传到网络,漫游后是通过AP2上传到AC的。

图7 漫游前后STA上下行数据传输通道图

漫游模块的工作原理是建立一个模块用来“欺骗”AC上各模块,如图8所示,其中双向箭头代表数据数。

图8 漫游模块功能图

增加漫游模块后,当STA从AP1漫游到AP2,漫游模块处理如下:

1) STA上行数据通过AP2到达AC时,漫游模块最先接收数据将数据来源从AP2改成AP1,这样其他上层模块会以为数据还是从AP1传上来的。

2) 网络下行数据通过AC各模块后准备发往AP1到STA时(因为其他模块还认为STA是关联在AP1上),漫游模块最后处理数据将AP1改成AP2发到STA。

这样就达到了“欺骗”各模块的效果,除了漫游模块感知了STA漫游,其他所有模块都不变。

3 漫游模块实现

漫游模块由三部分组成:漫游组、MTI隧道(AC间通信专用隧道)以及漫游表。漫游表是AC内与AC间漫游都需要的关键部分,漫游组与MTI隧道两个部分只是为AC间漫游服务。如果网络环境较小只需要实现AC内漫游,则只需增加漫游表这部分功能。

3.1 漫游表

对于AC内漫游,STA漫游前后所有信息都在同一个AC,此时漫游模块对其他模块进行“欺骗”是很容易的,只需要建立一个漫游表,表里存储每个漫游STA的状态信息,包括:STA的MAC地址、STA的用户状态、STA关联的WLAN ID、正常关联时关联的CTI(AC与AP通信的通道)端口索引和漫游后关联的CTI端口索引、STA在AC上的状态,如表1所示。

表1 漫游表

当STA发送重关联请求时,漫游模块可以查询到之前STA关联的信息,再通过重关联帧获取到漫游后的AP信息,最后建立漫游表。

下面通过一个简单的示例来讲解下漫游表的作用,图9所示为一个AC内漫游,图内右边是漫游表,当漫游发生后数据的上下行传输如下。

1) 下行:网络有数据要下行到STA,漫游模块接手数据查询漫游表,发现是一个漫游用户,将传输接口从CTI 1改成CTI 2,这样数据就到达AP2然后传给了STA,下行数据通畅。

2) 上行:STA发送数据上行到网络,漫游模块接到从AP2传上来的STA数据,查看发现是漫游STA,将CTI 2改成CTI 1,其他模块依然认为数据从CTI1上来,通过各模块检查安全传输到网络,上行数据通畅。

当STA漫游后数据依然能上下行通畅,证明联网正常,同时其他模块又对漫游前后无感知,证明此方案可行。

图9 漫游表工作图

由于AC关联的漫游STA数量可能较大,同时每个STA的每个数据包都需要经过漫游模块进行检查修改,这时快速定位到漫游表中的STA是必须考虑的现实问题。在众多数据结构中HASH表是能直接定位的存储结构,所以使用HASH表来维护STA状态数据库,使用介质接入控制MAC(每个STA的MAC是唯一的)来生成hash索引,对于极少的hash冲突的STA状态信息通过链表进行维护,具体参见图10。

图10 漫游表中STA状态信息存储图

3.2 漫游组

漫游模块处理AC内漫游很容易,而AC间漫游处理起来就比较复杂了,因为漫游前后STA关联的AC是不同的,STA漫游关联到的AC2如何知道漫游前AC1的信息呢?解决办法是信息共享。用户的漫游范围不能无限扩大,为了对用户漫游范围进行控制,同时达到共享目的,将一组可进行STA信息数据同步的控制器,称为一个漫游组。通过创建一个漫游组,使得同一个组内的各个控制器能互相分享用户的相关信息,达到快速漫游的目的。图11[2]显示了一个漫游组的拓扑情况。图中三个AC分别为ControllerA、ControllerB、ControllerC,每个AC上建立了一个漫游组,记录组内的其他成员AC。

图11 漫游组图

漫游组的工作机制是当一个STA先关联在ControllerA,之后漫游到ControllerB,此时ControllerB可以在漫游组内询问:这个STA是否之前关联漫游组内的AC上,ControllerA接受到询问后,告诉ControllerB此STA信息,这样漫游前后STA的信息双方都知道了。有了信息漫游模块就可以对其他模块进行“欺骗”,因此在没有漫游组的不同AC之间无法进行漫游。

漫游组必须在AC上手动创建,通过漫游组的名字来区分不同的漫游组。实际应用中不可能无限扩大漫游范围,因此设置每个AC可配置最多8个漫游组,每个组内最多24个成员,用于不同需要。每个漫游组至少需要包括以下信息:漫游组的名字、漫游组ID、漫游组是否有效、数据通道保活报文发送间隔、数据通道保活报文接收阀值、漫游组内的成员数等。每个漫游成员至少需要保存如下信息:漫游成员的IP地址、成员是否有效、对应MTI端口的相关信息、MTI数据/控制通道状态、数据通道保活报文接收失败次数等。

漫游组和漫游组成员信息在AC内的存储方式为数组方式,因为漫游组和漫游组成员少,并且在实际环境中,漫游可能会较为频繁地发生,也可能会经常需要访问漫游组内漫游成员的信息,如果用链表来维护,就需要对链表本身进行额外的保护,这样操作就会变得较为复杂。这里采用数组的方式进行操作较为简便,如图12所示。

图12 漫游组数据结构存储图

3.3 MTI隧道

漫游组内不同AC之间需要共享信息,还要传递STA通信数据,因此需要建立一个专门的通信隧道MTI。MTI类似于CTI通道,使得漫游模块在建立相同的漫游表时可处理两种漫游。图13为AC间漫游,STA从AC1漫游到AC2的AP2,数据的上下行传输过程。

1) 下行:网络有数据要下行到STA,漫游模块接手数据时查看漫游表,发现是一个漫游用户,于是将传输接口从CTI 1改成MTI 1,这样数据就到达AC2,之后AC2上的漫游模块将MTI 2改成CTI 2,数据由AP2下发给STA,下行数据通畅。

2) 上行:STA发送数据上行到网络,AC2上漫游模块接到从AP2传上来的STA数据,查看发现是漫游STA,将CTI 2改成MTI 2,数据由MTI隧道传到AC1,AC1上漫游模块接收到数据后将MTI 1改为CTI 1,上传到网络。其他模块依然认为数据从CTI 1上来,通过检查传输到网络,上行数据通畅。

图13 MTI隧道展示图

(1) MTI隧道的建立 当为漫游组配置了漫游成员AC之后,创建对应的MTI端口,并且当数据通道打通后将MTI端口状态UP。当数据通道不通的时候将MTI端口的状态置为DOWN,当漫游组中的漫游成员被删除的时候,将其对应的MTI端口删除。

虽然漫游组中的各成员AC之间是对等的,但是在控制通道中需要将MTI连接的AC分为Server和Client。为了使不同AC都能得到同样的结果,所以通过比较AC的管理IP地址来确定AC间的C/S关系:MTI 2端AC中IP地址的二进制值较小的作为Server,较大的作为Client。

(2) MTI隧道的保活 MTI隧道会因为各种异常断开,为了及时检测隧道是否正常,需要对隧道进行从中保活,做法是通过keepalive报文来实现。Keepalive报文需要分为request报文和response报文。其中keepalive request报文由Client端主动发出,根据配置的保活时间,每个一定时间发出。而keepalive response是Server端收到request后才进行回复。当Server端在连续若干个保活周期(周期个数通过CLI来修改)内都没有收到Client端的keepalive request报文,那Server端就认为数据通道已经不通,将数据通道状态改为down。而Client端如果在连续若干个保活周期(周期个数通过CLI来修改)内都没有收到keepalive response报文,那么Client端就认为数据通道已经不通,将MTI隧道状态改为down。

4 漫游模块应用

漫游模块由三部分组成,工作原理并不复杂。可实际环境中漫游过程是非常复杂的,会出现先AC内漫游再转到AC间漫游、AC间漫游转AC间漫游等复杂的情况。为了证明漫游模块能满足复杂多变的实际应用,需要对STA的各种漫游场景进行分析。

4.1 STA各种场景分析

STA在发生漫游时,对不同AC来说意义不一样,为了方便讨论,先列出4种AC上STA状态:

NC(普通用户):正常关联到AC上,无漫游。

LRC(本地漫游或称AC内漫游用户):STA在AC内漫游。

RIC(漫入用户):STA发生AC间漫游,从别的AC漫游到本AC。

ROC(漫出用户):STA从本AC漫游出到别的AC。

由于需要保持STA在整个多次的漫游过程中IP地址和访问域不变,必须关注STA最开始关联的AC/AP,只有这样才能确定STA的访问域;同时需要关注STA漫游后当前关联的AC/AP,只有知道了当前的位置,才能使做相应操作时STA在当前位置上保持原有的访问域不变;最后,还需要关注STA在本次漫游之前关联的AC/AP,因为该位置上可能保存有前一次漫游时候的相关信息,而这些信息需要更新或删除。

因此确定STA的漫游情况,需要且只需要知道3个位置:STA正常加入的AC/AP、本次漫游行为之前关联的AC/AP、当前也就是本次漫游后关联的AC/AP。因为只要3个AC/AP位置就能表述STA的漫游所有场景,所以可以通过一个总共有3台AC,每台AC下联3台AP的模型来对所有可能的情况进行表述。

下面对可能的各种情况进行讨论。为了便于讨论,假设当前的场景中有3台AC:AC0、AC1、AC2,每台AC各下联有3台AP:AP0、AP1、AP2,如图14所示。当STA关联到ACx下的APy时,用(x,y)来表示STA当前关联的位置,表格中描述的STA在AC上的用户状态。

鉴于篇幅的限度及漫游场景的相似性,下面只对最常见的6种漫游场景进行详细分析。

• 场景1:AC内一次漫游(见图14)

图14 AC内一次漫游示意图

漫游前STA是与AP0正常关联的。STA向AP1发出重关联,AC0收到STA的重关联请求后,改变STA与AP的关联,将STA关联到AP1,并且通告漫游模块。漫游模块收到通告后,根据STA信息判断是AC内漫游,修改STA中漫游相关的状态,如表2所示。

表2 AC内一次漫游时STA在AC上状态的变化

• 场景2:AC间一次漫游(见图15)

图15 AC间一次漫游示意图

漫游前STA与AC0的AP0是正常关联的。STA向AC1的AP0发出重关联请求,通过AP传递,AC1收到漫游请求,根据STA的状态判断是AC间漫游;AC1向同漫游组内的AC0和AC2发出漫游请求;AC2收到漫游请求后发现不是与自己相关的STA所以不回复;AC0收到请求后检索STA信息发现自己是漫出AC,修改AC0上的STA状态信息并设置转发面,然后向AC1发出漫游应答;AC1收到漫游应答时修改STA漫游相关信息,如表3所示。

表3 AC间一次漫游时STA在AC上的状态变化

• 场景3:AC内二次漫游(见图16)

图16 AC内二次漫游示意图

在当前漫游之前,STA已经经过若干过程从AC0的AP0漫游到AP1。STA向AC0的AP2发起重关联,AC0收到重关联请求后解除STA与AP1的关联,并且将STA关联到AP2。漫游模块根据当前AP关联的变化情况更新STA漫游相关信息,如表4所示。

表4 AC内二次漫游时STA在AC上的状态变化

• 场景4:AC内往返漫游(见图17)

图17 AC内往返漫游示意图

在当前漫游之前,STA已经经过若干过程从AC0的AP0漫游到AP1。STA向AP0发起重关联请求,AC0收到重关联请求后,将STA关联到AP0,并且判断AP0是STA最开始正常加入的AP,所以将STA看作与正常加入的情况相同,同步信息到STA控制块和转发面,如表5所示。

表5 AC内往返漫游时STA在AC上的状态变化

• 场景5:AC内到AC间二次漫游(见图18)

图18 AC内到AC间二次漫游示意图

在当前漫游之前,STA已经经过若干过程从AC0的AP0漫游到AC0的AP1。STA向AC0的AP0发起重关联请求,AC1判断之前没有该STA的信息,向漫游组内的AC0和AC2发出漫游请求。AC2收到请求后判断自己没有STA的信息,所以不进行回应。AC0收到请求后,查找到STA相关信息,修改STA控制块和转发面信息为漫出状态,同时将STA信息通过漫游模块发送到AC1。AC1收到信息后更新本身的STA控制块和转发面信息,如表6所示。

表6 AC内到AC间二次漫游时STA在AC上的状态变化

• 场景6:AC间往返漫游(回到同一AP,见图19)

图19 AC间往返漫游的示意图

在当前漫游之前,STA已经经过若干过程从AC0的AP0漫游到AC1的AP0。STA向AC0的AP0发起重关联请求,AC0收到后判断STA当前的转状态是漫出,所以向漫游组内的AC1和AC2发送漫游请求,同时更新STA控制块和转发面信息恢复到STA正常关联的状态,如表7所示。AC1收到漫游请求后删除对应的STA信息,并且由于AC1不是最近一次正常加入时候的AC,所以不发送回应;AC2收到漫游请求后,判断本身没有这个STA信息,也不进行回应。

表7 AC间往返漫游时STA在AC上的状态变化

从上述场景分析可以看出,本漫游方案是能够适用于各种可能发生的漫游场景。

4.2 漫游模块性能测试

为了证明漫游模块符合设计需要即漫游处理过程时间不超过50 ms,需要测试漫游模块在AC端的性能。需要分别测试在AC内和AC间环境下,STA与所在网络的其他设备进行不间断的通信过程中,在漫游前后STA的断流时间。

测试拓扑图选用最典型的AC内(参见图4)和AC间(图5)漫游结构图,测试步骤如下:

1) STA1关联到AP1上,STA1通过flood_ping工具不停向AP1发ping 报文。

2) PC采用WireShark通过镜像口抓取AP1收到的ping_req报文和发送的ping_reply报文。

3) STA1从AP1漫游到AP2。

4) 采用时间戳来记录漫游处理时间,接收重关联帧到漫游表建立完成一共花费的时间,如表8所示。

表8 漫游处理时间

从表8可以看出,AC端和漫游模块成功处理完漫游STA的数据,其平均时间不超过10 ms,这与漫游机制的指标吻合。

5 结 语

本文对大范围部署WLAN网络时用户移动掉线的问题,给出了一种解决机制。本漫游机制原理不复杂,但同时能完全满足各种应用场景,通过测试漫游的性能也证明其符合设计目标。但不同运营商对WLAN 漫游持不同的态度,因此无法做到全网任意漫游,只能在安装有漫游模块的特定设备上才能实现用户漫游。

猜你喜欢
漫游报文关联
基于J1939 协议多包报文的时序研究及应用
汽车电器(2022年9期)2022-11-07 02:16:24
CTCS-2级报文数据管理需求分析和实现
“一带一路”递进,关联民生更紧
当代陕西(2019年15期)2019-09-02 01:52:00
浅析反驳类报文要点
中国外汇(2019年11期)2019-08-27 02:06:30
霹雳漫游堂
奇趣搭配
智趣
读者(2017年5期)2017-02-15 18:04:18
NASA漫游记
ATS与列车通信报文分析
语言学与修辞学:关联与互动
当代修辞学(2011年2期)2011-01-23 06:39:12