802.11協議精讀3:CSMA/CD與CSMA/CA

序言

在前一份文檔中,我們詳細記錄了有關802.11中DCF模式以及其核心CSMA/CA的一些內容與細節。對比無線網路,有線網路的集線器和中繼器設計中,採用了CSMA/CD技術。該技術早期是用來解決有線網路中,共享介質下的多路網路接入問題,該技術仍然在當今的10M/100M半雙工網路中使用。在更高的帶寬情況下,比如千M網路,則採用全雙工技術以代替CSMA/CD。

本文主旨是希望能理清CSMA/CD和CSMA/CA的關係與區別。接下來,我們首先會說明最基礎的CSMA協議的工作機制,然後我們說明CSMA/CD的工作機制,最後,對比前一份文檔,我們分析CSMA/CD和CSMA/CA的區別。

註:本文中有關有線網路的理論很多參考自《Ethernet:The Definitive Guide》。

CSMA

CSMA的全稱是Carrier Sense Multiple Access,在筆者的理解中,其更趨向於一種理論研究的隨機接入協議,或者說,基於其思想誕生了比如CSMA/CD與CSMA/CA這樣的具體協議。CSMA可以分成以下三種:

  • 1-persistentes CSMA(1堅持-CSMA)

  • 0-persistentes CSMA(0堅持-CSMA)

  • p-persistentes CSMA(p堅持-CSMA)

從歷史上而言,CSMA實際上是源於aloha協議,為了理清協議的設計思路的脈絡關係,我們還是有必要對原始的aloha協議做一個說明。Aloha是為無線工作環境設計的一個協議,其最初的思想很簡單:「一個aloha節點只要有數據的話,該節點就可以立即發送。當該節點數據發送完之後,其需要等待接收方反饋的ACK。若成功接收到ACK之後,那麼這一次傳輸成功。如果沒有收到ACK的話,那麼這一次傳輸失敗。該aloha節點會認為網路中還存在另外一個aloha節點也在發送數據,所以造成接收方發生了衝突。最後這些衝突的節點會隨機選擇一個時間進行回退(backoff),以避免下一次衝突。若衝突節點回退完成,其才可以重新進行發送"。

實際上從初始的aloha協議中,我們就可以看到現在CSMA/CA的影子,網路協議的設計都是符合KISS原則的(Keep It Simple and Stupid),所以實際中我們所應用到的網路協議,其思想都不會是特別複雜。基於aloha協議的思想,CSMA協議對其最大的改進即是引入了LBT機制(Listen Before Talk),在CSMA中的CS(Carrier Sense)即是指Listen監聽機制。在LBT機制下CSMA的思想就是:「CSMA節點在每一次發送之前先監聽信道是否是空閑的,如果信道不是空閑的話,那麼就不發送數據,等待一會再進行嘗試。只有確保是空閑的情況下,才可以發送數據,從而避免打斷其他節點正在進行的傳輸過程"。

