CSMA/CA協議詳解【計算機網絡】

【讀書筆記】2018年9月5日17:13:26  《計算機網絡》第六版 謝希仁

雖然CSMA/CD協議已成功地應用於使用有線連接的局域網,但無線局域網能不能也使用CSMA/CD協議呢?

顯然,這個協議的前一部分CSMA能夠使用。在無線局域網中,在發送數據之前先對媒體進行載波監聽。如發現有其他站在發送數據,就推遲發送以免發生碰撞。這樣做是合理的。但問題是“碰撞檢測”(CD)在無線環境下卻不能使用。理由如下:

 (1)碰撞檢測”要求一個站點在發送本站數據的同時,還必須不間斷地檢測信道。一旦檢測到碰撞,就立即停止發送。但由於無線信道的傳輸條件特殊,其信號強度的動態範圍非常大,因此在802.11適配器上接收到的信號強度往往會遠遠小於發送信號的強度(信號強度可能相差百萬倍)。如要在無線局域網的適配器上實現檢測到碰撞,在硬件上需要的花費就會過大。

(2)更重要的是,即使我們能夠在硬件上實現無線局域網的碰撞檢測功能,我們仍然無法避免碰撞的發生。這就表明,無線局域網不需要進行碰撞檢測。

     “無線局域網不需要進行碰撞檢測”是由無線信道本身的特點決定的。我們知道,無線電波能夠向所有的方向傳播,且其傳播距離受限。當電磁波在傳播過程中遇到障礙物時,其傳播距離就會受到限制。如圖9-4所示的例子表示了無線局域網的特殊問題。圖中給出兩個無線移動站A和B,以及接入點AP。我們假定無線電信號傳播的範圍是以發送站爲圓心的一個圓形面積。

圖9-4(a)表示站點A和C都想和B通信。但A和C相距較遠,彼此都聽不見對方。當A和C檢測到信道空閒時,就都向B發送數據,結果發生了碰撞。這種未能檢測出信道上其他站點信號的問題叫做隱蔽站I}}題(hidden station problem) o    當移動站之間有障礙物時也有可能出現上述問題。例如,三個站點A, B和C彼此距離都差不多,相當於在一個等邊三角形的三個頂點。但A和C之間有一個座山,因此A和C彼此都聽不見對方。若A和C同時向B發送數據就會發生碰撞,使B無法正常接收。

圖9-4(b)給出了另一種情況。站點B向A發送數據。而C又想和D通信。但C檢測到信道忙,於是就不敢向D發送數據,其實B向A發送數據並不影響C向D發送數據(如果這時不是B向A發送數據而是A向B發送數據,則當C向D發送數據時就會干擾B接收A發來的數據)。這就是暴露站問題((exposed station problem)。在無線局域網中,在不發生干擾的情況下,可允許同時多個移動站進行通信。這點與有線局域網有很大的差別。

由此可見,無線局域網可能出現檢測錯誤的情況:檢測到信道空閒,其實並不空閒;而檢測到信道忙,其實並不忙。

我們知道,CSMA/CD有兩個要點,一是發送前先檢測信道,信道空閒就立即發送,信道忙就隨機推遲發送;二是邊發送邊檢測信道,一發現碰撞就立即停止發送。因此,偶爾發生的碰撞並不會使局域網的運行效率降低很多。但無線局域網不能使用碰撞檢測,只要開始發送數據,就一定把整個幀發送完畢。由此可見,如果在無線局域網的發送過程中,一旦發生了碰撞,那麼整個信道資源在這段時間就白白浪費了。因此,無線局域網應當儘量減少碰撞的發生。

    爲此,802.11局域網就使用CSMA/CA協議。CA表示Collision Avoidance,是碰撞避免的意思,或者說,協議的設計是要儘量減少碰撞發生的概率。

   802.1 I局域網在使用CSMA/CA的同時,還使用停止等待協議。這是因爲無線信道的通信質量遠不如有線信道的,因此無線站點每通過無線局域網發送完一幀後,要等到收到對方的確認幀後才能繼續發送下一幀。這叫做鏈路層確認。

   我們在進一步討論CSMA/CA協議之前,先要介紹802.11的MAC層。    802.11標準設i十了獨特的MAC層(圖9-5 )。它通過協調功能(Coordination Function)來確定在基本服務集BSS中的移動站,在什麼時間能發送數據或接收數據。802.1 I的MAC層在物理層的上面,它包括兩個子層。

(1)分佈協調功能DCF (Distributed Coordination Function). DCF不採用任何中心控制,而是在每一個結點使用CSMA機制的分佈式接入算法,讓各個站通過爭用信道來獲取發送權。因此DCF向上提供爭用服務。802. I 1協議規定,所有的實現都必須有DCF功能。    

(2)點協調功能PCF (Point Coordination Function)。PCF是選項,是用接入點AP集中控制整個 BSS內的活動,因此自組網絡就沒有PCF子層。PCF使用集中控制的接入算法,用類似於探詢的方法把發送數據權輪流交給各個站,從而避免了碰撞的產生。對於時間敏感的業務,如分組話音,就應使用提供無爭用服務的點協調功能PCF。

爲了儘量避免碰撞,802. 11規定,所有的站在完成發送後,必須再等待一段很短的時間(繼續監聽)才能發送下一幀。這段時間通稱爲幀間間隔IFS (InterFrame Space)。幀間間隔的長短取決於該站要發送的幀的類型。高優先級幀需要等待的時間較短,因此可優先獲得發送權,但低優先級幀就必須等待較長的時間。若低優先級幀還沒來得及發送而其他站的高優先級幀已發送到媒體,則媒體變爲忙態,那麼低優先級幀就只能再推遲發送了,這樣就減少了發生碰撞的機會。至於各種幀間間隔的具體長度,則取決於所使用的物理層特性。    下面解釋最常用的兩種幀間間隔的作用(參考圖9-6 ):

(1) SIFS,即短(Short)幀間間隔,長度爲28 us。 SIFS是最短的幀間間隔,用來分隔開屬於一次對話的各幀。在這段時間內,一個站應當能夠從發送方式切換到接收方式。使用SIFS的幀類型有:ACK幀、CTS幀(在後面“對信道進行預約”中介紹)、由過長的MAC幀分片後的數據幀氣以及所有回答AP探詢的幀和在PCF方式中接入點AP發送出的任何幀。

     (2) DIFS,即分佈協調功能幀間間隔,它比SIFS的幀間間隔要長得多,長度爲128 }s。在DCF方式中,DIFS用來發送數據幀和管理幀。  

 CSMA/CA協議的工作原理可用圖9-6來說明。  

 要發送數據的站先檢測信道。在802.11標準中,規定了在物理層的空中接口進行物理層的載波監聽。通過收到的相對信號強度是否超過一定的門限數值,就可判斷是否有其他的移動站在信道上發送數據。當源站發送它的第一個MAC幀時,若檢測到信道空閒,則在等待一段時間DIFS後就可發送。    

