[導(dǎo)入]Wireless Fundamental(1) -- 802.11MAC入門科普篇
作者:__ay
參考書目是 《802.11 無線網(wǎng)絡(luò)權(quán)威指南 第二版影印版》 中文版翻譯的太惡心了。
在無線網(wǎng)絡(luò)通信中,MAC層的工作細(xì)節(jié)和有線網(wǎng)絡(luò)差的實(shí)在是太大了……
這里僅僅談?wù)摕o線MAC層的通信機(jī)制,MAC以上的有線無線都一樣~~
1. 神馬是RTS/CTS??
那么說起無線網(wǎng)路,我們其實(shí)最最首先考慮通信的可靠性問題,要知道有線網(wǎng)絡(luò)的傳輸環(huán)境比無線網(wǎng)絡(luò)封閉多了,但是其可靠性也比無線網(wǎng)絡(luò)高多了,最最起碼有線網(wǎng)絡(luò)不要考慮可能的微波,手機(jī)信號(hào)等因素的干擾。正是由于考慮到其它電子設(shè)備比如手機(jī),微波爐等有發(fā)射微波功能電子產(chǎn)品,我們空氣中的無線信號(hào)受到的干擾遠(yuǎn)遠(yuǎn)比有線信號(hào)的要強(qiáng)的多。所以在無線通信時(shí),要考慮到可能的干擾性,所以需要對(duì)每一個(gè)發(fā)送出去的幀進(jìn)行確認(rèn)。過程就如下圖所示。

但是,出現(xiàn)一個(gè)問題一個(gè)棘手的問題。就是說如何處理所謂的隱藏節(jié)點(diǎn)的問題,那啥是隱藏節(jié)點(diǎn)咧?

在上一個(gè)圖中我們可以yy一種特殊情況: 2號(hào)機(jī)可以接收到1號(hào)和3號(hào)的信號(hào),但是1號(hào)機(jī)無法發(fā)現(xiàn)3號(hào)機(jī)。
那么在1,3號(hào)同時(shí)發(fā)送幀給2號(hào)機(jī)的時(shí)候,2號(hào)機(jī)沒法回應(yīng)這2個(gè)幀,因?yàn)閹瑳_突了。在無線網(wǎng)絡(luò)里,所有主機(jī)都公用一個(gè)空氣媒介,也就是說在一個(gè)主機(jī)發(fā)送數(shù)據(jù)的時(shí)候其它主機(jī)必須保持沉默。那么上述這種情況顯然違背了這個(gè)規(guī)則,造成的結(jié)果就是2號(hào)機(jī)根本沒法收到數(shù)據(jù)。
所以這里就又引出一個(gè)以太網(wǎng)類似的另一個(gè)問題:沖突避免
那么對(duì)于這種情況我們則需要有個(gè)協(xié)調(diào)機(jī)制,協(xié)調(diào)誰先發(fā),誰后發(fā)
這就引出了2個(gè)功能幀
RTS: Request to Send
CTS: Clear to Send
在1號(hào)機(jī)傳送數(shù)據(jù)之前,首先發(fā)送一個(gè)RTS幀給2號(hào)機(jī),那么所有接收到RST幀的機(jī)器則會(huì)保持沉默
但是3號(hào)機(jī)收不到丫~~
所以2號(hào)機(jī)會(huì)回應(yīng)1號(hào)機(jī)一個(gè)CTS幀,3號(hào)機(jī)收到CTS,則保持沉默(這樣所以可能干擾到1/2號(hào)機(jī)通信的主機(jī)都沉默了),然后整個(gè)無線網(wǎng)絡(luò)媒介就可以被空出來給1號(hào)機(jī)用來傳送數(shù)據(jù)幀給2號(hào)機(jī)了
這就是RTS/CTS機(jī)制 發(fā)送過程大致如下