具體CSMA的工作機制關聯著我們之前所敘述的三種CSMA模式,以下我們分別進行敘述:

  • 1-persistentes CSMA:「節點需要持續監聽信道,一旦節點發現信道空閑後,則立刻發送數據。」。

  • 0-persistentes CSMA:「節點不連續監聽信道,若該時刻節點監聽信道為busy,那麼等待一段時間後,再次進行監聽。若節點該時刻監聽信道為空閑,則立刻發送數據。

  • p-persistentes CSMA:「節點需要持續監聽信道,一旦發現信道空閑後,節點以p的概率立刻發送數據,以1-p的概率不發送數據。若節點該時刻不發送數據,那麼等待一段時間後,再次進行監聽,並以p概率再次發送」。(註:這裡所述的p概率可以理解成拋骰子賭大小,如果拋大,那麼就發送,反之不發送。其中拋大的概率就是p,而拋小的概率就是1-p

在以上三種CSMA機制中,若節點傳輸發送衝突,則類似aloha的基本演算法,隨機等待一個時間之後,再次進行重試。以上,我們分析了CSMA的基本工作模式,或者稱之為CSMA的基本思想,接下來,我們具體討論有線網路所應用到的CSMA/CD協議。

CSMA/CD

CSMA/CD的全稱是Carrier Sense Multiple Access with Collision Detection,即基於衝突檢測的載波監聽多路訪問技術。CSMA/CD也是最初802.3中的核心,應用在10M/100M的半雙工有線網路中,目前CSMA/CD的應用場景少了很多,大部分都直接基於全雙工工作。

CSMA/CD從思想上應該是源自於1-堅持CSMA,即1-persistentes CSMA。在其基礎上,加入了CD(Collision Detection)的機制。衝突檢測,即CD的機制主要是用來發現衝突,並解決衝突的。我們下面描述CSMA/CD的具體工作機制:

節點發送數據之前需要持續監聽信道,一旦節點發現信道空閑,則立刻發送數據。在發送數據的同時,節點持續監聽信道,"探測" 是否有別的節點也在該時刻發送數據。

若傳輸過程中沒有檢測到別的節點的傳輸,那麼成功傳輸。在成功傳輸後,節點需要等待幀間間隔IFG(interframe gap)時間後,可以進行下一次傳輸。

若在傳輸過程中,探測到別的節點也在傳輸,那麼則檢測到衝突。發生衝突後,節點立刻停止當前的傳輸,並且發送特定的干擾序列(JAM序列),用以加強該次衝突(用以保證其餘所有節點都檢測到該次衝突),在JAM序列發送完之後,節點隨機選擇一個時間倒數進行backoff。當backoff完成之後,節點可以嘗試再次重傳」。

在上述的描述中,我們可以發現,CSMA/CD和1-堅持CSMA是非常相近的,與傳統的aloha相比,CSMA/CD不僅僅添加了LBT的機制,還引入了衝突檢測(Collision Detection)機制,用以在傳輸中立刻發現衝突,而不是依靠ACK的反饋來判斷是否有衝突發生,從而提高網路效率。在CSMA中,我們還需要描述一些細節內容:

  • 載波檢測(CS:carrier sense):在有線網路中,載波檢測實際上即是接收信道上的信息,並加以解析。用這種方式判斷共享信道上有沒有節點正在傳輸信息,從而達到監聽(listen)的作用。其中載波檢測這個名字實際上是從AM/FM接收中來的,即載波就是攜帶調製信息的模擬信號,從而載波監聽就是對是不是有AM/FM信號進行偵聽。
  • 衝突檢測(CD:collision detection):在一些理論中,介紹衝突檢測為「發送的同時,接收同一個信道上的數據,並比較發送數據Tx與接收數據Rx」。若Tx=Rx,則沒有衝突發生,若Tx≠Rx,則識別到一個衝突。在一些工程介紹中,介紹檢測衝突的方法是「介質依賴法」。連接段介質(實際上是電纜)擁有傳輸和接受數據的獨立路徑(雙絞線中有單獨的發送和接受迴路),衝突檢測是在同一個接收段收發器中,藉助同時發生在傳輸和接收數據路徑上的活動來完成的。在同軸電纜介質上,收發器通過檢測同軸電纜的DC(即直流信號)信號等級來檢測衝突。當兩個或者多個基站同時傳輸時,同軸上的平均DC電壓可達到觸發同軸收發器中的衝突檢測電壓等級。同軸收發器連續檢測同軸電纜上的平均電壓等級,若平均電壓等級表明,有多個基站同時傳輸內容後,其會發送JAM信號到乙太網介面處。發送JAM信號的這個過程比衝突檢測時間較長,多出的時間包含了根據10Mbps乙太網上總信號延遲算出的時間(即包含了JAM信號的傳輸時間)。
  • 時隙與捕獲效應:在有線網路中,捕獲效應被定義為1個時隙長度內沒有衝突發生,同時時隙被定義為512bit在10Mbps或100Mbps網路的發送時間。在有線網路中選擇為512bit作為一個時隙的參考值,是考量了為發送信號到對端的最大往返時間。該最大往返時間包含了電磁波通過物理層的往返時間以及傳輸JAM信號所花費的時間。(JAM信號是加強衝突的一個通知信號)。若節點已捕獲信道,即已發送512bit,那麼對方不一定會來打斷你當前的傳輸,1.即確保對方能檢測到你,2.並且反饋的JAM信號也能通知到你。同時,若從電磁波傳輸的角度而言,512bit在10M中傳輸的時間換算成電磁波能夠傳播的距離大約是2800米,512bit在100M中傳輸的時間換算成電磁波傳播的距離大約是200米,對比有線網路的雙絞線長度(大約100米)而言,這些參數還是可以接受的。在1000Mbps網路以及其上,都是默認物理層採用全雙工模式的,若還是採用CSMA/CD的模式,那麼這裡的時隙長度會被定義為512byte的長度,不過目前這個可能是學術上的用法,而非協議的定稿。
  • 重傳機制(Backoff與BEB機制):若節點檢測到衝突發生在前512個位元組,即一個時隙內,那麼節點首先進行backoff,然後進行重傳。這裡backoff是採用BEB(二進位指數回退演算法),即在一個隨機窗口內,選擇一個隨機數並乘以時隙(time slot)進行回退。在第0~10次回退過程中,每回退一次,隨機窗口放大一倍,在第11次到第16次過程中,依然進行回退,並嘗試重新發送數據包,但是不放大窗口大小,第17次若失敗,則丟包。按照一般情況下,衝突不會發生在512位元組以後的部分,即已經發生了捕獲效應,即節點已經捕獲到了信道。不過比如時間不同步這樣的一些情況出現,導致衝突發生在512位元組之後,貌似是不進行重傳,直接丟包的。

CSMA/CD與CSMA/CA

在綜述完CSMA/CD後,對比我們前一次敘述的CSMA/CA,我們總結這兩者之間的聯繫和區別。

  • 聯繫:CSMA/CD與CSMA/CA機制都從屬於CSMA的思路,其核心就是LBT機制,換言之,兩個在接入信道之前都需要進行監聽。當發現信道空閑後,其才可以進行接入。

  • 區別

    • 在思想上:
      • CSMA/CD是源自於1-堅持CSMA,而CSMA/CA是源自於p-堅持CSMA。即CSMA/CD是持續監聽信道,一旦發現信道空閑,則立刻傳輸。
      • CSMA/CA是邊進行backoff回退過程邊進行監聽,若信道空閑則進行backoff counter倒數,否則掛起隨機倒數計數器,不進行backoff counter倒數的工作。只有當backoff counter(即隨機倒數計數器)回退至0時,其才可發送數據。
    • 在衝突檢測上:
      • CSMA/CD中是採用衝突檢測+JAM機制,即邊發送邊監聽實時信道狀態,可以在傳輸過程中,實時判斷信道中是否有衝突發生,一旦發現了衝突,則發送JAM信號以加強衝突,其餘節點也因識別到該JAM信號,從而停止當前傳輸。若整個過程中,節點都沒有發現衝突以及JAM反饋,那麼該次傳輸成功。
      • CSMA/CA是源自於aloha的ACK反饋機制,若接收到對方反饋的ACK後,那麼這一次傳輸成功,否則失敗。
    • 在監聽機制上
      • 由於CSMA/CD是有線網路,故其監聽是直接解調有線介質上的信息,若沒有信息,則信道空閑,若存在信息,則信道繁忙。
      • 在CSMA/CA中,不僅引入了物理載波監聽與虛擬載波監聽這兩種技術,同時在物理載波監聽中,還分為能量檢測(Energy Detection)和載波感知(Carrier sense)。同時該載波感知所指是利用無線幀物理層頭部中的固定序列(即preamble),利用已知序列和其做相關運算(自相關或者互相關運算)進行識別。詳細的一些內容可以參考上一篇有關DCF和CSMA/CA的文章。
    • 在回退(backoff)機制上
      • 在CSMA/CD中,回退只有在衝突之後才會發生,節點選擇選擇一個隨機時間進行回退,該隨機事件具體是時隙乘以回退窗口內的一個隨機數。其中為了避免多次衝突的問題,在每一次衝突後,節點的回退窗口也會執行BEB演算法,即將回退窗口進行翻倍。在CSMA/CD中,回退一共可以進行16次,其中,第1~9次存在會對回退窗口進行翻倍,在第10~16次中,窗口大小不變(窗口最大1024),再次重試。第16次若失敗,則進行丟包處理。
      • 在CSMA/CA中,節點的每一次傳輸之前都需要進行backoff過程。在CSMA/CA的backoff過程中,節點會在每一個slot中對信道進行監聽(這裡包含物理載波監聽和虛擬載波監聽),若信道監聽為空閑,那麼進行backoff,即隨機倒數計數器減1,若信道監聽為信道忙,則掛起該計數器,只有當該計數值為0時,節點才可以發送數據。在CSMA/CA中,若發生衝突後,對競爭窗口(Contention Window)進行BEB操作,在1~6次中,窗口大小翻倍,第6次時,窗口大小不變(窗口最大也是1024),再次重試,若第7次傳輸失敗,則進行丟包處理。
    • 在時隙的定義上:
      • 在CSMA/CD中,時隙被定義在一個固定數據片大小在固定速率的媒介上傳輸的時間,比如在10M/100M網路中,時隙為512位在10M/100M網路下對應傳輸的延遲。
      • 在CSMA/CA中,時隙中包含三個方面的內容,即傳播延遲,信道檢測(CCA)以及收發天線轉換。時隙時間具體與其對應的802.11協議版本有關,比如802.11b中,時隙即是20us。
    • 在捕獲效應的定義上:
      • 在CSMA/CD中,捕獲效應被定義為節點成功傳輸1個時隙的數據,從而節點能夠確保自己已經捕獲了信道,其餘節點也都已感知到了這點,從而確保不會有衝突發生。
      • 在CSMA/CA中,捕獲效應是指由於信號功率的不同,比如有兩個節點同時向接收方發送數據,其中一者信號強度大(即SNR大),一者信號強度小(即SNR小)。在這種情況下,若信號較好的SNR能夠達到解調其數據所需最低的SNR閾值的話,那麼其是可以解調,即這次傳輸可以是成功的。直觀的理解,我們可以認為一個大嗓門和一個小嗓門同時說話,那麼我們是可以聽清楚大嗓門的。

以上是總結的一些筆者理解CSMA/CA和CSMA/CD的區別,其他還存在的一些區別,比如在802.11DCF模式中所採用的RTS/CTS機制,在有線網中就不存在或者對應存在區別,在此就不再一一贅述了。

註:在上述的討論中,有線網路的部分知識主要是源於《Ethernet:The Definitive Guide》,而無線網路的部分主要來源於筆者的研究經歷,在無線網路中,也有想要實現類似於有線網路的CSMA/CN的工作機制,筆者的一部分工作也是來源於此,有興趣可以自行閱讀。以上討論中,如果存在錯誤,還請見諒。

本文為原創文章,如需轉載須註明出處和原文鏈接。

歡迎大家關注我們的微信公眾號:無線技術大講堂,請搜索公眾號(must_wireless)。


推薦閱讀:

TAG:WiFi | 计算机网络 | 通信 |