1. 程式人生 > >OpenWrt/WLAN/驅動/嵌入式開發總結

OpenWrt/WLAN/驅動/嵌入式開發總結


在station和AP建立連線之前,需要一系列的資料交換過程。station和AP之間的發現可以通過主動和被動的方式來發現對方。,在通過認證和關聯兩個過程後才能和AP 建立連線。

上面的通訊過程可以分解為3個過程,
1:WLAN服務的發現,其中分為主動和被動WLAN服務發現。
主動指的是:station主動的傳送 Probe Request(Probe Request 攜帶指定的SSID)此時客戶端攜帶指定的SSID,只會單播發送探查請求幀(Probe Request)。相應的AP 接受到後回覆請求。

被動指的是:station客戶端通過偵聽 AP 定期傳送的Beacon 幀來發現網路。使用者預先配有用於掃描的通道列表,在

每個通道上監聽信標被動掃描要求AP週期性傳送Beacon幀。當用戶需要節省電量時,可以使用被動掃描。

2:鏈路認證過程
為防止非法使用者接入,首先需要在使用者和AC/FAT AP 之間建立認證,認證機制包括兩種。只有通過認證後才能進入關聯階段。鏈路認證過程包括:
開放系統認證(Open system authentication)
 即對station不進行認證,所有請求認證的客戶端都會通過認證。開放系統認證包括兩個步驟:第一步是請求認證,第二步是返回認證結果。

共享金鑰認證(Shared key authentication)。
共享金鑰認證需要客戶端和裝置端配置相同的共享金鑰共享金鑰認證的認證過程為:客戶端先向裝置傳送認證請求,無線裝置端會隨機產生一個Challenge 包(即一個字串)傳送給客戶端;客戶端會將接收到字串拷貝到新的訊息中,用金鑰加密後再發送給無線裝置端;無線裝置端接收到該訊息後,用金鑰將該訊息解密,然後對解密後的字串和最初給客戶端的字串進行比較。如果相同,則說明客戶端擁有無線裝置端相同的共享金鑰,即通過了Shared Key認證;否則Shared Key 認證失敗。



3:鏈路服務協商。
在完成了802.11的鏈路認證後,WLAN客戶端會繼續發起802.11鏈路服務協商,具體的協商通過Association報文或者Re-association報文實現。WLAN服務發現過程中,WLAN客戶端已經獲得了當前服務的配置和引數(WLAN裝置端會在BeaconProbe Response報文中攜帶,例如接入認證演算法以及加密金鑰)。WLAN客戶端在發起的Association或者Re-association請求時,會攜帶WLAN客戶端自身的各種引數,以及根據服務配置選擇的各種引數(主要包括支援的速率,支援的通道,支援的QoS的能力,以及選擇的接入認證和加密演算法)。如果使用者想通過 AP 接入無線網路,使用者必須同特定的AP 關聯。當用戶通過指定SSID 選擇無線網路,並通過AP 認證後,就可以向AP 傳送關聯請求幀。AP 將使用者資訊新增到資料庫,向用戶回覆關聯響應。使用者每次只可以關聯到一個AP 上,並且關聯總是由使用者發起。
WLAN客戶端和WLAN服務裝置端成功完成鏈路服務協商,表明兩個裝置成功建立了802.11鏈路。對於沒有使能接入認證的服務,客戶端已經可以問WLAN網路;如果WLAN服務使能了接入認證,則WLAN裝置端會發起對客戶端的接入認證。
二:CAPWAP
CAPWAP(Controlling and Provisioning of Wireless Access Point,無線接入點控制與供應)協議定義了AP與AC之間如何通訊,為實現AP和AC之間的互通性提供一個通用封裝和傳輸機制

CAPWAP 同時執行在AP 和AC 上,為WLAN 系統提供安全的AC 與AP 之間的通訊。AP 與AC 之間的通訊依照標準UDP 客戶端/伺服器端模型來建立。CAPWAP 提供資料隧道來封裝發往AC 的資料包。這些資料包可以是802.11 協議的資料包。CAPWAP 還支援AC 的遠端AP 配置、WLAN 管理和漫遊管理。在 AC 上,CAPWAP 提供了AP 管理功能。AC 可以根據管理員提供的資訊動態地配置AP。AC 和AP之間的通訊使用的是UDP。故在通訊的時候需要知道AC和AP的IP地址port資訊。CAPWAP控制通道:由AC地址、WBS地址、AC控制埠、WBS控制埠及傳輸協議型別(UDP)定義的雙向資料流通道.

目前,CAPWAP通訊資料型別總體上可以分為兩類:

l  CAPWAP控制隧道中傳輸的CAPWAP控制報文

l  CAPWAP資料隧道中傳輸的CAPWAP資料報文

