liwen01 2024.09.16 前言 802.11 無線 WiFi 網有三類幀:數據幀、管理幀、控制幀。與有線網相比,無線 WiFi 網會複雜很多。大部分應用軟體開發對 WiFi 的控制幀和管理幀瞭解得並不多,因為它們在物理層和數據鏈路層就已經被處理了,上層應用很少能感知到。 一般是在設備出現 ...
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 包的解析。
上面內容,如有錯誤,歡迎評論區提示指出,不勝感激。