liwen01 2024.09.16
前言
802.11 無線 WiFi 網有三類幀:資料幀、管理幀、控制幀。與有線網相比,無線 WiFi 網會複雜很多。大部分應用軟體開發對 WiFi 的控制幀和管理幀瞭解得並不多,因為它們在物理層和資料鏈路層就已經被處理了,上層應用很少能感知到。
一般是在裝置出現 WiFi 連線不上,或者是工作不穩定的情況下,才會去分析 WiFi 驅動工作情況以及抓 WiFi 空口包資料來分析。
有抓過 WiFi 空口包的同學應該清楚,無線 WiFi 網的網路包不管是從包型別還是包資訊內容來看,都會比有線網的包複雜很多。
這篇主要介紹有線網與無線 WiFi 網在物理層的差異、WiFi 介質訪問控制原理和它的一些關鍵技術以及無線使用者的接入過程。
WiFi 空口包抓包、分析,以及各類 WiFi 幀結構的介紹放到下一篇介紹。這篇是基礎原理知識的介紹,也是後面一篇 WiFi 幀分析的基礎。
(一) 有線與無線網物理層差異
- CSMA/CD 用於有線網路,透過檢測和處理衝突來維持網路的穩定性。
- CSMA/CA 用於無線網路,強調衝突的預防,以應對無線通道共享的挑戰。
(1) 有線網 CSMA/CD
在有線網路中,裝置間透過網線相互連線,它的工作原理是:
載波偵聽:裝置在傳送資料之前會先監聽網路,以檢測是否有其他裝置在傳輸資料。如果檢測到網路空閒,則開始傳送資料。
衝突檢測: 在資料傳送過程中,裝置持續監聽網路。如果檢測到衝突 (即兩個或多個裝置同時傳送資料導致訊號混合) ,傳送資料的裝置會停止傳輸,併傳送一個“衝突訊號”以通知網路上的其他裝置。
重傳資料: 發生衝突後,裝置會等待一段隨機的時間後再次嘗試傳送資料。這個隨機等待時間稱為“退避演算法”,可以有效減少後續衝突的可能性。
這個就是有線網 CSMA/CD (Carrier Sense Multiple Access with Collision Detection,載波偵聽多路訪問與衝突檢測) 的工作原理。
它依賴的是網線共享介質,裝置在資料傳送的過程中,還可以檢測網線狀態。
(2) 無線網 CSMA/CA
與有線網不同的是,無線網它是透過電磁波進行資料互動。無線是半雙工工作模式,無線客戶端沒有同時進行接收和傳送的能力,無法檢測到衝突。
所以有線網路中的衝突檢測方式,在無線中並不適用,並且無線中還存在相鄰站點不一定能偵聽到對方的情況:
手機位於兩個路由器中間,並且距離兩個路由器都比較遠,這個時候路由器 AP1 檢測不到路由器 AP2 的訊號,兩個路由器之間都不知道對方是否有在給手機 STA2 傳送資料。
所以無線網引入了 CSMA/CA ( Carrier Sense Multiple Access with Collision Avoidance,載波偵聽多路訪問/衝突避免)
(3) CSMA/CA 工作原理:
載波偵聽:裝置在傳送資料之前也會監聽無線通道,檢查是否有其他裝置在使用。只有通道空閒,裝置才會繼續執行傳送操作。
衝突避免:為了儘量避免衝突,在傳送資料之前,裝置可能會先傳送一個“準備傳送”訊號 (如RTS,即請求傳送) ,並等待接收裝置返回“允許傳送”訊號 (如CTS,即清除傳送) 。
資料傳送:收到 CTS 訊號後,裝置才會傳送資料。
ACK確認:資料傳送成功後,接收裝置會傳送一個確認訊號 (ACK) 。如果傳送裝置在規定時間內沒有收到 ACK,它會認為資料丟失並重新傳送。
由於無線網引入了額外的訊號交換 (如 RTS/CTS) 和 ACK 等機制,增加了無線網裝置連線、資料互動的複雜度。
(二) CSMA/CA 的關鍵技術
(1) ACK 確認機制 (Acknowledgment Mechanism)
在資料幀成功傳送並被接收裝置接收到後,接收裝置會傳送一個 ACK (Acknowledgment)幀 給傳送裝置,表示資料成功到達。
如果傳送裝置在指定時間內未收到 ACK,它會認為資料丟失並重新傳送。
ACK 機制 保證了資料傳輸的可靠性,避免了資料丟失後無反饋導致的傳輸失敗。
(2) RTS/CTS 機制 (Request to Send / Clear to Send)
RTS/CTS 機制 是 CSMA/CA 中用於減少衝突的關鍵技術。它透過引入“準備傳送”請求 (RTS) 和“允許傳送”確認 (CTS) 這兩個控制幀,在傳送資料之前確保通道空閒,減少隱蔽節點問題。
RTS(Request to Send):傳送裝置首先向接收裝置傳送一個 RTS 幀,表明自己想要傳送資料。
CTS (Clear to Send):接收裝置在確認通道空閒後,會回覆一個 CTS 幀,允許傳送裝置進行資料傳輸。
(a) RTS/CTS與隱藏節點:
隱藏節點 指在接收者的通訊範圍內而在傳送者通訊範圍外的節點。
- PC1 要傳送資料,所以它傳送了 RTS 幀, 這時路由器可以收到該 RTS 幀,但是 PC2 與 PC1 距離較遠,PC2 收不到 PC1 的 RTS 幀。
- 路由器 AP 收到PC1 的 RTS 幀後,會同時向 PC1 和 PC2 傳送 CTS 幀
- PC1 收到路由器發的 CTS 幀後,PC1 開始傳送資料。
- PC2 收到路由器發的 CTS 幀後,PC2 保持安靜,不能傳送資料
(b) RTS/CTS與暴露節點:
暴露節點 指在傳送者的通訊範圍之內而在接收者通訊範圍之外的節點
AP1 和 AP2 屬於同一個通道,當 PC1 向 AP1 傳送資料時,PC2 也希望向 AP2 傳送資料。
根據 CSMA/CA 協議,PC2 偵聽通道,它將聽到 PC1 正在傳送資料,於是錯誤地認為它此時不能向 AP2 傳送資料,但實際上它的傳送不會影響 AP1 的資料接收,這就導致 PC2 所謂暴露節點問題的出現。
(c) 暴露節點解決方案
- PC1 要傳送資料,於是傳送 RTS 幀,AP1 和 PC2 都可以接收到該 RTS幀
- AP1 收到 RTS 幀後,會傳送 CTS 幀
- PC1 收到 CTS 幀後可以開始傳輸資料
- PC2 如果也收到了 AP1 的 CTS 幀,PC2 不能與 AP2 傳送資料,只能保持安靜
- PC2 如果只收到 PC1 的 RTS 幀,但是沒有收到 AP1 傳送的 CTS幀,這個時候 PC2 可以傳送資料給 AP2,並且也不會影響到 AP1 資料的接收
透過 RTS/CTS 機制,避免了同時傳輸引發的衝突。
(3) 隨機退避演算法 (Random Backoff Algorithm)
當通道忙碌時,裝置不會立即重新嘗試傳送資料,而是會等待一個隨機的時間段後再嘗試。這種隨機等待時間由 退避演算法 (Backoff Algorithm) 決定,以減少多個裝置同時再次嘗試傳送資料的可能性,從而避免衝突。
具體做法是,在每次檢測到通道忙碌後,裝置會生成一個隨機退避時間。退避時間越長,裝置等待的時間越久,從而分散重試時間點,降低衝突機率。
- 傳送資料前隨機選取退避時間
- 退避時間最短的站優先傳送資料幀
- 最短的時間為退避視窗
- 新的退避時間 = 上次退避時間 - 退避視窗
(4) 幀間間隔 (Interframe Space, IFS)
IFS (Interframe Space, 幀間間隔) 用於控制裝置在傳送資料幀之間的等待時間,以確保無線通道的公平性和有效性。根據不同的情況,IEEE 802.11 標準定義了幾種不同型別的 IFS:
(a) 短幀間間隔 (Short Interframe Space, SIFS)
應用場景:用於高優先順序的操作,如 ACK 確認幀、CTS 幀、以及從站的響應幀。
特點:SIFS 是所有 IFS 中最短的,確保重要資料能夠迅速傳輸而不受其他幀的干擾。由於它的間隔短,接收方可以快速發出確認,減少等待時間,提高資料傳輸效率。
(b) 點協調功能幀間間隔 (Point Coordination Function Interframe Space, PIFS)
應用場景:用於集中控制模式下,接入點 (AP) 在無競爭的情況下使用,如在 PCF (點協調功能) 模式下的優先順序操作。
特點:PIFS 的等待時間比 DIFS 短,但比 SIFS 長。它主要用於在競爭前啟動通訊,以便接入點在競爭階段之前獲得通道控制權。
(c) 分散式協調功能幀間間隔 (Distributed Coordination Function Interframe Space, DIFS)
應用場景:用於普通資料幀的傳輸,通常在競爭環境中使用。
特點:DIFS 是正常資料幀在競爭通道時使用的間隔。它的等待時間比 PIFS 長,確保優先順序較低的裝置在優先順序較高的操作完成後再嘗試傳送資料。
(d) 擴充套件幀間間隔 (Extended Interframe Space, EIFS)
應用場景:當一個裝置接收到一個有錯誤的資料幀時,它會等待 EIFS 時間後再試圖傳送資料。
特點:EIFS 是所有 IFS 中最長的,旨在避免網路中更多的衝突或干擾發生。當裝置認為通道狀況不佳時,會使用更長的等待時間以減少進一步的衝突。
(e)應用例項
- 傳送者想要傳送資料,先偵聽通道狀態,如果空閒,它就會傳送一個 RTS 幀(請求傳送幀)
- 接收者接收到該 RTS 幀之後,等待一個 SIFS (短幀間間隔)時間後,再傳送一個 CTS 幀(可以傳送資料了)
- 傳送者收到 CTS 幀之後,間隔一個 SIFS (短幀間間隔)時間後,傳送資料幀。
- 接受者接收到資料後,再間隔一個 SIFS 後應答一個 ACK 幀
- 最下面一行的 NAV 是其它裝置的一個時間記時器,當裝置的 NAV 計時器大於零時,裝置會認為通道正在被其他裝置佔用,因此不會嘗試進行傳輸,被進位制訪問介質。
- ACK 之後有個 DIFS (分散式協調功能幀間間隔),這是個競爭視窗,容許優先順序低的裝置再嘗試傳送資料。
透過不同的 IFS 間隔時間,CSMA/CA 可以控制不同型別的資料幀在通道上的優先順序。高優先順序的資料幀 (如 ACK 和 CTS) 使用較短的間隔,確保它們能快速獲得通道使用權。
透過強制裝置在每次傳輸前等待一定時間,IFS 降低了多個裝置同時傳輸的可能性,減少了衝突的發生。
(5) 載波偵聽 (Carrier Sensing)
(a) 物理載波偵聽與虛擬載波偵聽
載波偵聽 在裝置傳送資料之前,它會先偵聽無線通道,檢查是否有其他裝置在使用該通道。如果通道空閒,裝置才會繼續後續的傳送操作。這一過程被稱為 物理載波偵聽。
虛擬載波偵聽 是透過網路分配器 (如無線接入點) 來管理通道的佔用情況,利用控制幀 (如 RTS/CTS)來減少衝突。
(b) 網路分配向量(Network Allocation Vector,NAV)
NAV 是無線裝置在通道上聽到某些控制幀 (如 RTS/CTS 或資料幀) 時設定的一個計時器。這個計時器表示該裝置預計通道會被佔用的時間,裝置會在 NAV 計時器歸零之前避免傳輸資料。
(c) NAV 的工作原理
NAV 設定: 當一個裝置在無線通道上接收到某個幀 (如 RTS 或 CTS) 時,它會讀取該幀中的持續時間欄位 (Duration Field) 。這個欄位表示該幀預期的佔用時間,包括髮送資料幀和接收 ACK 所需的時間。接收裝置會根據這個持續時間設定自己的 NAV 計時器。
通道佔用判斷: 當裝置的 NAV 計時器大於零時,裝置會認為通道正在被其他裝置佔用,因此不會嘗試進行傳輸。NAV 計時器歸零後,裝置會再次檢查通道是否空閒,如果空閒,則可以開始自己的傳輸。
NAV 與物理載波偵聽的結合:NAV 是一種 虛擬載波偵聽 機制,它與 物理載波偵聽 相結合。
物理載波偵聽是透過硬體直接檢測通道上的訊號強度,來判斷通道是否被佔用。
NAV 透過讀取幀資訊來推斷通道的佔用狀態。物理載波偵聽與 NAV 結合使用,有助於更準確地判斷通道狀態,減少衝突。
PC1 給路由器傳送資料幀,同一個範圍的PC2、PC3、phone 也會收到該資料幀幀。
PC1 傳送的資料幀在該幀的 MAC 頭部有個 Duration 欄位,表示持續時間,它包括一個短幀間間隔(SIFS)時間加上 ACK 幀的時間,假設該時間是50us。
PC2、PC3、phone 在收到 frame 資料幀後,會去讀取該幀的 Duration 欄位,然後重置自己的 NAV 計數器為 Duration 欄位的值 50 us。
(三)無線使用者接入過程
我們手機、膝上型電腦等裝置的 WiFi 模組一般工作在 STA 模式,路由器的 WiFi 一般工作在 AP 模式。當我們 STA 裝置連線到路由器 AP 的時候,有三個過程:掃描、認證、關聯。
-
掃描階段 STA進行掃描,定期搜尋周圍的無線網路,獲取到周圍的無線網路資訊。
-
認證階段 STA 接入 WiFi 網路前需要進行終端身份驗證,即鏈路認證。鏈路認證通常被認為是終端連線 AP 並訪問 WiFi 的起點。
-
關聯階段 完成鏈路認證後,STA 會繼續發起鏈路服務協商。
(1) 掃描階段 (Scanning)
掃描階段 (Scanning) 是 WiFi 裝置連線無線網路的第一步,裝置透過掃描找到可用的無線接入點 (Access Point, AP) ,從而選擇合適的 AP 進行連線。WiFi 標準中定義了兩種主要的掃描方式:主動掃描 (Active Scanning) 和被動掃描 (Passive Scanning) 。每種方式有其特點和應用場景。
(a) 主動掃描 (Active Scanning)
在主動掃描過程中,裝置會主動向周圍的無線通道傳送探測請求 (Probe Request) ,並等待 AP 傳送探測響應 (Probe Response) 。這個過程可以快速發現周圍的 WiFi 網路,尤其是在裝置不知道有哪些網路可用的情況下。主動掃描的過程分為以下幾個步驟:
探測請求 (Probe Request) 裝置依次切換到不同的通道 ( WiFi 網路使用多個通道進行通訊,不同的標準使用不同的通道範圍,比如 2.4GHz 頻段有 14 個通道) 。
在每個通道上,裝置會傳送探測請求幀 (Probe Request) 。這個探測請求可以是針對所有網路的廣播,也可以是針對特定 SSID 的單播。
針對某個特定 SSID 的單播,探測包中有攜帶需要探測的 SSID 資訊,只有 SSID 能夠匹配上的 AP 才會返回探測響應包。
這種場景一般是裝置已經配置過網路,裝置端有儲存需要連線的 AP ,裝置上電就直接掃描該 AP 是否存在。
當探測請求是針對所有網路的廣播時,探測包中 SSID 資訊是為 NULL,接收到該探測包的 AP 都會返回探測響應包。
比較常見的場景是我們要手動去連線 WiFi 時,先會去掃描所有的通道的 WiFi 熱點,然後生成一個 WiFi 熱點列表。
探測請求的主要內容包括:
- SSID (可以是具體的SSID,也可以是廣播請求)
- 支援的速率
- 擴充套件功能資訊 (如支援的安全協議)
探測響應 (Probe Response)
AP在接收到探測請求後,會返回探測響應幀 (Probe Response) 。這個響應幀包含AP的詳細資訊,例如:
- SSID (網路名稱)
- BSSID (AP的MAC地址)
- 通道號
- 支援的速率
- 安全協議資訊 (如WPA/WPA2)
- 網路容量和裝置數量
- 其他可能的擴充套件功能 (如QoS、WMM等)
主動掃描的優缺點:
優點:能夠快速發現隱藏的 WiFi 網路 (隱藏SSID的網路) ,因為裝置可以透過探測請求主動詢問某個特定SSID的存在。
缺點:主動傳送請求幀會增加裝置的能耗,且在某些環境中可能暴露裝置的存在和意圖,減少隱私性。
(b) 被動掃描 (Passive Scanning)
在被動掃描過程中,裝置不會主動傳送探測請求,而是透過監聽特定通道上的信標幀 (Beacon Frame),從中獲取 AP 的資訊。信標幀是 AP 定期廣播的一種特殊的管理幀,所有裝置只需監聽通道即可獲知周圍可用的網路。
信標幀 (Beacon Frame)
AP 會定期 (通常是100ms)在指定通道上廣播信標幀。信標幀包含了AP的關鍵資訊,包括:
- SSID
- BSSID (AP的MAC地址)
- 支援的傳輸速率
- 通道號
- 安全資訊 (如WPA/WPA2)
- 網路時間戳 (用於同步裝置的時鐘)
- 其他可能的功能 (如WMM、HT Capabilities、VHT Capabilities等)
監聽通道
- 裝置依次切換到不同的通道,並在每個通道上監聽信標幀。每個通道可能包含多個 AP 的信標幀。
- 透過這些信標幀,裝置可以瞭解哪些 AP 在附近可用,並獲取相關的配置資訊。
被動掃描的優缺點:
優點:更節能,因為裝置只需被動監聽信標幀,而不需要主動傳送請求。它也不會暴露裝置的身份和意圖,增強了隱私性。
缺點:相比主動掃描,發現 AP 的速度較慢,因為裝置必須等待 AP 廣播信標幀。尤其在密集的網路環境中,等待多個 AP 廣播信標幀可能會耗費更多時間。
(2) 認證階段 (Authentication)
認證是裝置和 AP 之間相互確認身份的過程。在傳統的 WiFi 認證中,有兩種方式:
開放系統認證 (Open System Authentication):這是最簡單的方式,不需要裝置和AP之間進行任何金鑰交換,所有請求都會透過。
共享金鑰認證 (Shared Key Authentication):裝置和 AP 會透過 WEP (Wired Equivalent Privacy) 金鑰進行加密認證。這種方式現已很少使用,因為 WEP 的安全性較差,已被更強的 WPA/WPA2/WPA 3等認證方式取代。
現代 WiFi 網路一般使用 WPA/WPA2/WPA3 等協議進行身份驗證,結合了 PSK (Pre-Shared Key) 或企業級的 RADIUS 認證伺服器來提升安全性。
WiFi 認證就簡單介紹這些,後面會專門再針對 WiFi 認證做詳細介紹。
(3) 關聯階段
在完成掃描和認證階段之後,裝置必須透過關聯階段,才能與無線接入點 (Access Point, AP) 建立正式的連線,並開始進行資料通訊。在這個階段,裝置與 AP 之間會進行詳細的引數交換,確保雙方能夠相容並高效地進行後續通訊。
關聯階段包括 關聯請求 (Association Request) 和 關聯響應 (Association Response) 兩部分:
(a) 關聯請求 (Association Request)
在認證透過後, WiFi 裝置會傳送一個關聯請求幀 (Association Request),請求與 AP 建立正式的連線。這個關聯請求幀攜帶了裝置的詳細資訊,以便 AP 瞭解裝置的能力,並確定雙方能否以最佳方式進行通訊。
關聯請求幀的主要欄位包括:
- SSID:所請求連線的網路名稱。
- 支援的速率集 (Supported Rates Set):裝置所支援的傳輸速率,AP可以根據這些速率來選擇合適的通訊速率。
- 擴充套件速率集 (Extended Supported Rates):用於支援更高的傳輸速率 (例如802.11n/ac/ax)。
- 通道資訊:裝置希望使用的通道以及相關的頻段資訊。
- 安全資訊:包括裝置支援的加密和認證協議 (如WPA2/WPA3等)。
- 能力資訊 (Capability Information):裝置的其他功能,如是否支援QoS (Quality of Service)、電源管理等。
- HT/VHT Capabilities:如果裝置支援802.11n (HT, High Throughput) 或802.11ac/ax (VHT, Very High Throughput),它會在關聯請求中包含這些資訊,以允許AP使用更高效的技術來最佳化傳輸效能 (如 MIMO、多通道聚合等)。
(b) 關聯響應 (Association Response)
AP 接收到裝置的關聯請求幀後,會檢查裝置的請求資訊,評估其是否能夠接受裝置的連線。通常,AP 會基於裝置的能力和當前網路的負載情況作出決定。然後,AP 會透過 關聯響應幀 (Association Response) 來通知裝置是否成功關聯。
關聯響應幀包括以下重要資訊:
- 狀態碼 (Status Code):指示關聯是否成功。如果狀態碼為0,表示關聯成功;否則,裝置需要重新嘗試。
- 關聯識別符號 (Association ID, AID) 每個成功關聯的裝置會被 AP 分配一個唯一的 AID,用於區分不同的裝置。在後續通訊中,AP 使用 AID 來管理每個裝置。
- 支援的速率資訊:AP 會在響應中確認雙方支援的最高傳輸速率,這些速率會成為後續通訊中的基準。
- 可能的通道資訊:如果 AP 支援多通道傳輸或裝置的請求中包含特定通道要求,AP 會在響應中確認所選擇的通道。
(c) 關聯成功後的狀態
一旦裝置收到關聯成功的響應幀,它就會正式成為 AP 的一部分,並可以開始透過AP 訪問網路資源。關聯成功後的狀態有以下幾個關鍵點:
- 裝置獲得AID:裝置的 AID 可以用於 AP 管理關聯裝置的無線資源,例如透過AID 來識別哪些裝置可以傳送或接收資料。
- 資源分配:AP 可能根據網路條件和裝置的能力,分配特定的無線資源 (如通道頻寬、時隙等)。
- 準備資料傳輸:關聯完成後,裝置與 AP 之間的通訊變為資料幀傳輸,裝置可以透過 AP 接入網際網路或本地網路資源。
(d) 關聯失敗的情況
關聯過程並非總是成功的,可能的失敗原因包括:
- AP 超載:如果 AP 已經連線了過多的裝置,它可能會拒絕新的關聯請求,通常會返回一個“超載”狀態碼。
- 通道不匹配:裝置請求使用的通道可能不在 AP 當前支援的通道範圍內。
- 安全協議不相容:如果裝置和 AP 使用不同的安全協議 (例如裝置只支援 WPA, 而 AP 要求 WPA2 或 WPA3),關聯將會失敗。
- 訊號質量差:如果裝置距離 AP 太遠,訊號質量過差,AP 可能無法維持穩定的連線,從而拒絕關聯請求。
結尾
上面主要介紹了有線網與 WiFi 無線網在物理層的差異、WiFi 介質訪問控制原理及其關鍵技術、無線使用者的接入過程。
下一篇將介紹 WiFi 空口包抓包、以及各類 WiFi 包的解析。
上面內容,如有錯誤,歡迎評論區提示指出,不勝感激。