但是對(duì)于這個(gè)機(jī)制的使用會(huì)消耗額外的計(jì)算資源,那么有一個(gè)折中的做法就是設(shè)置一個(gè)RTS的閥值,當(dāng)網(wǎng)絡(luò)數(shù)據(jù)包長(zhǎng)度超過這個(gè)閥值的時(shí)候就啟用RTS/CTS機(jī)制,否則保持自由發(fā)送模式。(我發(fā)現(xiàn)老外很喜歡中庸之道~)。當(dāng)然這個(gè)機(jī)制可能有些人說無法保證沒有沖突,應(yīng)為可能1,3主機(jī)可能同時(shí)發(fā)送2個(gè)RTS包給2號(hào)機(jī)。這里會(huì)有個(gè)沖突回避問題,原理和以太網(wǎng)類似,都是遇到發(fā)送沖突,那么就隨機(jī)選擇回避。這個(gè)就是下面要討論的一個(gè)問題了。
2 WLAN的沖突回避
無線網(wǎng)絡(luò)通信另一個(gè)主要的問題就是協(xié)調(diào)問題,就是如何協(xié)調(diào)區(qū)域內(nèi)的各個(gè)主機(jī)進(jìn)行通信,當(dāng)然RTS/CTS是一種解決機(jī)制,但是這只是個(gè)小部分,到底如何讓無線區(qū)域內(nèi)的主機(jī)“流暢”的通信,就得涉及到一系列沖突回避策略等問題上了。
首先說一下協(xié)調(diào)模式:
在以太網(wǎng)中用的是CSMA/DA的方法,所有主機(jī)自由發(fā)送報(bào)文,若沖突了退避一段時(shí)間在發(fā)就是了。
而在無線網(wǎng)中則有3種協(xié)調(diào)模式
DCF (Distribution Coordination Function)
區(qū)域內(nèi)的主機(jī)傳輸,但是跟以太網(wǎng)的沖突避免一樣,在檢測(cè)到?jīng)_突后則進(jìn)行退避。不過需要提的是有時(shí)候DCF會(huì)采用RTS/CTS機(jī)制來減少?zèng)_突。這個(gè)機(jī)制自由性比較強(qiáng)。
PCF (Point Coordination Function)
這個(gè)機(jī)制依賴于ACCESS POINTS,既需要通過一臺(tái)指定的無線主機(jī)來協(xié)調(diào)通信。所以這個(gè)機(jī)制可以為主機(jī)提供無競(jìng)爭(zhēng)服務(wù),因?yàn)锳P可以指定誰先發(fā)數(shù)據(jù)誰后發(fā)數(shù)據(jù),沒有傳輸沖突,真和諧,就是開銷要高一些。
HCF (Hybird Coordination Function)
這個(gè)機(jī)制是以上兩個(gè)機(jī)制的折中,一方面提供一個(gè)盡力而為的服務(wù),但是又對(duì)于通信的步驟要求又不如PCF那么嚴(yán)格。這個(gè)模式通過維護(hù)多個(gè)服務(wù)隊(duì)列,然后再?zèng)Q定為怎樣的主機(jī)提供怎樣的服務(wù)。
我們以后的討論情景是基于DCF下的。特別在DCF過程中,他的退避算法和以太網(wǎng)的算法很相似。也是隨即退避,隨著發(fā)送失敗的次數(shù)增加,退避時(shí)間的選擇范圍會(huì)進(jìn)行指數(shù)增長(zhǎng)。當(dāng)檢測(cè)到信道空閑后,要發(fā)送數(shù)據(jù)的主機(jī)需要等待DIFS時(shí)間間隔后然后進(jìn)入競(jìng)爭(zhēng)狀態(tài)下,所謂的競(jìng)爭(zhēng)狀態(tài)就是說所有主機(jī)會(huì)在自己的競(jìng)爭(zhēng)窗口中隨即選擇一個(gè)等待時(shí)間,這個(gè)等待時(shí)間過后則開始發(fā)送數(shù)據(jù)。
首先來說幾個(gè)定義:
1.時(shí)隙(原文是slot,我們暫且稱之為時(shí)隙吧):這個(gè)是退避時(shí)間的最小單位,在以太網(wǎng)中退避時(shí)間單位是毫秒還是微秒來著我忘了,這個(gè)時(shí)隙就是無線網(wǎng)絡(luò)中的時(shí)間單位,這個(gè)時(shí)隙是根據(jù)情況而定的。在高速網(wǎng)絡(luò)(網(wǎng)卡處理性能越好)中時(shí)隙會(huì)越短。時(shí)隙可能是2微秒,也可能是4毫秒,反正是在不同網(wǎng)絡(luò)中時(shí)隙可能不同,這個(gè)可以看成退避時(shí)間的最小單位。
2.競(jìng)爭(zhēng)窗口,就是在發(fā)送失敗后選擇退避時(shí)間的集合。比如說初始的窗口大小是0-31 slots。這就表明在主機(jī)需要在0-31 slots里面隨即抽取出一個(gè)值來進(jìn)行等待。打個(gè)比方我們的slot設(shè)為2微秒,那么在上一次傳輸數(shù)據(jù)完畢后經(jīng)過DIFS(下面會(huì)介紹到)間隙,我們?cè)谧约旱母?jìng)爭(zhēng)窗口(范圍:0-31 slots)隨即選取到了24這個(gè)值,那么我們需要等待的時(shí)間就是24 slots == 24*2 微秒 == 48 微秒。當(dāng)然競(jìng)爭(zhēng)窗口的大小會(huì)隨著發(fā)送失敗的次數(shù)而增加,因?yàn)榘l(fā)送失敗次數(shù)越多表示網(wǎng)絡(luò)負(fù)載越大,那么所有無線網(wǎng)主機(jī)在檢測(cè)到自己發(fā)送失敗了以后都要將自己的競(jìng)爭(zhēng)窗口乘以2,然后再繼續(xù)等待發(fā)送。不過當(dāng)失敗次數(shù)達(dá)到閥值的時(shí)候競(jìng)爭(zhēng)窗口大小就不會(huì)增加了。當(dāng)發(fā)送成功以后競(jìng)爭(zhēng)窗口就會(huì)恢復(fù)初始值。
有圖有真相,貼個(gè)圖繼續(xù)分析:
看到初始窗口范圍是0-31,隨著重傳次數(shù)增加,窗口也是呈指數(shù)增長(zhǎng)。當(dāng)增長(zhǎng)到閥值1024大小時(shí)就停止增長(zhǎng)了,接下來如果還是重傳失敗的話就一直隨機(jī)在0-1023 slots中挑出一個(gè)值來進(jìn)行等待。
3 時(shí)序
再者就是時(shí)序問題了,簡(jiǎn)單來說就是如何規(guī)定無線主機(jī)什么時(shí)候該做什么。那首先先得說一下無線網(wǎng)絡(luò)監(jiān)聽機(jī)制,這個(gè)和有線網(wǎng)絡(luò)里面不太一樣。有線網(wǎng)絡(luò)里面若物理信道有數(shù)據(jù)傳輸?shù)脑捠强隙梢员O(jiān)聽的到的,但無線網(wǎng)絡(luò)里面卻不一定。就拿之前那個(gè)隱藏節(jié)點(diǎn)的例子來說,3號(hào)機(jī)可能無法通過監(jiān)聽物理信道來得知一二號(hào)機(jī)正在傳輸。所以無線網(wǎng)絡(luò)通信中,要確定信道是否被占用,引入了虛擬載波監(jiān)聽。
注:載波監(jiān)聽和虛擬載波監(jiān)聽是同時(shí)在運(yùn)行的,只有當(dāng)這兩個(gè)模塊顯示空閑時(shí)才表示信道空閑,若其中的一個(gè)模塊顯示信道繁忙都表示信道正在被占用。
關(guān)于虛擬載波監(jiān)聽的原理,那么得先介紹一個(gè)叫Network Allocation Vector(NAV)這個(gè)變量。這個(gè)變量會(huì)附在無線數(shù)據(jù)包內(nèi)的。準(zhǔn)備發(fā)送數(shù)據(jù)的主機(jī)通過NAV這個(gè)值通知其它沉默的主機(jī)信道要被占用多長(zhǎng)時(shí)間來用于傳輸數(shù)據(jù)。每個(gè)主機(jī)都會(huì)維護(hù)一個(gè)自己的NAV值,然而這個(gè)NAV值每隔1微秒會(huì)遞減1,直到遞減為0的時(shí)候就表示虛擬載波監(jiān)聽的信道空閑。
說白了NAV就是個(gè)定時(shí)器,但是是個(gè)動(dòng)態(tài)定時(shí)器,當(dāng)主機(jī)沉默時(shí)會(huì)不斷的收到來自無線網(wǎng)絡(luò)中的含有NAV值的數(shù)據(jù)包,只有當(dāng)數(shù)據(jù)包中的NAV值大于自己的NAV值時(shí),主機(jī)才會(huì)更新自己的NAV值。
比如說 1號(hào)主機(jī)的NAV值是100,那么收到一個(gè)A包,它的NAV值是99,那么1號(hào)主機(jī)的NAV值就還是100不變。過了10微秒,1號(hào)主機(jī)又收到一個(gè)B包,它的NAV值還是99,但是這個(gè)時(shí)候1號(hào)主機(jī)的NAV值是90了(每隔1微秒會(huì)遞減1的嘛),所以1號(hào)主機(jī)會(huì)把自己的NAV值更新為99。直到這個(gè)NAV值遞減到0才說明信道可用。
接下來又回到時(shí)序問題上,在每幀發(fā)送結(jié)束后(這里指的是所有主機(jī),特別是沉默的主機(jī),當(dāng)沉默主機(jī)檢測(cè)到NAV值是0就表示傳送完畢了)都會(huì)有個(gè)等待間隙。但這等待間隙類型分4種:
SIFS (short interframe space)
該類型時(shí)間間隔最短,這個(gè)類型的時(shí)間間隔主要用于高優(yōu)先級(jí)別的操作。要發(fā)送RTS,CTS,ACK或者是被分片的幀(假設(shè)一個(gè)幀被分成了3塊,第一部分傳送完畢,等待SIFS間隔繼續(xù)發(fā)送第二塊,而其他要發(fā)送完整幀的主機(jī)則需要等待DIFS間隔,這樣就能夠確保這被分片的幀能夠一次性發(fā)送完畢,也就是被分片的幀享受更高的傳輸優(yōu)先級(jí))的時(shí)候。
PIFS (PCF interframe space)
PIFS時(shí)間間隔其次,在傳輸PCF相關(guān)的管理幀的時(shí)候采用這類型的時(shí)間間隔。這種情況就是一般我們用路由器,路由器的管理幀只要等待PIFS就可以發(fā)送了。
DIFS (DCF interframe space)
DIFS時(shí)間間隔最長(zhǎng),所有主機(jī)要傳輸數(shù)據(jù)的話必須在上一次傳輸完畢后統(tǒng)一等待DIFS時(shí)隙后才能嘗試發(fā)送。當(dāng)然,這里說的是嘗試發(fā)送,因?yàn)楹竺孢€得進(jìn)入一個(gè)競(jìng)爭(zhēng)間隔。
EIFS (extended interframe space)
這類幀的時(shí)間間隔不確定,在傳輸錯(cuò)誤的時(shí)候才會(huì)用到。
所以除去EIFS,他們仨的時(shí)間關(guān)系就是 SIFS<PIFS<DIFS,SIFS等待時(shí)間最短,DIFS最長(zhǎng),PIFS居中
。可以發(fā)現(xiàn),時(shí)間越短,發(fā)送成功率越高,這也就說明優(yōu)先級(jí)越高。顯而易見,RTS/CTS幀,也叫控制幀的發(fā)送間隔都是SIFS,因?yàn)檫@類幀的優(yōu)先級(jí)要高于平常的數(shù)據(jù)傳輸。所以當(dāng)你要發(fā)送RTS之類的幀時(shí)就采用SIFS時(shí)間間隔,這樣就能夠保證RTS幀能夠更快比使用其它時(shí)間間隔的幀發(fā)送出去,其它幀接收到RTS報(bào)文后就開始保持沉默將不試圖發(fā)送幀了。
整個(gè)過程串起來就如下圖所示:

