物聯(lián)網(wǎng)之Wifi協(xié)議
今天來重點介紹一下WIfi協(xié)議,咱們用的其實已經(jīng)很多了。

主要內(nèi)容:
?、基本概述
?、實踐基礎
三、?些原理
?、基本概述
============================
1、有線和?線?絡
?前有線?絡中最著名的是以太?(Ethenet),但是?線?絡WLAN是?個很有前景的發(fā)展領(lǐng)域,雖然可能不會完全取代以太?,但是它正擁有越來越多的?戶,?線?絡中最有前景的是Wifi。本?介紹?線?絡相關(guān)內(nèi)容。
?線?絡相?有線?絡,還是有許多的缺點的:
(*)通信雙?因為是通過?線進?通信,所以通信之前需要建?連接;?有線?絡就直接?線纜連接,不?這個過程了。
(*)通信雙?通信?式是半雙?的通信?式;?有線?絡可以是全雙?。
(*)通信時在?絡層以下出錯的概率?常?,所以幀的重傳概率很?,需要在?絡層之下的協(xié)議添加重傳的機制(不能只依賴上?TCP/IP的延時等待重傳等開銷來保證);?有線?絡出錯概率?常?,?需在?絡層有如此復雜的機制。
(*)數(shù)據(jù)是在?線環(huán)境下進?的,所以抓包?常容易,存在安全隱患。
(*)因為收發(fā)?線信號,所以功耗較?,對電池來說是?個考驗。
(*)相對有線?絡吞吐量低,這?點正在逐步改善,802.11n協(xié)議可以達到600Mbps的吞吐量。
2、協(xié)議
Ethenet和Wifi采?的協(xié)議都屬于IEEE 802協(xié)議集。其中,Ethenet以802.3協(xié)議做為其?絡層以下的協(xié)議;?Wifi以802.11做為其?絡層以下的協(xié)議。?論是有線?絡,還是?線?絡,其?絡層以上的部分,基本?樣。
這?主要關(guān)注的是Wifi?絡中相關(guān)的內(nèi)容。Wifi的802.11協(xié)議包含許多?部分。其中按照時間順序發(fā)展,主要有:
(1)802.11a,1999年9?制定,?作在5gHZ的頻率范圍(頻段寬度325MHZ),最?傳輸速率54mbps,但當時不是很流?,所以使?的不多。
(2)802.11b,1999年9?制定,時間?802.11a稍晚,?作在2.4g的頻率范圍(頻段寬度83.5MHZ),最?傳輸速率
11mbps。
11mbps。
(3)802.11g,2003年6?制定,?作在2.4gHZ頻率范圍(頻段寬度83.5MHZ),最?傳輸速率54mbps。
(4)802.11n,2009年才被IEEE批準,在2.4gHZ和5gHZ均可?作,最?的傳輸速率為600mbps。
這些協(xié)議均為?線?絡的通信所需的基本協(xié)議,最新發(fā)展的,?般要?最初的有所改善。
另外值得注意的是,802.11n在MAC層上進?了?些重要的改進,所以導致?絡性能有了很?的提升例如:
(*)因為傳輸速率在很?的程度上取決于Channel(信道)的ChannelWidth有多寬,?802.11n中采?了?種技術(shù),可以在傳輸數(shù)據(jù)的時候?qū)蓚€信道合并為?個,再進?傳輸,極?地提?了傳輸速率(這?稱HT-40,high through)。
(*)802.11n的MIMO(多輸?輸出)特性,使得兩對天線可以在同時同Channel上傳輸數(shù)據(jù),?兩者卻能夠不相互?擾(采?了OFDM特殊的調(diào)制技術(shù))
3、術(shù)語
講述之前,我們需要對?線?絡中?些常?的術(shù)語有所了解。這?先列出?些,后?描述中出現(xiàn)的新的術(shù)語,將會在描述中解釋。
(*)LAN:即局域?,是路由和主機組成的內(nèi)部局域?,?般為有線?絡。
(*)WAN:即?域?,是外部?個更?的局域?。
(*)WLAN(Wireless LAN,即?線局域?):前?我們說過LAN是局域?,其實?多數(shù)指的是有線?絡中的局域?,?線?絡中的局域?,?般?WLAN。
(*)AP(Access point的簡稱,即訪問點,接?點):是?個?線?絡中的特殊節(jié)點,通過這個節(jié)點,?線?絡中的其它類型節(jié)點可以和?線?絡外部以及內(nèi)部進?通信。這?,AP和?線路由都在?臺設備上(即Cisco E3000)。
(*)Station(?作站):表?連接到?線?絡中的設備,這些設備通過AP,可以和內(nèi)部其它設備或者?線?絡外部通信。
(*)Assosiate:連接。如果?個Station想要加?到?線?絡中,需要和這個?線?絡中的AP關(guān)聯(lián)(即Assosiate)。
(*)SSID:?來標識?個?線?絡,后?會詳細介紹,我們這?只需了解,每個?線?絡都有它??的SSID。
(*)BSSID:?來標識?個BSS,其格式和MAC地址?樣,是48位的地址格式。?般來說,它就是所處的?線接?點的MAC地址。某種程度來說,它的作?和SSID類似,但是SSID是?絡的名字,是給?看的,BSSID是給機器看的,BSSID類似MAC地址。
(*)BSS(Basic Service Set):由?組相互通信的?作站組成,是802.11?線?絡的基本組件。主要有兩種類型的IBSS和基礎結(jié)構(gòu)型?絡。IBSS?叫ADHOC,組?是臨時的,通信?式為Station<->Station,這?不關(guān)注這種組??式;我們關(guān)注的基礎結(jié)構(gòu)形?絡,其通信?式是Station<->AP<->Station,也就是所有?線?絡中的設備要想通信,都得經(jīng)過AP。在?線?絡的基礎形?絡中,最重要的兩類設備:AP和Station。
(*)DS(Distributed System):即分布式系統(tǒng)。分布式系統(tǒng)屬于802.11邏輯組件,負責將幀轉(zhuǎn)發(fā)??的地址,802.11并未規(guī)定其技術(shù)細節(jié),?多數(shù)商業(yè)產(chǎn)品以橋接引擎合分步式系統(tǒng)媒介共同構(gòu)成分布式系統(tǒng)。分步式系統(tǒng)是接?點之間轉(zhuǎn)發(fā)幀的???絡,?般是以太?。其實,???絡并不是分步系統(tǒng)的全部,?是其媒介。主要有三點:???(例如以太?)、橋接器(具有有線?線兩個?絡接?的接?點包含它)、屬于???上的接?點所管轄的基礎性?絡的station通信(和外界或者BSS內(nèi)部的station)必須經(jīng)過DS、?外部路由只知道station的mac地址,所以也需要通過分布式系統(tǒng)才能知道station的具體位置并且正確送到。分步式系統(tǒng)中的接?點之間必須相互傳遞與之關(guān)聯(lián)的?作站的信息,這樣整個分步式系統(tǒng)才能知道哪個station和哪個ap關(guān)聯(lián),保證分步式系統(tǒng)正常?作(即轉(zhuǎn)達給正確的station)。分步式系統(tǒng)也可以是使??線媒介(WDS),不?定?定是以太?。總之,分步式系統(tǒng)???絡(例如以太?)做為媒介,連接各個接?點,每個接?點與其內(nèi)的station可構(gòu)成BSS,各個接?點中的橋接控制器有到達???絡和其內(nèi)部BSS?線?的接?(類似兩個MAC地
址),station通信需要通過分布式系統(tǒng)。
?、實踐基礎
============================
1、?些參數(shù)
(*)MAC
MAC(即Medium/MediaAccess Control, 介質(zhì)訪問控制),是數(shù)據(jù)鏈路層的?部分。MAC地址是燒錄在
NetworkInterfaceCard(即?卡,簡稱NIC)?的,它也叫硬件地址,是由48位(即bit,?字節(jié)為8位,即1byte=8bits)16進制的數(shù)字組成。其中0-23位叫做組織唯?標志符(organizationally unique,簡稱OUI),是識別LAN(局域?)節(jié)點的標識(在有些抓包?具抓包的時候會將前三個字節(jié)映射成某種組織名稱的字符,也可以選擇不顯?這種映射)。24-47位是由?家??分配。
(*)SSID
表??個??的名字,?線路由通過這個名字可以為其它設備標識這個?線路由的??。設備進?掃描的時候,就會將相應SSID掃描到,然后就能夠選擇相應的SSID連接到相應的?線?絡(當然不掃描,理論上也可以直接指定??事先已經(jīng)知道的ssid進?連接)。SSID 可以和其它的重復,這樣掃描的時候會看到兩個同樣SSID的?線?絡,其實這?般?于將?個?線?絡擴?的情況(畢竟?線路由器?線信號的覆蓋范圍是有線的):當想要擴??個?線?絡(即SSID固定)的范圍的時候,可以給多個路由設置相同的SSID來達到這個?的。(這也是漫游的原理,漫游的時候,我們可以在遠?或者本地都能夠打電話,也就是訪問移動通信?絡)。
SSID和BSSID不?定??對應,?個BSSID在不同的Channel上?可能會對應到多個SSID,但是它們在?個Channel是??對應的;另外,漫游的時候,雖然SSID不變,但是BSSID?定是會變化的。我們經(jīng)常可以看到實際數(shù)據(jù)包中的AP的MAC地址和BSSID只差?位,其實實際設備的MAC地址可能只有?個,和BSSID沒什么對應關(guān)系。在?個包含了路由功能和AP功能的?線路由器(Fat AP)上?,很可能是:路由器有兩個MAC地址,?個?于外?(WAN),?個?于內(nèi)?(WLAN和LAN),?般路由器上?或者配置路由器的?頁上?只標注外?的MAC地址;內(nèi)?的MAC地址和外?MAC地址?般只有?位不同(甚?連續(xù),也有些相差很多的例外)。
(*)Band(頻率范圍)
?般ap可以?持5g或2.4g兩個頻率范圍段的?線信號。如果兩者同時可以設置,?不是互斥那么,這個路由器還能夠同時?持兩種頻段(頻段即Band),這相當于這個ap可建?兩個?線?絡,它們采?不同的頻段(這類似收?機在長波范圍內(nèi)收?和短波范圍內(nèi)收?)。
(*)Channel(信道)
Channel是對頻段的進?步劃分(將5G或者2.4G的頻段范圍再劃分為?個?的頻段,每個頻段稱作?個Channel),
有”5.18GHZ“,“Auto(DFS)”等等,處于不同傳輸信道上?的數(shù)據(jù),如果信道覆蓋范圍沒有重疊,那么不會相互?擾。對于信道的使?,在國際上有所規(guī)定。其中有些信道是?需授權(quán)即可直接使?的(究竟是那個頻段的那個信道,依照各個國家?不同),?需授權(quán)使?的意思是,傳輸數(shù)據(jù)的時候(?論以哪種?線?式),可以讓設備收發(fā)的功率導致傳輸時的數(shù)據(jù)進?該信道的頻率并在該信道所在頻段寬度內(nèi)進?傳輸;授權(quán)的使?的意思是,不允許傳輸時使?授權(quán)信道進?,否則會違反規(guī)定,并且?擾該信道上其他數(shù)據(jù)的傳輸。另外,除了wifi,微波、紅外線、藍?(使?802.15協(xié)議)的?作頻段也都有在2.4gHZ范圍內(nèi)的,所以,它們傳輸?shù)臅r候會對wifi傳輸造成?擾,因為兩者在不同的協(xié)議下進?通信,所以互相將對?傳輸?shù)男盘栕R別為噪聲。有時候配置AP的時候,Channel中有?個類似“Auto”的選項值,這表?打開AP的時候,AP??Scan周圍的環(huán)境,選擇?個?擾最?的Channel來進?通信,當選擇好了?個Channel的時候,?般就不會改變了。
(*)Channel Width(信道寬度)
(*)Channel Width(信道寬度)
這?的Channel Width是信道的帶寬,有”20M HZ“、”40M HZ“等,它表??個Channel?段的寬度(假設5g的頻段寬度總共為100M,平均劃分為互不?擾的10個Channel,那么每個Channel的Channel Width就為100M/10=10M,實際Channel并不?定是完全不重疊的)。這個參數(shù)可能依賴于?些其它的選項,例如不是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é)調(diào)(例如讓誰先通信誰等?會再通信之類的),但是這樣?絡的性能就不如沒有?擾的時候好了。
(*)Wireless Security(?線?絡的安全性)
這?主要涉及WEP、WPA、WPA2和RC4、TKIP、AES。
IEEE 802.11 所制定的是技術(shù)性標準 ,Wi-Fi 聯(lián)盟所制定的是商業(yè)化標準 , ? Wi-Fi 所制定的商業(yè)化標準基本上也都符合 IEEE 所制定的技術(shù)性標準。WEP 是1999年9?通過的 IEEE 802.11 標準的?部分;WPA(Wi-Fi Protected Access) 事實上就是由 Wi-Fi 聯(lián)盟所制定的安全性標準 , 這個商業(yè)化標準存在的?的就是為了要?持 IEEE 802.11i 這個以技術(shù)為導向的安全性標準;? WPA2 其實就是 WPA 的第?個版本。直觀點說,WEP是較?的認證?法它有好?個弱點,因此在2003年被WPA淘汰,WPA?在2004年由完整的 IEEE
802.11i 標準(?稱為 WPA2)所取代。
WEP(Wired Equivalent Privacy),采?名為RC4的RSA加密技術(shù);WPA(Wi-Fi Protected Access) ,采?新的TKIP算
法,TKIP算法保留了RC4所以也有其弱點,但是這個時候更好的CCMP還沒完成,所以先在WPA上?TKIP技術(shù);WPA2是WPA的第2個版本,采?CCMP加密協(xié)定(在有些路由器等設備上設定加密協(xié)定或者加密算法的時候,可能會?類似AES之類的字眼替代CCMP)。所以WPA2+AES是安全性最強的。
另外,在有些?線?路設備的參數(shù)中會看到像 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上都有?個參數(shù),表明它是處于哪個Region(地區(qū))。Station根據(jù)AP中設置的Region調(diào)整其相應的發(fā)射功率以遵守該地區(qū)的規(guī)定。AP的調(diào)整過程?般都是?動設定,設置好AP所處的Region之后,這些信息就會在AP發(fā)送的Beacon幀(后?會說到)中包含了;通過這個AP連接到?線?絡上的Station,從Beacon幀中了解到這些Region信息,并且根據(jù)這些信息中的規(guī)定和AP進?通信。如果AP開始設置錯了,那么Station和AP通信的時候,采?的將會是不符合Region規(guī)定的頻段,可能會對該Region中的其它傳輸?絡造成?擾,這應當是“?法”的。
(*)Transmission Rate
設置傳輸速率。這?采?不同的?線?絡傳輸協(xié)議(802.11a,802.11b,802.11g等),那么可以設置的速率范圍有所不同,這?的速度是指理論的速度,實際中,由于各種?擾因素,傳輸?shù)乃俾士赡軙?設置的?。
?的速度是指理論的速度,實際中,由于各種?擾因素,傳輸?shù)乃俾士赡軙?設置的?。
?般??,在?線?絡中,對于某種協(xié)議的性能進?描述時,我們需要注意的是,描述時提到的傳輸速率(Datarate)和吞吐量(Throughput)是不同的。Datarate是理論上?最?數(shù)據(jù)傳輸速率,?Throughput是數(shù)據(jù)的實際最?吞吐量。因為?家以及傳輸時所使?的協(xié)議等各種因素造成的開銷,會導致實際吞吐量?理論吞吐量要?,?般實際最?吞吐為理論最?的50%左右(?個不太準確但是相對直觀的估計:在?絡中,?清視頻所需的Throughput也就30mbps左右,?絡上?般的視頻也就4mbps左右)。
(*)Qos(質(zhì)量保證)
?線?絡中的QOS是質(zhì)量保證,?致的意思是,傳輸數(shù)據(jù)的時候,考慮各種因素(例如收費策略,所處地區(qū)等),以?定的優(yōu)先級來保證傳輸?shù)奶囟ㄒ螅?般就是速度),如果帶寬?夠的話,QOS反?不需要了。
(*)RTS Threshold / CTS Protection Mode:
這?的RTS是Request-To-Send的簡寫,CTS是Clear-To-Send的簡寫。設置好RTS的閾值之后,如果超過這個閾值就會在發(fā)送信息之前先發(fā)送RTS,以減少?擾,相應的CTS會回應之前的RTS。?般都是AP發(fā)送CTS數(shù)據(jù),?Station發(fā)送RTS數(shù)據(jù)。
這?對RTS和CTS做?個簡單解釋:假設在同?個AP所覆蓋的?線?絡范圍內(nèi)的兩個Station A和B,它們之間可能會因為距離的原因互相不可見(例如它們在AP?絡范圍的兩端,?這兩端的距離?于兩者的信號覆蓋范圍),但是AP卻知道它們是在??的范圍內(nèi)。當?個A想要在AP的?絡中進?通信的時候,必定要經(jīng)過AP轉(zhuǎn)發(fā)它的信息,由于A不知道B的存在,所以如果同時B也通過AP進??絡通信,那么會出現(xiàn)AP同時收到A、B兩個Station的通信請求,?這在?線?絡中是不允許的(?線?絡中,同?時刻不能有多個?傳輸數(shù)據(jù))。在這種情況下,B和A互相?擾了對?的通信,但是卻互相不可見(不可見的節(jié)點互相被稱作隱藏節(jié)點)。如果在?個?絡中,這樣的隱藏節(jié)點很多,那么勢必會影響?絡的性能(因為數(shù)據(jù)?旦發(fā)送失敗,就要重傳,隱藏節(jié)點會導致重傳的機率增?)。這個時候,可采?RTS和CTS機制。即:在A想要通信的時候,先?播發(fā)送RTS給AP,告訴AP“它想要通信”,同時接受到RTS的別的Station(它們對發(fā)送RTS 的Station??可見)會知道A將要發(fā)送數(shù)據(jù),于是它們不會發(fā)送數(shù)據(jù)以免?擾A;AP收到RTS之后,會?播發(fā)送CTS,告訴所有在AP范圍內(nèi)的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會定時向其范圍內(nèi)?播SSID的信息,以表?AP的存在,這樣Station進??個區(qū)域之后,就能夠通過掃描知道這個區(qū)域是否有AP的存在。當然,除了AP?播SSID以告知其?線?絡存在之外,Station也可主動?播探尋包,在其能夠覆蓋的范圍內(nèi)詢問是否有AP存在(即我們通常所說的掃描尋找接?點)。
(*)DTIM Interval:
DTIM/TIM表?告訴Station,AP在為Station做package buffer(例如Station睡眠的時候)的緩存時間。為了節(jié)省電池使?時間,處于?線?絡中的Station可能會在?定時間之后?動進?休眠狀態(tài)。這個時候,AP會為這個Station緩存發(fā)送給它的數(shù)據(jù),?處于休眠狀態(tài)的Station只會在?定時間間隔內(nèi)給AP發(fā)送?個數(shù)據(jù)幀,以確認是否有發(fā)送給??的數(shù)據(jù)存在。例如,當我們在主機上ping另外?臺睡眠的機器的時候,收到另外?臺機器響應的時間,要?它不睡眠的時候響應的時間長很多。
(*)Fragmentation Threshold:
表??個package的分?閾值。我們可以設置分???,當發(fā)送的數(shù)據(jù)包超過這個閾值之后,802.11協(xié)議會?動對這個數(shù)據(jù)包進?分
割。如果設置的這個分?值越?,那么整個數(shù)據(jù)包越容易傳輸成功(因為如果出錯,那么只需要傳送?個?段?不是整個包,?線wifi?絡中數(shù)據(jù)傳輸時出錯的概率?有線的以太?要?的多的多),當然開銷也越?(因為需要額外的信息標記每個分?,以及各個分?傳輸成功之后涉及到的重組問題)。
2、抓包
?般來說,我們的機器上?的軟件抓取?線?卡上?的包的時候,其實這些包的?標地址都是這個機器的?線?卡,因為不是發(fā)給這個機器?線?卡的包都被?卡過濾了。所以如果我們想要抓取所處?線?絡環(huán)境下所有的包的時候,需要給機器配備?種特殊的設備(sniffer就是嗅探器),然后再通過抓包?具抓取并分析。有?個硬件設備叫做AirPcap,就是做這個?的,?有?百到上千美?,它可以同時做為嗅探器或者?線?卡使?,不過做為嗅探器的時候,會抓取所有經(jīng)過它的包。這個?具?前只有Windows上?的驅(qū)動,所以使?這個?具,只能在Windows上?,配合Wireshark抓包軟件進?抓包。
這?假設采?AirPcap嗅探,Wireshark軟件抓包(其它抓包軟件,例如linux下?的tcpdump等分析類似)。不?圖形?式詳細展?具體的抓包過程以及分析?法了,主要說?下抓包(這?的包實際主要指的是?絡層以下的包,更常見的稱呼應該是數(shù)據(jù)幀)時候需要注意的問題。
(*)Wireshark展?包的時候,?致都是按照協(xié)議規(guī)定的字段展?,也些地?按照它??特定的?式展?。因為這?著重講述?些抓包時注意的基本原理上?的東西,所以不會對此進?過多闡述。?致就是:Wireshark軟件中,對包展?的時候,按照協(xié)議規(guī)定的字段分別?Header和Body兩個部分展?;另外,在Header之前還有兩個部分是Wireshark為?便?戶?展?的包的??、時間等全局信息(例如見過表?這個包在B和G mode中的Channel 1時,?"BG1"表?)。所以,其實我們分析的時候,實際應該按照后?的Header和Body兩個部分進?。后?將基于以上所述,進?進?步的講解。
(*)抓包的時候,需要?先確認這個包是否是完整、正確的包。只要是校驗位(checksum)不對的,就是錯誤的包,也?法確定接收的時候那?出了差錯,所以這個包是應該忽略的,?乎沒有分析的價值。另外,抓包的時候,由于?擾等原因,抓取的內(nèi)容可能不是在實際傳輸所處的Channel上的包(例如在Channel 1上?嗅探,卻嗅探到了Channel 2上的包)。
(*)抓取授權(quán)階段的包,需要注意實際的授權(quán)是在后?進?的。Authentication的時候,開始階段實際是Open的(即?授權(quán)),也就是說,開始實際已經(jīng)建?好了連接,所以我們在抓包的時候,開始看到的?般都是通過驗證,但是在后?緊接著采?了類似802.11x等安全加強的協(xié)議,來進?再次鑒權(quán)認證,如果這??法通過則?即將已經(jīng)建?的Association斷開。這樣的機制,是因為原來的802.11沒有充分考慮安全才會這樣的,這樣也兼容了以前的802.11。
(*)抓取的包的數(shù)據(jù),要注意這個包是否是被加過密的。根據(jù)協(xié)議標準的描述,包中如果有dataprotected字段,則表?這個數(shù)據(jù)本?是被加了密的,不知道這個數(shù)據(jù)具體是什么,當然,如果有密碼,wireshark也有?個可以按照這個密碼解密的?具,有時候不好?。這?所說的數(shù)據(jù)加密和?絡的加密不?樣,可能訪問?絡本?是需要密碼(?絡是security的),?數(shù)據(jù)本?沒有crpted(加密)。對于?個加了密的數(shù)據(jù)包,我們?般看不出來這個包到底是做什么?的或者什么類型的等等。
(*)抓包的時候,要注意包中指?的源和?的地址以及包的序號。在?線?絡中通信的時候,我們抓包的時候可能會看到被抓取的包對應AP的MAC地址是不存在的,其實抓包時AP的MAC是BSSID,它和實際標注的MAC地址不?定?樣(但是?般都差不多,也就是之后最后?的?位不?樣)。有時候,我們看到抓取的包中的MAC地址有許多只相差?位,那么可能它們都屬于?個設備(因為雖然設備可能只標注了?個?卡的MAC地址,但是它卻“虛擬”出或者實際有多個MAC地址),所以當我們看到包中對應兩個AP的MAC地址?乎?樣的時候,?般來說,這兩個MAC地址很可能就是?個設備的。還有在抓包的時候,?個地址上?的包的sequence(序號)是連續(xù)的,除?丟包了導致重復或者缺失。如果?個設備虛擬出來兩個地址,那么也可能由于沒有經(jīng)過什么處理,導致這兩個地址上?的包共同起來是連續(xù)的(如前所述,這兩個地址和MAC很接近,應該是BSSID)。
(*)抓取的數(shù)據(jù)幀如果是?播幀則不需要確認(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é)內(nèi)最低位先傳送)所以,?個?六進制表?法表?的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)來顯?我們關(guān)注的包,這?我們可以?macro來定義?較復雜的顯?過濾條件。保存的時候,可以?按照顯?過濾還是抓取過濾的?式保存內(nèi)容。
(*)盡量不要抓取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內(nèi)部的芯?固件的問題決定的(估計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幀)、數(shù)據(jù)幀(Data Frame,承載數(shù)據(jù)的載體,其中的DS字段?來標識?向很重要)。幀頭部中的類型字段中會標識出該幀屬于哪個字段。
(*)ACK幀
單播(unicast)幀都需要?ACK來確認,ACK本?不是?播幀,ACK在MAC上是unicast的,幀中有receive地址字段(?來標識是對誰的確認),但是它卻不需要再確認了。ACK只有接收地址(receive)??源地址(src)和序號(sequence),因為發(fā)送和接受是?個整體,發(fā)送之后,其他?(除了這個發(fā)送的接受者)都不會再發(fā)送數(shù)據(jù)了(?線協(xié)議中的沖突避免機制),所以接受者會發(fā)送?個沒有src 的ack幀給receiver,?接收ACK的?端會根據(jù)這個知道它收到了?個ACK幀(其實根據(jù)協(xié)議,應當把發(fā)送單播幀和收到它相應的ACK看作?個原?的不可分割的整體,表??次成功的通信)。
(*)Beacon幀
Beacon幀定時?播發(fā)送,主要?來通知?絡AP的存在性。Station和AP建?Association的時候,也需要?到Beacon。Station可以通過Scan來掃描到Beacon,從?得知AP的存在,也可以在掃描的時候通過主動發(fā)送Probe來探尋AP是否存在。也就是說,建?Association的時候有主動的掃描或者被動的掃描兩種?式。另外,Beacon還包含了關(guān)于Power Save、以及地區(qū)等信息。
(*)Association幀
通常Association幀都有Probe Request和相應的Probe Response。Association的Request中有其所需要的Channel以及Data Rate等狀態(tài),以便讓AP決定是否讓它與??建?Association。?關(guān)聯(lián)是否成功,主要是看Response中的Status code是否為Success。
(*)Data幀
Data Frame具有?向,這個?向?DS(分布式系統(tǒng))字段來標識,以區(qū)分不同類型幀中關(guān)于地址的解析?式;其它的類型Frame例如Control Frame或者管理幀中,這個字段是全零。這個字段?兩位表?,這兩個位的含義分別表?“To Ds”和“From Ds”,?致含義如下:
(a)To DS:表?Station->AP,?般也叫Upload。
(b)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:?線橋接器上的數(shù)據(jù)偵。
這?,我們主要關(guān)注To DS和From DS分別是01和10的情況,DS雖然?致等于AP但是它不是AP,它其實是?個系統(tǒng),從Station 的?度來看,?較容易理解。并且To DS和From DS?定是?線?絡上?數(shù)據(jù)偵才有的字段。
2、幀和?端?端
Ethernet和802.11都是按照Little Endian的?式來傳輸數(shù)據(jù),也就是說,?MAC層傳輸?shù)臅r候,是采?Little Endian的?式,?個字節(jié)?個字節(jié)的傳輸?shù)模?的低位字節(jié)先傳輸,后?的?位字節(jié)后傳輸(傳輸單位不是按位?是字節(jié));在協(xié)議標準上描述?個幀的時候,?般是先按照Little Endian的?式對其進?總體描述,然后具體細節(jié)說每個字段的值,這時候這個字段值是Big Endian?式表?的,這?點應當注意。
例如,協(xié)議標準中可能能對某個幀格式做如下的描述:
|b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|...|...|
這?,最低位b0在最前?,所以這?采?的就是?端的?式來描述幀的總體格式信息。傳輸?shù)臅r候,就按照這?的?式,以字節(jié)為單位向物理層進?傳輸(先傳b0~b7然后b8~b16等等)。 但是,在解釋這個幀的各個域的時候卻采??端的?式進?描述。假設
b3=0,b2=1,b1=0,b0=0四者共同組成?個名字為“FLAG”的域,那么會有類似如下的描述:
FLAG=4(即FLAG為0100):表?XXX。
所以,協(xié)議標準中具體描述某個域的時候,?般直接??端?式表?的數(shù)值(b3b2b1b0=0100)來描述;?傳輸數(shù)據(jù)幀或者在協(xié)議標準中描述整體幀的時候,中給出的卻是?端的?式(b0b1b2b3=0010)。這?的每個字段都是幀的?個部分,在管理幀(后?會說)中長度不固定的部分?叫IE(information Element) 。
另外注意,內(nèi)存地址是?來標記每個字節(jié)的?不是位,所以內(nèi)存???端?端也是以字節(jié)?不是位為單位的(前?描述“?端“、”?端”的時候卻以位序??字節(jié)序,這?點需要明辨,不要混淆)。假設奔騰的機器,CPU為32位,采?Little Endian?式,那么表?1這個int類型整數(shù)的時候,假設它在數(shù)值上是?六進制的"00000001",那么存放在內(nèi)存中卻是由低位到?位依次存放的,由低到?地址依次為:"01"、"00"、"00"、"00"(也就是說?端?式存放在內(nèi)存中的時候,是按照含有最低位的字節(jié)存放在低地址,注意是字節(jié),在內(nèi)存中“位”沒有地址,所以沒有?端?端?說)。在傳遞幀的時候,也是按照?個字節(jié)?個字節(jié)的傳輸,??個字節(jié)內(nèi)部在實際上其實沒有什么端的分別,但是wireshark?律使?“b7b6b5b4b3b2b1b0”這樣的?式來??端的?式顯?。
總之,需要注意?絡層下?的幀的?端?端問題(不是?絡中的字節(jié)序,TCP/IP中規(guī)定的?絡字節(jié)序是Big Endian),?致就是:協(xié)議規(guī)定,傳輸?shù)臅r候使?Little Endian;標準描述的時候?Big Endian和Little Endian都?;另外,Wire shark軟件抓的包中,好象全都?Big Endian來進?標?(?論是信息窗?還是內(nèi)存窗?都這樣展?)。
3、CSMA/CA的機制
與以太?的CSMA/CD機制(沖突檢測)相對,802.11采?的CSMA/CA機制(沖突避免)。采?這個機制,可以保證每次通信的原?性(即每次通信所需要傳輸?shù)亩喾N不同類型的幀之間沒有夾雜其它通信的幀的?擾),?體過程是:
(a)鏈路空閑下來之后,所有Station在發(fā)送幀之前都?先等待?段時間(即DIFS,?稱幀間隔時間);
(b)到達DIFS之后,所有的Station進?競爭時間窗?(就是競爭期間),將這個競爭時間窗?分割成多個Slot(退避時間間隔),然后每個Station隨機選擇?個Slot;
(c)當某個Station到達它的Slot對應的時間之后,就開始發(fā)送數(shù)據(jù)。這?,選擇的Slot越靠前,則表?Station在DIFS之后再等待的時間(退避時間)越短,也就會越早發(fā)送實際數(shù)據(jù);
(d)退避窗?的Slot有多個,選擇的時候,可能某個Slot被多個站點同時選取,這個時候發(fā)送會產(chǎn)?真正的數(shù)據(jù)沖突(如果多個?同時發(fā)送,那么它們都要經(jīng)過AP來轉(zhuǎn)發(fā),AP?法同時聽見多個?的“說話聲?”)那么Station就會再重新選擇并發(fā)送;
(e)當?個Station發(fā)送數(shù)據(jù)之后,所有Station會檢測到鏈路忙,于是放棄嘗試發(fā)送,等那個Station發(fā)送完數(shù)據(jù)之后,鏈路開始空閑,于是?進?到(a)重新開始這個過程。對于以上的機制,如果我們讓某個Station經(jīng)過DIFS之后,選擇的Slot越?,就意味著它發(fā)送幀的機會越?,也就是說這個Station的優(yōu)先權(quán)越?。這就是Qos(質(zhì)量保證)的基本,前?也說過,Qos就是“以?定的優(yōu)先級來保證傳輸?shù)奶囟ㄒ蟆保@得這種優(yōu)先級,就要有相應的條件(例如“花錢”)(有?種不常?的?競爭發(fā)送,其實就是DIFS之后,不退避?直接發(fā)送)。
另外,其實對物理層上來說,所有的發(fā)送都是?播,單播與否只是在鏈路層以上分辨的。上?提到的檢測鏈路是否忙,可以從鏈路上?軟件?式進?(例如增加幀的特殊字段),也可以直接在物理層上進?,實際因為在物理層上成本較?,經(jīng)常?的是前者,具體參見協(xié)議。軟件檢測?致的思路就是,進??個通信的時候,這個通信包含多個幀,每個幀有不同的作?,發(fā)送的第?幀的時候,會通過其中的某個特殊字段(Duration字段,也叫NAV,即?絡分配向量,是?個延遲時間值)告訴所有其它Station,在未來的?段時間內(nèi),鏈路被占?,以完成整個通信過程。這樣,其它Station在此期間就不會發(fā)送數(shù)據(jù)?擾這次通信了,以后這個通信的每?幀以及其ACK確認幀之間都會有?個很?的時間間隔(?于DIFS,即SIFS),并且每幀會視情況延長那個Duration字段,保證整個通信期間確實不會有其它??擾,這樣整個通信就是原?性的了。
4、幀的來源和?的地址
因為?線?絡中沒有采?有線電纜?是采??線電波做為傳輸介質(zhì),所以需要將其?絡層以下的幀格式封裝的更復雜,才能像在有線?絡那樣傳輸數(shù)據(jù)。其中,僅從標識幀的來源和去向??,?線?絡中的幀就需要有四個地址,?不像以太?那樣簡單只有有兩個地址(源和?的)。這四個地址分別是:
SRC:源地址(SA),和以太?中的?樣,就是發(fā)幀的最初地址,在以太?和wifi中幀格式轉(zhuǎn)換的時候,互相可以直接復制。
DST:?的地址(DA),和以太?中的?樣,就是最終接受數(shù)據(jù)幀的地址,在以太?和wifi中幀格式轉(zhuǎn)換的時候,互相可以直接復制。
TX:也就是Transmiter(TA),表??線?絡中?前實際發(fā)送幀者的地址(可能是最初發(fā)幀的?,也可能是轉(zhuǎn)發(fā)時候的路由)。
RX:也就是Receiver(RA),表??線?絡中,?前實際接收幀者的地址(可能是最終的接收者,也可能是接收幀以便轉(zhuǎn)發(fā)給接收者的ap)。
注意,其實,還有?個BSSID,?來區(qū)分不同?絡的標識。在802.11幀中,有四個地址字段,?般只?到其中的三個,并且,這四個字段對應哪種地址或者使?哪些地址,根據(jù)幀中的另外?個DS字段以及幀的類型?有不同的解釋。
舉例:
(1)?線?絡中的Station和以太?中的Host進?通信:
Station<- - - - ->AP<---------->Host
a)當Station->Host的時候:
?先Station->AP,這時候Src=Station,Dst=Host,Tx=Station,Rx=AP,然后AP->Host,這時候Src=Station,Dst=Host,因為AP轉(zhuǎn)發(fā)的時候,是在以太?中,所以沒有Tx和Rx。
b)當Host->Station的時候:
?先Host->AP,這時候Src=Host,Dst=Station,然后AP->Station,這時候,Src=Host,Dst=Station,Tx=AP,Rx=Station。
(2)?線?絡中的Station之間進?通信:
Station1<- - - - ->AP<- - - - ->Station2
a)當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想要通信,必須經(jīng)過AP來進?“轉(zhuǎn)發(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ā)送數(shù)據(jù)了。
當有和這個Station通信的包想通過AP轉(zhuǎn)達的給這個Station時候,AP會幫這個Station將它們緩存起來,然后在Beacon?播幀中添加?個特殊的位(實際這個位是?個bitmap中的位,這個bitmap表?所有和該AP建?了關(guān)聯(lián)的Station,?這個睡眠的Station的相應位為被置1則表?有消息要傳達給這個Station),來表?這個Station有數(shù)據(jù)到達了(Beacon是定時?播的幀,前?說過它是?來通知?線?絡,這個AP的狀態(tài)),?不是直接發(fā)送給Station。?這個睡眠的Station,會在睡眠期間不時地醒來,以檢查Beacon幀中的狀態(tài),當發(fā)現(xiàn)有給它的數(shù)據(jù)的時候,就會通過發(fā)送?個Power Poll的幀來收取數(shù)據(jù),收取之后繼續(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的時候,就醒來長?些的時間,看看有沒有?播給它的數(shù)據(jù),如果有的話就?類似Power Save Poll的幀接受,沒有則繼續(xù)睡眠。
這?,接收數(shù)據(jù)是根據(jù)是否有more data類似的字段來確認是否有更多的數(shù)據(jù)的;重發(fā)的幀是?類似retry的字段來標記。另外注意,當Station進?Sleep的時候,還是可以主動Tranmit消息的,當Station主動Transmit消息的時候,它會等待Reply,所以這個時
候,Receiver是on的狀態(tài)。
可見不同狀態(tài),電源消耗狀態(tài)不同(傳送?接收更耗電),另外,如果電源供電不?,在某個狀態(tài)中就會出現(xiàn)通信失敗的情況。(好像ap上?broadcom芯?中的睡眠之后,醒來?即重新發(fā)送的時候經(jīng)常開始會失敗,可能就是這個原因)。
6、建?Association
下?是Station和Ap建?開放Association的過程:
(0)Ap周期性地?播Beacon幀
(1)Station?播Probe Request到達Ap
(2)Ap向Station發(fā)送Probe Reponse
(3)Station向Ap發(fā)送ACK
(4)Station向Ap發(fā)送Authentication Request
(5)Ap向Station發(fā)送ACK
(6)Ap向Station發(fā)送Authentication Reponse
(7)Station向Ap發(fā)送ACK
(8)Station向Ap發(fā)送Association Request
(9)Ap向Station發(fā)送ACK
(10)Ap向Station發(fā)送Association Reponse
(11)Station向Ap發(fā)送ACK
(12)Station和Ap開始相互通信。
可見,?播幀不?回復,單播幀需要?ACK確認,ACK本?不?被確認。
鳴謝:
https://mp.weixin.qq.com/s?__biz=Mzg4NjAxNzE4Ng==&mid=2247484822&idx=1&sn=6ccf957eebf192e80e19c7bc805e4d36&chksm=cfa1585bf8d6d14d5358580a238d79a3f40db1fd7c3b3627d9e6b2566720d037c88f2986f5fd&scene=132#wechat_redirect
本文來自博客園,作者:{春光牛牛,yak},轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/yakniu/p/16599730.html
歡迎各位大佬們評論指正
QQ討論群:610129902


浙公網(wǎng)安備 33010602011771號