作者:__ay
在上一篇中,簡要概述了無線網絡的通信機制,那么在下來就得開始介紹一下無線網絡的通信細節(jié)了。說到這里,以后所說的內容會有《802.11 無線網絡權威指南 第二版影印版》這本書內容的影子,還有內容中會加上通過wireshark抓包的分析以及IEEE關于wlan 80211協(xié)議的說明文檔。雖然說這本書雖然講得好,但是很多數(shù)據(jù)包細節(jié)上的問題還是需要我們親手去做實驗去驗證的,一向認為學習不能僅僅看書,親手去驗證一些你認為疑惑的地方可能會比做幾道課后題的效果要好得多得多 ^_^
1 MAC802.11數(shù)據(jù)幀格式
首先要說明的是mac802.11的幀格式很特別,它與TCP/IP這一類協(xié)議不同,它的長度是可變的。不同功能的數(shù)據(jù)幀長度會不一樣。這一特性說明mac802.11數(shù)據(jù)幀顯得更加靈活,然而,也會更加復雜。mac 802.11的數(shù)據(jù)幀長度不定主要是由于以下幾點決定的
1.1 mac地址數(shù)目不定,根據(jù)幀類型不同,mac 802.11的mac地址數(shù)會不一樣。比如說 ACK幀僅有一個mac地址,而數(shù)據(jù)幀有3個mac地址,在WDS模式(下面要提到)下,幀頭竟然有4個mac地址。
1.2 802.11的管理幀所攜帶的信息長度不定,在管理幀中,不僅僅只有一些類似于mac地址,分片標志之類的這些信息,而且另外還會包括一些其它的信息,這些信息有關于安全設置的,有關于物理通信的,比如說我們的SSID名稱就是通過管理幀獲得的。AP會根據(jù)不同的情況發(fā)送包含有不同信息的管理幀。管理幀的細節(jié)問題我們會在后面的文章中討論,這里暫時跳過。
1.3 加密(wep,wpa等)信息,QOS(quality of service)信息,若有加密的數(shù)據(jù)幀格式和沒有加密的數(shù)據(jù)幀格式還不一樣,加密數(shù)據(jù)幀格式還多了個加密頭,用于解密用。然則QOS也是同樣道理。
竟然mac 802.11數(shù)據(jù)幀那么復雜,我們就先從通用的格式開始說吧