先分析上面的那個(gè)時(shí)間軸,RTS發(fā)送出去,收到CTS。然后間隔SIFS就開始發(fā)送數(shù)據(jù)了,這里的幀是分片的,分片的幀需要一次性傳輸完,所以每個(gè)幀的等待發(fā)送時(shí)間是SIFS。里面還可以看到ACK的回復(fù)時(shí)間也是需要等待SIFS的,因?yàn)檫@幾個(gè)類型的幀對(duì)保證數(shù)據(jù)傳輸非常重要,所以享有更高的發(fā)送優(yōu)先級(jí),在這種情況下,其它的無線主機(jī)發(fā)送數(shù)據(jù)干擾這次傳輸是不可能的,因?yàn)樗麄冃枰却鼶IFS時(shí)間間隔。在他們等待沒完的時(shí)候RTS,CTS,ACK,分片幀的傳輸早都開始傳輸了,這些主機(jī)接收到數(shù)據(jù)傳輸信息后只能進(jìn)入沉默。
那么下面的那個(gè)時(shí)間軸就更清晰了,這個(gè)時(shí)間軸其實(shí)可以看成是其它沉默無線主機(jī)NAV值的情況。
在剛發(fā)送第一個(gè)RTS幀的時(shí)候,其它主機(jī)收到了RTS幀中附帶的NAV值,等到0號(hào)幀傳送結(jié)束后各個(gè)主機(jī)開始等待DISF時(shí)間準(zhǔn)備傳輸,但是這個(gè)時(shí)候發(fā)送主機(jī)由于在發(fā)送分片幀,所以只要等待SIFS時(shí)間就發(fā)送了,結(jié)果是其它主機(jī)的DISF時(shí)間還沒等待完就收到了1號(hào)幀給他們的NAV值,然后再一號(hào)幀傳送的這段時(shí)間他們又得只能沉默。這個(gè)時(shí)間軸上面部分表示SENDER通告給其它主機(jī)的NAV值的有效期,下面表示Reveiver通告給其它主機(jī)的NAV值有效期。
4 無線主機(jī)發(fā)送過程
綜合上面的所有概念,下面貼個(gè)圖來全盤分析下單個(gè)無線主機(jī)發(fā)送數(shù)據(jù)包的過程

