王新峰 曾明星
(吉首大學(xué)軟件學(xué)院 湖南 張家界 427000)
在今天,用戶走在任何地方都可以將手機(jī)、PAD等設(shè)備接入網(wǎng)絡(luò),而這背后都是無(wú)線局域網(wǎng)(WLAN)的功勞。WLAN是一種無(wú)線通信方式,一般由接入控制器AC(Access Controller)和無(wú)線接入點(diǎn)AP(Access Point)組成。早期WLAN只有AP部分,所有的802.11功能,即802.11物理層和媒體接入控制(MAC)功能,都實(shí)現(xiàn)在AP中。在這種WLAN結(jié)構(gòu)中,必須對(duì)接入點(diǎn)進(jìn)行單個(gè)管理,而且不易實(shí)施負(fù)載平衡控制,也不可能根據(jù)話音之類的實(shí)時(shí)應(yīng)用需求執(zhí)行快速切換等,上述因素決定了這種網(wǎng)絡(luò)不適宜于大規(guī)模的部署。后來(lái)采用的AC+AP結(jié)構(gòu)是WLAN 的最佳結(jié)構(gòu),在這種結(jié)構(gòu)中,存在一個(gè)集中式的設(shè)備——接入控制器(AC)或者WLAN Switch。它利用一個(gè)或多個(gè)集中式設(shè)備來(lái)對(duì)接入點(diǎn)進(jìn)行管理、控制和配置,將802.11 的功能實(shí)現(xiàn)在接入點(diǎn)和集中式設(shè)備之間,使其具有很好的管理性和擴(kuò)展性,是當(dāng)前WLAN的主流結(jié)構(gòu),如圖1所示,無(wú)線客戶端STA(Station)如:手機(jī)、PAD等通過(guò)AP接入網(wǎng)絡(luò)。
圖1 典型WLAN結(jié)構(gòu)
WLAN的初衷是針對(duì)家庭、小辦公室應(yīng)用,因?yàn)闊o(wú)線AP的覆蓋范圍是有限的,AP的覆蓋范圍和其提供的接入速率是緊密相關(guān)的,STA距離AP越遠(yuǎn),AP提供的接入速率越低,如圖2所示。
圖2 距離與接入速度關(guān)系圖
要大范圍覆蓋無(wú)線網(wǎng)絡(luò),只能通過(guò)安裝多個(gè)AP實(shí)現(xiàn),如圖3所示,STA從AP3范圍移動(dòng)到AP1范圍再關(guān)聯(lián)到AP1時(shí)會(huì)斷線,這在WLAN網(wǎng)絡(luò)早期人們是可以接受的。
圖3 大范圍內(nèi)AP覆蓋場(chǎng)景
隨著無(wú)線網(wǎng)絡(luò)應(yīng)用的逐步擴(kuò)大,用戶對(duì)訪問(wèn)網(wǎng)絡(luò)的移動(dòng)性要求越來(lái)越高。即用戶希望能夠邊移動(dòng)邊正常使用網(wǎng)絡(luò),這對(duì)現(xiàn)有的技術(shù)提出了極大的挑戰(zhàn)。如何有效地滿足用戶在使用無(wú)線WLAN網(wǎng)絡(luò)時(shí)的快速無(wú)縫漫游問(wèn)題,成為亟待解決的問(wèn)題。
漫游是指 STA在移動(dòng)到兩個(gè)BSS基礎(chǔ)服務(wù)集(Basic Service Set,俗稱WIFI名)覆蓋范圍的臨界處時(shí),STA與新AP重新關(guān)聯(lián)并與原AP斷開(kāi)關(guān)聯(lián)的過(guò)程,整個(gè)漫游過(guò)程中STA的IP地址和訪問(wèn)域保持不變。對(duì)于用戶來(lái)說(shuō),漫游的行為通常是透明的無(wú)縫漫游,即用戶及其使用的應(yīng)用程序,不會(huì)感知到漫游的發(fā)生。
根據(jù)STA漫游前后所涉及的AC,可以將漫游分為AC內(nèi)漫游和AC間漫游。
AC內(nèi)漫游:針對(duì)小范圍WLAN覆蓋場(chǎng)景,AP數(shù)量少且全部由一臺(tái)AC控制,STA漫游前后所關(guān)聯(lián)的AP都在同一AC控制下,如圖4所示,STA從原來(lái)所在的AP1范圍移動(dòng)進(jìn)入AP2的范圍。
圖4 AC內(nèi)漫游
AC間漫游:是針對(duì)大范圍WLAN覆蓋場(chǎng)景,整個(gè)網(wǎng)絡(luò)中有多個(gè)AC,每個(gè)AC下連多個(gè)AP,STA漫游前后所關(guān)聯(lián)的AP歸屬于不同的AC控制,如圖5所示,圖中虛線代表STA漫游方向從AP1漫游到AP2。
圖5 AC間漫游
漫游是STA與新AP重新關(guān)聯(lián)并與原AP斷開(kāi)關(guān)聯(lián)的過(guò)程,要實(shí)現(xiàn)漫游需要先了解STA正常的關(guān)聯(lián)以及各模塊的功能。
AC:負(fù)責(zé)AP和STA的管理,當(dāng)有STA從AP接入時(shí)存儲(chǔ)STA相關(guān)的信息(有MAC、IP、接入AP、QoS、Security等),以及負(fù)責(zé)數(shù)據(jù)的控制和轉(zhuǎn)發(fā)。
AP:發(fā)送BSS讓STA接入,有STA接入后負(fù)責(zé)在AC與STA之間傳遞數(shù)據(jù)。AP形象點(diǎn)描述就像一座橋連接AC與STA,只傳遞數(shù)據(jù)不處理數(shù)據(jù)。
STA:發(fā)出關(guān)聯(lián)請(qǐng)求和重關(guān)聯(lián)請(qǐng)求,關(guān)聯(lián)上AC后即可為用戶獲取網(wǎng)絡(luò)數(shù)據(jù)。關(guān)聯(lián)請(qǐng)求是STA正常關(guān)聯(lián)AP的請(qǐng)求,而重關(guān)聯(lián)請(qǐng)求是當(dāng)STA已關(guān)聯(lián)上AP后,發(fā)現(xiàn)有相同名稱且信號(hào)更好的BSS服務(wù)時(shí)發(fā)出的請(qǐng)求。正是由于重關(guān)聯(lián)請(qǐng)求的存在,才有了漫游實(shí)現(xiàn)的可能。
STA正常上線過(guò)程會(huì)涉及到很多模塊如快速轉(zhuǎn)發(fā)、安全模塊和AP模塊(為了只關(guān)注漫游,這些模塊只簡(jiǎn)單列出幾個(gè)描述)等,最終建立了STA信息,如圖6所示。整個(gè)STA上線建立所有相關(guān)模塊信息的時(shí)間大致是幾百毫秒,由于是第一次上線,這個(gè)時(shí)間用戶是可接受的。當(dāng)用戶從當(dāng)前AP覆蓋范圍進(jìn)入到另一個(gè)AP的范圍時(shí),會(huì)發(fā)送重關(guān)聯(lián)請(qǐng)求,在沒(méi)有漫游機(jī)制的情況下,這時(shí)AC的處理跟正常處理一致,會(huì)重新建立一個(gè)新的STA信息同時(shí)把相關(guān)模塊的數(shù)據(jù)更新,而這個(gè)過(guò)程耗時(shí)跟之前一樣也是幾百毫秒,在這個(gè)時(shí)間內(nèi)用戶的網(wǎng)絡(luò)會(huì)斷開(kāi),嚴(yán)重影響用戶體驗(yàn),這正是問(wèn)題之所在。
圖6 STA正常關(guān)聯(lián)過(guò)程圖
漫游的目標(biāo)是讓用戶對(duì)漫游過(guò)程無(wú)感知,用戶無(wú)感知即對(duì)用戶使用的網(wǎng)絡(luò)通信無(wú)影響,對(duì)于像VoWLAN這樣的對(duì)實(shí)時(shí)性要求很高的應(yīng)用來(lái)說(shuō),切換時(shí),用戶數(shù)據(jù)通信中斷的時(shí)間必須少于50 ms(人耳能感覺(jué)到的時(shí)間間隔),因此漫游過(guò)程耗時(shí)必須小于50 ms。而正常關(guān)聯(lián)過(guò)程涉及眾多模塊耗時(shí)幾百毫秒,遠(yuǎn)大于50 ms,這就是需要解決的問(wèn)題。
當(dāng)STA發(fā)生漫游時(shí),更新各模塊相關(guān)的數(shù)據(jù)耗時(shí)幾百毫秒,如果不更新數(shù)據(jù)就無(wú)耗時(shí),這里引入一種機(jī)制“欺騙”各個(gè)相關(guān)模塊,讓它們以為STA漫游前后并沒(méi)有什么變化,并將實(shí)現(xiàn)該機(jī)制的功能叫漫游模塊。
用戶對(duì)漫游無(wú)感知的本質(zhì)是漫游前后用戶與網(wǎng)絡(luò)通信數(shù)據(jù)正常,因此必須分析漫游前后STA通信數(shù)據(jù)的上下行通道,數(shù)據(jù)上行是指STA通過(guò)AC把數(shù)據(jù)發(fā)送到網(wǎng)絡(luò),下行是指AC從網(wǎng)絡(luò)接受數(shù)據(jù)發(fā)送到STA,通俗講上下行就是STA上網(wǎng)數(shù)據(jù)傳輸過(guò)程。圖7描述了一個(gè)最簡(jiǎn)單的漫游過(guò)程對(duì)比,STA從圖中AP1漫游到AP2,圖中雙向箭頭線代表數(shù)據(jù)上下行的傳輸通路,其中虛線是漫游前的,實(shí)線是漫游后的。下面是漫游前后相同與不同點(diǎn)對(duì)比:
1) 相同點(diǎn):STA上下行數(shù)據(jù)傳輸還是由AC來(lái)轉(zhuǎn)發(fā),對(duì)于網(wǎng)絡(luò)來(lái)說(shuō)STA是通過(guò)AP1還是通過(guò)AP2傳輸數(shù)據(jù)是不用關(guān)心的。
2) 不同點(diǎn):漫游前下行的數(shù)據(jù)需要AC通過(guò)各模塊檢測(cè)后從AP1傳到STA,漫游后需要把下行數(shù)據(jù)通過(guò)AP2傳到STA。漫游前上行數(shù)據(jù)是STA通過(guò)AP1上傳到AC經(jīng)各模塊檢測(cè)后上傳到網(wǎng)絡(luò),漫游后是通過(guò)AP2上傳到AC的。
圖7 漫游前后STA上下行數(shù)據(jù)傳輸通道圖
漫游模塊的工作原理是建立一個(gè)模塊用來(lái)“欺騙”AC上各模塊,如圖8所示,其中雙向箭頭代表數(shù)據(jù)數(shù)。
圖8 漫游模塊功能圖
增加漫游模塊后,當(dāng)STA從AP1漫游到AP2,漫游模塊處理如下:
1) STA上行數(shù)據(jù)通過(guò)AP2到達(dá)AC時(shí),漫游模塊最先接收數(shù)據(jù)將數(shù)據(jù)來(lái)源從AP2改成AP1,這樣其他上層模塊會(huì)以為數(shù)據(jù)還是從AP1傳上來(lái)的。
2) 網(wǎng)絡(luò)下行數(shù)據(jù)通過(guò)AC各模塊后準(zhǔn)備發(fā)往AP1到STA時(shí)(因?yàn)槠渌K還認(rèn)為STA是關(guān)聯(lián)在AP1上),漫游模塊最后處理數(shù)據(jù)將AP1改成AP2發(fā)到STA。
這樣就達(dá)到了“欺騙”各模塊的效果,除了漫游模塊感知了STA漫游,其他所有模塊都不變。
漫游模塊由三部分組成:漫游組、MTI隧道(AC間通信專用隧道)以及漫游表。漫游表是AC內(nèi)與AC間漫游都需要的關(guān)鍵部分,漫游組與MTI隧道兩個(gè)部分只是為AC間漫游服務(wù)。如果網(wǎng)絡(luò)環(huán)境較小只需要實(shí)現(xiàn)AC內(nèi)漫游,則只需增加漫游表這部分功能。
對(duì)于AC內(nèi)漫游,STA漫游前后所有信息都在同一個(gè)AC,此時(shí)漫游模塊對(duì)其他模塊進(jìn)行“欺騙”是很容易的,只需要建立一個(gè)漫游表,表里存儲(chǔ)每個(gè)漫游STA的狀態(tài)信息,包括:STA的MAC地址、STA的用戶狀態(tài)、STA關(guān)聯(lián)的WLAN ID、正常關(guān)聯(lián)時(shí)關(guān)聯(lián)的CTI(AC與AP通信的通道)端口索引和漫游后關(guān)聯(lián)的CTI端口索引、STA在AC上的狀態(tài),如表1所示。
表1 漫游表
當(dāng)STA發(fā)送重關(guān)聯(lián)請(qǐng)求時(shí),漫游模塊可以查詢到之前STA關(guān)聯(lián)的信息,再通過(guò)重關(guān)聯(lián)幀獲取到漫游后的AP信息,最后建立漫游表。
下面通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)講解下漫游表的作用,圖9所示為一個(gè)AC內(nèi)漫游,圖內(nèi)右邊是漫游表,當(dāng)漫游發(fā)生后數(shù)據(jù)的上下行傳輸如下。
1) 下行:網(wǎng)絡(luò)有數(shù)據(jù)要下行到STA,漫游模塊接手?jǐn)?shù)據(jù)查詢漫游表,發(fā)現(xiàn)是一個(gè)漫游用戶,將傳輸接口從CTI 1改成CTI 2,這樣數(shù)據(jù)就到達(dá)AP2然后傳給了STA,下行數(shù)據(jù)通暢。
2) 上行:STA發(fā)送數(shù)據(jù)上行到網(wǎng)絡(luò),漫游模塊接到從AP2傳上來(lái)的STA數(shù)據(jù),查看發(fā)現(xiàn)是漫游STA,將CTI 2改成CTI 1,其他模塊依然認(rèn)為數(shù)據(jù)從CTI1上來(lái),通過(guò)各模塊檢查安全傳輸?shù)骄W(wǎng)絡(luò),上行數(shù)據(jù)通暢。
當(dāng)STA漫游后數(shù)據(jù)依然能上下行通暢,證明聯(lián)網(wǎng)正常,同時(shí)其他模塊又對(duì)漫游前后無(wú)感知,證明此方案可行。
圖9 漫游表工作圖
由于AC關(guān)聯(lián)的漫游STA數(shù)量可能較大,同時(shí)每個(gè)STA的每個(gè)數(shù)據(jù)包都需要經(jīng)過(guò)漫游模塊進(jìn)行檢查修改,這時(shí)快速定位到漫游表中的STA是必須考慮的現(xiàn)實(shí)問(wèn)題。在眾多數(shù)據(jù)結(jié)構(gòu)中HASH表是能直接定位的存儲(chǔ)結(jié)構(gòu),所以使用HASH表來(lái)維護(hù)STA狀態(tài)數(shù)據(jù)庫(kù),使用介質(zhì)接入控制MAC(每個(gè)STA的MAC是唯一的)來(lái)生成hash索引,對(duì)于極少的hash沖突的STA狀態(tài)信息通過(guò)鏈表進(jìn)行維護(hù),具體參見(jiàn)圖10。
圖10 漫游表中STA狀態(tài)信息存儲(chǔ)圖
漫游模塊處理AC內(nèi)漫游很容易,而AC間漫游處理起來(lái)就比較復(fù)雜了,因?yàn)槁吻昂骃TA關(guān)聯(lián)的AC是不同的,STA漫游關(guān)聯(lián)到的AC2如何知道漫游前AC1的信息呢?解決辦法是信息共享。用戶的漫游范圍不能無(wú)限擴(kuò)大,為了對(duì)用戶漫游范圍進(jìn)行控制,同時(shí)達(dá)到共享目的,將一組可進(jìn)行STA信息數(shù)據(jù)同步的控制器,稱為一個(gè)漫游組。通過(guò)創(chuàng)建一個(gè)漫游組,使得同一個(gè)組內(nèi)的各個(gè)控制器能互相分享用戶的相關(guān)信息,達(dá)到快速漫游的目的。圖11[2]顯示了一個(gè)漫游組的拓?fù)淝闆r。圖中三個(gè)AC分別為ControllerA、ControllerB、ControllerC,每個(gè)AC上建立了一個(gè)漫游組,記錄組內(nèi)的其他成員AC。
圖11 漫游組圖
漫游組的工作機(jī)制是當(dāng)一個(gè)STA先關(guān)聯(lián)在ControllerA,之后漫游到ControllerB,此時(shí)ControllerB可以在漫游組內(nèi)詢問(wèn):這個(gè)STA是否之前關(guān)聯(lián)漫游組內(nèi)的AC上,ControllerA接受到詢問(wèn)后,告訴ControllerB此STA信息,這樣漫游前后STA的信息雙方都知道了。有了信息漫游模塊就可以對(duì)其他模塊進(jìn)行“欺騙”,因此在沒(méi)有漫游組的不同AC之間無(wú)法進(jìn)行漫游。
漫游組必須在AC上手動(dòng)創(chuàng)建,通過(guò)漫游組的名字來(lái)區(qū)分不同的漫游組。實(shí)際應(yīng)用中不可能無(wú)限擴(kuò)大漫游范圍,因此設(shè)置每個(gè)AC可配置最多8個(gè)漫游組,每個(gè)組內(nèi)最多24個(gè)成員,用于不同需要。每個(gè)漫游組至少需要包括以下信息:漫游組的名字、漫游組ID、漫游組是否有效、數(shù)據(jù)通道保活報(bào)文發(fā)送間隔、數(shù)據(jù)通道?;顖?bào)文接收閥值、漫游組內(nèi)的成員數(shù)等。每個(gè)漫游成員至少需要保存如下信息:漫游成員的IP地址、成員是否有效、對(duì)應(yīng)MTI端口的相關(guān)信息、MTI數(shù)據(jù)/控制通道狀態(tài)、數(shù)據(jù)通道?;顖?bào)文接收失敗次數(shù)等。
漫游組和漫游組成員信息在AC內(nèi)的存儲(chǔ)方式為數(shù)組方式,因?yàn)槁谓M和漫游組成員少,并且在實(shí)際環(huán)境中,漫游可能會(huì)較為頻繁地發(fā)生,也可能會(huì)經(jīng)常需要訪問(wèn)漫游組內(nèi)漫游成員的信息,如果用鏈表來(lái)維護(hù),就需要對(duì)鏈表本身進(jìn)行額外的保護(hù),這樣操作就會(huì)變得較為復(fù)雜。這里采用數(shù)組的方式進(jìn)行操作較為簡(jiǎn)便,如圖12所示。
圖12 漫游組數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)圖
漫游組內(nèi)不同AC之間需要共享信息,還要傳遞STA通信數(shù)據(jù),因此需要建立一個(gè)專門(mén)的通信隧道MTI。MTI類似于CTI通道,使得漫游模塊在建立相同的漫游表時(shí)可處理兩種漫游。圖13為AC間漫游,STA從AC1漫游到AC2的AP2,數(shù)據(jù)的上下行傳輸過(guò)程。
1) 下行:網(wǎng)絡(luò)有數(shù)據(jù)要下行到STA,漫游模塊接手?jǐn)?shù)據(jù)時(shí)查看漫游表,發(fā)現(xiàn)是一個(gè)漫游用戶,于是將傳輸接口從CTI 1改成MTI 1,這樣數(shù)據(jù)就到達(dá)AC2,之后AC2上的漫游模塊將MTI 2改成CTI 2,數(shù)據(jù)由AP2下發(fā)給STA,下行數(shù)據(jù)通暢。
2) 上行:STA發(fā)送數(shù)據(jù)上行到網(wǎng)絡(luò),AC2上漫游模塊接到從AP2傳上來(lái)的STA數(shù)據(jù),查看發(fā)現(xiàn)是漫游STA,將CTI 2改成MTI 2,數(shù)據(jù)由MTI隧道傳到AC1,AC1上漫游模塊接收到數(shù)據(jù)后將MTI 1改為CTI 1,上傳到網(wǎng)絡(luò)。其他模塊依然認(rèn)為數(shù)據(jù)從CTI 1上來(lái),通過(guò)檢查傳輸?shù)骄W(wǎng)絡(luò),上行數(shù)據(jù)通暢。
圖13 MTI隧道展示圖
(1) MTI隧道的建立 當(dāng)為漫游組配置了漫游成員AC之后,創(chuàng)建對(duì)應(yīng)的MTI端口,并且當(dāng)數(shù)據(jù)通道打通后將MTI端口狀態(tài)UP。當(dāng)數(shù)據(jù)通道不通的時(shí)候?qū)TI端口的狀態(tài)置為DOWN,當(dāng)漫游組中的漫游成員被刪除的時(shí)候,將其對(duì)應(yīng)的MTI端口刪除。
雖然漫游組中的各成員AC之間是對(duì)等的,但是在控制通道中需要將MTI連接的AC分為Server和Client。為了使不同AC都能得到同樣的結(jié)果,所以通過(guò)比較AC的管理IP地址來(lái)確定AC間的C/S關(guān)系:MTI 2端AC中IP地址的二進(jìn)制值較小的作為Server,較大的作為Client。
(2) MTI隧道的?;?MTI隧道會(huì)因?yàn)楦鞣N異常斷開(kāi),為了及時(shí)檢測(cè)隧道是否正常,需要對(duì)隧道進(jìn)行從中保活,做法是通過(guò)keepalive報(bào)文來(lái)實(shí)現(xiàn)。Keepalive報(bào)文需要分為request報(bào)文和response報(bào)文。其中keepalive request報(bào)文由Client端主動(dòng)發(fā)出,根據(jù)配置的?;顣r(shí)間,每個(gè)一定時(shí)間發(fā)出。而keepalive response是Server端收到request后才進(jìn)行回復(fù)。當(dāng)Server端在連續(xù)若干個(gè)保活周期(周期個(gè)數(shù)通過(guò)CLI來(lái)修改)內(nèi)都沒(méi)有收到Client端的keepalive request報(bào)文,那Server端就認(rèn)為數(shù)據(jù)通道已經(jīng)不通,將數(shù)據(jù)通道狀態(tài)改為down。而Client端如果在連續(xù)若干個(gè)?;钪芷?周期個(gè)數(shù)通過(guò)CLI來(lái)修改)內(nèi)都沒(méi)有收到keepalive response報(bào)文,那么Client端就認(rèn)為數(shù)據(jù)通道已經(jīng)不通,將MTI隧道狀態(tài)改為down。
漫游模塊由三部分組成,工作原理并不復(fù)雜??蓪?shí)際環(huán)境中漫游過(guò)程是非常復(fù)雜的,會(huì)出現(xiàn)先AC內(nèi)漫游再轉(zhuǎn)到AC間漫游、AC間漫游轉(zhuǎn)AC間漫游等復(fù)雜的情況。為了證明漫游模塊能滿足復(fù)雜多變的實(shí)際應(yīng)用,需要對(duì)STA的各種漫游場(chǎng)景進(jìn)行分析。
STA在發(fā)生漫游時(shí),對(duì)不同AC來(lái)說(shuō)意義不一樣,為了方便討論,先列出4種AC上STA狀態(tài):
NC(普通用戶):正常關(guān)聯(lián)到AC上,無(wú)漫游。
LRC(本地漫游或稱AC內(nèi)漫游用戶):STA在AC內(nèi)漫游。
RIC(漫入用戶):STA發(fā)生AC間漫游,從別的AC漫游到本AC。
ROC(漫出用戶):STA從本AC漫游出到別的AC。
由于需要保持STA在整個(gè)多次的漫游過(guò)程中IP地址和訪問(wèn)域不變,必須關(guān)注STA最開(kāi)始關(guān)聯(lián)的AC/AP,只有這樣才能確定STA的訪問(wèn)域;同時(shí)需要關(guān)注STA漫游后當(dāng)前關(guān)聯(lián)的AC/AP,只有知道了當(dāng)前的位置,才能使做相應(yīng)操作時(shí)STA在當(dāng)前位置上保持原有的訪問(wèn)域不變;最后,還需要關(guān)注STA在本次漫游之前關(guān)聯(lián)的AC/AP,因?yàn)樵撐恢蒙峡赡鼙4嬗星耙淮温螘r(shí)候的相關(guān)信息,而這些信息需要更新或刪除。
因此確定STA的漫游情況,需要且只需要知道3個(gè)位置:STA正常加入的AC/AP、本次漫游行為之前關(guān)聯(lián)的AC/AP、當(dāng)前也就是本次漫游后關(guān)聯(lián)的AC/AP。因?yàn)橹灰?個(gè)AC/AP位置就能表述STA的漫游所有場(chǎng)景,所以可以通過(guò)一個(gè)總共有3臺(tái)AC,每臺(tái)AC下聯(lián)3臺(tái)AP的模型來(lái)對(duì)所有可能的情況進(jìn)行表述。
下面對(duì)可能的各種情況進(jìn)行討論。為了便于討論,假設(shè)當(dāng)前的場(chǎng)景中有3臺(tái)AC:AC0、AC1、AC2,每臺(tái)AC各下聯(lián)有3臺(tái)AP:AP0、AP1、AP2,如圖14所示。當(dāng)STA關(guān)聯(lián)到ACx下的APy時(shí),用(x,y)來(lái)表示STA當(dāng)前關(guān)聯(lián)的位置,表格中描述的STA在AC上的用戶狀態(tài)。
鑒于篇幅的限度及漫游場(chǎng)景的相似性,下面只對(duì)最常見(jiàn)的6種漫游場(chǎng)景進(jìn)行詳細(xì)分析。
? 場(chǎng)景1:AC內(nèi)一次漫游(見(jiàn)圖14)
圖14 AC內(nèi)一次漫游示意圖
漫游前STA是與AP0正常關(guān)聯(lián)的。STA向AP1發(fā)出重關(guān)聯(lián),AC0收到STA的重關(guān)聯(lián)請(qǐng)求后,改變STA與AP的關(guān)聯(lián),將STA關(guān)聯(lián)到AP1,并且通告漫游模塊。漫游模塊收到通告后,根據(jù)STA信息判斷是AC內(nèi)漫游,修改STA中漫游相關(guān)的狀態(tài),如表2所示。
表2 AC內(nèi)一次漫游時(shí)STA在AC上狀態(tài)的變化
? 場(chǎng)景2:AC間一次漫游(見(jiàn)圖15)
圖15 AC間一次漫游示意圖
漫游前STA與AC0的AP0是正常關(guān)聯(lián)的。STA向AC1的AP0發(fā)出重關(guān)聯(lián)請(qǐng)求,通過(guò)AP傳遞,AC1收到漫游請(qǐng)求,根據(jù)STA的狀態(tài)判斷是AC間漫游;AC1向同漫游組內(nèi)的AC0和AC2發(fā)出漫游請(qǐng)求;AC2收到漫游請(qǐng)求后發(fā)現(xiàn)不是與自己相關(guān)的STA所以不回復(fù);AC0收到請(qǐng)求后檢索STA信息發(fā)現(xiàn)自己是漫出AC,修改AC0上的STA狀態(tài)信息并設(shè)置轉(zhuǎn)發(fā)面,然后向AC1發(fā)出漫游應(yīng)答;AC1收到漫游應(yīng)答時(shí)修改STA漫游相關(guān)信息,如表3所示。
表3 AC間一次漫游時(shí)STA在AC上的狀態(tài)變化
? 場(chǎng)景3:AC內(nèi)二次漫游(見(jiàn)圖16)
圖16 AC內(nèi)二次漫游示意圖
在當(dāng)前漫游之前,STA已經(jīng)經(jīng)過(guò)若干過(guò)程從AC0的AP0漫游到AP1。STA向AC0的AP2發(fā)起重關(guān)聯(lián),AC0收到重關(guān)聯(lián)請(qǐng)求后解除STA與AP1的關(guān)聯(lián),并且將STA關(guān)聯(lián)到AP2。漫游模塊根據(jù)當(dāng)前AP關(guān)聯(lián)的變化情況更新STA漫游相關(guān)信息,如表4所示。
表4 AC內(nèi)二次漫游時(shí)STA在AC上的狀態(tài)變化
? 場(chǎng)景4:AC內(nèi)往返漫游(見(jiàn)圖17)
圖17 AC內(nèi)往返漫游示意圖
在當(dāng)前漫游之前,STA已經(jīng)經(jīng)過(guò)若干過(guò)程從AC0的AP0漫游到AP1。STA向AP0發(fā)起重關(guān)聯(lián)請(qǐng)求,AC0收到重關(guān)聯(lián)請(qǐng)求后,將STA關(guān)聯(lián)到AP0,并且判斷AP0是STA最開(kāi)始正常加入的AP,所以將STA看作與正常加入的情況相同,同步信息到STA控制塊和轉(zhuǎn)發(fā)面,如表5所示。
表5 AC內(nèi)往返漫游時(shí)STA在AC上的狀態(tài)變化
? 場(chǎng)景5:AC內(nèi)到AC間二次漫游(見(jiàn)圖18)
圖18 AC內(nèi)到AC間二次漫游示意圖
在當(dāng)前漫游之前,STA已經(jīng)經(jīng)過(guò)若干過(guò)程從AC0的AP0漫游到AC0的AP1。STA向AC0的AP0發(fā)起重關(guān)聯(lián)請(qǐng)求,AC1判斷之前沒(méi)有該STA的信息,向漫游組內(nèi)的AC0和AC2發(fā)出漫游請(qǐng)求。AC2收到請(qǐng)求后判斷自己沒(méi)有STA的信息,所以不進(jìn)行回應(yīng)。AC0收到請(qǐng)求后,查找到STA相關(guān)信息,修改STA控制塊和轉(zhuǎn)發(fā)面信息為漫出狀態(tài),同時(shí)將STA信息通過(guò)漫游模塊發(fā)送到AC1。AC1收到信息后更新本身的STA控制塊和轉(zhuǎn)發(fā)面信息,如表6所示。
表6 AC內(nèi)到AC間二次漫游時(shí)STA在AC上的狀態(tài)變化
? 場(chǎng)景6:AC間往返漫游(回到同一AP,見(jiàn)圖19)
圖19 AC間往返漫游的示意圖
在當(dāng)前漫游之前,STA已經(jīng)經(jīng)過(guò)若干過(guò)程從AC0的AP0漫游到AC1的AP0。STA向AC0的AP0發(fā)起重關(guān)聯(lián)請(qǐng)求,AC0收到后判斷STA當(dāng)前的轉(zhuǎn)狀態(tài)是漫出,所以向漫游組內(nèi)的AC1和AC2發(fā)送漫游請(qǐng)求,同時(shí)更新STA控制塊和轉(zhuǎn)發(fā)面信息恢復(fù)到STA正常關(guān)聯(lián)的狀態(tài),如表7所示。AC1收到漫游請(qǐng)求后刪除對(duì)應(yīng)的STA信息,并且由于AC1不是最近一次正常加入時(shí)候的AC,所以不發(fā)送回應(yīng);AC2收到漫游請(qǐng)求后,判斷本身沒(méi)有這個(gè)STA信息,也不進(jìn)行回應(yīng)。
表7 AC間往返漫游時(shí)STA在AC上的狀態(tài)變化
從上述場(chǎng)景分析可以看出,本漫游方案是能夠適用于各種可能發(fā)生的漫游場(chǎng)景。
為了證明漫游模塊符合設(shè)計(jì)需要即漫游處理過(guò)程時(shí)間不超過(guò)50 ms,需要測(cè)試漫游模塊在AC端的性能。需要分別測(cè)試在AC內(nèi)和AC間環(huán)境下,STA與所在網(wǎng)絡(luò)的其他設(shè)備進(jìn)行不間斷的通信過(guò)程中,在漫游前后STA的斷流時(shí)間。
測(cè)試拓?fù)鋱D選用最典型的AC內(nèi)(參見(jiàn)圖4)和AC間(圖5)漫游結(jié)構(gòu)圖,測(cè)試步驟如下:
1) STA1關(guān)聯(lián)到AP1上,STA1通過(guò)flood_ping工具不停向AP1發(fā)ping 報(bào)文。
2) PC采用WireShark通過(guò)鏡像口抓取AP1收到的ping_req報(bào)文和發(fā)送的ping_reply報(bào)文。
3) STA1從AP1漫游到AP2。
4) 采用時(shí)間戳來(lái)記錄漫游處理時(shí)間,接收重關(guān)聯(lián)幀到漫游表建立完成一共花費(fèi)的時(shí)間,如表8所示。
表8 漫游處理時(shí)間
從表8可以看出,AC端和漫游模塊成功處理完漫游STA的數(shù)據(jù),其平均時(shí)間不超過(guò)10 ms,這與漫游機(jī)制的指標(biāo)吻合。
本文對(duì)大范圍部署WLAN網(wǎng)絡(luò)時(shí)用戶移動(dòng)掉線的問(wèn)題,給出了一種解決機(jī)制。本漫游機(jī)制原理不復(fù)雜,但同時(shí)能完全滿足各種應(yīng)用場(chǎng)景,通過(guò)測(cè)試漫游的性能也證明其符合設(shè)計(jì)目標(biāo)。但不同運(yùn)營(yíng)商對(duì)WLAN 漫游持不同的態(tài)度,因此無(wú)法做到全網(wǎng)任意漫游,只能在安裝有漫游模塊的特定設(shè)備上才能實(shí)現(xiàn)用戶漫游。