【文章內(nèi)容簡介】
。 RT73無線網(wǎng)卡實現(xiàn)了 物理層和 MAC 層,通過 USB 總線提交數(shù)據(jù)是已經(jīng)處理好的數(shù)據(jù)幀,數(shù)據(jù)幀的幀頭包括 RT73 無線網(wǎng)卡的控制信息和 協(xié)議幀頭, 所以 幀的格式是了解的重點。 a) 網(wǎng)絡(luò)類型 無線網(wǎng)絡(luò)分為了兩種類型 :一類是獨立型網(wǎng)絡(luò) (independent BSS,簡稱IBSS)。在 IBSS 中,工作站之間可以直接通信,一般是為了特定的目的而組成的臨時性的網(wǎng)絡(luò);一類是基礎(chǔ)結(jié)構(gòu)型網(wǎng)絡(luò),這是 一種最常用的組網(wǎng)方式,在基礎(chǔ)結(jié)構(gòu)型網(wǎng)絡(luò)里,工作站必須先與接入點建立關(guān)聯(lián),才能取得網(wǎng)絡(luò)服務(wù),也就是說,各工作之間是由接入點數(shù)據(jù)轉(zhuǎn)發(fā)而建立通信的 ,無線接入點是基礎(chǔ)結(jié)構(gòu)型網(wǎng)絡(luò)的核心。方案采用了第二種組網(wǎng)方式,這種方式組網(wǎng)方便,程序編寫較容易。 b) 媒介訪問控制層 標(biāo)準(zhǔn)以無線媒介在工作站之間傳遞幀,為了使多個工作站能在同一信 道上同時進(jìn)行無線通信,盡量減少數(shù)據(jù)的傳輸碰撞和重試發(fā)送,防止各站點無序地爭用信道,無線局域網(wǎng)中采用了與以太網(wǎng) CSMA/CD 相類似的 CSMA/CA(載波監(jiān)聽多路訪問 /沖突避免 )協(xié)議。 標(biāo)準(zhǔn)具備兩種載波監(jiān)聽功能:物理載波 監(jiān)聽 和虛擬載波監(jiān)聽 。考慮到成本問題, 芯片組廠家一般采用的是虛擬載波監(jiān)聽技術(shù),虛擬載波 監(jiān)聽使用網(wǎng)絡(luò)分配 本 科 畢 業(yè) 設(shè) 計 第 12 頁 共 47 頁 矢量 (Network Allocation Vector,簡稱 NAV )實現(xiàn)。 NAV 的實質(zhì)是一個定時器,它 作為一個字段 包含在 幀頭中, 用來預(yù)定 媒介使用的時間。 c) 層幀結(jié)構(gòu) D u r a t i o n / I D A d d r e s s 1 A d d r e s s 2 A d d r e s s 3S e q u e n c e C o n t r o lA d d r e s s 4F r a m eB o d yF C SF r a m e C o n t r o lT y p e = d a t a S u b t y p eT o D sM o r e F r a g R e t r y P w r M g m t M o r e D a t aP r o t e c t e d F r a m eP r o t o c o lF r o m D so r d e r 圖 以下詳述各字段的含義: 1) Frame Control 字段 此字段為幀控制字段, 2個字節(jié),這個字段包含了一些幀收發(fā)時候的控制信息。 2) Duration/ID 字段 持續(xù)時間 /標(biāo)志, 2個字節(jié)。在大多數(shù)情況下,該字段被用來設(shè)定 NAV。 3) Address 字段 地址字段包含不同類型的 MAC 地址,地址的類型取決于發(fā)送幀的類型。這些地址有如下不同的類型: a) 基本服務(wù)集標(biāo)識 (BSSID) b) 來源地址( SA:發(fā) 送數(shù)據(jù)包的 MAC 實體的地址) c) 目的地址( DA:數(shù)據(jù)報的最終地址) d) 接收地址( RA:接收幀的 AP 地址) e) 發(fā)送地址( TA:發(fā)送幀的 AP 地址) 在 Frame Control 中的 ToDs 和 FromDs 的 位域標(biāo)識了地址字段的具體含義,如表 : 表 ToDs, FromDs功能表 功能 ToDs FromDs Address1 Address2 Address3 Address4 IBSS 0 0 DA SA BSSID N/A ToAP 1 0 BSSID SA DA N/A FromAP 0 1 DA BSSID SA N/A WDS 1 1 RA TA DA SA 注: 幀字段一般包括三個地址段, WDS 只是在有 WDS 擴展功能的 AP 上使用, DA, 本 科 畢 業(yè) 設(shè) 計 第 13 頁 共 47 頁 代表目的地址; SA,代表源地址。 4) Sequence Control 字段 順序控制字段, 2 字節(jié),由 4位的片段編號 (Fragment Number)和 12 位的順序編號(Sequence Number)組成,原來重組幀片段以及丟棄重復(fù)幀。 5) Frame Body 字段 此部分為幀主體,該字段內(nèi)容封裝的是上層的數(shù)據(jù)單元,長度從 02312 個字節(jié),從此可以看 出, 最大幀長度為 2346 個字節(jié)。 一些加密信息也包含在了幀主體中。 d) 幀的分類 幀主要有三種類型,分別為數(shù)據(jù)幀,控制幀和管理幀。下面詳述各種幀的結(jié)構(gòu)和用途。 1) 數(shù)據(jù)幀 數(shù)據(jù)幀負(fù)責(zé)最主要的數(shù)據(jù)傳送工作,負(fù)責(zé)將上層協(xié)議放置在幀主體中加以傳遞 。 2) 控制幀 控制幀主要用于協(xié)助數(shù)據(jù)幀的傳遞,所有控制幀都使用相同的 Frame Control 字段 。 3) 管理幀 管理幀負(fù)責(zé)在工作站和 AP 之間建立初始的通信,提供認(rèn)證和連接服務(wù),包括了連接請求 /響應(yīng)、輪詢請求 /響應(yīng)、 Beacon 幀等。 幾種重要的管理幀: a) Beacon(信標(biāo))幀 : Beacon 幀主要來聲明網(wǎng)絡(luò)的存在。定期傳送的信標(biāo)可讓移動式工作站得知該網(wǎng)絡(luò)的存在, 從而調(diào)整加入該網(wǎng)絡(luò)所必需的參數(shù) 。 基礎(chǔ)結(jié)構(gòu)網(wǎng)絡(luò)中,接入點負(fù)責(zé)傳送 Beacon 幀 。 IBSS 網(wǎng)絡(luò)中,工作站輪流送出 Beacon 幀 。 b) Probe Request 幀 : 工作站通過 Probe Request 幀來掃描所在區(qū)域內(nèi)的 網(wǎng)絡(luò)。 c) Probe Response 幀 : 若 Probe Request 幀探查的網(wǎng)絡(luò)與之兼容,該網(wǎng)絡(luò)就會回復(fù) Probe Response 幀給予響應(yīng) 。 d) Disassociation 幀與 Deauthentication 幀 :Disassociation (取消關(guān)聯(lián))幀用來終結(jié)一段關(guān)聯(lián)關(guān)系,而 Deauthentication(解除身份驗證)幀則用來終結(jié)一段認(rèn)證關(guān)系 。 本 科 畢 業(yè) 設(shè) 計 第 14 頁 共 47 頁 e) Association Request 幀 : 一旦工作站找到兼容網(wǎng)絡(luò)并且通過身份驗證,便會發(fā)送 Association Request(關(guān)聯(lián)請求) 幀以試圖加入網(wǎng)絡(luò)。 f) Reassociation Request 幀 :位于相同 ESS 中,當(dāng)在不同的 BSS 之間移動的工作站若要再次使用分布式系統(tǒng)( DS),必 需與網(wǎng)絡(luò)重新關(guān)聯(lián),區(qū)別于關(guān)聯(lián)請求幀 的是:它包含工作站當(dāng)前所關(guān)聯(lián)的接入點 地址 。 g) Association Response 幀與 Reassociation Response 幀 :當(dāng)工作站試圖連接接入點時,接入點會回復(fù)一個 Association Response 幀或 Reassociation Response 幀,響應(yīng)過程中,接入點會指定一個 Association ID(關(guān)聯(lián)標(biāo)識符)。 h) Authentication 幀 : 工作站通過共享密鑰以及 Authentication 幀進(jìn)行身份驗證 。 d) 規(guī)范定義了一系列的管理操作用來實現(xiàn)對無線網(wǎng)絡(luò)的管理,基本上管理操作就是無線網(wǎng)絡(luò)設(shè)備在幕后進(jìn)行的所有操作,由此,無線網(wǎng)絡(luò)在連接感覺上就和其他類型的網(wǎng)絡(luò)沒什么兩樣。 以下列出了最基本的管理操作: 1) 掃描 使用 網(wǎng)絡(luò)之前,必須找出網(wǎng)絡(luò)的存在,在無線領(lǐng)域中,工作站要加入任何兼容 網(wǎng)絡(luò)之前必須先經(jīng)過一番識別工作,在所在區(qū)域內(nèi)識別現(xiàn)有網(wǎng)絡(luò)的過程稱為掃描 。 掃描過程中會用到的幾個參數(shù) : a) BSSType:指定網(wǎng)絡(luò)屬于 IBSS、基礎(chǔ)結(jié)構(gòu)或是同時搜索兩者 b) BSSID:工作站可以掃描所要加入的特定網(wǎng)絡(luò),也可 掃描允許它加入的所有網(wǎng)絡(luò) c) SSID:原來指定某個 ESS 的位字符串,這些字符串通常被設(shè)定為人們易于識別的網(wǎng)絡(luò)名稱 。 d) ScanType:主動掃描會主動傳送 Probe Request 幀以識別該區(qū)域的網(wǎng)絡(luò) e) 被動掃描則是被動聆聽 Beacon 幀以節(jié)省電力 f) ChannelList:進(jìn)行掃描時,工作站通過指定所要嘗試的信道列表來對某個信道進(jìn)行探測或聆聽 g) ProbeDelay:主動探測某個信道時,為了避免一直等不到 Probe Response 幀而設(shè)定的延時定時器,以微妙為單位 本 科 畢 業(yè) 設(shè) 計 第 15 頁 共 47 頁 h) MinChannelTime 與 MaxChannelTime:指在掃描每個特定信道時所使用的最小與最大的時間量 2) 身份驗證 規(guī)范要求工作站在傳送幀之前必須確認(rèn)身份,以取得網(wǎng)絡(luò)資源的使用權(quán), 當(dāng)通過了“低級”的身份驗證后,才能進(jìn)行高級的 身份驗證 。這里所謂的“低級 ”是指比較初步的身份驗證, 規(guī)范定義了如下幾種 “低級” 身份驗證方法: a) 開放系統(tǒng)身份驗證 ,這種驗證方案是 要求必備的 唯一方法,開放系統(tǒng)身份驗證, 僅僅是一種一問一答的握手過程, 所以只是一種網(wǎng)絡(luò)身份的初步表明。這種認(rèn)證方法包含了兩個管理幀,首先由移動工作站發(fā)送 authentication(身份驗證 )的管理幀,它的作用是發(fā)出身份驗證請求。無線接入點收到此管理幀后,發(fā)出同類型的管理幀, 回應(yīng)身份驗證的請求。 b) 舊式的共享密鑰身份驗證,此種認(rèn)證方法,必須使用 WEP 的加密方式,因此只能用于實現(xiàn)了 WEP 的產(chǎn)品上,共享密鑰身份驗證要求在身份驗證之前,必須傳遞共享密鑰給工作站 。 3) 關(guān)聯(lián)操作 一旦完成身份驗證,工作站就可以跟接入點進(jìn)行關(guān)聯(lián),以便獲得網(wǎng)絡(luò)的完全訪問權(quán) 。關(guān)聯(lián)只限于 infrastructure(基礎(chǔ)結(jié)構(gòu)型 )網(wǎng)絡(luò),在邏輯上等同于在有線網(wǎng)絡(luò)中插入網(wǎng)線,一旦完成此過程,無線工作站就可以通過分布式系 統(tǒng)與整個世界連接。 和身份驗證一樣,關(guān)聯(lián)操作是由移動式工作站發(fā)起的。 關(guān)聯(lián)過程涉及三個步驟: 首先移動工作站發(fā)送 Association Request(關(guān)聯(lián)請求 )幀。 然后接入點隨后會對關(guān)聯(lián)請求進(jìn)行處理,最后 接入點開始為移動工作站處理幀數(shù)據(jù)。 RT73 無線網(wǎng)卡 linux 驅(qū)動分析 由于沒有 RT73 無線網(wǎng)卡的詳細(xì)資料手冊, 所以需要分析 RT73 的 linux 驅(qū)動程序來明確 RT2571 基帶處理芯片的初始化過程,和詳細(xì)的工作流程。代碼 分析 的重點 在于網(wǎng)卡的初始化過程和 TCP/IP 數(shù)據(jù)包 的 封裝和 通過 USB 的發(fā)送 過程 。 a) 網(wǎng)卡初始化代碼分析 Linux 驅(qū)動以內(nèi)核模塊的方式裝載到內(nèi)核中, RT73 網(wǎng)卡驅(qū)動也不例外 。模塊一般 由module_init 作為入口, module_exit 作為出口。 Module_init 將 RT73 網(wǎng)卡驅(qū)動注冊到內(nèi)核中 , 以下的結(jié)構(gòu)體 會被注冊到 內(nèi)核中。 功 本 科 畢 業(yè) 設(shè) 計 第 16 頁 共 47 頁 能函數(shù)也會被內(nèi)核識別。 struct usb_driver rtusb_driver = { .name=rt73, // 網(wǎng)卡驅(qū)動標(biāo)識 .probe=usb_rtusb_probe, // RT73 連接時調(diào)用的函數(shù) .disconnect=usb_rtusb_disconnect, // RT73 斷開時調(diào)用的函數(shù) .id_table=rtusb_usb_id, // USB 驅(qū)動支持的設(shè)備列表 ifdef CONFIG_PM .suspend = rt73_suspend, // 電源管理相關(guān)函數(shù) .resume = rt73_resume, endif }。 當(dāng) RT73 模塊連接后,內(nèi)核會調(diào)用響應(yīng)的 usb_rtusb_probe 函數(shù)來完成網(wǎng)卡的探測和初始化。 Usb_rtusb_probe 函數(shù)會對網(wǎng)卡進(jìn)行初始化,并將一些網(wǎng)絡(luò)操 作函數(shù)注冊到內(nèi)核,所以 probe 函數(shù)是理解網(wǎng)卡工作流程的關(guān)鍵,以下是 probe 函數(shù)的流程圖 : P r o b e ( ) 函 數(shù) 入 口判 斷 V I D 和 P I D , 驅(qū) 動 是 否 支 持申 請 P R T M P _ A D A P T E R 結(jié) 構(gòu) 體 , 并 初 始化網(wǎng) 絡(luò) 操 作 函 數(shù) 注 冊 到 內(nèi) 核 :u s b _ r t u s b _ o p e n 。 / / 設(shè) 備 打 開u s b _ r t u s b _ c l o s e 。 / / 設(shè) 備 關(guān) 閉u s b _ r t u s b _ s e n d p k t 。 / / 網(wǎng) 絡(luò) 包 發(fā) 送r t 7 3 _ g e t _ e t h e r _ s t a t s 。 / / 網(wǎng) 卡 狀 態(tài)r t 7 3 _ i o c t l 。 / / 網(wǎng) 卡 設(shè) 備 操 作R T 7 3 U S B 端 點 檢 測注 冊 網(wǎng) 絡(luò) 設(shè) 備 p A d n e t _ d e v初 始 化 R T 7 3 無 線 網(wǎng) 卡調(diào) 用 u s b _ r t u s b _ i n i t _ d e v i c e 函 數(shù)結(jié) 束 圖 probe函數(shù)流程圖 VID 和 PID 是 USB 設(shè)備的廠商 ID 和產(chǎn)品 ID, USB 設(shè)備進(jìn)行枚舉后得到設(shè)備描述符包含有 VID 和 PID,