<p id="tx9om"><label id="tx9om"></label></p>

        1. <table id="tx9om"></table>
        2. <td id="tx9om"><option id="tx9om"></option></td>
        3. WIFI小知識

          1、有線和無線網絡

                  目前有線網絡中最著名的是以太網(Ethenet),但是無線網絡WLAN是一個很有前景的發展領域,雖然可能不會完全取代以太網,但是它正擁有越來越多的用戶,無線網絡中最有前景的是Wifi。本文介紹無線網絡相關內容。

                  無線網絡相比有線網絡,還是有許多的缺點的:

                  *)通信雙方因為是通過無線進行通信,所以通信之前需要建立連接;而有線網絡就直接用線纜連接,不用這個過程了。

                  *)通信雙方通信方式是半雙工的通信方式;而有線網絡可以是全雙工。

                  *)通信時在網絡層以下出錯的概率非常高,所以幀的重傳概率很大,需要在網絡層之下的協議添加重傳的機制(不能只依賴上面TCP/IP的延時等待重傳等開銷來保證);而有線網絡出錯概率非常小,無需在網絡層有如此復雜的機制。

                  *)數據是在無線環境下進行的,所以抓包非常容易,存在安全隱患。

                  *)因為收發無線信號,所以功耗較大,對電池來說是一個考驗。

                  *)相對有線網絡吞吐量低,這一點正在逐步改善,802.11n協議可以達到600Mbps的吞吐量。

           

          2、協議

                  EthenetWifi采用的協議都屬于IEEE 802協議集。其中,Ethenet802.3協議做為其網絡層以下的協議;而Wifi802.11做為其網絡層以下的協議。無論是有線網絡,還是無線網絡,其網絡層以上的部分,基本一樣。

                  這里主要關注的是Wifi網絡中相關的內容。Wifi802.11協議包含許多子部分。其中按照時間順序發展,主要有:

                  1802.11a,19999月制定,工作在5gHZ的頻率范圍(頻段寬度325MHZ),最大傳輸速率54mbps,但當時不是很流行,所以使用的不多。

                  2802.11b,19999月制定,時間比802.11a稍晚,工作在2.4g的頻率范圍(頻段寬度83.5MHZ),最大傳輸速率11mbps。

                  3802.11g,20036月制定,工作在2.4gHZ頻率范圍(頻段寬度83.5MHZ),最大傳輸速率54mbps。

                  4802.11n,2009年才被IEEE批準,在2.4gHZ5gHZ均可工作,最大的傳輸速率為600mbps。

                  這些協議均為無線網絡的通信所需的基本協議,最新發展的,一般要比最初的有所改善。

                  另外值得注意的是,802.11nMAC層上進行了一些重要的改進,所以導致網絡性能有了很大的提升例如:

                  *)因為傳輸速率在很大的程度上取決于Channel(信道)的ChannelWidth有多寬,而802.11n中采用了一種技術,可以在傳輸數據的時候將兩個信道合并為一個,再進行傳輸,極大地提高了傳輸速率(這又稱HT-40,high through)。

                  *802.11nMIMO(多輸入輸出)特性,使得兩對天線可以在同時同Channel上傳輸數據,而兩者卻能夠不相互干擾(采用了OFDM特殊的調制技術) 

           

          3、術語

                  講述之前,我們需要對無線網絡中一些常用的術語有所了解。這里先列出一些,后面描述中出現的新的術語,將會在描述中解釋。

                  *LAN:即局域網,是路由和主機組成的內部局域網,一般為有線網絡。

                  *WAN:即廣域網,是外部一個更大的局域網。

                  *WLANWireless LAN,即無線局域網):前面我們說過LAN是局域網,其實大多數指的是有線網絡中的局域網,無線網絡中的局域網,一般用WLAN。

                  *APAccess point的簡稱,即訪問點,接入點):是一個無線網絡中的特殊節點,通過這個節點,無線網絡中的其它類型節點可以和無線網絡外部以及內部進行通信。這里,AP和無線路由都在一臺設備上(即Cisco E3000)。

                  *Station(工作站):表示連接到無線網絡中的設備,這些設備通過AP,可以和內部其它設備或者無線網絡外部通信。

                  *Assosiate:連接。如果一個Station想要加入到無線網絡中,需要和這個無線網絡中的AP關聯(即Assosiate)。

                  *SSID:用來標識一個無線網絡,后面會詳細介紹,我們這里只需了解,每個無線網絡都有它自己的SSID。

                  *BSSID:用來標識一個BSS,其格式和MAC地址一樣,是48位的地址格式。一般來說,它就是所處的無線接入點的MAC地址。某種程度來說,它的作用和SSID類似,但是SSID是網絡的名字,是給人看的,BSSID是給機器看的,BSSID類似MAC地址。

                  *BSSBasic Service Set):由一組相互通信的工作站組成,是802.11無線網絡的基本組件。主要有兩種類型的IBSS和基礎結構型網絡。IBSS又叫ADHOC,組網是臨時的,通信方式為Station<->Station,這里不關注這種組網方式;我們關注的基礎結構形網絡,其通信方式是Station<->AP<->Station,也就是所有無線網絡中的設備要想通信,都得經過AP。在無線網絡的基礎形網絡中,最重要的兩類設備:APStation。

                  *DSDistributed System):即分布式系統。分布式系統屬于802.11邏輯組件,負責將幀轉發至目的地址,802.11并未規定其技術細節,大多數商業產品以橋接引擎合分步式系統媒介共同構成分布式系統。分步式系統是接入點之間轉發幀的骨干網絡,一般是以太網。其實,骨干網絡并不是分步系統的全部,而是其媒介。主要有三點:骨干網(例如以太網)、橋接器(具有有線無線兩個網絡接口的接入點包含它)、屬于骨干網上的接入點所管轄的基礎性網絡的station通信(和外界或者BSS內部的station)必須經過DS、而外部路由只知道stationmac地址,所以也需要通過分布式系統才能知道station的具體位置并且正確送到。分步式系統中的接入點之間必須相互傳遞與之關聯的工作站的信息,這樣整個分步式系統才能知道哪個station和哪個ap關聯,保證分步式系統正常工作(即轉達給正確的station)。分步式系統也可以是使用無線媒介(WDS),不一定一定是以太網??傊?,分步式系統骨干網絡(例如以太網)做為媒介,連接各個接入點,每個接入點與其內的station可構成BSS,各個接入點中的橋接控制器有到達骨干網絡和其內部BSS無線網的接口(類似兩個MAC地址),station通信需要通過分布式系統。

           

           

          二、實踐基礎

          ============================

          1、一些參數

          *MAC

                  MAC(即Medium/MediaAccess Control, 介質訪問控制),是數據鏈路層的一部分。MAC地址是燒錄在NetworkInterfaceCard(即網卡,簡稱NIC)里的,它也叫硬件地址,是由48位(即bit,一字節為8位,即1byte=8bits)16進制的數字組成。其中0-23位叫做組織唯一標志符(organizationally unique,簡稱OUI),是識別LAN(局域網)節點的標識(在有些抓包工具抓包的時候會將前三個字節映射成某種組織名稱的字符,也可以選擇不顯示這種映射)。24-47位是由廠家自己分配。

          *SSID

                  表示一個子網的名字,無線路由通過這個名字可以為其它設備標識這個無線路由的子網。設備進行掃描的時候,就會將相應SSID掃描到,然后就能夠選擇相應的SSID連接到相應的無線網絡(當然不掃描,理論上也可以直接指定自己事先已經知道的ssid進行連接)。SSID可以和其它的重復,這樣掃描的時候會看到兩個同樣SSID的無線網絡,其實這一般用于將一個無線網絡擴大的情況(畢竟無線路由器無線信號的覆蓋范圍是有線的):當想要擴大一個無線網絡(即SSID固定)的范圍的時候,可以給多個路由設置相同的SSID來達到這個目的。(這也是漫游的原理,漫游的時候,我們可以在遠方或者本地都能夠打電話,也就是訪問移動通信網絡)。

                  SSIDBSSID不一定一一對應,一個BSSID在不同的Channel上面可能會對應到多個SSID,但是它們在一個Channel是一一對應的;另外,漫游的時候,雖然SSID不變,但是BSSID一定是會變化的。我們經??梢钥吹綄嶋H數據包中的APMAC地址和BSSID只差幾位,其實實際設備的MAC地址可能只有一個,和BSSID沒什么對應關系。在一個包含了路由功能和AP功能的無線路由器(Fat AP)上面,很可能是:路由器有兩個MAC地址,一個用于外網(WAN),一個用于內網(WLANLAN),一般路由器上面或者配置路由器的網頁上面只標注外網的MAC地址;內網的MAC地址和外網MAC地址一般只有幾位不同(甚至連續,也有些相差很多的例外)。

           

          *Band(頻率范圍)

                  一般ap可以支持5g2.4g兩個頻率范圍段的無線信號。如果兩者同時可以設置,而不是互斥那么,這個路由器還能夠同時支持兩種頻段(頻段即Band),這相當于這個ap可建立兩個無線網絡,它們采用不同的頻段(這類似收音機在長波范圍內收音和短波范圍內收音)。

           

          *Channel(信道)

                  Channel是對頻段的進一步劃分(將5G或者2.4G的頻段范圍再劃分為幾個小的頻段,每個頻段稱作一個Channel),有”5.18GHZ“,“Auto(DFS)”等等,處于不同傳輸信道上面的數據,如果信道覆蓋范圍沒有重疊,那么不會相互干擾。對于信道的使用,在國際上有所規定。其中有些信道是無需授權即可直接使用的(究竟是那個頻段的那個信道,依照各個國家而不同),無需授權使用的意思是,傳輸數據的時候(無論以哪種無線方式),可以讓設備收發的功率導致傳輸時的數據進入該信道的頻率并在該信道所在頻段寬度內進行傳輸;授權的使用的意思是,不允許傳輸時使用授權信道進行,否則會違反規定,并且干擾該信道上其他數據的傳輸。另外,除了wifi,微波、紅外線、藍牙(使用802.15協議)的工作頻段也都有在2.4gHZ范圍內的,所以,它們傳輸的時候會對wifi傳輸造成干擾,因為兩者在不同的協議下進行通信,所以互相將對方傳輸的信號識別為噪聲。有時候配置AP的時候,Channel中有一個類似“Auto”的選項值,這表示打開AP的時候,AP自己Scan周圍的環境,選擇一個干擾最小的Channel來進行通信,當選擇好了一個Channel的時候,一般就不會改變了。

           

          *Channel Width(信道寬度)

                  這里的Channel Width是信道的帶寬,有”20M HZ“、”40M HZ“等,它表示一個Channel片段的寬度(假設5g的頻段寬度總共為100M,平均劃分為互不干擾的10Channel,那么每個ChannelChannel Width就為100M/10=10M,實際Channel并不一定是完全不重疊的)。這個參數可能依賴于一些其它的選項,例如不是802.11N的協議,就可能不會有40M HZChannel WidthN模式有一個特點就是可以把兩個Channel合并,通過提高ChannelWidth來提高吞吐量)。例如選擇了"20M HZ"這個Channel Width之后,后面再選擇一個“5.18GHZ”Channel,則表示以5.18GHZ為中心的前"10M HZ"以及其后面的"10M HZ"頻帶范圍被占用。

                  至此可知,配置無線AP的時候,如果屋子里面有很多的AP(也就是無線路由接入點)的話,仔細設置它們的Channel WidthChannel可以保證它們相互之間的干擾(類似收音機里面的串臺)盡可能小。當然,如果相互干擾了,那么Net Mode所指定的協議也會有相應的處理方式讓他們之間進行協調(例如讓誰先通信誰等一會再通信之類的),但是這樣網絡的性能就不如沒有干擾的時候好了。

           

          *Wireless Security(無線網絡的安全性)

                  這里主要涉及WEP、WPA、WPA2RC4、TKIP、AES。

                  IEEE 802.11 所制定的是技術性標準 ,Wi-Fi 聯盟所制定的是商業化標準 ,  Wi-Fi 所制定的商業化標準基本上也都符合 IEEE 所制定的技術性標準。WEP 19999月通過的 IEEE 802.11 標準的一部分;WPA(Wi-Fi Protected Access) 事實上就是由 Wi-Fi 聯盟所制定的安全性標準 , 這個商業化標準存在的目的就是為了要支持 IEEE 802.11i 這個以技術為導向的安全性標準;而 WPA2 其實就是 WPA 的第二個版本。直觀點說,WEP是較老的認證方法它有好幾個弱點,因此在2003年被WPA淘汰,WPA又在2004年由完整的 IEEE 802.11i 標準(又稱為 WPA2)所取代。

                  WEPWired Equivalent Privacy),采用名為RC4RSA加密技術;WPA(Wi-Fi Protected Access) ,采用新的TKIP算法,TKIP算法保留了RC4所以也有其弱點,但是這個時候更好的CCMP還沒完成,所以先在WPA上用TKIP技術;WPA2WPA的第2個版本,采用CCMP加密協定(在有些路由器等設備上設定加密協定或者加密算法的時候,可能會用類似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的性能發揮不出來。

                  實際中,在有些路由器上面,設置的時候,可能不是嚴格按照這個規定來設置的(例如設定了采用WPA方式,還可以選擇AES),但是大體一樣。

           

          *Region(區域)

                  一般在無線網絡中的AP上都有一個參數,表明它是處于哪個Region(地區)。Station根據AP中設置的Region調整其相應的發射功率以遵守該地區的規定。AP的調整過程一般都是手動設定,設置好AP所處的Region之后,這些信息就會在AP發送的Beacon幀(后面會說到)中包含了;通過這個AP連接到無線網絡上的Station,從Beacon幀中了解到這些Region信息,并且根據這些信息中的規定和AP進行通信。如果AP開始設置錯了,那么StationAP通信的時候,采用的將會是不符合Region規定的頻段,可能會對該Region中的其它傳輸網絡造成干擾,這應當是非法的。

           

          *Transmission Rate

                  設置傳輸速率。這里采用不同的無線網絡傳輸協議(802.11a,802.11b,802.11g等),那么可以設置的速率范圍有所不同,這里的速度是指理論的速度,實際中,由于各種干擾因素,傳輸的速率可能會比設置的小。

                  一般而言,在無線網絡中,對于某種協議的性能進行描述時,我們需要注意的是,描述時提到的傳輸速率(Datarate)和吞吐量( Throughput)是不同的。Datarate是理論上面最大數據傳輸速率,而Throughput是數據的實際最大吞吐量。因為廠家以及傳輸時所使用的協議等各種因素造成的開銷,會導致實際吞吐量比理論吞吐量要小,一般實際最大吞吐為理論最大的50%左右(一個不太準確但是相對直觀的估計:在網絡中,高清視頻所需的Throughput也就30mbps左右,網絡上一般的視頻也就4mbps左右)。

           

          *Qos(質量保證)

                  無線網絡中的QOS是質量保證,大致的意思是,傳輸數據的時候,考慮各種因素(例如收費策略,所處地區等),以一定的優先級來保證傳輸的特定要求(一般就是速度),如果帶寬足夠的話,QOS反而不需要了。

           

          *RTS Threshold / CTS Protection Mode

                  這里的RTSRequest-To-Send的簡寫,CTSClear-To-Send的簡寫。設置好RTS的閾值之后,如果超過這個閾值就會在發送信息之前先發送RTS,以減少干擾,相應的CTS會回應之前的RTS。一般都是AP發送CTS數據,而Station發送RTS數據。

                  這里對RTSCTS做一個簡單解釋:假設在同一個AP所覆蓋的無線網絡范圍內的兩個Station AB,它們之間可能會因為距離的原因互相不可見(例如它們在AP網絡范圍的兩端,而這兩端的距離大于兩者的信號覆蓋范圍),但是AP卻知道它們是在自己的范圍內。當一個A想要在AP的網絡中進行通信的時候,必定要經過AP轉發它的信息,由于A不知道B的存在,所以如果同時B也通過AP進行網絡通信,那么會出現AP同時收到A、B兩個Station的通信請求,而這在無線網絡中是不允許的(無線網絡中,同一時刻不能有多個人傳輸數據)。在這種情況下,BA互相干擾了對方的通信,但是卻互相不可見(不可見的節點互相被稱作隱藏節點)。如果在一個網絡中,這樣的隱藏節點很多,那么勢必會影響網絡的性能(因為數據一旦發送失敗,就要重傳,隱藏節點會導致重傳的機率增大)。這個時候,可采用RTSCTS機制。即:在A想要通信的時候,先廣播發送RTSAP,告訴AP“它想要通信,同時接受到RTS的別的Station(它們對發送RTSStation而言可見)會知道A將要發送數據,于是它們不會發送數據以免干擾A;AP收到RTS之后,會廣播發送CTS,告訴所有在AP范圍內的Station(包括對A而言的隱藏節點B”A將要通信(同時也相當于告訴A,A可以無干擾的發送信息了),這樣對A而言的隱藏節點B也知道有一個A的存在并且要發送信息了,于是B就不會干擾A了。 這里,AB兩者可以在不同的網絡上,也就是說,不同網絡的工作站之間也可以通過RTS/CTS來清除相互的干擾。

           

          *Beacon Interval

                  表示無線路由定期廣播其SSID的時間間隔。這個一般不會特別設置,就采用默認值即可。如果不廣播了,那么Station端掃描的時候可能會發現不定期廣播的AP對應的SSID的網絡不見了,所以可能會斷開連接。這里定期廣播,表示AP會定時向其范圍內廣播SSID的信息,以表示AP的存在,這樣Station進入一個區域之后,就能夠通過掃描知道這個區域是否有AP的存在。當然,除了AP廣播SSID以告知其無線網絡存在之外,Station也可主動廣播探尋包,在其能夠覆蓋的范圍內詢問是否有AP存在(即我們通常所說的掃描尋找接入點)。

           

          *DTIM Interval

                  DTIM/TIM表示告訴Station,AP在為Stationpackage buffer(例如Station睡眠的時候)的緩存時間。為了節省電池使用時間,處于無線網絡中的Station可能會在一定時間之后自動進入休眠狀態。這個時候,AP會為這個Station緩存發送給它的數據,而處于休眠狀態的Station只會在一定時間間隔內給AP發送一個數據幀,以確認是否有發送給自己的數據存在。例如,當我們在主機上ping另外一臺睡眠的機器的時候,收到另外一臺機器響應的時間,要比它不睡眠的時候響應的時間長很多。

           

          *Fragmentation Threshold

                  表示一個package的分片閾值。我們可以設置分片大小,當發送的數據包超過這個閾值之后,802.11協議會自動對這個數據包進行分割。如果設置的這個分片值越小,那么整個數據包越容易傳輸成功(因為如果出錯,那么只需要傳送一個片段而不是整個包,無線wifi網絡中數據傳輸時出錯的概率比有線的以太網要大的多的多),當然開銷也越大(因為需要額外的信息標記每個分片,以及各個分片傳輸成功之后涉及到的重組問題)。

           

          2、抓包

                  一般來說,我們的機器上面的軟件抓取無線網卡上面的包的時候,其實這些包的目標地址都是這個機器的無線網卡,因為不是發給這個機器無線網卡的包都被網卡過濾了。所以如果我們想要抓取所處無線網絡環境下所有的包的時候,需要給機器配備一種特殊的設備(sniffer就是嗅探器),然后再通過抓包工具抓取并分析。有一個硬件設備叫做AirPcap,就是做這個用的,大有幾百到上千美金,它可以同時做為嗅探器或者無線網卡使用,不過做為嗅探器的時候,會抓取所有經過它的包。這個工具目前只有Windows上面的驅動,所以使用這個工具,只能在Windows上面,配合Wireshark抓包軟件進行抓包。

                  這里假設采用AirPcap嗅探,Wireshark軟件抓包(其它抓包軟件,例如linux下面的tcpdump等分析類似)。不用圖形方式詳細展示具體的抓包過程以及分析方法了,主要說一下抓包(這里的包實際主要指的是網絡層以下的包,更常見的稱呼應該是數據幀)時候需要注意的問題。

                  *Wireshark展示包的時候,大致都是按照協議規定的字段展示,也些地方按照它自己特定的方式展示。因為這里著重講述一些抓包時注意的基本原理上面的東西,所以不會對此進行過多闡述。大致就是:Wireshark軟件中,對包展示的時候,按照協議規定的字段分別用HeaderBody兩個部分展示;另外,在Header之前還有兩個部分是Wireshark為方便用戶而展示的包的大小、時間等全局信息(例如見過表示這個包在BG mode中的Channel 1時,用"BG1"表示)。所以,其實我們分析的時候,實際應該按照后面的HeaderBody兩個部分進行。 后面將基于以上所述,進行進一步的講解。

                  *)抓包的時候,需要首先確認這個包是否是完整、正確的包。只要是校驗位(checksum)不對的,就是錯誤的包,也無法確定接收的時候那里出了差錯,所以這個包是應該忽略的,幾乎沒有分析的價值。另外,抓包的時候,由于干擾等原因,抓取的內容可能不是在實際傳輸所處的Channel上的包(例如在Channel 1上面嗅探,卻嗅探到了Channel 2上的包)。

                  *)抓取授權階段的包,需要注意實際的授權是在后面進行的。Authentication的時候,開始階段實際是Open的(即無授權),也就是說,開始實際已經建立好了連接,所以我們在抓包的時候,開始看到的一般都是通過驗證,但是在后面緊接著采用了類似802.11x等安全加強的協議,來進行再次鑒權認證,如果這里無法通過則立即將已經建立的Association斷開。這樣的機制,是因為原來的802.11沒有充分考慮安全才會這樣的,這樣也兼容了以前的802.11。

                  *)抓取的包的數據,要注意這個包是否是被加過密的。根據協議標準的描述,包中如果有dataprotected字段,則表示這個數據本身是被加了密的,不知道這個數據具體是什么,當然,如果有密碼,wireshark也有一個可以按照這個密碼解密的工具,有時候不好用。這里所說的數據加密和網絡的加密不一樣,可能訪問網絡本身是需要密碼(網絡是security的),而數據本身沒有crpted(加密)。對于一個加了密的數據包,我們一般看不出來這個包到底是做什么用的或者什么類型的等等。

                  *)抓包的時候,要注意包中指示的源和目的地址以及包的序號。在無線網絡中通信的時候,我們抓包的時候可能會看到被抓取的包對應APMAC地址是不存在的,其實抓包時APMACBSSID,它和實際標注的MAC地址不一定一樣(但是一般都差不多,也就是之后最后面的幾位不一樣)。有時候,我們看到抓取的包中的MAC地址有許多只相差幾位,那么可能它們都屬于一個設備(因為雖然設備可能只標注了一個網卡的MAC地址,但是它卻虛擬出或者實際有多個MAC地址),所以當我們看到包中對應兩個APMAC地址幾乎一樣的時候,一般來說,這兩個MAC地址很可能就是一個設備的。還有在抓包的時候,一個地址上面的包的sequence(序號)是連續的,除非丟包了導致重復或者缺失。如果一個設備虛擬出來兩個地址,那么也可能由于沒有經過什么處理,導致這兩個地址上面的包共同起來是連續的(如前所述,這兩個地址和MAC很接近,應該是BSSID)。

                  *)抓取的數據幀如果是廣播幀則不需要確認(ACK),如果是單播幀,則一般需要確認(ACK)。例如,Probe幀是廣播幀,所以它無對應的ACK確認幀,對Probe的回復則叫做Probe Response;注意ACK幀本身用于確認,是單播的,但是它本身卻不需要再被確認了。從包中的目的MAC地址中,可以看出這個包是廣播/多播幀還是單播幀。MAC第一個字節的第一個位是1,表示組播,前兩位是1表示廣播,第一個字節第一個位是0表示單播。這里注意,MAC不是值,而是一個Pattern,所以沒有Endian之說,也沒有那個位高,那個MAC大之說。例如:“a8:27:26:....:b7”,這里第一個字節就是a810101000),其第一個字節的第一位就是8的最位,即“0”,所以它的第一個字節的第一個位是0,是一個單播地址。其實,這里涉及到大端小端問題,后面也會講到,總之,以太網線路上按“Big Endian”字節序傳送報文(也就是最高字節先傳送),而比特序是”Little Endian”(也就是字節內最低位先傳送)所以,一個十六進制表示法表示的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,它是用BPFberkerley package filter)這個比較通用的語言來描述(注意這不是Wireshark專用的filter語言,而是一個通用的語言)。但是抓包期間的過濾,有時候不準,所以我們一般先將所有的包抓取下來,然后用WireShark中顯示的過濾器(即view filter)來顯示我們關注的包,這里我們可以用macro來定義比較復雜的顯示過濾條件。保存的時候,可以用按照顯示過濾還是抓取過濾的方式保存內容。

                  *)盡量不要抓取Channel Width40MHZChannel上的幀。我們還需要注意的是,使用Sniffer抓取無線網絡包的時候,AirPcap無法正常抓取40MHZ Channel Width的包,或者說對抓取這個Channel Width上面的包支持不好。如果非要抓取40MHZ Channel Width的包,那么就在40或者36Channel上面進行抓取,并在Wireshark上面設置“channel=36,offset+1”(平時offset都是0),這樣能夠抓取 Channel Width40MHZ的包(但是,其他Channel上面的40mHZ的包還是無法抓?。?,這是由AirPcap內部的芯片固件的問題決定的(估計broad com芯片公司也不愿花過多的精力來支持這個很少有人用的抓包工具的這個功能)。

                  另外,假設一個無線工作站是基于Android系統的(例如智能手機或者平板電子書)那么我們可以利用“wpa_cli status”命令來可以查看當前設備的連接的SSID,BSSID,MAC,IP等信息,(這里“cli”=“command line interface”)。 還有更復雜的命令“wc”“wl”,其中wc是比較上層的命令,wl是下層的命令(是基于芯片是否支持的,例如wlbroadcom芯片上支持,但是在ti上面就沒有了)。

           

           

          三、一些原理

          ============================

          1、常見的幀

                  802.11中的幀有三種類型:管理幀(Management Frame,例如Beacon幀、Association幀)、控制幀(Control Frame,例如RTS幀、CTS幀、ACK幀)、數據幀(Data Frame,承載數據的載體,其中的DS字段用來標識方向很重要)。幀頭部中的類型字段中會標識出該幀屬于哪個字段。

          *ACK

                  單播(unicast)幀都需要用ACK來確認,ACK本身不是廣播幀,ACKMAC上是unicast的,幀中有receive地址字段(用來標識是對誰的確認),但是它卻不需要再確認了。ACK只有接收地址(receive)而無源地址(src)和序號(sequence),因為發送和接受是一個整體,發送之后,其他人(除了這個發送的接受者)都不會再發送數據了(無線協議中的沖突避免機制),所以接受者會發送一個沒有srcack幀給receiver,而接收ACK的一端會根據這個知道它收到了一個ACK幀(其實根據協議,應當把發送單播幀和收到它相應的ACK看作一個原子的不可分割的整體,表示一次成功的通信)。

           

          *Beacon

                  Beacon幀定時廣播發送,主要用來通知網絡AP的存在性。StationAP建立Association的時候,也需要用到Beacon。Station可以通過Scan來掃描到Beacon,從而得知AP的存在,也可以在掃描的時候通過主動發送Probe來探尋AP是否存在。也就是說,建立Association的時候有主動的掃描或者被動的掃描兩種方式。另外,Beacon還包含了關于Power Save、以及地區等信息。

           

          *Association

                  通常Association幀都有Probe Request和相應的Probe Response。AssociationRequest中有其所需要的Channel以及Data Rate等狀態,以便讓AP決定是否讓它與自己建立Association。而關聯是否成功,主要是看Response中的Status code是否為Success。

           

          *Data

                  Data Frame具有方向,這個方向用DS(分布式系統)字段來標識,以區分不同類型幀中關于地址的解析方式;其它的類型Frame例如Control Frame或者管理幀中,這個字段是全零。這個字段用兩位表示,這兩個位的含義分別表示“To Ds”“From Ds”,大致含義如下:

                  aTo DS:表示Station->AP,一般也叫Upload。

                  bFrom 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發送的偵。

                  To DS=1,From DS = 1:無線橋接器上的數據偵。

                  這里,我們主要關注To DSFrom DS分別是0110的情況,DS雖然大致等于AP但是它不是AP,它其實是一個系統,從Station的角度來看,比較容易理解。并且To DSFrom DS一定是無線網絡上面數據偵才有的字段。

           

          2、幀和大端小端

                  Ethernet802.11都是按照Little Endian的方式來傳輸數據,也就是說,而MAC層傳輸的時候,是采用Little Endian的方式,一個字節一個字節的傳輸的,前面的低位字節先傳輸,后面的高位字節后傳輸(傳輸單位不是按位而是字節);在協議標準上描述一個幀的時候,一般是先按照Little Endian的方式對其進行總體描述,然后具體細節說每個字段的值,這時候這個字段值是Big Endian方式表示的,這一點應當注意。

                  例如,協議標準中可能能對某個幀格式做如下的描述:

                  |b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|...|...|

                  這里,最低位b0在最前面,所以這里采用的就是小端的方式來描述幀的總體格式信息。傳輸的時候,就按照這里的方式,以字節為單位向物理層進行傳輸(先傳b0~b7然后b8~b16等等)。    但是,在解釋這個幀的各個域的時候卻采用大端的方式進行描述。假設b3=0,b2=1,b1=0,b0=0四者共同組成一個名字為“FLAG”的域,那么會有類似如下的描述:

                  FLAG=4(FLAG0100):表示XXX。

                  所以,協議標準中具體描述某個域的時候,一般直接用大端方式表示的數值(b3b2b1b0=0100)來描述;而傳輸數據幀或者在協議標準中描述整體幀的時候,中給出的卻是小端的方式(b0b1b2b3=0010)。 這里的每個字段都是幀的一個部分,在管理幀(后面會說)中長度不固定的部分又叫IE(information Element) 。

                  另外注意,內存地址是用來標記每個字節的而不是位,所以內存里面大端小端也是以字節而不是位為單位的(前面描述大端、小端的時候卻以位序而非字節序,這一點需要明辨,不要混淆)。假設奔騰的機器,CPU32位,采用Little Endian方式,那么表示1這個int類型整數的時候,假設它在數值上是十六進制的"00000001",那么存放在內存中卻是由低位到高位依次存放的,由低到高地址依次為:"01"、"00"、"00"、"00"(也就是說小端方式存放在內存中的時候,是按照含有最低位的字節存放在低地址,注意是字節,在內存中沒有地址,所以沒有大端小端一說)。在傳遞幀的時候,也是按照一個字節一個字節的傳輸,而一個字節內部在實際上其實沒有什么端的分別,但是wireshark一律使用“b7b6b5b4b3b2b1b0”這樣的方式來用大端的方式顯示。

                  總之,需要注意網絡層下面的幀的大端小端問題(不是網絡中的字節序,TCP/IP中規定的網絡字節序是Big Endian),大致就是:協議規定,傳輸的時候使用Little Endian;標準描述的時候用Big EndianLittle Endian都用;另外,Wire shark軟件抓的包中,好象全都用Big Endian來進行標示(無論是信息窗口還是內存窗口都這樣展示)。

           

          3、CSMA/CA的機制

                  與以太網的CSMA/CD機制(沖突檢測)相對,802.11采用的CSMA/CA機制(沖突避免)。采用這個機制,可以保證每次通信的原子性(即每次通信所需要傳輸的多種不同類型的幀之間沒有夾雜其它通信的幀的干擾),大體過程是:

                  a)鏈路空閑下來之后,所有Station在發送幀之前都首先等待一段時間(即DIFS,又稱幀間隔時間);

                  b)到達DIFS之后,所有的Station進入競爭時間窗口(就是競爭期間),將這個競爭時間窗口分割成多個Slot(退避時間間隔),然后每個Station隨機選擇一個Slot;

                  c)當某個Station到達它的Slot對應的時間之后,就開始發送數據。這里,選擇的Slot越靠前,則表示StationDIFS之后再等待的時間(退避時間)越短,也就會越早發送實際數據;

                  d)退避窗口的Slot有多個,選擇的時候,可能某個Slot被多個站點同時選取,這個時候發送會產生真正的數據沖突(如果多個人同時發送,那么它們都要經過AP來轉發,AP無法同時聽見多個人的說話聲音)那么Station就會再重新選擇并發送;

                  e)當一個Station發送數據之后,所有Station會檢測到鏈路忙,于是放棄嘗試發送,等那個Station發送完數據之后,鏈路開始空閑,于是又進入到(a)重新開始這個過程。

                  對于以上的機制,如果我們讓某個Station經過DIFS之后,選擇的Slot越小,就意味著它發送幀的機會越大,也就是說這個Station的優先權越高。這就是Qos(質量保證)的基本,前面也說過,Qos就是以一定的優先級來保證傳輸的特定要求,要獲得這種優先級,就要有相應的條件(例如花錢)(有一種不常用的無競爭發送,其實就是DIFS之后,不退避而直接發送)。

                  另外,其實對物理層上來說,所有的發送都是廣播,單播與否只是在鏈路層以上分辨的。上面提到的檢測鏈路是否忙,可以從鏈路上用軟件方式進行(例如增加幀的特殊字段),也可以直接在物理層上進行,實際因為在物理層上成本較高,經常用的是前者,具體參見協議。軟件檢測大致的思路就是,進行一個通信的時候,這個通信包含多個幀,每個幀有不同的作用,發送的第一幀的時候,會通過其中的某個特殊字段(Duration字段,也叫NAV,即網絡分配向量,是一個延遲時間值)告訴所有其它Station,在未來的一段時間內,鏈路被占用,以完成整個通信過程。這樣,其它Station在此期間就不會發送數據干擾這次通信了,以后這個通信的每一幀以及其ACK確認幀之間都會有一個很小的時間間隔(小于DIFS,即SIFS),并且每幀會視情況延長那個Duration字段,保證整個通信期間確實不會有其它人干擾,這樣整個通信就是原子性的了。

           

          4、幀的來源和目的地址

                  因為無線網絡中沒有采用有線電纜而是采用無線電波做為傳輸介質,所以需要將其網絡層以下的幀格式封裝的更復雜,才能像在有線網絡那樣傳輸數據。其中,僅從標識幀的來源和去向方面,無線網絡中的幀就需要有四個地址,而不像以太網那樣簡單只有有兩個地址(源和目的)。這四個地址分別是:

                  SRC:源地址(SA),和以太網中的一樣,就是發幀的最初地址,在以太網和wifi中幀格式轉換的時候,互相可以直接復制。

                  DST:目的地址(DA),和以太網中的一樣,就是最終接受數據幀的地址,在以太網和wifi中幀格式轉換的時候,互相可以直接復制。

                  TX:也就是TransmiterTA),表示無線網絡中目前實際發送幀者的地址(可能是最初發幀的人,也可能是轉發時候的路由)。

                  RX:也就是ReceiverRA),表示無線網絡中,目前實際接收幀者的地址(可能是最終的接收者,也可能是接收幀以便轉發給接收者的ap)。

                  注意,其實,還有一個BSSID,用來區分不同網絡的標識。在802.11幀中,有四個地址字段,一般只用到其中的三個,并且,這四個字段對應哪種地址或者使用哪些地址,根據幀中的另外一個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轉發的時候,是在以太網中,所以沒有TxRx。

                  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。

                  可見,在無線網絡中,始終存在TxRx,但是,這四個地址中還是只有三個地址足矣。

                  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之間或者StationAP之間的那部分連接,也可以是以太網。

                  綜上可知,無線網絡中的Station想要通信,必須經過AP來進行轉發,其實,TxRx是無線網絡中的發和收,也就是Radio;而SrcDst是真正的發送源和接收者。

           

          5、SleepPower save(節電)

                  其實,無線網絡中的Power save是指StationSleep(睡眠),并且這個Sleep并不是整個系統的Sleep,確切來說,應該是其wifiReceiver(接收天線)的Sleep。Station在睡眠的期間還是可以Transmit(發送)的,只是當AP知道StationReceiver處于Sleep狀態時,就不會給Station發送幀了。StationSleep之前,會給AP發送一個特殊的幀,告訴AP說它(Station)要睡眠了,AP通過這個幀來記住是這個Station睡眠了,然后AP就不會給這個Station單獨發送數據了。

                  當有和這個Station通信的包想通過AP轉達的給這個Station時候,AP會幫這個Station將它們緩存起來,然后在Beacon廣播幀中添加一個特殊的位(實際這個位是一個bitmap中的位,這個bitmap表示所有和該AP建立了關聯的Station,而這個睡眠的Station的相應位為被置1則表示有消息要傳達給這個Station),來表示這個Station有數據到達了(Beacon是定時廣播的幀,前面說過它是用來通知無線網絡,這個AP的狀態),而不是直接發送給Station。而這個睡眠的Station,會在睡眠期間不時地醒來,以檢查Beacon幀中的狀態,當發現有給它的數據的時候,就會通過發送一個Power Poll的幀來收取數據,收取之后繼續睡眠(所以ping一個睡眠狀態的Station,響應的時間要慢好多)。

                  對于發送給這個Station的廣播幀,其處理方式和普通幀有一點不同:當有廣播幀要傳達給這個Station的時候,AP會為這個Station緩存發送給它的廣播幀,但是緩存的時間是DTIM(一般為300ms)。注意:單播幀緩存的時間不一定是多少,廣播幀卻緩存DTIM的時間。AP每發送一個Beacon的時候,都會將Dtim減少1,而Station睡眠的時候,會不時地醒來,查看一下Beacon幀中的dtim值。當Station發現其DTIM值變成0的時候,就醒來長一些的時間,看看有沒有廣播給它的數據,如果有的話就用類似Power Save Poll的幀接受,沒有則繼續睡眠。

                  這里,接收數據是根據是否有more data類似的字段來確認是否有更多的數據的;重發的幀是用類似retry的字段來標記。另外注意,當Station進行Sleep的時候,還是可以主動Tranmit消息的,當Station主動Transmit消息的時候,它會等待Reply,所以這個時候,Receiveron的狀態。用一個圖示來標識Sleep,Receive,Transmit時的電源消耗狀況,大致如下:

           

                    power

                         ^

          trans        |                   ------------------------

                         |                   |                       |

          receive     |        -----------|                       |

                         |        |                                  |

          sleep       |--------|                                  |--------------------

                         |----------------------------------------------------------------------> time

           

                  可見不同狀態,電源消耗狀態不同(傳送比接收更耗電),另外,如果電源供電不足,在某個狀態中就會出現通信失敗的情況。(好像ap上面broadcom芯片中的睡眠之后,醒來立即重新發送的時候經常開始會失敗,可能就是這個原因)。

           

            6、建立Association

                  下面是StationAp建立開放Association的過程:

                  0Ap周期性地廣播Beacon

                  1Station廣播Probe Request到達Ap

                  2ApStation發送Probe Reponse

                  3StationAp發送ACK

                  4StationAp發送Authentication Request

                  5ApStation發送ACK

                  6ApStation發送Authentication Reponse

                  7StationAp發送ACK

                  8StationAp發送Association Request

                  9ApStation發送ACK

                  10ApStation發送Association Reponse

                  11StationAp發送ACK

                  12StationAp開始相互通信。

                  可見,廣播幀不用回復,單播幀需要用ACK確認,ACK本身不用被確認。

          1、有線和無線網絡

                  目前有線網絡中最著名的是以太網(Ethenet),但是無線網絡WLAN是一個很有前景的發展領域,雖然可能不會完全取代以太網,但是它正擁有越來越多的用戶,無線網絡中最有前景的是Wifi。本文介紹無線網絡相關內容。

                  無線網絡相比有線網絡,還是有許多的缺點的:

                  *)通信雙方因為是通過無線進行通信,所以通信之前需要建立連接;而有線網絡就直接用線纜連接,不用這個過程了。

                  *)通信雙方通信方式是半雙工的通信方式;而有線網絡可以是全雙工。

                  *)通信時在網絡層以下出錯的概率非常高,所以幀的重傳概率很大,需要在網絡層之下的協議添加重傳的機制(不能只依賴上面TCP/IP的延時等待重傳等開銷來保證);而有線網絡出錯概率非常小,無需在網絡層有如此復雜的機制。

                  *)數據是在無線環境下進行的,所以抓包非常容易,存在安全隱患。

                  *)因為收發無線信號,所以功耗較大,對電池來說是一個考驗。

                  *)相對有線網絡吞吐量低,這一點正在逐步改善,802.11n協議可以達到600Mbps的吞吐量。

           

          2、協議

                  EthenetWifi采用的協議都屬于IEEE 802協議集。其中,Ethenet802.3協議做為其網絡層以下的協議;而Wifi802.11做為其網絡層以下的協議。無論是有線網絡,還是無線網絡,其網絡層以上的部分,基本一樣。

                  這里主要關注的是Wifi網絡中相關的內容。Wifi802.11協議包含許多子部分。其中按照時間順序發展,主要有:

                  1802.11a,19999月制定,工作在5gHZ的頻率范圍(頻段寬度325MHZ),最大傳輸速率54mbps,但當時不是很流行,所以使用的不多。

                  2802.11b,19999月制定,時間比802.11a稍晚,工作在2.4g的頻率范圍(頻段寬度83.5MHZ),最大傳輸速率11mbps。

                  3802.11g,20036月制定,工作在2.4gHZ頻率范圍(頻段寬度83.5MHZ),最大傳輸速率54mbps。

                  4802.11n,2009年才被IEEE批準,在2.4gHZ5gHZ均可工作,最大的傳輸速率為600mbps。

                  這些協議均為無線網絡的通信所需的基本協議,最新發展的,一般要比最初的有所改善。

                  另外值得注意的是,802.11nMAC層上進行了一些重要的改進,所以導致網絡性能有了很大的提升例如:

                  *)因為傳輸速率在很大的程度上取決于Channel(信道)的ChannelWidth有多寬,而802.11n中采用了一種技術,可以在傳輸數據的時候將兩個信道合并為一個,再進行傳輸,極大地提高了傳輸速率(這又稱HT-40,high through)。

                  *802.11nMIMO(多輸入輸出)特性,使得兩對天線可以在同時同Channel上傳輸數據,而兩者卻能夠不相互干擾(采用了OFDM特殊的調制技術) 

           

          3、術語

                  講述之前,我們需要對無線網絡中一些常用的術語有所了解。這里先列出一些,后面描述中出現的新的術語,將會在描述中解釋。

                  *LAN:即局域網,是路由和主機組成的內部局域網,一般為有線網絡。

                  *WAN:即廣域網,是外部一個更大的局域網。

                  *WLANWireless LAN,即無線局域網):前面我們說過LAN是局域網,其實大多數指的是有線網絡中的局域網,無線網絡中的局域網,一般用WLAN。

                  *APAccess point的簡稱,即訪問點,接入點):是一個無線網絡中的特殊節點,通過這個節點,無線網絡中的其它類型節點可以和無線網絡外部以及內部進行通信。這里,AP和無線路由都在一臺設備上(即Cisco E3000)。

                  *Station(工作站):表示連接到無線網絡中的設備,這些設備通過AP,可以和內部其它設備或者無線網絡外部通信。

                  *Assosiate:連接。如果一個Station想要加入到無線網絡中,需要和這個無線網絡中的AP關聯(即Assosiate)。

                  *SSID:用來標識一個無線網絡,后面會詳細介紹,我們這里只需了解,每個無線網絡都有它自己的SSID。

                  *BSSID:用來標識一個BSS,其格式和MAC地址一樣,是48位的地址格式。一般來說,它就是所處的無線接入點的MAC地址。某種程度來說,它的作用和SSID類似,但是SSID是網絡的名字,是給人看的,BSSID是給機器看的,BSSID類似MAC地址。

                  *BSSBasic Service Set):由一組相互通信的工作站組成,是802.11無線網絡的基本組件。主要有兩種類型的IBSS和基礎結構型網絡。IBSS又叫ADHOC,組網是臨時的,通信方式為Station<->Station,這里不關注這種組網方式;我們關注的基礎結構形網絡,其通信方式是Station<->AP<->Station,也就是所有無線網絡中的設備要想通信,都得經過AP。在無線網絡的基礎形網絡中,最重要的兩類設備:APStation。

                  *DSDistributed System):即分布式系統。分布式系統屬于802.11邏輯組件,負責將幀轉發至目的地址,802.11并未規定其技術細節,大多數商業產品以橋接引擎合分步式系統媒介共同構成分布式系統。分步式系統是接入點之間轉發幀的骨干網絡,一般是以太網。其實,骨干網絡并不是分步系統的全部,而是其媒介。主要有三點:骨干網(例如以太網)、橋接器(具有有線無線兩個網絡接口的接入點包含它)、屬于骨干網上的接入點所管轄的基礎性網絡的station通信(和外界或者BSS內部的station)必須經過DS、而外部路由只知道stationmac地址,所以也需要通過分布式系統才能知道station的具體位置并且正確送到。分步式系統中的接入點之間必須相互傳遞與之關聯的工作站的信息,這樣整個分步式系統才能知道哪個station和哪個ap關聯,保證分步式系統正常工作(即轉達給正確的station)。分步式系統也可以是使用無線媒介(WDS),不一定一定是以太網??傊?,分步式系統骨干網絡(例如以太網)做為媒介,連接各個接入點,每個接入點與其內的station可構成BSS,各個接入點中的橋接控制器有到達骨干網絡和其內部BSS無線網的接口(類似兩個MAC地址),station通信需要通過分布式系統。

           

           

          二、實踐基礎

          ============================

          1、一些參數

          *MAC

                  MAC(即Medium/MediaAccess Control, 介質訪問控制),是數據鏈路層的一部分。MAC地址是燒錄在NetworkInterfaceCard(即網卡,簡稱NIC)里的,它也叫硬件地址,是由48位(即bit,一字節為8位,即1byte=8bits)16進制的數字組成。其中0-23位叫做組織唯一標志符(organizationally unique,簡稱OUI),是識別LAN(局域網)節點的標識(在有些抓包工具抓包的時候會將前三個字節映射成某種組織名稱的字符,也可以選擇不顯示這種映射)。24-47位是由廠家自己分配。

          *SSID

                  表示一個子網的名字,無線路由通過這個名字可以為其它設備標識這個無線路由的子網。設備進行掃描的時候,就會將相應SSID掃描到,然后就能夠選擇相應的SSID連接到相應的無線網絡(當然不掃描,理論上也可以直接指定自己事先已經知道的ssid進行連接)。SSID可以和其它的重復,這樣掃描的時候會看到兩個同樣SSID的無線網絡,其實這一般用于將一個無線網絡擴大的情況(畢竟無線路由器無線信號的覆蓋范圍是有線的):當想要擴大一個無線網絡(即SSID固定)的范圍的時候,可以給多個路由設置相同的SSID來達到這個目的。(這也是漫游的原理,漫游的時候,我們可以在遠方或者本地都能夠打電話,也就是訪問移動通信網絡)。

                  SSIDBSSID不一定一一對應,一個BSSID在不同的Channel上面可能會對應到多個SSID,但是它們在一個Channel是一一對應的;另外,漫游的時候,雖然SSID不變,但是BSSID一定是會變化的。我們經??梢钥吹綄嶋H數據包中的APMAC地址和BSSID只差幾位,其實實際設備的MAC地址可能只有一個,和BSSID沒什么對應關系。在一個包含了路由功能和AP功能的無線路由器(Fat AP)上面,很可能是:路由器有兩個MAC地址,一個用于外網(WAN),一個用于內網(WLANLAN),一般路由器上面或者配置路由器的網頁上面只標注外網的MAC地址;內網的MAC地址和外網MAC地址一般只有幾位不同(甚至連續,也有些相差很多的例外)。

           

          *Band(頻率范圍)

                  一般ap可以支持5g2.4g兩個頻率范圍段的無線信號。如果兩者同時可以設置,而不是互斥那么,這個路由器還能夠同時支持兩種頻段(頻段即Band),這相當于這個ap可建立兩個無線網絡,它們采用不同的頻段(這類似收音機在長波范圍內收音和短波范圍內收音)。

           

          *Channel(信道)

                  Channel是對頻段的進一步劃分(將5G或者2.4G的頻段范圍再劃分為幾個小的頻段,每個頻段稱作一個Channel),有”5.18GHZ“,“Auto(DFS)”等等,處于不同傳輸信道上面的數據,如果信道覆蓋范圍沒有重疊,那么不會相互干擾。對于信道的使用,在國際上有所規定。其中有些信道是無需授權即可直接使用的(究竟是那個頻段的那個信道,依照各個國家而不同),無需授權使用的意思是,傳輸數據的時候(無論以哪種無線方式),可以讓設備收發的功率導致傳輸時的數據進入該信道的頻率并在該信道所在頻段寬度內進行傳輸;授權的使用的意思是,不允許傳輸時使用授權信道進行,否則會違反規定,并且干擾該信道上其他數據的傳輸。另外,除了wifi,微波、紅外線、藍牙(使用802.15協議)的工作頻段也都有在2.4gHZ范圍內的,所以,它們傳輸的時候會對wifi傳輸造成干擾,因為兩者在不同的協議下進行通信,所以互相將對方傳輸的信號識別為噪聲。有時候配置AP的時候,Channel中有一個類似“Auto”的選項值,這表示打開AP的時候,AP自己Scan周圍的環境,選擇一個干擾最小的Channel來進行通信,當選擇好了一個Channel的時候,一般就不會改變了。

           

          *Channel Width(信道寬度)

                  這里的Channel Width是信道的帶寬,有”20M HZ“、”40M HZ“等,它表示一個Channel片段的寬度(假設5g的頻段寬度總共為100M,平均劃分為互不干擾的10Channel,那么每個ChannelChannel Width就為100M/10=10M,實際Channel并不一定是完全不重疊的)。這個參數可能依賴于一些其它的選項,例如不是802.11N的協議,就可能不會有40M HZChannel WidthN模式有一個特點就是可以把兩個Channel合并,通過提高ChannelWidth來提高吞吐量)。例如選擇了"20M HZ"這個Channel Width之后,后面再選擇一個“5.18GHZ”Channel,則表示以5.18GHZ為中心的前"10M HZ"以及其后面的"10M HZ"頻帶范圍被占用。

                  至此可知,配置無線AP的時候,如果屋子里面有很多的AP(也就是無線路由接入點)的話,仔細設置它們的Channel WidthChannel可以保證它們相互之間的干擾(類似收音機里面的串臺)盡可能小。當然,如果相互干擾了,那么Net Mode所指定的協議也會有相應的處理方式讓他們之間進行協調(例如讓誰先通信誰等一會再通信之類的),但是這樣網絡的性能就不如沒有干擾的時候好了。

           

          *Wireless Security(無線網絡的安全性)

                  這里主要涉及WEP、WPA、WPA2RC4、TKIP、AES。

                  IEEE 802.11 所制定的是技術性標準 ,Wi-Fi 聯盟所制定的是商業化標準 ,  Wi-Fi 所制定的商業化標準基本上也都符合 IEEE 所制定的技術性標準。WEP 19999月通過的 IEEE 802.11 標準的一部分;WPA(Wi-Fi Protected Access) 事實上就是由 Wi-Fi 聯盟所制定的安全性標準 , 這個商業化標準存在的目的就是為了要支持 IEEE 802.11i 這個以技術為導向的安全性標準;而 WPA2 其實就是 WPA 的第二個版本。直觀點說,WEP是較老的認證方法它有好幾個弱點,因此在2003年被WPA淘汰,WPA又在2004年由完整的 IEEE 802.11i 標準(又稱為 WPA2)所取代。

                  WEPWired Equivalent Privacy),采用名為RC4RSA加密技術;WPA(Wi-Fi Protected Access) ,采用新的TKIP算法,TKIP算法保留了RC4所以也有其弱點,但是這個時候更好的CCMP還沒完成,所以先在WPA上用TKIP技術;WPA2WPA的第2個版本,采用CCMP加密協定(在有些路由器等設備上設定加密協定或者加密算法的時候,可能會用類似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的性能發揮不出來。

                  實際中,在有些路由器上面,設置的時候,可能不是嚴格按照這個規定來設置的(例如設定了采用WPA方式,還可以選擇AES),但是大體一樣。

           

          *Region(區域)

                  一般在無線網絡中的AP上都有一個參數,表明它是處于哪個Region(地區)。Station根據AP中設置的Region調整其相應的發射功率以遵守該地區的規定。AP的調整過程一般都是手動設定,設置好AP所處的Region之后,這些信息就會在AP發送的Beacon幀(后面會說到)中包含了;通過這個AP連接到無線網絡上的Station,從Beacon幀中了解到這些Region信息,并且根據這些信息中的規定和AP進行通信。如果AP開始設置錯了,那么StationAP通信的時候,采用的將會是不符合Region規定的頻段,可能會對該Region中的其它傳輸網絡造成干擾,這應當是非法的。

           

          *Transmission Rate

                  設置傳輸速率。這里采用不同的無線網絡傳輸協議(802.11a,802.11b,802.11g等),那么可以設置的速率范圍有所不同,這里的速度是指理論的速度,實際中,由于各種干擾因素,傳輸的速率可能會比設置的小。

                  一般而言,在無線網絡中,對于某種協議的性能進行描述時,我們需要注意的是,描述時提到的傳輸速率(Datarate)和吞吐量( Throughput)是不同的。Datarate是理論上面最大數據傳輸速率,而Throughput是數據的實際最大吞吐量。因為廠家以及傳輸時所使用的協議等各種因素造成的開銷,會導致實際吞吐量比理論吞吐量要小,一般實際最大吞吐為理論最大的50%左右(一個不太準確但是相對直觀的估計:在網絡中,高清視頻所需的Throughput也就30mbps左右,網絡上一般的視頻也就4mbps左右)。

           

          *Qos(質量保證)

                  無線網絡中的QOS是質量保證,大致的意思是,傳輸數據的時候,考慮各種因素(例如收費策略,所處地區等),以一定的優先級來保證傳輸的特定要求(一般就是速度),如果帶寬足夠的話,QOS反而不需要了。

           

          *RTS Threshold / CTS Protection Mode

                  這里的RTSRequest-To-Send的簡寫,CTSClear-To-Send的簡寫。設置好RTS的閾值之后,如果超過這個閾值就會在發送信息之前先發送RTS,以減少干擾,相應的CTS會回應之前的RTS。一般都是AP發送CTS數據,而Station發送RTS數據。

                  這里對RTSCTS做一個簡單解釋:假設在同一個AP所覆蓋的無線網絡范圍內的兩個Station AB,它們之間可能會因為距離的原因互相不可見(例如它們在AP網絡范圍的兩端,而這兩端的距離大于兩者的信號覆蓋范圍),但是AP卻知道它們是在自己的范圍內。當一個A想要在AP的網絡中進行通信的時候,必定要經過AP轉發它的信息,由于A不知道B的存在,所以如果同時B也通過AP進行網絡通信,那么會出現AP同時收到A、B兩個Station的通信請求,而這在無線網絡中是不允許的(無線網絡中,同一時刻不能有多個人傳輸數據)。在這種情況下,BA互相干擾了對方的通信,但是卻互相不可見(不可見的節點互相被稱作隱藏節點)。如果在一個網絡中,這樣的隱藏節點很多,那么勢必會影響網絡的性能(因為數據一旦發送失敗,就要重傳,隱藏節點會導致重傳的機率增大)。這個時候,可采用RTSCTS機制。即:在A想要通信的時候,先廣播發送RTSAP,告訴AP“它想要通信,同時接受到RTS的別的Station(它們對發送RTSStation而言可見)會知道A將要發送數據,于是它們不會發送數據以免干擾A;AP收到RTS之后,會廣播發送CTS,告訴所有在AP范圍內的Station(包括對A而言的隱藏節點B”A將要通信(同時也相當于告訴A,A可以無干擾的發送信息了),這樣對A而言的隱藏節點B也知道有一個A的存在并且要發送信息了,于是B就不會干擾A了。 這里,AB兩者可以在不同的網絡上,也就是說,不同網絡的工作站之間也可以通過RTS/CTS來清除相互的干擾。

           

          *Beacon Interval

                  表示無線路由定期廣播其SSID的時間間隔。這個一般不會特別設置,就采用默認值即可。如果不廣播了,那么Station端掃描的時候可能會發現不定期廣播的AP對應的SSID的網絡不見了,所以可能會斷開連接。這里定期廣播,表示AP會定時向其范圍內廣播SSID的信息,以表示AP的存在,這樣Station進入一個區域之后,就能夠通過掃描知道這個區域是否有AP的存在。當然,除了AP廣播SSID以告知其無線網絡存在之外,Station也可主動廣播探尋包,在其能夠覆蓋的范圍內詢問是否有AP存在(即我們通常所說的掃描尋找接入點)。

           

          *DTIM Interval

                  DTIM/TIM表示告訴Station,AP在為Stationpackage buffer(例如Station睡眠的時候)的緩存時間。為了節省電池使用時間,處于無線網絡中的Station可能會在一定時間之后自動進入休眠狀態。這個時候,AP會為這個Station緩存發送給它的數據,而處于休眠狀態的Station只會在一定時間間隔內給AP發送一個數據幀,以確認是否有發送給自己的數據存在。例如,當我們在主機上ping另外一臺睡眠的機器的時候,收到另外一臺機器響應的時間,要比它不睡眠的時候響應的時間長很多。

           

          *Fragmentation Threshold

                  表示一個package的分片閾值。我們可以設置分片大小,當發送的數據包超過這個閾值之后,802.11協議會自動對這個數據包進行分割。如果設置的這個分片值越小,那么整個數據包越容易傳輸成功(因為如果出錯,那么只需要傳送一個片段而不是整個包,無線wifi網絡中數據傳輸時出錯的概率比有線的以太網要大的多的多),當然開銷也越大(因為需要額外的信息標記每個分片,以及各個分片傳輸成功之后涉及到的重組問題)。

           

          2、抓包

                  一般來說,我們的機器上面的軟件抓取無線網卡上面的包的時候,其實這些包的目標地址都是這個機器的無線網卡,因為不是發給這個機器無線網卡的包都被網卡過濾了。所以如果我們想要抓取所處無線網絡環境下所有的包的時候,需要給機器配備一種特殊的設備(sniffer就是嗅探器),然后再通過抓包工具抓取并分析。有一個硬件設備叫做AirPcap,就是做這個用的,大有幾百到上千美金,它可以同時做為嗅探器或者無線網卡使用,不過做為嗅探器的時候,會抓取所有經過它的包。這個工具目前只有Windows上面的驅動,所以使用這個工具,只能在Windows上面,配合Wireshark抓包軟件進行抓包。

                  這里假設采用AirPcap嗅探,Wireshark軟件抓包(其它抓包軟件,例如linux下面的tcpdump等分析類似)。不用圖形方式詳細展示具體的抓包過程以及分析方法了,主要說一下抓包(這里的包實際主要指的是網絡層以下的包,更常見的稱呼應該是數據幀)時候需要注意的問題。

                  *Wireshark展示包的時候,大致都是按照協議規定的字段展示,也些地方按照它自己特定的方式展示。因為這里著重講述一些抓包時注意的基本原理上面的東西,所以不會對此進行過多闡述。大致就是:Wireshark軟件中,對包展示的時候,按照協議規定的字段分別用HeaderBody兩個部分展示;另外,在Header之前還有兩個部分是Wireshark為方便用戶而展示的包的大小、時間等全局信息(例如見過表示這個包在BG mode中的Channel 1時,用"BG1"表示)。所以,其實我們分析的時候,實際應該按照后面的HeaderBody兩個部分進行。 后面將基于以上所述,進行進一步的講解。

                  *)抓包的時候,需要首先確認這個包是否是完整、正確的包。只要是校驗位(checksum)不對的,就是錯誤的包,也無法確定接收的時候那里出了差錯,所以這個包是應該忽略的,幾乎沒有分析的價值。另外,抓包的時候,由于干擾等原因,抓取的內容可能不是在實際傳輸所處的Channel上的包(例如在Channel 1上面嗅探,卻嗅探到了Channel 2上的包)。

                  *)抓取授權階段的包,需要注意實際的授權是在后面進行的。Authentication的時候,開始階段實際是Open的(即無授權),也就是說,開始實際已經建立好了連接,所以我們在抓包的時候,開始看到的一般都是通過驗證,但是在后面緊接著采用了類似802.11x等安全加強的協議,來進行再次鑒權認證,如果這里無法通過則立即將已經建立的Association斷開。這樣的機制,是因為原來的802.11沒有充分考慮安全才會這樣的,這樣也兼容了以前的802.11。

                  *)抓取的包的數據,要注意這個包是否是被加過密的。根據協議標準的描述,包中如果有dataprotected字段,則表示這個數據本身是被加了密的,不知道這個數據具體是什么,當然,如果有密碼,wireshark也有一個可以按照這個密碼解密的工具,有時候不好用。這里所說的數據加密和網絡的加密不一樣,可能訪問網絡本身是需要密碼(網絡是security的),而數據本身沒有crpted(加密)。對于一個加了密的數據包,我們一般看不出來這個包到底是做什么用的或者什么類型的等等。

                  *)抓包的時候,要注意包中指示的源和目的地址以及包的序號。在無線網絡中通信的時候,我們抓包的時候可能會看到被抓取的包對應APMAC地址是不存在的,其實抓包時APMACBSSID,它和實際標注的MAC地址不一定一樣(但是一般都差不多,也就是之后最后面的幾位不一樣)。有時候,我們看到抓取的包中的MAC地址有許多只相差幾位,那么可能它們都屬于一個設備(因為雖然設備可能只標注了一個網卡的MAC地址,但是它卻虛擬出或者實際有多個MAC地址),所以當我們看到包中對應兩個APMAC地址幾乎一樣的時候,一般來說,這兩個MAC地址很可能就是一個設備的。還有在抓包的時候,一個地址上面的包的sequence(序號)是連續的,除非丟包了導致重復或者缺失。如果一個設備虛擬出來兩個地址,那么也可能由于沒有經過什么處理,導致這兩個地址上面的包共同起來是連續的(如前所述,這兩個地址和MAC很接近,應該是BSSID)。

                  *)抓取的數據幀如果是廣播幀則不需要確認(ACK),如果是單播幀,則一般需要確認(ACK)。例如,Probe幀是廣播幀,所以它無對應的ACK確認幀,對Probe的回復則叫做Probe Response;注意ACK幀本身用于確認,是單播的,但是它本身卻不需要再被確認了。從包中的目的MAC地址中,可以看出這個包是廣播/多播幀還是單播幀。MAC第一個字節的第一個位是1,表示組播,前兩位是1表示廣播,第一個字節第一個位是0表示單播。這里注意,MAC不是值,而是一個Pattern,所以沒有Endian之說,也沒有那個位高,那個MAC大之說。例如:“a8:27:26:....:b7”,這里第一個字節就是a810101000),其第一個字節的第一位就是8的最位,即“0”,所以它的第一個字節的第一個位是0,是一個單播地址。其實,這里涉及到大端小端問題,后面也會講到,總之,以太網線路上按“Big Endian”字節序傳送報文(也就是最高字節先傳送),而比特序是”Little Endian”(也就是字節內最低位先傳送)所以,一個十六進制表示法表示的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,它是用BPFberkerley package filter)這個比較通用的語言來描述(注意這不是Wireshark專用的filter語言,而是一個通用的語言)。但是抓包期間的過濾,有時候不準,所以我們一般先將所有的包抓取下來,然后用WireShark中顯示的過濾器(即view filter)來顯示我們關注的包,這里我們可以用macro來定義比較復雜的顯示過濾條件。保存的時候,可以用按照顯示過濾還是抓取過濾的方式保存內容。

                  *)盡量不要抓取Channel Width40MHZChannel上的幀。我們還需要注意的是,使用Sniffer抓取無線網絡包的時候,AirPcap無法正常抓取40MHZ Channel Width的包,或者說對抓取這個Channel Width上面的包支持不好。如果非要抓取40MHZ Channel Width的包,那么就在40或者36Channel上面進行抓取,并在Wireshark上面設置“channel=36,offset+1”(平時offset都是0),這樣能夠抓取 Channel Width40MHZ的包(但是,其他Channel上面的40mHZ的包還是無法抓?。?,這是由AirPcap內部的芯片固件的問題決定的(估計broad com芯片公司也不愿花過多的精力來支持這個很少有人用的抓包工具的這個功能)。

                  另外,假設一個無線工作站是基于Android系統的(例如智能手機或者平板電子書)那么我們可以利用“wpa_cli status”命令來可以查看當前設備的連接的SSID,BSSID,MAC,IP等信息,(這里“cli”=“command line interface”)。 還有更復雜的命令“wc”“wl”,其中wc是比較上層的命令,wl是下層的命令(是基于芯片是否支持的,例如wlbroadcom芯片上支持,但是在ti上面就沒有了)。

           

           

          三、一些原理

          ============================

          1、常見的幀

                  802.11中的幀有三種類型:管理幀(Management Frame,例如Beacon幀、Association幀)、控制幀(Control Frame,例如RTS幀、CTS幀、ACK幀)、數據幀(Data Frame,承載數據的載體,其中的DS字段用來標識方向很重要)。幀頭部中的類型字段中會標識出該幀屬于哪個字段。

          *ACK

                  單播(unicast)幀都需要用ACK來確認,ACK本身不是廣播幀,ACKMAC上是unicast的,幀中有receive地址字段(用來標識是對誰的確認),但是它卻不需要再確認了。ACK只有接收地址(receive)而無源地址(src)和序號(sequence),因為發送和接受是一個整體,發送之后,其他人(除了這個發送的接受者)都不會再發送數據了(無線協議中的沖突避免機制),所以接受者會發送一個沒有srcack幀給receiver,而接收ACK的一端會根據這個知道它收到了一個ACK幀(其實根據協議,應當把發送單播幀和收到它相應的ACK看作一個原子的不可分割的整體,表示一次成功的通信)。

           

          *Beacon

                  Beacon幀定時廣播發送,主要用來通知網絡AP的存在性。StationAP建立Association的時候,也需要用到Beacon。Station可以通過Scan來掃描到Beacon,從而得知AP的存在,也可以在掃描的時候通過主動發送Probe來探尋AP是否存在。也就是說,建立Association的時候有主動的掃描或者被動的掃描兩種方式。另外,Beacon還包含了關于Power Save、以及地區等信息。

           

          *Association

                  通常Association幀都有Probe Request和相應的Probe Response。AssociationRequest中有其所需要的Channel以及Data Rate等狀態,以便讓AP決定是否讓它與自己建立Association。而關聯是否成功,主要是看Response中的Status code是否為Success。

           

          *Data

                  Data Frame具有方向,這個方向用DS(分布式系統)字段來標識,以區分不同類型幀中關于地址的解析方式;其它的類型Frame例如Control Frame或者管理幀中,這個字段是全零。這個字段用兩位表示,這兩個位的含義分別表示“To Ds”“From Ds”,大致含義如下:

                  aTo DS:表示Station->AP,一般也叫Upload。

                  bFrom 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發送的偵。

                  To DS=1,From DS = 1:無線橋接器上的數據偵。

                  這里,我們主要關注To DSFrom DS分別是0110的情況,DS雖然大致等于AP但是它不是AP,它其實是一個系統,從Station的角度來看,比較容易理解。并且To DSFrom DS一定是無線網絡上面數據偵才有的字段。

           

          2、幀和大端小端

                  Ethernet802.11都是按照Little Endian的方式來傳輸數據,也就是說,而MAC層傳輸的時候,是采用Little Endian的方式,一個字節一個字節的傳輸的,前面的低位字節先傳輸,后面的高位字節后傳輸(傳輸單位不是按位而是字節);在協議標準上描述一個幀的時候,一般是先按照Little Endian的方式對其進行總體描述,然后具體細節說每個字段的值,這時候這個字段值是Big Endian方式表示的,這一點應當注意。

                  例如,協議標準中可能能對某個幀格式做如下的描述:

                  |b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|...|...|

                  這里,最低位b0在最前面,所以這里采用的就是小端的方式來描述幀的總體格式信息。傳輸的時候,就按照這里的方式,以字節為單位向物理層進行傳輸(先傳b0~b7然后b8~b16等等)。    但是,在解釋這個幀的各個域的時候卻采用大端的方式進行描述。假設b3=0,b2=1,b1=0,b0=0四者共同組成一個名字為“FLAG”的域,那么會有類似如下的描述:

                  FLAG=4(FLAG0100):表示XXX。

                  所以,協議標準中具體描述某個域的時候,一般直接用大端方式表示的數值(b3b2b1b0=0100)來描述;而傳輸數據幀或者在協議標準中描述整體幀的時候,中給出的卻是小端的方式(b0b1b2b3=0010)。 這里的每個字段都是幀的一個部分,在管理幀(后面會說)中長度不固定的部分又叫IE(information Element) 。

                  另外注意,內存地址是用來標記每個字節的而不是位,所以內存里面大端小端也是以字節而不是位為單位的(前面描述大端、小端的時候卻以位序而非字節序,這一點需要明辨,不要混淆)。假設奔騰的機器,CPU32位,采用Little Endian方式,那么表示1這個int類型整數的時候,假設它在數值上是十六進制的"00000001",那么存放在內存中卻是由低位到高位依次存放的,由低到高地址依次為:"01"、"00"、"00"、"00"(也就是說小端方式存放在內存中的時候,是按照含有最低位的字節存放在低地址,注意是字節,在內存中沒有地址,所以沒有大端小端一說)。在傳遞幀的時候,也是按照一個字節一個字節的傳輸,而一個字節內部在實際上其實沒有什么端的分別,但是wireshark一律使用“b7b6b5b4b3b2b1b0”這樣的方式來用大端的方式顯示。

                  總之,需要注意網絡層下面的幀的大端小端問題(不是網絡中的字節序,TCP/IP中規定的網絡字節序是Big Endian),大致就是:協議規定,傳輸的時候使用Little Endian;標準描述的時候用Big EndianLittle Endian都用;另外,Wire shark軟件抓的包中,好象全都用Big Endian來進行標示(無論是信息窗口還是內存窗口都這樣展示)。

           

          3、CSMA/CA的機制

                  與以太網的CSMA/CD機制(沖突檢測)相對,802.11采用的CSMA/CA機制(沖突避免)。采用這個機制,可以保證每次通信的原子性(即每次通信所需要傳輸的多種不同類型的幀之間沒有夾雜其它通信的幀的干擾),大體過程是:

                  a)鏈路空閑下來之后,所有Station在發送幀之前都首先等待一段時間(即DIFS,又稱幀間隔時間);

                  b)到達DIFS之后,所有的Station進入競爭時間窗口(就是競爭期間),將這個競爭時間窗口分割成多個Slot(退避時間間隔),然后每個Station隨機選擇一個Slot;

                  c)當某個Station到達它的Slot對應的時間之后,就開始發送數據。這里,選擇的Slot越靠前,則表示StationDIFS之后再等待的時間(退避時間)越短,也就會越早發送實際數據;

                  d)退避窗口的Slot有多個,選擇的時候,可能某個Slot被多個站點同時選取,這個時候發送會產生真正的數據沖突(如果多個人同時發送,那么它們都要經過AP來轉發,AP無法同時聽見多個人的說話聲音)那么Station就會再重新選擇并發送;

                  e)當一個Station發送數據之后,所有Station會檢測到鏈路忙,于是放棄嘗試發送,等那個Station發送完數據之后,鏈路開始空閑,于是又進入到(a)重新開始這個過程。

                  對于以上的機制,如果我們讓某個Station經過DIFS之后,選擇的Slot越小,就意味著它發送幀的機會越大,也就是說這個Station的優先權越高。這就是Qos(質量保證)的基本,前面也說過,Qos就是以一定的優先級來保證傳輸的特定要求,要獲得這種優先級,就要有相應的條件(例如花錢)(有一種不常用的無競爭發送,其實就是DIFS之后,不退避而直接發送)。

                  另外,其實對物理層上來說,所有的發送都是廣播,單播與否只是在鏈路層以上分辨的。上面提到的檢測鏈路是否忙,可以從鏈路上用軟件方式進行(例如增加幀的特殊字段),也可以直接在物理層上進行,實際因為在物理層上成本較高,經常用的是前者,具體參見協議。軟件檢測大致的思路就是,進行一個通信的時候,這個通信包含多個幀,每個幀有不同的作用,發送的第一幀的時候,會通過其中的某個特殊字段(Duration字段,也叫NAV,即網絡分配向量,是一個延遲時間值)告訴所有其它Station,在未來的一段時間內,鏈路被占用,以完成整個通信過程。這樣,其它Station在此期間就不會發送數據干擾這次通信了,以后這個通信的每一幀以及其ACK確認幀之間都會有一個很小的時間間隔(小于DIFS,即SIFS),并且每幀會視情況延長那個Duration字段,保證整個通信期間確實不會有其它人干擾,這樣整個通信就是原子性的了。

           

          4、幀的來源和目的地址

                  因為無線網絡中沒有采用有線電纜而是采用無線電波做為傳輸介質,所以需要將其網絡層以下的幀格式封裝的更復雜,才能像在有線網絡那樣傳輸數據。其中,僅從標識幀的來源和去向方面,無線網絡中的幀就需要有四個地址,而不像以太網那樣簡單只有有兩個地址(源和目的)。這四個地址分別是:

                  SRC:源地址(SA),和以太網中的一樣,就是發幀的最初地址,在以太網和wifi中幀格式轉換的時候,互相可以直接復制。

                  DST:目的地址(DA),和以太網中的一樣,就是最終接受數據幀的地址,在以太網和wifi中幀格式轉換的時候,互相可以直接復制。

                  TX:也就是TransmiterTA),表示無線網絡中目前實際發送幀者的地址(可能是最初發幀的人,也可能是轉發時候的路由)。

                  RX:也就是ReceiverRA),表示無線網絡中,目前實際接收幀者的地址(可能是最終的接收者,也可能是接收幀以便轉發給接收者的ap)。

                  注意,其實,還有一個BSSID,用來區分不同網絡的標識。在802.11幀中,有四個地址字段,一般只用到其中的三個,并且,這四個字段對應哪種地址或者使用哪些地址,根據幀中的另外一個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轉發的時候,是在以太網中,所以沒有TxRx。

                  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。

                  可見,在無線網絡中,始終存在TxRx,但是,這四個地址中還是只有三個地址足矣。

                  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之間或者StationAP之間的那部分連接,也可以是以太網。

                  綜上可知,無線網絡中的Station想要通信,必須經過AP來進行轉發,其實,TxRx是無線網絡中的發和收,也就是Radio;而SrcDst是真正的發送源和接收者。

           

          5、SleepPower save(節電)

                  其實,無線網絡中的Power save是指StationSleep(睡眠),并且這個Sleep并不是整個系統的Sleep,確切來說,應該是其wifiReceiver(接收天線)的Sleep。Station在睡眠的期間還是可以Transmit(發送)的,只是當AP知道StationReceiver處于Sleep狀態時,就不會給Station發送幀了。StationSleep之前,會給AP發送一個特殊的幀,告訴AP說它(Station)要睡眠了,AP通過這個幀來記住是這個Station睡眠了,然后AP就不會給這個Station單獨發送數據了。

                  當有和這個Station通信的包想通過AP轉達的給這個Station時候,AP會幫這個Station將它們緩存起來,然后在Beacon廣播幀中添加一個特殊的位(實際這個位是一個bitmap中的位,這個bitmap表示所有和該AP建立了關聯的Station,而這個睡眠的Station的相應位為被置1則表示有消息要傳達給這個Station),來表示這個Station有數據到達了(Beacon是定時廣播的幀,前面說過它是用來通知無線網絡,這個AP的狀態),而不是直接發送給Station。而這個睡眠的Station,會在睡眠期間不時地醒來,以檢查Beacon幀中的狀態,當發現有給它的數據的時候,就會通過發送一個Power Poll的幀來收取數據,收取之后繼續睡眠(所以ping一個睡眠狀態的Station,響應的時間要慢好多)。

                  對于發送給這個Station的廣播幀,其處理方式和普通幀有一點不同:當有廣播幀要傳達給這個Station的時候,AP會為這個Station緩存發送給它的廣播幀,但是緩存的時間是DTIM(一般為300ms)。注意:單播幀緩存的時間不一定是多少,廣播幀卻緩存DTIM的時間。AP每發送一個Beacon的時候,都會將Dtim減少1,而Station睡眠的時候,會不時地醒來,查看一下Beacon幀中的dtim值。當Station發現其DTIM值變成0的時候,就醒來長一些的時間,看看有沒有廣播給它的數據,如果有的話就用類似Power Save Poll的幀接受,沒有則繼續睡眠。

                  這里,接收數據是根據是否有more data類似的字段來確認是否有更多的數據的;重發的幀是用類似retry的字段來標記。另外注意,當Station進行Sleep的時候,還是可以主動Tranmit消息的,當Station主動Transmit消息的時候,它會等待Reply,所以這個時候,Receiveron的狀態。用一個圖示來標識Sleep,Receive,Transmit時的電源消耗狀況,大致如下:

           

                    power

                         ^

          trans        |                   ------------------------

                         |                   |                       |

          receive     |        -----------|                       |

                         |        |                                  |

          sleep       |--------|                                  |--------------------

                         |----------------------------------------------------------------------> time

           

                  可見不同狀態,電源消耗狀態不同(傳送比接收更耗電),另外,如果電源供電不足,在某個狀態中就會出現通信失敗的情況。(好像ap上面broadcom芯片中的睡眠之后,醒來立即重新發送的時候經常開始會失敗,可能就是這個原因)。

           

            6、建立Association

                  下面是StationAp建立開放Association的過程:

                  0Ap周期性地廣播Beacon

                  1Station廣播Probe Request到達Ap

                  2ApStation發送Probe Reponse

                  3StationAp發送ACK

                  4StationAp發送Authentication Request

                  5ApStation發送ACK

                  6ApStation發送Authentication Reponse

                  7StationAp發送ACK

                  8StationAp發送Association Request

                  9ApStation發送ACK

                  10ApStation發送Association Reponse

                  11StationAp發送ACK

                  12StationAp開始相互通信。

                  可見,廣播幀不用回復,單播幀需要用ACK確認,ACK本身不用被確認。

          首頁    企業資訊    WIFI小知識
          没有穿内衣的诱人女教师
          <p id="tx9om"><label id="tx9om"></label></p>

                1. <table id="tx9om"></table>
                2. <td id="tx9om"><option id="tx9om"></option></td>