1. 前面的busy段表示主機(jī)A監(jiān)聽到網(wǎng)絡(luò)數(shù)據(jù)繁忙(這里主機(jī)A判斷信號(hào)方面可能是NAV值沒遞減到0,也可能是物理載波監(jiān)聽那塊檢測(cè)到有數(shù)據(jù)傳送,還可能是2者兼有)
2. OK,busy段結(jié)束后進(jìn)入等待階段,當(dāng)然這里要發(fā)送數(shù)據(jù)而且不用RTS/CTS機(jī)制的話,那么等待時(shí)間應(yīng)該是DIFS間隔的
3. 進(jìn)入競(jìng)爭(zhēng)發(fā)送階段,所有主機(jī)在自己窗口中隨機(jī)選一個(gè)時(shí)間來等待
4. 假設(shè)主機(jī)A隨機(jī)到的等待時(shí)間最短,那么他就開始發(fā)送數(shù)據(jù)了,其它主機(jī)發(fā)現(xiàn)有數(shù)據(jù)傳輸了則會(huì)進(jìn)入沉默狀態(tài),等待下一次數(shù)據(jù)傳輸完畢后進(jìn)行競(jìng)爭(zhēng)。
5 重傳
剛才說到了分片,那么連帶重傳一起說了吧
先說說為什么要分片,什么時(shí)候分片的問題
在無線網(wǎng)絡(luò)通信中,要知道傳輸時(shí)受到的干擾是多種多樣的,也就是說無線網(wǎng)絡(luò)在MAC層的穩(wěn)定性是遠(yuǎn)遠(yuǎn)不如以太網(wǎng)般穩(wěn)定的。所以在長(zhǎng)數(shù)據(jù)幀傳輸?shù)臅r(shí)候很容易中間被中斷。為了提高穩(wěn)定性,就把這個(gè)幀分片,然后再傳輸,顯然短幀傳輸成功率要高于長(zhǎng)幀。這樣設(shè)計(jì)的目的是為了提高無線MAC層的可靠性。這個(gè)就跟你拿IE下一個(gè)1G的東西(一次性傳長(zhǎng)幀)和拿迅雷下同樣一個(gè)1G的東西道理是一樣的,顯然拿迅雷下更穩(wěn)定些,因?yàn)橛袛帱c(diǎn)續(xù)傳。那么分片傳輸充其量就是把以前的普通IE下載升級(jí)優(yōu)化成了斷點(diǎn)續(xù)傳罷了。
當(dāng)數(shù)據(jù)包到指定的分片閥值的時(shí)候就對(duì)數(shù)據(jù)包進(jìn)行分片,同一個(gè)幀被分片的部分也會(huì)帶有一樣的幀序號(hào),也會(huì)有自己的分片編號(hào),也會(huì)有個(gè)表示為表示這個(gè)幀是不是分片幀。這個(gè)跟IP分片設(shè)計(jì)原則是一樣的,這個(gè)就不具體說了。
再者就是重傳問題了,神馬時(shí)候重傳?
以上篇幅提到過,只有在收到ACK確認(rèn)后主機(jī)才會(huì)認(rèn)為自己發(fā)送幀是成功的。同樣,RTS只有在收到CTS后才認(rèn)為自己的RTS發(fā)送成功了。
所以這里涉及到一個(gè)問題就是發(fā)送失敗如何處理?重傳?對(duì)~是重傳,但是一直發(fā)送失敗呢?所以對(duì)于每個(gè)幀都有個(gè)重傳計(jì)數(shù)器(注:競(jìng)爭(zhēng)窗口大小就是根據(jù)這個(gè)重傳計(jì)數(shù)器來決定的),失敗一次就遞增一,但失敗到指定的上限的時(shí)候就放棄發(fā)送該幀然后向上層協(xié)議報(bào)告。
然而重傳計(jì)數(shù)器有2個(gè),分別是長(zhǎng)幀重傳計(jì)數(shù)器和短幀重傳計(jì)數(shù)器。某幀當(dāng)長(zhǎng)度大于指定閥值的時(shí)候,該幀發(fā)送失敗則長(zhǎng)幀重傳計(jì)數(shù)器遞增1,反之亦然。這個(gè)閥值是可以設(shè)定的,重傳上限也可以設(shè)定。這么設(shè)計(jì)是因?yàn)殚L(zhǎng)幀會(huì)占用更多資源(內(nèi)存空間,傳輸時(shí)間等)以便讓管理員通過調(diào)整閥值和各個(gè)計(jì)數(shù)器的重傳上限來優(yōu)化無線網(wǎng)絡(luò)。那么我們來YY一下(純屬YY……我比較沒做過網(wǎng)絡(luò)優(yōu)化這方面的經(jīng)驗(yàn),只是假設(shè)下可能的場(chǎng)景~),比如說我希望用來傳輸300字節(jié)一下的幀的時(shí)間多一些,那么我就設(shè)定閥值為300,然后長(zhǎng)幀重傳計(jì)數(shù)器的上限設(shè)置低一些,短幀重傳計(jì)數(shù)器上限設(shè)置高一些。
重傳計(jì)數(shù)器要清零很簡(jiǎn)單,有幾種情況
1 RTS幀發(fā)送出去若收到CTS幀則清零重傳技術(shù)器(當(dāng)然這個(gè)只可能發(fā)生在短幀計(jì)數(shù)器情況下,因?yàn)镽TS數(shù)據(jù)幀一般情況下不屬于長(zhǎng)幀……當(dāng)然你要把閥值設(shè)成RTS幀大小我也沒話說~)
2 幀數(shù)據(jù)發(fā)送出去,收到ACK確認(rèn)
3 收到廣播或者多播幀(why?書里面這么寫的,但沒寫為什么,這里的多播和廣播幀是不是值通告NAV值的廣播幀咧?如果是這樣,那么就說得通了。待高手解釋~)
OK,這一篇結(jié)束
posted on 2011-02-05 18:20 __ay 閱讀(453) 評(píng)論(0) 編輯 收藏 引用 所屬分類: Others