目前CAPWAP功能的實現都是基於3層網路傳輸模式下,即所有的CAPWAP報文都被封裝成UDP報文格式在IP網路中傳輸,而CAPWAP隧道就是由AC的介面IP地址和WTP的IP地址來維護的。





上面提到控制隧道和資料隧道,控制隧道用來AC來管理AP,如通道,功率的設定,AP狀態的上報。就是普通的socket通訊AP與AC之間,通訊之間的訊息格式就按照capwap來執行。

分佈轉發(或者本地轉發)時,AC只和AP間建立控制通道,但不會建立資料隧道,使用者資料由AP負責本地轉發掉。此時AC其實可以理解成一個採用CAPWAP協議的AP網管伺服器(不嚴謹的理解),AC只負責AP的配置管理。
分佈轉發,也稱為AP本地轉發,AC只和AP間建立控制通道,但不會建立資料隧道,使用者資料由AP負責本地轉發掉
在集中轉發時,AP和AC會構建一個數據隧道。所有使用者業務資料有資料隧道傳送到AC處。
AC通過CAPWAP來控制AP,在集中轉發模式下,STA的所有報文都由AP封裝成CAPWAP報文後再由AC解封裝後進行轉發。即使是本地轉發模式,AP依然由AC通過CAPWAP報文進行控制。

目前CAPWAP功能的實現主要是基於三層網路傳輸模式下,即所有的CAPWAP報文都被封裝成UDP報文格式在IP網路中傳輸,而CAPWAP隧道也是由AC的介面IP地址和WTP的IP地址來維護的。因此保證CAPWAP隧道執行正常的前提是無線控制器的AC的IP地址與AP的IP地址之間路由可達。

AC通過CAPWAP來控制AP,在集中轉發模式下,STA的所有報文都由AP封裝成CAPWAP報文後再由AC解封裝後進行轉發。即使是本地轉發模式,AP依然由AC通過CAPWAP報文進行控制。
3: AC AP,station之間的資料格式

有上面的圖可以知道,在station和WT之間的資料為正常的802.11資料,其實當station的資料到達WTP時,WTP會將802.11資料轉化為:ethernet的802.3的資料,並對此資料加上MAC+IP header+UDP header+CAPWAP header,通過socket建立的資料通過將此資料傳送給AC,AC收到此資料包之後將CAPWAP header 去掉,去掉頭之後的資料就是一個正常的802.3乙太網資料幀。
下面來看一下幀結構:
802.3資料包格式


CAPWAP對原始的802.3資料包的封裝
由上面的知識可以知道,在集中轉發模式中,station的資料全部通過資料通道傳遞給了AC,CAPWAP隧道由AC的介面IP地址和WTP的IP地址來維護的。即在AC和WTP之間建立了一個基於UDP的socket來完成資料的互動。

由上面可以知道,原始的station的資料經過WTP傳輸到AC時,其資料包的大小至少會增大50位元組( 14(802.3 header) + 20(ip header)+ 8(udp header) + 8(Capwap header) )。經過加頭處理之後的UDP資料包需

要重新計算UDP頭長度和UDP較驗和。
由於普通的802.3的MTU的值為:1500.

經過加頭處理之後的資料幀的大小如下:


看看為什麼要進行資料包的分片處理:
有上面的可以知道一個乙太網資料幀的MTU的最大值為:1500,一般MTU設定值為1500,就是基於MAC最大封包的考慮。一般的IP包的大小肯定超過1500byte,為了能在MAC幀中傳輸,必須將IP包進行分片,分成適合傳輸的MAC幀。即最大的IP資料包負荷(不包括IP頭)為:1480.

ICMP資料包的格式如下:


使用ICMP包進行測試,因為IP頭佔用20byte,ICMP頭佔用8byte,所以ICMP包大小最大為1472byte

當我們在電腦上面ping xx.xx.xx.xx -t -l 1544的時候,會看到對書包進行拆包處理,應為此時是資料為:1500>1480,拆包之後的倆個數據包為:
第一包:

第二包:

有上面的可以知道,當應用層任何一個數據包大於最大的MTU(1500)時,經過協議棧處理之後都會進行拆包處理,上面的第一包是一個IP資料包,因為只有IP頭的存在,一個IP頭的長度為:20.故一個IP資料包對最多可以承載資料為:1500-20=1480.這個值可以從上面的第一包得出。

現在來說說capwap為什麼要進行分片處理,乙太網幀的最大值為:1514.前面可以知道這點,如果以此值1514將資料從驅動linux下面的 athr_gmac_net_ops.ndo_start_xmit= athr_gmac_hard_start, 傳送的時候,能夠正常被處理。

由於新增capwap的資料頭之後資料包會增大50個位元組,因此此時當資料包原始的資料包大於1464(1514-50)時,新增capwap頭(50位元組)之後,會大於1514,故資料不會被正確傳送。故在乙太網層,capwap是否需要進行分片的原始資料報的大小的分界線為:1464.