幀控制(2 bytes):
用于指示數(shù)據(jù)幀的類型,是否分片等等信息,說白了,這個字段就是記錄了mac 802.11的屬性。
*Protocol version:表明版本類型,現(xiàn)在所有幀里面這個字段都是0x00
*Type:指明數(shù)據(jù)幀類型,是管理幀,數(shù)據(jù)幀還是控制幀
*Subtype:指明數(shù)據(jù)幀的子類型,因為就算是控制幀,控制幀還分RTS幀,CTS幀,ACK幀等等,通過這個域判斷出該數(shù)據(jù)幀的具體類型
*To DS/From DS:這兩個數(shù)據(jù)幀表明數(shù)據(jù)包的發(fā)送方向,分四種可能情況討論
**若數(shù)據(jù)包To DS為0,F(xiàn)rom DS為0,表明該數(shù)據(jù)包在網絡主機間傳輸
**若數(shù)據(jù)包To DS為0,F(xiàn)rom DS為1,表明該數(shù)據(jù)幀來自AP
**若數(shù)據(jù)包To DS為1,F(xiàn)rom DS為0,表明該數(shù)據(jù)幀發(fā)送往AP
**若數(shù)據(jù)包To DS為1,F(xiàn)rom DS為1,表明該數(shù)據(jù)幀是從AP發(fā)送自AP的,也就是說這個是個WDS(Wireless Distribution System)數(shù)據(jù)幀,至于什么是WDS,可以參考下這里的介紹 #傳送門
*Moreflag:分片標志,若數(shù)據(jù)幀被分片了,那么這個標志為1,否則為0
*Retry:表明是否是重發(fā)的幀,若是為1,不是為0
*PowerManage:當網絡主機處于省電模式時,該標志為1,否則為0.
*Moredata:當AP緩存了處于省電模式下的網絡主機的數(shù)據(jù)包時,AP給該省電模式下的網絡主機的數(shù)據(jù)幀中該位為1,否則為0
*Wep:加密標志,若為1表示數(shù)據(jù)內容加密,否則為0
*Order 這個表示用于PCF模式下,這里不予討論
生存周期/Associate ID (2 bytes):
先前不是講過虛擬載波監(jiān)聽的一個機制么,他的Network Allocation Vector(NAV)就存在這里,這里叫duration,即生存周期。當然不是所有時候這個字段存放的NAV值。在特定類型數(shù)據(jù)幀中,它也可能表示Associate ID。一旦有主機關聯(lián)到AP了,AP都會為主機分配一個Associate ID。比如在網絡主機通知AP自己要進入省電模式(power saving)的時候,網絡主機發(fā)給AP的通知數(shù)據(jù)幀里面,這個域就表示的是Associate ID而不是NAV了。當然還可以通過最高位來判斷這個域的含義:
*在15bit為0的時候,該域表示duration
*在15bit為1,14bit為1的時候,表示Associate ID。
序列控制(2 bytes:4 bits/12 bits):這個域分2部分,一個是分片序列號和標識幀列號。分片序列號就是記錄分片序號的。比如一個幀A被分片成a1,a2,a3,那么a1,a2,a3這三個分片幀的分片序列分別是0,1,2。這個和IP分段原理一樣的,該域占4個比特位。剩下的12個比特位就用于標識幀的序號,這個跟IP頭里面的序列號一樣。
MAC地址 1-4
這四個地址在不同幀中有不同含義。這些以后會討論。
以后我們可能會碰到以下類型的mac地址
RA(receiver address):無線網絡中,該數(shù)據(jù)幀的接收者
TA(transmitter address):無線網絡中,該數(shù)據(jù)幀的發(fā)送者
BSSID(Basic Service Set ID):在infrastructure BBS中,BSSID就是AP的mac地址。但是在IBBS中,它是一個隨機即生成的46位二進制序列,還有最高兩位分別是Universal/Local標志位和Individual/Group標志位。IBBS的BSSID中,Universal/Local標志位為1,表示本地MAC,Individual/Group標志位為0,表示是個人MAC。也就是說在IBBS中,BSSID地址應該類如 10xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx(x表示隨機數(shù)要么0要么1, 2進制表示)
DA(destine address):該幀的目的mac地址
SA(source address):該幀的源mac地址
這里的DA和SA含義和普通以太網中的含義一樣,在無線網絡中可能我們需要通過AP把數(shù)據(jù)發(fā)送到其它網絡內的某臺主機中。但是有的人會奇怪,直接在RA中填這臺主機的mac地址不就久好了么。但是請注意RA的含義,說的是無線網絡中的接收者,不是網絡中的接收者,也就是說這臺目的主機不再無線網絡范圍內。在這種情況下我們的RA只是一個中轉,所以需要多出一個DA字段來指明該幀的最終目的地,當然,如果有了DA那必須有SA,因為若目的主機要回應的話,SA字段是必不可少的。(假設沒有SA字段,那么目的主機回應的數(shù)據(jù)包就只能發(fā)送到源主機所屬的AP上了~)
最典型的一個例子就是在WDS模式下,數(shù)據(jù)幀會有4個地址,RA,TA表示接收端和發(fā)送端,這兩個地址用于無線傳輸?shù)臅r候。還有2個地址是DA和SA,分別跟以太網中一樣表示源地址和目的地址。WDS幀的格式如下圖:

打個比方說,AP1有主機A,AP2有主機B。如果A要和B同學,那么A會首先發(fā)送數(shù)據(jù)幀給AP1,然后AP1發(fā)送幀給AP2 。這個時候幀里面會有4個地址,分別是RA=mac(AP2),TA=mac(AP1),DA=mac(B),SA=mac(A)。