爲什麼信道空閒還要再等待一段時間DIFS呢?就是考慮到可能有其他的站有一高優先級的幀要發送。如有,就要讓高優先級幀先發送。    

現在假定沒有高優先級幀要發送,因而源站發送了自己的數據幀。目的站若正確收到此幀,則經過時間間隔SIFS後,向源站發送確認幀ACK。若源站在規定時間內沒有收到確認幀ACK(由重傳計時器控制這段時間),就必須重傳此幀,直到收到確認爲止,或者經過若千次的重傳失敗後放棄發送。    

由此可見,802.11無線局域網採用的停止等待協議,是一種可靠傳輸協議。發送力一必須等待對力一的確認幀。但802.3有線局域網的傳輸是不可靠的,發送方把數據發送出去就不管了(當然若檢測到碰撞是必須重傳的),如果需要可靠傳輸則由高層負責。    802.11標準還採用了一種叫做虛擬載波監聽(Virtual Carrier Sense)的機制,這就是讓源站把它要佔用信道的時間(包括目的站發回確認幀所需的時間)及時通知給所有其他站,以便使其他所有站在這一段時間都停止發送數據,這樣就大大減少了碰撞的機會。“虛擬載波監聽”是表示其他站並沒有監聽信道,而是由於其他站收到了“源站的通知”纔不發送數據。這種效果好像是其他站都監聽了信道。所謂“源站的通知”就是源站在其MAC幀首部中的第二個字段“持續時間”中,填入了在本幀結束後還將要佔用信道多少時間(以微秒爲單位),包括目的站發送確認幀所需的時間。  

 當一個站檢測到正在信道中傳送的MAC幀首部的“持續時間”字段時,就調整自己的網絡分配向量NAV(Network Allocation Vector)。 NAV指出了必須經過多少時間才能完成數據幀的這次傳輸,才能使信道轉入到空閒狀態。因此,某個站認爲信道處於忙態就有兩種可能,一種可能是由於其物理層的載波監聽檢測到信道忙,另一種可能就是由於MAC層的虛擬載波監聽機制指出了信道忙。    

圖9-6指出,當信道從忙態變爲空閒時,任何一個站要發送數據幀時一,只要不是要發送的第一個幀,不僅都必須等待一個DIFS的間隔,而且還要進入爭用窗口,並計算隨機退避時間,以便再次重新試圖接入到信道。請讀者注意,在以太網的CSMA/CD協議中,要發送數據的站,在監聽到信道變爲空閒就立即發送數據,同時進行碰撞檢測。如果發生了碰撞,就執行退避算法。但在802.11標準的CSMA/CA協議中,因爲沒有像以太網那樣的碰撞檢測機制,所以,在信道從忙態轉爲空閒時,各站就要執行退避算法。這樣做就減少了發生碰撞的概率。802.11標準也是使用二進制指數退避算法,但具體做法稍有不同。這就是:第i次退避就在2^2+i個時隙中隨機地選擇一個。這就是說,第1次退避是在8個時隙(而不是2個)中隨機選擇一個,而第2次退避是在16個時隙(而不是4個)中隨機選擇一個。    

