<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                本節將向讀者介紹802.11中MAC服務以及MAC幀方面的內容。首先來看MAC服務。 **1.MAC服務定義[14]** 根據3.3.1節所示,MAC層定義了一些Service用于為上層LLC提供服務。其中,802.11中定義的MAC提供三種服務,分別如下。 * MA-UNITDATA.request:供LLC層發送數據。 * MA-UNITDATA.indication:通知LLC層進行數據接收。 * MA-UNITDATA-STATUS.indication:通知LLC層自己(即MAC層)的狀態。 規范中這三種服務的定義和編程語言中的函數非常像。根據前文所述,服務在規范中被稱為原語(primitive),每個服務有特定的參數(parameter)。另外,規范對每條原語都做了非常詳細的解釋,例如原語使用場景(從編程角度看就是介紹什么時候用這些API),MAC層如何處理這些原語(從編程角度看即描述應該如何實現這些API)。 (1)MA-UNITDATA.request服務 request用于發送數據,其定義如下所示。 ~~~ MA-UNITDATA.request( source address // 指定本次數據發送端的MAC地址 destination address // 指定接收端的MAC地址。可以是組播或廣播地址 routing information // 路由信息。對于802.11來說,該值為null(表示該值沒有作用) data // MSDU,即上層需要發送的數據。對802.11來說,其大小不能超過2304字節 priority // priority和service class的解釋見下文 service class ) ~~~ request原語中,除priority和service class參數外,其他都很容易理解。而priority和serviceclass參數與QoS有關系。 * priority的取值為0~15的整數。對于非QoS相關的操作,其取值為Contention和ContentionFree。802.11中,QoS設置了不同的用戶優先級(User Priority,UP)。顯然,UP高的數據將優先得到發送。Priority參數和QoS中的其他參數一起決定發送數據的優先級。 * service class的取值也針對是否為QoS而有所不同。對于非QoS,取值可為ReorderableGroupAddressed或StrictlyOdered。這兩個都和數據發送時是否重排(reorder)發送次序有關。非QoS情況下,STA發送數據時并不會主動去調整發送次序。而QoS情況下,很明顯那些UP較高的數據見得到優先處理。但對于組播數據,發送者可以設置service class為ReorderableGroupAddressed進行次序調整。 對request原語來說,當LLC需要發送數據時,就會調用request。MAC層需要檢查參數是否正確。如果不正確,將通過其他原語通知LLC層,否則將啟動數據發送流程。 (2)MA-UNITDATA.indication服務 下面來看MAC層收到數據后用于通知LLC層的原語indication,其定義如下。 ~~~ MA-UNITDATA.indication( source address // 代表數據源MAC地址。其值取值MAC幀中的SA(關于MAC幀格式詳情見后文) destination address // 代表目標MAC地址,取自MAC幀中的DA,可以是組播地址 routing information // 值為null data // MAC幀數據 reception status // 表示接收狀態,例如成功或失敗。對802.11來說,該狀態永遠返回success // MAC層會丟棄那些錯誤的數據包 priority // 和request的取值略有不同,此處略過 service class ) ~~~ 802.11中,indication只有在MAC層收到格式完整、安全校驗無誤及沒有其他錯誤的數據包時才會被調用以通知LLC層。 (3)MA-UNITDATA-STATUS.indication服務 STATUS.indication用于向LLC層返回對應request原語的處理情況。其原型如下。 ~~~ MA-UNITDATA-STATUS.indication( // source和destination address和對應request的前兩個參數一樣 source address destination address transmission status // 返回request的處理情況,詳情見下文 provided priority // 只有status返回成功,該參數才有意義。其值和調用request發送數據時的值一致 provided service class // 只有status返回成功,該參數才有意義 ) ~~~ indication最關鍵的一個參數是transmission status,可以是以下值。 * Successful:代表對應request發送數據成功。 * Undeliverable:數據無法發送。其原因有數據超長(excessive data length)、在request時指定了routing information(non-null source routing)、不支持的priority和service class、沒有BSS(no BSS available)、沒有key進行加密(cannot encrypt with anull key)等。 * * * * * **提示** 本節對應于規范的第5節"MAC service definition"。和前面內容相比,本節內容更貼近于代碼實現,當然也就更符合程序員的“審美觀”。 * * * * * 接下來介紹和MAC幀相關的內容。 **2.MAC幀[15][16][17]** 802.11 MAC幀格式如圖3-13所示。 :-: ![](https://box.kancloud.cn/79405348c18f29583dd87b930b3ec1ae_1041x172.jpg) 圖3-13 802.11 MAC幀格式 由圖3-13可知,MAC幀由以下三個基本域組成。 * MAC Header:包括幀控制(Frame Control)、時長(Duration)、地址(Address)等。注意,每個方框上面的數字表示該域占據的字節數。例如Frame Control需要2字節。 * Frame Body:代表數據域。這部分內容的長度可變,其具體存儲的內容由幀類型(type)和子類型(sub type)決定。 * FCS:(Frame Check Sequence,幀校驗序列)用于保障幀數據完整性。 * * * * * **規范閱讀提示** 1)關于MAC幀的格式。規范中還指出,如果是QoS數據幀,還需要附加QoS Control字段。如果是HT(High Throughput,一種用于提高無線網絡傳輸速率的技術)數據幀,還需要附加HT Control字段。 2)關于Frame body長度。規范中指出其長度是7951字節,它和Aggregate-MPDU(MAC報文聚合功能)以及HT有關。本文不擬討論相關內容。故此處采用2312字節 * * * * * 下面分別介紹MAC幀頭中幾個重要的域,首先是Frame Control域。 (1)Frame Control域 Frame Control域共2字節16位,其具體字段劃分如圖3-14所示。 :-: ![](https://box.kancloud.cn/c697a534b4d7aab739dedfbd57b3b187_1139x195.jpg) 圖3-14 Frame Control域的組成 * Protocol Version:代表802.11 MAC幀的版本號。目前的值是0。 * Type和Subtype:這兩個字段用于指明MAC幀的類型。802.11中MAC幀可劃分為三種類型,分別是control、data和management,每種類型的幀用于完成不同功能。詳情見下文。 * To DS和From DS:只用在數據類型的幀中。其意義見下文。 * More Fragments:表明數據是否分片。只支持data和management幀類型。 * Retry:如果該值為1,表明是重傳包。 * Power Management:表明發送該幀的STA處于活躍模式還是處于省電模式。 * More Data:和省電模式有關。AP會為那些處于省電模式下的STA緩沖一些數據幀,而STA會定時查詢是否有數據要接收。該參數表示AP中還有緩沖的數據幀。如果該值為0,表明STA已經接收完數據幀了(下節將介紹省電模式相關的內容)。 * Protected Frame:表明數據是否加密。 * Order:指明接收端必須按順序處理該幀。 Type和Subtype的含義如表3-2所示。其中僅列出了部分Type和Subtype的取值。 :-: ![](https://box.kancloud.cn/2882a3f242c3b7e82c2b72e9ce226c9b_1263x557.jpg) 表3-2 MAC幀Type和Subtype ㈠ 本書將在第7章詳細介紹Action幀。 From DS和To DS的取值如表3-3所示。 :-: ![](https://box.kancloud.cn/57785d7bb5a8c9e6dc29a1df5720b712_1269x252.jpg) :-: ![](https://box.kancloud.cn/e2b558547be082987b39b128e11edf29_1258x262.jpg) 表3-3 From To DS含義 * * * * * **擴展閱讀** 省電模式[18] 無線網絡的使用者常見于筆記本電腦、智能手機等設備,它們最大的一個特點就是能夠移動(無線技術的一個重要目的就是擺脫各種連接線的纏繞)。無線帶來便捷的同時也引入了另外一個突出問題,即電量消耗。在當前電池技術還沒有明顯進步的現實情況下,802.11規范對電源管理也下了一番苦功。 規范為STA定義了兩種和電源相關的狀態,分別是Active模式和PS(Power Save)模式。處于PS模式下,無線設備將關閉收發器(transceiver)以節省電力。 STA為了節電而關閉數據收發無可厚非,怎么保證數據傳輸的連貫性呢?下面討論基礎結構型網絡中省電模式的知識。在這種網絡中,規范規定AP為了保證數據傳輸的連貫性,其有兩個重要工作。 1. AP需要了解和它關聯的STA的電源管理狀態。當某個STA進入PS狀態后,AP就要做好準備以緩存發給該STA的數據幀。一旦STA醒來并進入Active模式,AP就需要將這些緩存的數據發送給該STA。注意,AP無須PS模式,因為絕大多數情況下,AP是由外部電源供電(如無線路由器)。在AP中,每個和其關聯的STA都會被分配一個AID(Association ID)。 2. AP需要定時發送自己的數據緩存狀態。因為STA也會定期接收信息(相比發送數據而言,開啟接收器所消耗的電力要小)。一旦STA從AP定時發送的數據緩存狀態中了解到它還有未收的數據,STA則會進入Active模式并通過PS-POLL控制幀來接收它們。 * * * * * 現在來看MAC幀中Power Management的取值情況。 * 對于AP不緩存的管理幀,PM字段無用。 * 對于AP發送的幀,PM字段無用。 * STA發送給還未與之關聯的AP的幀中,PM字段無用。 * 其他情況下,PM為1表示STA將進入PS狀態,否則將進入Active狀態。 配合PM使用的字段就是More Data。根據前文介紹,STA通過PS-POLL來獲取AP端為其緩存的數據幀。一次PS-POLL只能獲取一個緩存幀。STA怎么知道緩存數據都獲取完了呢?原來More Data值為1表示還有緩存幀,否則為0。雖然MAC幀中沒有字段說明AP緩存了多少幀,但通過簡單的0/1來標示是否還有剩余緩存幀也不失為一種好方法。 * * * * * **提示** 規范中的PS處理比較復雜,建議閱讀參考資料[18]。 * * * * * (2)Duration/ID域 Duration/ID域占2字節共16位,其具體含義根據Type和Subtype的不同而變化,不過大體就兩種,分別代表ID和Duration。 * 對于PS-POLL幀,該域表示AID的值。其中最后2位必須為1,而前14位取值為1~2007。這就是該域取名ID之意。 * 對于其他幀,代表離下一幀到來還有多長時間,單位是微秒。這就是該域取名Duration之意。 * * * * * **注意** Duration的用法和CSMA/CA的具體實現有關。本章不對它進行詳細討論,可閱讀參考資料[8]。 * * * * * (3)Address域 講解Address域的用法之前,先介紹MAC地址相關的知識。根據IEEE 802.3[19]協議,MAC地址有如下特點。 * MAC地址可用6字節的十六進制來表示,如筆者網卡的MAC地址為1C-6F-65-8C-47-D1。 * MAC地址的組成包括兩個部分。0~23位是廠商向IETF等機構申請用來標識廠商的代碼,也稱為“組織唯一標識符”(Organizationally Unique Identifier,OUI)。后24位是各個廠商制造的所有網卡的一個唯一編號。 * 第48位用于表示這個地址是組播地址還是單播地址。如果這一位是0,表示此MAC地址是單播地址;如果這位是1,表示此MAC地址是組播地址。例如01-XX-XX-XX-XX-XX為組播地址。另外,如果地址全為1,例如FF-FF-FF-FF-FF-FF,則為MAC廣播地址。 * 第47位表示該MAC地址是全球唯一的還是本地唯一。故該位也稱為G/L位。 圖3-15所示為MAC地址示意圖[19][20]。 :-: ![](https://box.kancloud.cn/e39143e8abae175bb4289a04b1537340_973x663.jpg) 圖3-15 MAC地址格式 注意圖3-15中的字節序和比特序。 * 字節序為Big-endian,即最高字節在前。所以圖中的first byte實際對應的MAC地址最左邊一組。以Note 2 MAC地址90-18-7C-69-88-E2為例,first byte就是“90”(如果是Little-endian,則first byte是"E2"),其OUI是SamsungE,代表三星電子。 * 比特序為Little-endian,即最低位在前。這就是01-XX-XX-XX-XX-XX為組播地址的原因了。因為“01”對應的二進制是“0000-0001”,其第0位是1,應該放在圖中first byte最左邊一格。 * * * * * **提示**  上面的數值按從左至右為最高位到最低位。一般情況下,字節序和比特序是一致的。但是以太網數據傳輸時,字節序采用Big-endian,比特序為Little-endian。參考資料[19]中原文是這樣描述的。 The first bit(LSB)shall be used in the Destination Address field as an address type designation bit to identify the DA either as an individual or as agroup address.If this bit is 0,it shall be…individual address","Each octet of each address filed shall be transmitted least significant bit first。 * * * * * 802.11 MAC幀頭部分共包含四個Address域,但規范中卻有五種地址定義,分別如下[15]。 - BSSID:在基礎型BSS中,它為AP①的地址。而在IBSS中則是一個本地唯一MAC地址。該地址由一個46位的隨機數生成,并且U/M位為0,G/L位為1。另外對MAC廣播地址來說,其名稱為wildcard BSSID。 - 目標地址(Destination Address,DA):用來描述MAC數據包最終接收者(final recipient),可以是單播或組播地址。 - 源地址(Source Address,SA):用來描述最初發出MAC數據包的STA地址。一般情況下都是單播地址。 - 發送STA地址(Transmitter Address,TA):用于描述將MAC數據包發送到WM中的STA地址。 - 接收STA地址(Receiver Address,RA):用于描述接收MAC幀數據的。如果某個MAC幀數據接收者也是STA,那么RA和DA一樣。但如果接收者不是無線工作站,而是比如以太網中的某臺PC,那么DA就是該機器的MAC地址,而RA則是AP的MAC地址。這就表明該幀將先發給AP,然后由AP轉發給PC。 上述無線地址中,一般只使用Address 1~Address 3三個字段,故圖3-13中它們的位置排在一起。表3-4展示了Address域的用法。 :-: ![](https://box.kancloud.cn/5155c5cf29a9009f5ef3743ac90baae6_1260x221.jpg) 表3-4展示了Address域的用法。 由表3-4可知,Address 1用作接收端,Address 2用作發送端。Address 3攜帶其他信息用于幫助MAC幀的傳輸,針對不同類型,各個Address域的用法如下。 - IBSS網絡中,由于不存在DS,所以Address 1指明接收者,Address 2代表發送者。Address3被設置為BSSID,其作用是:如果Address 1被設置為組播地址,那么只有位于同一個BSSID的STA才有必要接收數據。 - 基礎結構型網絡中,如果STA發送數據,Address 1必須是BSSID,代表AP。因為這種網絡中,所有數據都必須通過AP。Address 3代表最終的接收者,一般是DS上的某個目標地址。 - 基礎結構型網絡中,如果數據從AP來,那么Address 1指明STA的地址,Address 2代表AP的地址,Address 3則代表DS上的某個源端地址。 - Address 4只在無線網絡橋接的時候才使用。本書不討論這種情況。 圖3-16描述了基礎型結構網絡和無線橋接情況下不同地址的使用場景。 :-: ![](https://box.kancloud.cn/83c029a4723b80d6036a47023f3a6f98_763x565.jpg) 圖3-16 地址的使用 如圖3-16所示: - 數據包發往DS的情況下,SA和TA一致,而RA和BSSID一致。 - 數據包來自DS的情況下,RA和DA一致,而TA和BSSID一致。 - 無線橋接的情況下,SA、TA、RA和DA四種地址都派上了用場。 * * * * * 提示  關于Address域的作用請讀者務必清楚下面三個關鍵點。 1)MAC幀頭中包含四個Address域,在不同的情況下,每個域中包含不同的地址。原則是Address 1代表接收地址,Address 2代表發送端地址,Address 3輔助用,Address 4用于無線橋接或Mesh BSS網絡中。 2)規范定義了五種類型的地址,即BSSID、RA、SA、DA和TA。每種地址有不同的含義。 3)在某些情況下,有些類型地址的值相同,如圖3-16所示。 * * * * * (4)Sequence Control域 Sequence Control域長16位,前4位代表片段編號(Fragment Number),后12位為幀順序編號(Sequence Number),域格式如圖3-17所示。 :-: ![](https://box.kancloud.cn/cc2aafc2a4a16c0e2bedff0715a89e1b_864x234.jpg) 圖3-17 Sequence Control域格式 - Sequence Number:STA每次發送數據幀時都會設置一個幀順序編號。注意,控制幀沒有幀順序編號。另外,重傳幀不使用新的幀順序編號。 - Fragment Number:用于控制分片幀。如果數據量太大,則MAC層會將其分片發送。每個分片幀都有對應的分片編號。 (5)MAC幀相關知識總結 本節對MAC幀格式進行介紹。這部分內容難度并不大,但讀起來肯定有些枯燥。筆者在閱讀參考資料[15]時也有同樣的感覺。后來筆者利用公司的AirPcap無線網絡分析設備截獲無線網絡數據并使用wireshark軟件進行分析后,感覺MAC幀信息直觀多了,如圖3-18所示。 :-: ![](https://box.kancloud.cn/7f00b18fa4273e8fdf511a974efd2bad_924x686.jpg) 圖3-18 AirPcap使用 AirPcap設備比較貴,但該工具對于將來Wi-Fi知識的學習、工作中的難題解決相當有幫 助。 * * * * * **注意** 本書的資源共享文件中提供幾個Wi-Fi數據包捕獲文件,讀者可直接利用它們進行分析。詳情見1.3節。 * * * * * 接下來介紹常見的幾種具體的MAC幀。首先從控制幀開始。 **3.控制幀[15][17]** 控制幀的作用包括協助數據幀的傳遞、管理無線媒介的訪問等。規范中定義的控制幀有好幾種,本節將介紹其中的四種,它們的幀格式如圖3-19所示。由圖可知,控制幀不包含數據,故其長度都不大。 :-: ![](https://box.kancloud.cn/3dd1270b6c4f94e021228b984540a3fd_844x595.jpg) 圖3-19 控制幀格式 - RTS(Request To Send):根據3.3.3節關于CSMA/CA的介紹,RTS用于申請無線媒介的使用時間。值為Duration,單位為微秒。Duration的計算大致是:要發送的數據幀或管理幀所需時間+CTS幀所需時間+ACK幀所需時間+3 SIFS②時間。 - CTS(Clear To Send):也和CSMA/CA有關,用于回復RTS幀。另外它被802.11g保護機制用來避免干擾舊的STA。 - ACK:802.11中,MAC以及任何數據的傳輸都需要得到肯定確認。這些數據包括普通的數據傳輸、RTS/CTS交換之前幀以及分片幀。 - PS-POLL:該控制幀被STA用于從AP中獲取因省電模式而緩存的數據。其中AID的值是STA和AP關聯時,由AP賦給該STA的。 * * * * * **規范閱讀提示** 1)控制幀還包括CF-End、CF-End+CF-Ack等,這部分內容請讀者閱讀規范8.3.1節。 2)上述幀中Duration字段的計算也是一個比較重要的知識點,讀者同樣可閱讀規范8.3.1節以了解其細節。 * * * * * **4.管理幀[15][17]** 管理幀是802.11中非常重要的一部分。相比有線網絡而言,無線網絡管理的難度要大很多。MAC管理幀內容較為豐富,本節將介紹其中重要的幾種管理幀,分別是Beacon(信標)幀、Association Request/Response(關聯請求/回復)幀、Probe Request/Response(探測請求/回復)幀、Authentication/Deauthentication(認證/取消認證)幀。 介紹具體管理幀之前,先來看看管理幀的格式,如圖3-20所示。 :-: ![](https://box.kancloud.cn/b64599787cac231ea652c74742517543_1315x212.jpg) 圖3-20 管理幀格式 所有管理幀都包括MAC Header的6個域。不過,無線網絡要管理的內容如此之多,這6個域肯定不能承擔如此重任,所以管理幀中的Frame Body將攜帶具體的管理信息數據。 802.11的管理信息數據大體可分為兩種類型。 - 定長字段:指長度固定的信息,規范稱為Fixed Field。 - 信息元素:指長度不固定的信息。顯然這類信息中一定會有一個參數用于指示最終的數據長度。 從程序員的角度來看,不同的管理信息數據就好像不同的數據類型或數據結構一樣。下面我們來看看802.11為管理幀定義了哪些數據類型和數據結構。 (1)定長字段 管理幀中固定長度的字段如下。 **1)Authentication Algorithm Numb**er:該字段占2字節,代表認證過程中所使用的認證類型。其取值如下。 - 0:代表開放系統身份認證(Open System Authentication)。 - 1:代表共享密鑰身份認證(Shared Key Authentication)。 - 2:代表快速BSS切換(Fast BSS Transition)。 - 3:代表SAE(Simultaneous Authentication of Equals)。用于兩個STA互相認證的方法,常用于Mesh BSS網絡。 - 65535:代表廠商自定義算法。 * * * * * **提示** Authentication Algorithm Number的定義是不是可以在代碼中用枚舉類型來表示呢? * * * * * **2)Beacon Interval field**:該字段占2字節。每隔一段時間AP就會發出Beacon信號用來宣布無線網絡的存在。該信號包含了BSS參數等重要信息。所以STA必須要監聽Beacon信號。Beacon Interval field字段用來表示Beacon信號之間間隔的時間,其單位為Time Units(規范中縮寫為TU。注意,一個TU為1024微秒。這里采用2作為基數進行計算)。一般該字段會設置為100個TU。 **3)Capability Information(性能信息)**:該字段長2字節,一般通過Beacon幀、Probe Request和Response幀攜帶它。該字段用于宣告此網絡具備何種功能。2字節中的每一位(共16位)都用來表示網絡是否擁有某項功能。該字段的格式如圖3-21所示。 :-: ![](https://box.kancloud.cn/da688f243853b08dc969110e655d4a06_1159x337.jpg) 圖3-21 Capability Information格式 圖3-21中幾個常用的功能位如下。 - ESS/IBSS:基礎結構型網絡中,AP將設置ESS位為1,IBSS位為0。相反,IBSS中,STA設置ESS位為0,而IBSS位為1。Mesh BSS中,這兩個位都為0。 - Privacy:如果傳輸過程中需要維護數據機密性(data confidentiality),則AP設置該位為1,否則為0。 - Spectrum Mgmt:如果某設備對應MIB中dot11SpectrumManagementRequired為真,則該位為1。根據802.11 MIB對dot11SpectrumManagementRequired的描述,它和前面介紹的TPC(傳輸功率控制)和DFS(動態頻率選擇)功能有關。 - Radio Measurement:如果某設備對應MIB中的dot11RadioMeasurementActivated值為真,則該位置為1,用于表示無線網絡支持Radio Measurement Service。 **4)Current AP Address**:該字段長6字節,表示當前和STA關聯的AP的MAC地址。其作用是便于關聯和重新關聯操作。 **5)Listen Interval**:該值長2字節,和省電模式有關。其作用是告知AP,STA進入PS模式后,每隔多長時間它會醒來接收Beacon幀。AP可以根據該值為STA設置對應的緩存大小,該值越長,對應的緩沖也相應較大。該值的單位是前文提到的另外一個定長字段Beacon Interval。 **6)Association ID(AID)**:該字段長2字節。STA和AP關聯后,AP會為其分配一個AssociationID用于后續的管理和控制(如PS-POLL幀的使用)。不過為了和幀頭中的Duration/ID匹配,其最高2位永遠為1,取值范圍1~2007。 **7)Reason Code**:該字段長2字節。用于通知Diassociaton、Deauthentication等操作(包括DELTS、DELBA、DLS Teardown等)失敗的原因。Reason Code的詳細取值情況可參考規范的8.4.1.7節的Table 8-36。此處為讀者列出幾個常見取值及含義,如表3-5所示。 :-: ![](https://box.kancloud.cn/12b5130575e6ba164801630ac2a63ab9_1267x352.jpg) * * * * * **注意** 規范一共定義了67個不同的Reason Code值,其詳細含義請參考規范的圖8-36。 * * * * * **8)Status Code**:該字段長2字節,用于反饋某次操作的處理結果。0代表成功。該字段取值的細節請讀者參考規范8.4.1.9節的Table 8-37。 管理幀中定長字段還有其他幾個,此處就不一一列舉了。讀者可參考規范8.4.1節以獲取詳細信息。下面我們介紹管理幀定義的不定長數據結構,即信息元素(Information Elements,IE)。 (2)信息元素 信息元素(IE)包含數據長度不固定的信息,其標準結構如圖3-22所示。其中,Element ID表示不同的信息元素類型。Length表示Information字段的長度。根據Element ID的不同,Information中包含不同的信息。 :-: ![](https://box.kancloud.cn/5ebfa3c5f51fb4c1f28254fa449eb450_736x130.jpg) 圖3-22 IE標準結構 表3-6列出了幾種Element ID及Length的取值情況。完整的取值列表請參考規范中Table 8-54。 :-: ![](https://box.kancloud.cn/873d819788a867808b7dd936826e777d_1269x385.jpg) 表3-6 Element ID及Length的取值 注意,表3-6中最后一列的Subelements表示該項對應的Information采用如圖3-23所示的格式來組織其數據。 :-: ![](https://box.kancloud.cn/8151149c9129833d82175d07d08870da_1002x143.jpg) 圖3-23 Subelement格式 很顯然,圖3-23和圖3-22所示格式完全一樣,這也就是Subelement的由來。Subelement的具體內容介紹由Subelement ID來決定。 * * * * * **規范閱讀提示** 規范指出IE中的Length字段代表Information的長度。但規范給出的具體IE信息表(如Table 8-54)其Length一列卻是IE的全長(即Element ID字段長+Length字段+Info字段長度)。本節所列表3-5中的Length長僅取Info字段長度。故比Table 8-54中的Length長度少2字節。 * * * * * (3)常用管理幀 了解了定長字段以及信息元素后,下面介紹管理幀中幾種重要類型的幀。 1)Beacon幀:非常重要,AP定時發送Beacon幀用來聲明某個網絡。這樣,STA通過Beacon幀就知道該網絡還存在。此外,Beacon幀還攜帶了網絡的一些信息。簡單來說,Beacon幀就是某個網絡的心跳信息。Beacon幀能攜帶的信息非常多,不過并非所有信息都會包含在Beacon幀中。表3-7介紹了Beacon幀中必須包含的信息。 :-: ![](https://box.kancloud.cn/f238cfc486173af5f937ec52e6d75078_1268x330.jpg) * * * * * **提示** 如果讀者手頭有AirPcap工具,不妨嘗試截獲一下周圍的Beacon幀。 * * * * * 2)Probe Request/Response幀:STA除了監聽Beacon幀以了解網絡信息外,還可以發送ProbeRequest幀用于搜索周圍的無線網絡。規范要求由送出Beacon幀的STA回復Probe Response幀,這樣,在基礎結構型網絡中,Beacon幀只能由AP發送,故Probe Response也由AP發送。IBSS中,STA輪流發送Beacon幀,故Probe Response由最后一次發送Beacon幀的STA發送。 :-: ![](https://box.kancloud.cn/7f6ce34bbdca96f193787476081f1134_1253x307.jpg) 表3-8列出了Probe Request幀中必須包含的信息。 當AP收到Probe Request時,會響應以Probe Response幀。Probe Response幀包含的內容絕大部分和Beacon幀一樣,此處就不擬詳細討論了。讀者可參考規范Table 8-27獲取詳細信息。 * * * * * **提示** 圖3-18所示為筆者利用AirPcap截獲的SSID為"Test"的Probe Request幀,讀者不妨回頭看看此圖。 * * * * * 3)Association Request/Response幀:當STA需要關聯到某個AP時,將發送此幀。該幀攜帶的一些信息項如表3-9所示。 :-: ![](https://box.kancloud.cn/8f7b7cdc46d0ab5c15f0b7467fd8efee_1255x243.jpg) 表3-9 Association Request幀信息 請讀者參考規范Table 8-22獲取Association Request幀包含的全部信息項。 針對Association Request幀,AP會回復一個Association Response幀用于通知關聯請求處理結果。該幀攜帶的信息如表3-10所示。 :-: ![](https://box.kancloud.cn/e61712e15a44620157e0e9e66693fc67_1266x230.jpg) 表3-10 Association Request幀信息 請讀者參考規范Table 8-23獲取Association Response幀包含的全部信息項。 4)Authentication幀:用于身份驗證,其包含的信息如表3-11所示。 :-: ![](https://box.kancloud.cn/1c5a2b2c20b64659e56a03a47904a7eb_1267x306.jpg) 表3-11 Authentication幀信息 至此,我們對802.11 MAC管理幀的相關知識就介紹完畢。規范定義的管理幀類型并不多,一共15種。但管理幀攜帶的信息卻相當復雜,其中定長字段有42種,IE有120種。此處建議讀者先了解管理幀中信息的組織方式,然后對最重要的幾種管理幀做簡單了解。以后碰到不熟悉的情況,可直接查詢802.11規范相關小節即可獲取最完整的信息。 **5.數據幀[15][17]** 圖3-24展示了802.11中完整的數據幀格式。 :-: ![](https://box.kancloud.cn/8e59d67be14e4be06e3f4259b423c4e2_1253x246.jpg) 圖3-24 數據幀格式 其中,QoS Control和HT(High Throughput)Control字段只在QoS和HT的情況下出現。本書不討論它們的內容。其他情況下,Frame Body最大長度為2312字節。 * * * * * **提示** 圖3-24中4個Address字段的使用請參考表3-3和圖3-16。 * * * * * **6.802.11上層協議封裝[21]** 本節介紹802.11中如何對上層協議進行格式封裝。和Ethernet不同,802.11使用LLC層來封裝上層協議,如圖3-25所示。 :-: ![](https://box.kancloud.cn/3644ad27fb7ba54bb07c63ac5b133c85_1221x534.jpg) 圖3-25 802.11上層協議封裝 圖3-25中,最上層是Ethernet幀格式。前面12字節分別是目標MAC地址以及源MAC地址。Type字段可以為0x0800,代表后面的數據是IP包。 當Ethernet幀要在無線網絡上傳輸時,必須先將其轉換為LLC幀,如中間一層所示。這種轉換方法由RFC 1042規定。它主要在MAC headers和Type之間增加了4個字段。它們統稱為SNAPheader(Sub Network Access Protocol,子網訪問協議),分別如下。 - DSAP(Destination Service Access Point,目標服務接入點)。 - SSAP(Source Service Access Point,源服務接入點)。 - Control(控制字段,值被設定為0x03,代表Unnumbered Information,即未編號信息)。 - OUI(固定為0x000000)。 LLC數據最后被封裝成802.11MAC幀。主要變化是幀頭信息,因為802.11 MAC幀最多能攜帶4個MAC地址。其他信息則作為802.11 MAC幀的數據載荷。 * * * * * **注意** 802.11除了可以用RFC 1024來封裝Ethernet外,還支持802.1h的封裝方法。詳情見參考資料[21]。 * * * * * 筆者截獲的802.11 MAC幀以及以太網幀IP包如圖3-26所示。 :-: ![](https://box.kancloud.cn/faaf6d0556dce77f174e4ee5ac7ce966_866x702.jpg) 圖3-26 以太網幀和802.11 MAC幀 圖3-26上半部分為Ethernet的IP幀封裝情況,下半部分為IP包在802.11中的封裝情況。 * * * * * **注意** 圖3-26中的黑框表示Radiotap頭信息。它是網卡添加在802.11 MAC頭部前的數據,記錄了信號強度、噪聲強度和傳輸速率等物理層信息。關于Radiotap更多信息,請讀者參考http://www.radiotap.org/。 * * * * * 通過對MAC提供的服務以及MAC幀相關知識的介紹,讀者會發現這部分難度主要集中在802.11 MAC幀上,尤其是管理幀包含的信息更是非常豐富。 從程序員角度看,可以認為本節為802.11定義了大量的數據結構和數據類型。從下一節開始,我們將介紹MAC層中的“類和函數”。 * * * * * **規范閱讀提示** 1)本節內容主要取自規范的第8章"Frame Formats"。 2)由于篇幅問題,本書不介紹802.11 MAC層的功能。這部分內容主要集中在規范的第9章"MAC sublayer functional description"。 * * * * * ① 此條根據審稿專家的反饋意見修改。Infrastructure BSS中,BSSID一般為AP的MAC地址。 ② SIFS(Short InterFrame Space,短幀間隔)和CSMA/CA的具體實現有關,本文不討論。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看