這里對 wifi
的 802.11
協(xié)議中比較常見的知識做一個基本的總結和整理死姚,便于后續(xù)的學習臭觉。因為無線網絡中涉及術語很多考蕾,并且許多協(xié)議都是用英文描述甩苛,所以有些地方翻譯出來會有歧義,這種情況就直接英文來描述了赏参。
一志笼、基本概述
1、有線和無線網絡
目前有線網絡中最著名的是以太網( Ethenet
)把篓,但是無線網絡 WLAN
是一個很有前景的發(fā)展領域纫溃,雖然可能不會完全取代以太網,但是它正擁有越來越多的用戶韧掩,無線網絡中最有前景的是 Wifi
紊浩。本文介紹無線網絡相關內容。
無線網絡相比有線網絡疗锐,還是有許多的缺點的:
- 通信雙方因為是通過無線進行通信坊谁,所以通信之前需要建立連接;而有線網絡就直接用線纜連接滑臊,不用這個過程了口芍。
- 通信雙方通信方式是半雙工的通信方式;而有線網絡可以是全雙工简珠。
- 通信時在網絡層以下出錯的概率非常高阶界,所以幀的重傳概率很大,需要在網絡層之下的協(xié)議添加重傳的機制(不能只依賴上面
TCP/IP
的延時等待重傳等開銷來保證)聋庵;而有線網絡出錯概率非常小膘融,無需在網絡層有如此復雜的機制。 - 數據是在無線環(huán)境下進行的祭玉,所以抓包非常容易氧映,存在安全隱患。
- 因為收發(fā)無線信號脱货,所以功耗較大岛都,對電池來說是一個考驗律姨。
- 相對有線網絡吞吐量低,這一點正在逐步改善臼疫,
802.11n
協(xié)議可以達到600Mbps
的吞吐量择份。
2、協(xié)議
Ethenet
和 Wifi
采用的協(xié)議都屬于 IEEE 802
協(xié)議集烫堤。其中荣赶, Ethenet
以 802.3
協(xié)議做為其網絡層以下的協(xié)議;而 Wifi
以 802.11
做為其網絡層以下的協(xié)議鸽斟。無論是有線網絡拔创,還是無線網絡,其網絡層以上的部分富蓄,基本一樣剩燥。
這里主要關注的是 Wifi
網絡中相關的內容。 Wifi
的 802.11
協(xié)議包含許多子部分立倍。其中按照時間順序發(fā)展灭红,主要有:
-
802.11a
,1999年9月制定帐萎,工作在5gHZ
的頻率范圍(頻段寬度325MHZ
)比伏,最大傳輸速率54mbps
,但當時不是很流行疆导,所以使用的不多灼伤。 -
802.11b
谆级,1999年9月制定,時間比802.11a
稍晚橄登,工作在2.4g
的頻率范圍(頻段寬度83.5MHZ
)舰攒,最大傳輸速率11mbps
败富。 -
802.11g
,2003年6月制定摩窃,工作在2.4gHZ
頻率范圍(頻段寬度83.5MHZ
)兽叮,最大傳輸速率54mbps
。 -
802.11n
猾愿,2009年才被IEEE
批準鹦聪,在2.4gHZ
和5gHZ
均可工作,最大的傳輸速率為600mbps
蒂秘。
這些協(xié)議均為無線網絡的通信所需的基本協(xié)議泽本,最新發(fā)展的,一般要比最初的有所改善姻僧。
另外值得注意的是规丽, 802.11n
在 MAC
層上進行了一些重要的改進蒲牧,所以導致網絡性能有了很大的提升例如:
- 因為傳輸速率在很大的程度上取決于
Channel
(信道)的ChannelWidth
有多寬,而802.11n
中采用了一種技術赌莺,可以在傳輸數據的時候將兩個信道合并為一個冰抢,再進行傳輸,極大地提高了傳輸速率(這又稱HT-40
艘狭,high through
)挎扰。 -
802.11n
的MIMO
(多輸入輸出)特性,使得兩對天線可以在同時同Channel
上傳輸數據缓升,而兩者卻能夠不相互干擾(采用了OFDM
特殊的調制技術)
3鼓鲁、術語
講述之前,我們需要對無線網絡中一些常用的術語有所了解港谊。這里先列出一些骇吭,后面描述中出現(xiàn)的新的術語,將會在描述中解釋歧寺。
LAN
: 即局域網燥狰,是路由和主機組成的內部局域網,一般為有線網絡斜筐。WAN
: 即廣域網龙致,是外部一個更大的局域網。WLAN
(Wireless LAN
顷链,即無線局域網): 前面我們說過LAN
是局域網目代,其實大多數指有線網絡中的局域網,無線網絡中的局域網嗤练,一般用WLAN
榛了。-
AP
(Access point
的簡稱,即訪問點煞抬,接入點): 是一個無線網絡中的特殊節(jié)點霜大。通過這個節(jié)點,無線網絡中的其它類型節(jié)點可以和無線網絡外部以及內部進行通信革答。這里战坤,
AP
和無線路由都在一臺設備上(即Cisco E3000
)。 Station
(工作站): 表示連接到無線網絡中的設備残拐,這些設備通過AP
途茫,可以和內部其它設備或者無線網絡外部通信。Assosiate
: 連接蹦骑。如果一個Station
想要加入到無線網絡中慈省,需要和這個無線網絡中的AP
關聯(lián)(即Assosiate
)。SSID
: 用來標識一個無線網絡,后面會詳細介紹边败,我們這里只需了解袱衷,每個無線網絡都有它自己的SSID
。-
BSSID
: 用來標識一個BSS
笑窜,其格式和MAC
地址一樣致燥,是48
位的地址格式。一般來說排截,它就是所處的無線接入點的
MAC
地址嫌蚤。某種程度來說,它的作用和SSID
類似断傲,但是SSID
是網絡的名字脱吱,是給人看的,BSSID
是給機器看的认罩,BSSID
類似MAC
地址箱蝠。 -
BSS
(Basic Service Set
): 由一組相互通信的工作站組成,是802.11
無線網絡的基本組件垦垂。主要有兩種類型的
IBSS
和基礎結構型網絡宦搬。IBSS
又叫ADHOC
,組網是臨時的劫拗,通信方式為Station<->Station
间校,這里不關注這種組網方式;我們關注的基礎結構形網絡页慷,其通信方式是Station<->AP<->Station
憔足,也就是所有無線網絡中的設備要想通信,都得經過AP
酒繁。在無線網絡的基礎形網絡中四瘫,最重要的兩類設備:AP
和Station
。 -
DS
(Distributed System
): 即分布式系統(tǒng)欲逃。分布式系統(tǒng)屬于
802.11
邏輯組件,負責將幀轉發(fā)至目的地址饼暑,802.11
并未規(guī)定其技術細節(jié)稳析,大多數商業(yè)產品以橋接引擎合分步式系統(tǒng)媒介共同構成分布式系統(tǒng)。分步式系統(tǒng)是接入點之間轉發(fā)幀的骨干網絡弓叛,一般是以太網彰居。其實,骨干網絡并不是分步系統(tǒng)的全部撰筷,而是其媒介陈惰。主要有三點:(1)骨干網(例如以太網)、(2)橋接器(具有有線無線兩個網絡接口的接入點包含它)毕籽、(3)屬于骨干網上的接入點抬闯。所管轄的基礎性網絡的
station
通信(和外界或者BSS
內部的station
)必須經過DS
井辆、而外部路由只知道station
的mac
地址,所以也需要通過分布式系統(tǒng)才能知道station
的具體位置并且正確送到溶握。分步式系統(tǒng)中的接入點之間必須相互傳遞與之關聯(lián)的工作站的信息杯缺,這樣整個分步式系統(tǒng)才能知道哪個
station
和哪個ap
關聯(lián),保證分步式系統(tǒng)正常工作(即轉達給正確的station
)睡榆。分步式系統(tǒng)也可以是使用無線媒介(
WDS
)萍肆,不一定一定是以太網。總之胀屿,分步式系統(tǒng)骨干網絡(例如以太網)做為媒介塘揣,連接各個接入點,每個接入點與其內的
station
可構成BSS
宿崭,各個接入點中的橋接控制器有到達骨干網絡和其內部BSS
無線網的接口(類似兩個MAC
地址)亲铡,station
通信需要通過分布式系統(tǒng)。
二劳曹、實踐基礎
1奴愉、一些參數
MAC
MAC
(即 Medium/MediaAccess Control
, 介質訪問控制),是數據鏈路層的一部分铁孵。 MAC
地址是燒錄在 NetworkInterfaceCard
(即網卡锭硼,簡稱 NIC
)里的,它也叫硬件地址,是由 48
位(即 bit
蜕劝,一字節(jié)為8位檀头,即 1byte=8bits
) 16進制的數字組成。其中 0-23
位叫做組織唯一標志符( organizationally unique
岖沛,簡稱 OUI
)暑始,是識別 LAN
(局域網)節(jié)點的標識(在有些抓包工具抓包的時候會將前三個字節(jié)映射成某種組織名稱的字符,也可以選擇不顯示這種映射)婴削。 24-47
位是由廠家自己分配廊镜。
SSID
表示一個子網的名字,無線路由通過這個名字可以為其它設備標識這個無線路由的子網唉俗。設備進行掃描的時候嗤朴,就會將相應 SSID
掃描到,然后就能夠選擇相應的 SSID
連接到相應的無線網絡(當然不掃描虫溜,理論上也可以直接指定自己事先已經知道的 ssid
進行連接)雹姊。 SSID
可以和其它的重復,這樣掃描的時候會看到兩個同樣 SSID
的無線網絡衡楞,其實這一般用于將一個無線網絡擴大的情況(畢竟無線路由器無線信號的覆蓋范圍是有線的):當想要擴大一個無線網絡(即 SSID
固定)的范圍的時候吱雏,可以給多個路由設置相同的 SSID
來達到這個目的。(這也是漫游的原理,漫游的時候歧杏,我們可以在遠方或者本地都能夠打電話镰惦,也就是訪問移動通信網絡)。
SSID
和 BSSID
不一定一一對應得滤,一個 BSSID
在不同的 Channel
上面可能會對應到多個 SSID
陨献,但是它們在一個 Channel
是一一對應的;另外懂更,漫游的時候眨业,雖然 SSID
不變,但是 BSSID
一定是會變化的沮协。我們經沉浼瘢可以看到實際數據包中的 AP
的 MAC
地址和 BSSID
只差幾位,其實實際設備的 MAC
地址可能只有一個慷暂,和 BSSID
沒什么對應關系聘殖。在一個包含了路由功能和 AP
功能的無線路由器( Fat AP
)上面,很可能是:路由器有兩個 MAC
地址行瑞,一個用于外網( WAN
)奸腺,一個用于內網( WLAN
和 LAN
),一般路由器上面或者配置路由器的網頁上面只標注外網的 MAC
地址血久;內網的 MAC
地址和外網 MAC
地址一般只有幾位不同(甚至連續(xù)突照,也有些相差很多的例外)。
Band
(頻率范圍)
一般 ap
可以支持 5g
或 2.4g
兩個頻率范圍段的無線信號氧吐。如果兩者同時可以設置讹蘑,而不是互斥那么,這個路由器還能夠同時支持兩種頻段(頻段即 Band
)筑舅,這相當于這個 ap
可建立兩個無線網絡座慰,它們采用不同的頻段(這類似收音機在長波范圍內收音和短波范圍內收音)。
Channel
(信道)
Channel
是對頻段的進一步劃分(將 5G
或者 2.4G
的頻段范圍再劃分為幾個小的頻段翠拣,每個頻段稱作一個 Channel
)版仔,有 5.18GHZ
, Auto
( DFS
)等等误墓,處于不同傳輸信道上面的數據邦尊,如果信道覆蓋范圍沒有重疊,那么不會相互干擾优烧。對于信道的使用,在國際上有所規(guī)定链峭。其中有些信道是無需授權即可直接使用的(究竟是那個頻段的那個信道畦娄,依照各個國家而不同),無需授權使用的意思是,傳輸數據的時候(無論以哪種無線方式)熙卡,可以讓設備收發(fā)的功率導致傳輸時的數據進入該信道的頻率并在該信道所在頻段寬度內進行傳輸杖刷;授權的使用的意思是,不允許傳輸時使用授權信道進行驳癌,否則會違反規(guī)定滑燃,并且干擾該信道上其他數據的傳輸。另外颓鲜,除了 wifi
表窘,微波、紅外線甜滨、藍牙(使用 802.15
協(xié)議)的工作頻段也都有在 2.4gHZ
范圍內的乐严,所以,它們傳輸的時候會對 wifi
傳輸造成干擾衣摩,因為兩者在不同的協(xié)議下進行通信昂验,所以互相將對方傳輸的信號識別為噪聲。 有時候配置 AP
的時候艾扮, Channel
中有一個類似 Auto
的選項值既琴,這表示打開 AP
的時候, AP
自己 Scan
周圍的環(huán)境泡嘴,選擇一個干擾最小的 Channel
來進行通信甫恩,當選擇好了一個 Channel
的時候,一般就不會改變了磕诊。
Channel Width
(信道寬度)
這里的 Channel Width
是信道的帶寬填物,有 20M HZ
、 40M HZ
等霎终,它表示一個 Channel
片段的寬度(假設 5g
的頻段寬度總共為 100M
滞磺,平均劃分為互不干擾的 10
個 Channel
,那么每個 Channel
的 Channel Width
就為 100M/10=10M
莱褒,實際 Channel
并不一定是完全不重疊的)击困。這個參數可能依賴于一些其它的選項,例如不是 802.11N
的協(xié)議广凸,就可能不會有 40M HZ
的 Channel Width
(N模式有一個特點就是可以把兩個 Channel
合并阅茶,通過提高 ChannelWidth
來提高吞吐量)。例如選擇了 20M HZ
這個 Channel Width
之后谅海,后面再選擇一個 5.18GHZ
的 Channel
脸哀,則表示以 5.18GHZ
為中心的前 10M HZ
以及其后面的 10M HZ
頻帶范圍被占用。
至此可知扭吁,配置無線 AP
的時候撞蜂,如果屋子里面有很多的 AP
(也就是無線路由接入點)的話盲镶,仔細設置它們的 Channel Width
和 Channel
可以保證它們相互之間的干擾(類似收音機里面的串臺)盡可能小。當然蝌诡,如果相互干擾了溉贿,那么 Net Mode
所指定的協(xié)議也會有相應的處理方式讓他們之間進行協(xié)調(例如讓誰先通信誰等一會再通信之類的),但是這樣網絡的性能就不如沒有干擾的時候好了浦旱。
Wireless Security
(無線網絡的安全性)
這里主要涉及 WEP
宇色、 WPA
、 WPA2
和 RC4
颁湖、 TKIP
宣蠕、 AES
。
IEEE 802.11
所制定的是技術性標準 , Wi-Fi
聯(lián)盟所制定的是商業(yè)化標準 , 而 Wi-Fi
所制定的商業(yè)化標準基本上也都符合 IEEE
所制定的技術性標準爷狈。 WEP
是1999年9月通過的 IEEE 802.11
標準的一部分植影; WPA
( Wi-Fi Protected Access
) 事實上就是由 Wi-Fi
聯(lián)盟所制定的安全性標準 , 這個商業(yè)化標準存在的目的就是為了要支持 IEEE 802.11i
這個以技術為導向的安全性標準;而 WPA2
其實就是 WPA
的第二個版本涎永。直觀點說思币, WEP
是較老的認證方法它有好幾個弱點,因此在2003年被 WPA
淘汰羡微, WPA
又在2004年由完整的 IEEE 802.11i
標準(又稱為 WPA2
)所取代谷饿。
WEP
( Wired Equivalent Privacy
),采用名為 RC4
的 RSA
加密技術妈倔; WPA
( Wi-Fi Protected Access
) 博投,采用新的 TKIP
算法, TKIP
算法保留了 RC4
所以也有其弱點盯蝴,但是這個時候更好的 CCMP
還沒完成毅哗,所以先在 WPA
上用 TKIP
技術; WPA2
是 WPA
的第2個版本捧挺,采用 CCMP
加密協(xié)定(在有些路由器等設備上設定加密協(xié)定或者加密算法的時候虑绵,可能會用類似 AES
之類的字眼替代 CCMP
)。所以 WPA2+AES
是安全性最強的闽烙。
另外翅睛,在有些無線網路設備的參數中會看到像 WPA-Enterprise/WPA2-Enterprise
以及 WPA-Personal/WPA2-Personal
的字眼 , 其實 WPA-Enterprise / WPA2-Enterprise
就是 WPA/WPA2
; WPA-Personal/WPA2-Personal
其實就是 WPA-PSK/WPA2-PSK
, 也就是以 pre-share key
或 passphrase
的驗證 (authentication
) 模式來代替 IEEE 802.1X/EAP
的驗證模式 , PSK
模式下不須使用驗證服務器 ( 例如 RADIUS Server
), 所以特別適合家用或 SOHO
的使用者黑竞。
還有捕发, wep
是舊的加密方式,工作于 802.11B/G
模式下而 802.11N
草案并不支持此加密方式很魂,所以如果 802.11N
的設備采用 wep
加密方式后扎酷,它也只會工作在 802.11b/g
模式下, N
的性能發(fā)揮不出來遏匆。
實際中霞玄,在有些路由器上面骤铃,設置的時候,可能不是嚴格按照這個規(guī)定來設置的(例如設定了采用 WPA
方式坷剧,還可以選擇 AES
),但是大體一樣喊暖。
Region
(區(qū)域)
一般在無線網絡中的 AP
上都有一個參數惫企,表明它是處于哪個 Region
(地區(qū))。 Station
根據 AP
中設置的 Region
調整其相應的發(fā)射功率以遵守該地區(qū)的規(guī)定陵叽。 AP
的調整過程一般都是手動設定狞尔,設置好 AP
所處的 Region
之后,這些信息就會在 AP
發(fā)送的 Beacon
幀(后面會說到)中包含了巩掺;通過這個 AP
連接到無線網絡上的 Station
偏序,從 Beacon
幀中了解到這些 Region
信息,并且根據這些信息中的規(guī)定和 AP
進行通信胖替。如果 AP
開始設置錯了研儒,那么 Station
和 AP
通信的時候,采用的將會是不符合 Region
規(guī)定的頻段独令,可能會對該 Region
中的其它傳輸網絡造成干擾端朵,這應當是“非法”的。
Transmission Rate
設置傳輸速率燃箭。這里采用不同的無線網絡傳輸協(xié)議( 802.11a
冲呢, 802.11b
, 802.11g
等)招狸,那么可以設置的速率范圍有所不同敬拓,這里的速度是指理論的速度,實際中裙戏,由于各種干擾因素乘凸,傳輸的速率可能會比設置的小。
一般而言挽懦,在無線網絡中翰意,對于某種協(xié)議的性能進行描述時,我們需要注意的是信柿,描述時提到的傳輸速率( Datarate
)和吞吐量( Throughput
)是不同的冀偶。 Datarate
是理論上面最大數據傳輸速率,而 Throughput
是數據的實際最大吞吐量渔嚷。因為廠家以及傳輸時所使用的協(xié)議等各種因素造成的開銷进鸠,會導致實際吞吐量比理論吞吐量要小,一般實際最大吞吐為理論最大的 50%
左右(一個不太準確但是相對直觀的估計:在網絡中形病,高清視頻所需的 Throughput
也就 30mbps
左右客年,網絡上一般的視頻也就 4mbps
左右)霞幅。
Qos
(質量保證)
無線網絡中的 QOS
是質量保證,大致的意思是量瓜,傳輸數據的時候司恳,考慮各種因素(例如收費策略,所處地區(qū)等)绍傲,以一定的優(yōu)先級來保證傳輸的特定要求(一般就是速度)扔傅,如果帶寬足夠的話, QOS
反而不需要了烫饼。
RTS Threshold/CTS Protection Mode
這里的 RTS
是 Request-To-Send
的簡寫猎塞, CTS
是 Clear-To-Send
的簡寫。設置好 RTS
的閾值之后杠纵,如果超過這個閾值就會在發(fā)送信息之前先發(fā)送 RTS
荠耽,以減少干擾,相應的 CTS
會回應之前的 RTS
比藻。一般都是 AP
發(fā)送 CTS
數據铝量,而 Station
發(fā)送 RTS
數據。
這里對 RTS
和 CTS
做一個簡單解釋:假設在同一個 AP
所覆蓋的無線網絡范圍內的兩個 Station
A和B韩容,它們之間可能會因為距離的原因互相不可見(例如它們在 AP
網絡范圍的兩端款违,而這兩端的距離大于兩者的信號覆蓋范圍),但是 AP
卻知道它們是在自己的范圍內群凶。當一個A想要在 AP
的網絡中進行通信的時候插爹,必定要經過 AP
轉發(fā)它的信息,由于A不知道B的存在请梢,所以如果同時B也通過 AP
進行網絡通信赠尾,那么會出現(xiàn) AP
同時收到A、B兩個 Station
的通信請求毅弧,而這在無線網絡中是不允許的(無線網絡中气嫁,同一時刻不能有多個人傳輸數據)。在這種情況下够坐,B和A互相干擾了對方的通信寸宵,但是卻互相不可見(不可見的節(jié)點互相被稱作隱藏節(jié)點)。如果在一個網絡中元咙,這樣的隱藏節(jié)點很多梯影,那么勢必會影響網絡的性能(因為數據一旦發(fā)送失敗,就要重傳庶香,隱藏節(jié)點會導致重傳的機率增大)甲棍。這個時候,可采用 RTS
和 CTS
機制赶掖。即:在A想要通信的時候感猛,先廣播發(fā)送 RTS
給 AP
七扰,告訴 AP
“它想要通信”,同時接受到 RTS
的別的 Station
(它們對發(fā)送 RTS
的 Station
而言可見)會知道A將要發(fā)送數據陪白,于是它們不會發(fā)送數據以免干擾A颈走; AP
收到 RTS
之后,會廣播發(fā)送 CTS
咱士,告訴所有在 AP
范圍內的 Station
(包括對A而言的隱藏節(jié)點B)”A將要通信(同時也相當于告訴A疫鹊,A可以無干擾的發(fā)送信息了)”,這樣對A而言的隱藏節(jié)點B也知道有一個A的存在并且要發(fā)送信息了司致,于是B就不會干擾A了。 這里聋迎,A和B兩者可以在不同的網絡上脂矫,也就是說,不同網絡的工作站之間也可以通過 RTS/CTS
來清除相互的干擾霉晕。
Beacon Interval
表示無線路由定期廣播其 SSID
的時間間隔庭再。這個一般不會特別設置,就采用默認值即可牺堰。如果不廣播了拄轻,那么 Station
端掃描的時候可能會發(fā)現(xiàn)不定期廣播的 AP
對應的 SSID
的網絡不見了,所以可能會斷開連接伟葫。這里定期廣播恨搓,表示 AP
會定時向其范圍內廣播 SSID
的信息,以表示 AP
的存在筏养,這樣 Station
進入一個區(qū)域之后斧抱,就能夠通過掃描知道這個區(qū)域是否有 AP
的存在。當然渐溶,除了 AP
廣播 SSID
以告知其無線網絡存在之外辉浦, Station
也可主動廣播探尋包,在其能夠覆蓋的范圍內詢問是否有 AP
存在(即我們通常所說的掃描尋找接入點)茎辐。
DTIM Interval
DTIM/TIM
表示告訴 Station
宪郊, AP
在為 Station
做 package buffer
(例如 Station
睡眠的時候)的緩存時間。為了節(jié)省電池使用時間拖陆,處于無線網絡中的 Station
可能會在一定時間之后自動進入休眠狀態(tài)弛槐。這個時候, AP
會為這個 Station
緩存發(fā)送給它的數據慕蔚,而處于休眠狀態(tài)的 Station
只會在一定時間間隔內給 AP
發(fā)送一個數據幀丐黄,以確認是否有發(fā)送給自己的數據存在。例如孔飒,當我們在主機上 ping
另外一臺睡眠的機器的時候灌闺,收到另外一臺機器響應的時間艰争,要比它不睡眠的時候響應的時間長很多。
Fragmentation Threshold
表示一個 package
的分片閾值桂对。我們可以設置分片大小甩卓,當發(fā)送的數據包超過這個閾值之后, 802.11
協(xié)議會自動對這個數據包進行分割蕉斜。如果設置的這個分片值越小逾柿,那么整個數據包越容易傳輸成功(因為如果出錯,那么只需要傳送一個片段而不是整個包宅此,無線 wifi
網絡中數據傳輸時出錯的概率比有線的以太網要大的多的多)机错,當然開銷也越大(因為需要額外的信息標記每個分片,以及各個分片傳輸成功之后涉及到的重組問題)父腕。
2弱匪、抓包
一般來說馋吗,我們的機器上面的軟件抓取無線網卡上面的包的時候学歧,其實這些包的目標地址都是這個機器的無線網卡否过,因為不是發(fā)給這個機器無線網卡的包都被網卡過濾了穿仪。所以如果我們想要抓取所處無線網絡環(huán)境下所有的包的時候沃于,需要給機器配備一種特殊的設備( sniffer
就是嗅探器)蛋济,然后再通過抓包工具抓取并分析甜无。有一個硬件設備叫做 AirPcap
撒璧,就是做這個用的群扶,大有幾百到上千美金及刻,它可以同時做為嗅探器或者無線網卡使用,不過做為嗅探器的時候穷当,會抓取所有經過它的包提茁。這個工具目前只有 Windows
上面的驅動,所以使用這個工具馁菜,只能在 Windows
上面茴扁,配合 Wireshark
抓包軟件進行抓包。
這里假設采用 AirPcap
嗅探汪疮, Wireshark
軟件抓包(其它抓包軟件峭火,例如 linux
下面的 tcpdump
等分析類似)。不用圖形方式詳細展示具體的抓包過程以及分析方法了智嚷,主要說一下抓包(這里的包實際主要指的是網絡層以下的包卖丸,更常見的稱呼應該是數據幀)時候需要注意的問題。
Wireshark
展示包的時候盏道,大致都是按照協(xié)議規(guī)定的字段展示稍浆,也些地方按照它自己特定的方式展示。因為這里著重講述一些抓包時注意的基本原理上面的東西,所以不會對此進行過多闡述衅枫。大致就是:Wireshark
軟件中嫁艇,對包展示的時候,按照協(xié)議規(guī)定的字段分別用Header
和Body
兩個部分展示弦撩;另外步咪,在Header
之前還有兩個部分是Wireshark
為方便用戶而展示的包的大小、時間等全局信息(例如見過表示這個包在B和G mode
中的Channel 1
時益楼,用BG1
表示)猾漫。所以,其實我們分析的時候感凤,實際應該按照后面的Header
和Body
兩個部分進行悯周。 后面將基于以上所述,進行進一步的講解陪竿。抓包的時候队橙,需要首先確認這個包是否是完整、正確的包萨惑。只要是校驗位(
checksum
)不對的,就是錯誤的包仇矾,也無法確定接收的時候那里出了差錯庸蔼,所以這個包是應該忽略的,幾乎沒有分析的價值贮匕。另外姐仅,抓包的時候,由于干擾等原因刻盐,抓取的內容可能不是在實際傳輸所處的Channel
上的包(例如在Channel 1
上面嗅探掏膏,卻嗅探到了Channel 2
上的包)。抓取授權階段的包敦锌,需要注意實際的授權是在后面進行的馒疹。
Authentication
的時候,開始階段實際是Open
的(即無授權)乙墙,也就是說颖变,開始實際已經建立好了連接,所以我們在抓包的時候听想,開始看到的一般都是通過驗證腥刹,但是在后面緊接著采用了類似802.11x
等安全加強的協(xié)議,來進行再次鑒權認證汉买,如果這里無法通過則立即將已經建立的Association
斷開衔峰。這樣的機制,是因為原來的802.11
沒有充分考慮安全才會這樣的,這樣也兼容了以前的802.11
垫卤。抓取的包的數據威彰,要注意這個包是否是被加過密的。根據協(xié)議標準的描述葫男,包中如果有
dataprotected
字段抱冷,則表示這個數據本身是被加了密的,不知道這個數據具體是什么梢褐,當然旺遮,如果有密碼,wireshark
也有一個可以按照這個密碼解密的工具盈咳,有時候不好用耿眉。這里所說的數據加密和網絡的加密不一樣,可能訪問網絡本身是需要密碼(網絡是security
的)鱼响,而數據本身沒有crpted
(加密)鸣剪。對于一個加了密的數據包,我們一般看不出來這個包到底是做什么用的或者什么類型的等等丈积。抓包的時候筐骇,要注意包中指示的源和目的地址以及包的序號。在無線網絡中通信的時候江滨,我們抓包的時候可能會看到被抓取的包對應
AP
的MAC
地址是不存在的铛纬,其實抓包時AP
的MAC
是BSSID
,它和實際標注的MAC
地址不一定一樣(但是一般都差不多唬滑,也就是之后最后面的幾位不一樣)告唆。有時候,我們看到抓取的包中的MAC
地址有許多只相差幾位晶密,那么可能它們都屬于一個設備(因為雖然設備可能只標注了一個網卡的MAC
地址擒悬,但是它卻“虛擬”出或者實際有多個MAC
地址),所以當我們看到包中對應兩個AP
的MAC
地址幾乎一樣的時候稻艰,一般來說懂牧,這兩個MAC
地址很可能就是一個設備的。還有在抓包的時候尊勿,一個地址上面的包的sequence
(序號)是連續(xù)的归苍,除非丟包了導致重復或者缺失。如果一個設備虛擬出來兩個地址运怖,那么也可能由于沒有經過什么處理拼弃,導致這兩個地址上面的包共同起來是連續(xù)的(如前所述,這兩個地址和MAC
很接近摇展,應該是BSSID
)吻氧。抓取的數據幀如果是廣播幀則不需要確認(
ACK
),如果是單播幀,則一般需要確認(ACK
)盯孙。例如鲁森,Probe
幀是廣播幀,所以它無對應的ACK
確認幀振惰,對Probe
的回復則叫做Probe Response
歌溉;注意ACK
幀本身用于確認,是單播的骑晶,但是它本身卻不需要再被確認了痛垛。從包中的目的MAC
地址中,可以看出這個包是廣播/多播幀還是單播幀桶蛔。MAC
第一個字節(jié)的第一個位是1匙头,表示組播,前兩位是1表示廣播仔雷,第一個字節(jié)第一個位是0表示單播蹂析。這里注意,MAC
不是值碟婆,而是一個Pattern
电抚,所以沒有Endian
之說,也沒有那個位高竖共,那個MAC
大之說喻频。例如:“a8:27:26:....:b7
”,這里第一個字節(jié)就是a8
(10101000
)肘迎,其第一個字節(jié)的第一位就是8的最“右”位,即“0”锻煌,所以它的第一個字節(jié)的第一個位是0妓布,是一個單播地址。其實宋梧,這里涉及到大端小端問題匣沼,后面也會講到,總之捂龄,以太網線路上按Big Endian
字節(jié)序傳送報文(也就是最高字節(jié)先傳送)释涛,而比特序是Little Endian
(也就是字節(jié)內最低位先傳送)所以,一個十六進制表示法表示的MAC
地址01-80-C2-00-00-00
倦沧,傳送時的bit
順序就是:1000 0000 0000 0001 0100 0011 0000 0000 0000 0000 0000 0000
唇撬。使用
Wire Shark
在抓包或者顯示包的時候,都可以設置過濾器(filter
)展融。抓包時候設置的過濾器叫做capture filter
窖认,它是用BPF
(berkerley package filter
)這個比較通用的語言來描述(注意這不是Wireshark
專用的filter
語言,而是一個通用的語言)。但是抓包期間的過濾扑浸,有時候不準烧给,所以我們一般先將所有的包抓取下來,然后用WireShark
中顯示的過濾器(即view filter
)來顯示我們關注的包喝噪,這里我們可以用macro
來定義比較復雜的顯示過濾條件础嫡。保存的時候,可以用按照顯示過濾還是抓取過濾的方式保存內容酝惧。盡量不要抓取
Channel Width
為40MHZ
的Channel
上的幀榴鼎。我們還需要注意的是,使用Sniffer
抓取無線網絡包的時候系奉,AirPcap
無法正常抓取40MHZ Channel Width
的包檬贰,或者說對抓取這個Channel Width
上面的包支持不好。如果非要抓取40MHZ Channel Width
的包缺亮,那么就在40
或者36
號Channel
上面進行抓取翁涤,并在Wireshark
上面設置channel=36,offset+1
(平時offset
都是0)萌踱,這樣能夠抓取Channel Width
為40MHZ
的包(但是葵礼,其他Channel
上面的40mHZ
的包還是無法抓取)并鸵,這是由AirPcap
內部的芯片固件的問題決定的(估計broad com
芯片公司也不愿花過多的精力來支持這個很少有人用的抓包工具的這個功能)鸳粉。
另外,假設一個無線工作站是基于 Android
系統(tǒng)的(例如智能手機或者平板電子書)那么我們可以利用 wpa_cli status
命令來可以查看當前設備的連接的 SSID
园担, BSSID
届谈, MAC
, IP
等信息弯汰,(這里“cli”=“command line interface”)艰山。 還有更“復雜”的命令 wc
和 wl
,其中 wc
是比較上層的命令咏闪, wl
是下層的命令(是基于芯片是否支持的曙搬,例如 wl
在 broadcom
芯片上支持,但是在 ti
上面就沒有了)鸽嫂。
三纵装、一些原理
1、常見的幀
在 802.11
中的幀有三種類型:管理幀( Management Frame
据某,例如 Beacon
幀橡娄、 Association
幀)、控制幀( Control Frame
癣籽,例如 RTS
幀瀑踢、 CTS
幀扳还、 ACK
幀)、數據幀( Data Frame
橱夭,承載數據的載體氨距,其中的 DS
字段用來標識方向很重要)。幀頭部中的類型字段中會標識出該幀屬于哪個字段棘劣。
ACK
幀
單播( unicast
)幀都需要用 ACK
來確認俏让, ACK
本身不是廣播幀, ACK
在 MAC
上是 unicast
的茬暇,幀中有 receive
地址字段(用來標識是對誰的確認)首昔,但是它卻不需要再確認了。 ACK
只有接收地址( receive
)而無源地址( src
)和序號( sequence
)糙俗,因為發(fā)送和接受是一個整體勒奇,發(fā)送之后,其他人(除了這個發(fā)送的接受者)都不會再發(fā)送數據了(無線協(xié)議中的沖突避免機制)巧骚,所以接受者會發(fā)送一個沒有 src
的 ack
幀給 receiver
赊颠,而接收 ACK
的一端會根據這個知道它收到了一個 ACK
幀(其實根據協(xié)議,應當把發(fā)送單播幀和收到它相應的 ACK
看作一個原子的不可分割的整體劈彪,表示一次成功的通信)竣蹦。
Beacon
幀
Beacon
幀定時廣播發(fā)送,主要用來通知網絡 AP
的存在性沧奴。 Station
和 AP
建立 Association
的時候痘括,也需要用到 Beacon
。 Station
可以通過 Scan
來掃描到 Beacon
滔吠,從而得知 AP
的存在纲菌,也可以在掃描的時候通過主動發(fā)送 Probe
來探尋 AP
是否存在。也就是說疮绷,建立 Association
的時候有主動的掃描或者被動的掃描兩種方式翰舌。另外, Beacon
還包含了關于 Power Save
矗愧、以及地區(qū)等信息。
Association
幀
通常 Association
幀都有 Probe Request
和相應的 Probe Response
郑原。 Association
的 Request
中有其所需要的 Channel
以及 Data Rate
等狀態(tài)唉韭,以便讓 AP
決定是否讓它與自己建立 Association
。而關聯(lián)是否成功犯犁,主要是看 Response
中的 Status code
是否為 Success
属愤。
Data
幀
Data Frame
具有方向,這個方向用 DS
(分布式系統(tǒng))字段來標識酸役,以區(qū)分不同類型幀中關于地址的解析方式住诸;其它的類型 Frame
例如 Control Frame
或者管理幀中驾胆,這個字段是全零。這個字段用兩位表示贱呐,這兩個位的含義分別表示 To Ds
和 From Ds
丧诺,大致含義如下:
To DS
: 表示Station->AP
,一般也叫Upload
奄薇。-
From DS
表示AP->Station
驳阎,一般也叫Download
。這里馁蒂,我們可以大致將
DS
看做AP
呵晚,To/From
是從AP
的角度來考慮的。To DS
就是讓AP
干活沫屡。另外Data Frame
中還有一個比較重要的字段就是Sequence
饵隙,表示幀的序號。重傳幀序號一樣沮脖,但是多了一個Retry
的字段表示該幀是重傳的金矛。
為了便于理解,這里再次詳細解釋一下 DS
字段的含義:
-
To DS=0
,From DS=0
: 表示Station
之間的AD Hoc
類似的通信倘潜,或者控制偵绷柒、管理偵。 -
To DS=0
,From DS=1
:Station
接收的偵涮因。 -
To DS=1
,From DS=0
:Station
發(fā)送的偵废睦。 -
To DS=1
,From DS=1
: 無線橋接器上的數據偵。
這里养泡,我們主要關注 To DS
和 From DS
分別是 01
和 10
的情況嗜湃, DS
雖然大致等于 AP
但是它不是 AP
,它其實是一個系統(tǒng)澜掩,從 Station
的角度來看购披,比較容易理解。并且 To DS
和 From DS
一定是無線網絡上面數據偵才有的字段肩榕。
2刚陡、幀和大端小端
Ethernet
和 802.11
都是按照 Little Endian
的方式來傳輸數據,也就是說株汉,而 MAC
層傳輸的時候筐乳,是采用 Little Endian
的方式,一個字節(jié)一個字節(jié)的傳輸的乔妈,前面的低位字節(jié)先傳輸蝙云,后面的高位字節(jié)后傳輸(傳輸單位不是按位而是字節(jié));在協(xié)議標準上描述一個幀的時候路召,一般是先按照 Little Endian
的方式對其進行總體描述勃刨,然后具體細節(jié)說每個字段的值波材,這時候這個字段值是 Big Endian
方式表示的,這一點應當注意身隐。
例如廷区,協(xié)議標準中可能能對某個幀格式做如下的描述:
|b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|...|...|
這里,最低位 b0
在最前面抡医,所以這里采用的就是小端的方式來描述幀的總體格式信息躲因。傳輸的時候,就按照這里的方式忌傻,以字節(jié)為單位向物理層進行傳輸(先傳 b0~b7
然后 b8~b16
等等)大脉。
但是,在解釋這個幀的各個域的時候卻采用大端的方式進行描述水孩。假設 b3=0
, b2=1
, b1=0
, b0=0
四者共同組成一個名字為 FLAG
的域镰矿,那么會有類似如下的描述:
FLAG=4(即FLAG為0100):表示XXX。
所以俘种,協(xié)議標準中具體描述某個域的時候秤标,一般直接用大端方式表示的數值( b3b2b1b0=0100
)來描述;而傳輸數據幀或者在協(xié)議標準中描述整體幀的時候宙刘,中給出的卻是小端的方式( b0b1b2b3=0010
)苍姜。 這里的每個字段都是幀的一個部分,在管理幀(后面會說)中長度不固定的部分又叫 IE
( information Element
) 悬包。
另外注意衙猪,內存地址是用來標記每個字節(jié)的而不是位,所以內存里面大端小端也是以字節(jié)而不是位為單位的(前面描述“大端“布近、”小端”的時候卻以位序而非字節(jié)序垫释,這一點需要明辨,不要混淆)撑瞧。假設奔騰的機器棵譬, CPU
為 32
位,采用 Little Endian
方式预伺,那么表示1這個 int
類型整數的時候订咸,假設它在數值上是十六進制的" 00000001
",那么存放在內存中卻是由低位到高位依次存放的酬诀,由低到高地址依次為: 01
脏嚷、 00
、 00
料滥、 00
(也就是說小端方式存放在內存中的時候然眼,是按照含有最低位的字節(jié)存放在低地址艾船,注意是字節(jié)葵腹,在內存中“位”沒有地址高每,所以沒有大端小端一說)。在傳遞幀的時候践宴,也是按照一個字節(jié)一個字節(jié)的傳輸鲸匿,而一個字節(jié)內部在實際上其實沒有什么端的分別,但是 wireshark
一律使用 b7b6b5b4b3b2b1b0
這樣的方式來用大端的方式顯示阻肩。
總之带欢,需要注意網絡層下面的幀的大端小端問題(不是網絡中的字節(jié)序, TCP/IP
中規(guī)定的網絡字節(jié)序是 Big Endian
)烤惊,大致就是:協(xié)議規(guī)定乔煞,傳輸的時候使用 Little Endian
;標準描述的時候用 Big Endian
和 Little Endian
都用柒室;另外渡贾, Wire shark
軟件抓的包中,好象全都用 Big Endian
來進行標示(無論是信息窗口還是內存窗口都這樣展示)雄右。
注:大端空骚、小端這里的端,為了便于記憶我們可以理解為起點擂仍。大端就是高位存放在前面囤屹,小端就是低位存放在前面。
3逢渔、 CSMA/CA
的機制
與以太網的 CSMA/CD
機制(沖突檢測)相對肋坚, 802.11
采用的 CSMA/CA
機制(沖突避免)。采用這個機制复局,可以保證每次通信的原子性(即每次通信所需要傳輸的多種不同類型的幀之間沒有夾雜其它通信的幀的干擾)冲簿,大體過程是:
- 鏈路空閑下來之后,所有
Station
在發(fā)送幀之前都首先等待一段時間(即DIFS
亿昏,又稱幀間隔時間)峦剔; - 到達
DIFS
之后,所有Station
進入競爭時間窗口(就是競爭期間)角钩,將這個競爭時間窗口分割成多個Slot
(退避時間間隔)吝沫,每個Station
隨機選擇一個Slot
; - 某個
Station
到達它Slot
對應的時間后開始發(fā)送數據递礼。選擇的Slot
越靠前惨险,則Station
在DIFS
后等待的時間(退避時間)越短,也越早發(fā)送實際數據脊髓; - 退避窗口的
Slot
有多個辫愉,選擇時可能某個Slot
被多個站點同時選取,這時發(fā)送會產生真正的數據沖突(如果多個人同時發(fā)送将硝,那么它們都要經過AP
來轉發(fā)恭朗,AP
無法同時聽見多個人的“說話聲音”)那么Station
就會再重新選擇并發(fā)送屏镊; - 當某
Station
發(fā)送數據之后,所有Station
會檢測到鏈路忙痰腮,于是放棄嘗試發(fā)送而芥,等Station
發(fā)送完數據之后,鏈路開始空閑膀值,于是又進入到1)重新開始這個過程棍丐。
對于以上的機制,如果我們讓某個 Station
經過 DIFS
之后沧踏,選擇的 Slot
越小歌逢,就意味著它發(fā)送幀的機會越大,也就是說這個 Station
的優(yōu)先權越高翘狱。這就是 Qos
(質量保證)的基本趋翻,前面也說過, Qos
就是“以一定的優(yōu)先級來保證傳輸的特定要求”盒蟆,要獲得這種優(yōu)先級踏烙,就要有相應的條件(例如“花錢”)(有一種不常用的無競爭發(fā)送,其實就是 DIFS
之后历等,不退避而直接發(fā)送)讨惩。
另外,其實對物理層上來說寒屯,所有的發(fā)送都是廣播荐捻,單播與否只是在鏈路層以上分辨的。上面提到的檢測鏈路是否忙寡夹,可以從鏈路上用軟件方式進行(例如增加幀的特殊字段)处面,也可以直接在物理層上進行,實際因為在物理層上成本較高菩掏,經常用的是前者魂角,具體參見協(xié)議。軟件檢測大致的思路就是智绸,進行一個通信的時候野揪,這個通信包含多個幀,每個幀有不同的作用瞧栗,發(fā)送的第一幀的時候斯稳,會通過其中的某個特殊字段( Duration
字段,也叫 NAV
迹恐,即網絡分配向量挣惰,是一個延遲時間值)告訴所有其它 Station
,在未來的一段時間內,鏈路被占用憎茂,以完成整個通信過程唆涝。這樣,其它 Station
在此期間就不會發(fā)送數據干擾這次通信了唇辨,以后這個通信的每一幀以及其 ACK
確認幀之間都會有一個很小的時間間隔(小于 DIFS
,即 SIFS
)能耻,并且每幀會視情況延長那個 Duration
字段赏枚,保證整個通信期間確實不會有其它人干擾,這樣整個通信就是原子性的了晓猛。
4饿幅、幀的來源和目的地址
因為無線網絡中沒有采用有線電纜而是采用無線電波做為傳輸介質,所以需要將其網絡層以下的幀格式封裝的更復雜戒职,才能像在有線網絡那樣傳輸數據栗恩。其中,僅從標識幀的來源和去向方面洪燥,無線網絡中的幀就需要有四個地址磕秤,而不像以太網那樣簡單只有有兩個地址(源和目的)。這四個地址分別是:
-
SRC
: 源地址(SA
)捧韵,和以太網中的一樣市咆,就是發(fā)幀的最初地址,在以太網和wifi
中幀格式轉換的時候再来,互相可以直接復制蒙兰。 -
DST
: 目的地址(DA
),和以太網中的一樣芒篷,就是最終接受數據幀的地址搜变,在以太網和wifi
中幀格式轉換的時候,互相可以直接復制针炉。 -
TX
: 也就是Transmiter
(TA
)挠他,表示無線網絡中目前實際發(fā)送幀者的地址(可能是最初發(fā)幀的人,也可能是轉發(fā)時候的路由)篡帕。 -
RX
: 也就是Receiver
(RA
)绩社,表示無線網絡中,目前實際接收幀者的地址(可能是最終的接收者赂苗,也可能是接收幀以便轉發(fā)給接收者的ap
)愉耙。
注意,其實拌滋,還有一個 BSSID
朴沿,用來區(qū)分不同網絡的標識。在 802.11
幀中,有四個地址字段赌渣,一般只用到其中的三個魏铅,并且,這四個字段對應哪種地址或者使用哪些地址坚芜,根據幀中的另外一個 DS
字段以及幀的類型而有不同的解釋览芳。
下面舉三個例子。
(1)無線網絡中的 Station
和以太網中的 Host
進行通信
Station<- - - - ->AP<---------->Host
-
當
Station->Host
的時候- 首先
Station->AP
鸿竖,這時候Src=Station
,Dst=Host
,Tx=Station
,Rx=AP
沧竟, - 然后
AP->Host
,這時候Src=Station
,Dst=Host
缚忧,因為AP
轉發(fā)的時候悟泵,是在以太網中,所以沒有Tx
和Rx
闪水。
- 首先
-
當
Host->Station
的時候- 首先
Host->AP
糕非,這時候Src=Host
,Dst=Station
球榆, - 然后
AP->Station
朽肥,這時候,Src=Host
,Dst=Station
,Tx=AP
,Rx=Station
持钉。
- 首先
(2)無線網絡中的 Station
之間進行通信
Station1<- - - - ->AP<- - - - ->Station2
當 Station1->Station2
時
- 首先
Station1->AP
鞠呈,Src=Station1
,Dst=Station2
,Tx=Station1
,Rx=AP
呀打, - 然后
AP->Station2
哺呜,Src=Station1
,Dst=Station2
,Tx=AP
,Rx=Station2
。
可見垦缅,在無線網絡中舀射,始終存在 Tx
和 Rx
窘茁,但是,這四個地址中還是只有三個地址足矣脆烟。
(3)當兩個無線網絡中的 Station
進行通信的時候
Station1<- - - - ->AP1<- - - - ->AP2<- - - - - ->Station2
當 Station1->Station2
時:
- 首先
Station1->AP1
山林,Src=Station
,Dst=Station2
,Tx=Station1
,Rx=AP1
, - 然后
AP1->AP2
邢羔,Src=Station
,Dst=Station2
,Tx=AP1
,Rx=AP2
驼抹, - 然后
AP2->Station2
,Src=Station1
,Dst=Station2
,Tx=AP2
,Rx=Station2
拜鹤。
注意框冀,這個時候, AP
起到橋接的作用敏簿,所以四個地址各不相同明也,同時宣虾, AP
之間或者 Station
和 AP
之間的那部分連接,也可以是以太網温数。
綜上可知绣硝,無線網絡中的 Station
想要通信,必須經過 AP
來進行“轉發(fā)”撑刺,其實鹉胖, Tx
和 Rx
是無線網絡中的發(fā)和收,也就是 Radio
够傍;而 Src
和 Dst
是真正的發(fā)送源和接收者甫菠。
5、 Sleep
和 Power save
(節(jié)電)
其實王带,無線網絡中的 Power save
是指 Station
的 Sleep
(睡眠),并且這個 Sleep
并不是整個系統(tǒng)的 Sleep
市殷,確切來說愕撰,應該是其 wifi
中 Receiver
(接收天線)的 Sleep
。 Station
在睡眠的期間還是可以 Transmit
(發(fā)送)的醋寝,只是當 AP
知道 Station
的 Receiver
處于 Sleep
狀態(tài)時搞挣,就不會給 Station
發(fā)送幀了。 Station
在 Sleep
之前音羞,會給 AP
發(fā)送一個特殊的幀囱桨,告訴 AP
說它( Station
)要睡眠了, AP
通過這個幀來記住是這個 Station
睡眠了嗅绰,然后 AP
就不會給這個 Station
單獨發(fā)送數據了舍肠。
當有和這個 Station
通信的包想通過 AP
轉達的給這個 Station
時候, AP
會幫這個 Station
將它們緩存起來窘面,然后在 Beacon
廣播幀中添加一個特殊的位(實際這個位是一個 bitmap
中的位翠语,這個 bitmap
表示所有和該 AP
建立了關聯(lián)的 Station
,而這個睡眠的 Station
的相應位為被置1則表示有消息要傳達給這個 Station
)财边,來表示這個 Station
有數據到達了( Beacon
是定時廣播的幀肌括,前面說過它是用來通知無線網絡,這個 AP
的狀態(tài))酣难,而不是直接發(fā)送給 Station
谍夭。而這個睡眠的 Station
,會在睡眠期間不時地醒來憨募,以檢查 Beacon
幀中的狀態(tài)紧索,當發(fā)現(xiàn)有給它的數據的時候,就會通過發(fā)送一個 Power Poll
的幀來收取數據菜谣,收取之后繼續(xù)睡眠(所以 ping
一個睡眠狀態(tài)的 Station
齐板,響應的時間要慢好多)。
對于發(fā)送給這個 Station
的廣播幀,其處理方式和普通幀有一點不同:當有廣播幀要傳達給這個 Station
的時候甘磨, AP
會為這個 Station
緩存發(fā)送給它的廣播幀橡羞,但是緩存的時間是 DTIM
(一般為 300ms
)。注意:單播幀緩存的時間不一定是多少济舆,廣播幀卻緩存 DTIM
的時間卿泽。 AP
每發(fā)送一個 Beacon
的時候,都會將 Dtim
減少1滋觉,而 Station
睡眠的時候签夭,會不時地醒來,查看一下 Beacon
幀中的 dtim
值椎侠。當 Station
發(fā)現(xiàn)其 DTIM
值變成0的時候第租,就醒來長一些的時間,看看有沒有廣播給它的數據我纪,如果有的話就用類似 Power Save Poll
的幀接受慎宾,沒有則繼續(xù)睡眠。
這里浅悉,接收數據是根據是否有 more data
類似的字段來確認是否有更多的數據的趟据;重發(fā)的幀是用類似 retry
的字段來標記。另外注意术健,當 Station
進行 Sleep
的時候汹碱,還是可以主動 Tranmit
消息的,當 Station
主動 Transmit
消息的時候荞估,它會等待 Reply
咳促,所以這個時候, Receiver
是 on
的狀態(tài)勘伺。用一個圖示來標識 Sleep
等缀, Receive
, Transmit
時的電源消耗狀況娇昙,大致如下:
power
^
trans | ------------------------
| | |
receive | -----------| |
| | |
sleep |--------| |--------------------
|----------------------------------------------------------------------> time
可見不同狀態(tài)尺迂,電源消耗狀態(tài)不同(傳送比接收更耗電),另外冒掌,如果電源供電不足噪裕,在某個狀態(tài)中就會出現(xiàn)通信失敗的情況。(好像 ap
上面 broadcom
芯片中的睡眠之后股毫,醒來立即重新發(fā)送的時候經常開始會失敗膳音,可能就是這個原因)。
6铃诬、建立Association
下面是 Station
和 Ap
建立開放 Association
的過程:
-
Ap
周期性地廣播Beacon
幀 -
Station
廣播Probe Request
到達Ap
-
Ap
向Station
發(fā)送Probe Reponse
-
Station
向Ap
發(fā)送ACK
-
Station
向Ap
發(fā)送Authentication Request
-
Ap
向Station
發(fā)送ACK
-
Ap
向Station
發(fā)送Authentication Reponse
-
Station
向Ap
發(fā)送ACK
-
Station
向Ap
發(fā)送Association Request
-
Ap
向Station
發(fā)送ACK
-
Ap
向Station
發(fā)送Association Reponse
-
Station
向Ap
發(fā)送ACK
-
Station
和Ap
開始相互通信祭陷。
可見苍凛,廣播幀不用回復,單播幀需要用 ACK
確認兵志, ACK
本身不用被確認醇蝴。
四、其它
如有更多補充性內容想罕,有待添加悠栓。
本文內容主要來自學習的總結以及網絡,主要集中于無線網絡中物理層以上相對比較常見的部分按价,如果想要理解更詳細和全面的內容則需參考相關書籍以及網絡協(xié)議惭适。由于對此方面的知識也是在初步學習之中,若文章中有錯誤和不完整之處楼镐,謝謝讀者指正癞志。_