當某個要發送數據的站,使用退避算法選擇了爭用窗口中的某個時隙後,就根據該時隙的位置設置一個退避計時器(backoff timer)當退避計時器的時間減小到零時,就開始發送數據。也可能當退避計時器的時間還未減小到零時而信道又轉變爲忙態,這時就凍結退避計時器的數值,重新等待信道變爲空閒,再經過時間DIFS後,繼續啓動退避計時器(從剩下的時間開始)。這種規定有利於繼續啓動退避計時器的站更早地接入到信道中。    

爲了更好地瞭解802. I 1的退避機制,下面用個例子來說明(圖9-7 ) 。

     圖9-7表示當A正在發送數據時,B, C和D都有數據要發送(用向上的箭頭表示)。由於這三個站都檢測到信道忙,因此都要執行退避算法,各自隨機退避一段時間再發送數據。802. I 1標準規定,退避時間必須是整數倍的時隙時間。    前面己經講過,第i次退避是在時隙{0, 1, ..., 2 ^2+i}中隨機地選擇一個。這樣做是爲了使不同站點選擇相同退避時間的概率減少。因此,第1次退避(i=1)要推遲發送的時間是在時隙{0, 1,…,7}中(共8個時隙)隨機選擇一個,而第2次退避是在時隙{0, 1,…,15}中(共16個時隙)隨機選擇一個。當時隙編號達到255時(這對應於第6次退避)就不再增加了。這半決定退避時間的變量,稱爲退避變量。    

退避時間選定後,就相當於設置了一個退避計時器(backoff timer)。站點每經歷一個時隙的時間就檢測一次信道。這可能發生兩種情況:若檢測到信道空閒,退避計時一器就繼續倒計時;若檢測到信道忙,就凍結退避計時器的剩餘時間,重新等待信道變爲空閒並再經過時間DIFS後,從剩餘時間開始繼續倒計時。如果退避計時器的時間減小到零時,就開始發送整個數據幀。  

 從圖9-7可以看出,C的退避計時器最先減到零,於是C立即把整個數據幀發送出去。請注意,A發送完數據後信道就變爲空閒。C的退避計時器一直在倒計時。當C在發送數據的過程中,B和D檢測到信道忙,就凍結各自的退避計時器的數值,重新期待信道變爲空閒。正在這時E也想發送數據。由於E檢測到信道忙,因此E就執行退避算法和設置退避計時器。    

當C發送完數據並經過了時間DIFS後,B和D的退避計時器又從各自的剩餘時間開始倒計時。現在爭用信道的除B和D外,還有Eo D的退避計時器最先減到零,於是D得到了發送權。在D發送數據時,B和E都凍結其退避計時器。

 以後E的退避計時器比B先減少到零。當E發送數據時,B再次凍結其退避計時器。等到E發送完數據並經過時間DIFS後,B的退避計時器才繼續工作,一直到把最後剩餘的時間用完,然後就發送數據。

 凍結退避計時器剩餘時間的做法是爲了使協議對所有站點更加公平。    

根據以上討論的情況,可把CSMA/CA算法歸納如下:    

(1)若站點最初有數據要發送(而不是發送不成功再進行重傳),且檢測到信道空閒,在等待時間DIFS後,就發送整個數據幀。    

(2)否則,站點執行CSMA/CA協議的退避算法。一旦檢測到信道忙,就凍結退避計時器。只要信道空閒,退避計時器就進行倒計時。    

(3)當退避計時器時間減少到零時(這時信道只可能是空閒的),站點就發送整個的幀並等待確認。  

 (4)發送站若收到確認,就知道已發送的幀被目的站正確收到了。這時如果要發送第二幀,就要從上面的步驟(2)開始,執行CSMA/CA協議的退避算法,隨機選定一段退避時間。    

若源站在規定時間內沒有收到確認幀ACK(由重傳計時器控制這段時間),就必須重傳此幀(再次使用CSMA/CA協議爭用接入信道),直到收到確認爲止,或者經過若干次的重傳失敗後放棄發送。    

應當指出,當一個站要發送數據幀時,僅在下面的情況下才不使用退避算法:檢測到信道是空閒的,並且這個數據幀是它想發送的第一個數據幀。  

 除此以外的所有情況,都必須使用退避算法。具體來說,以下幾種情況都必須使用退避算法:  

(1)在發送第一個幀之前檢測到信道處於忙態。    

(2)每一次的重傳。    

(3)每一次的成功發送後再要發送下一幀。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章