本文主要介紹通訊領域中CSMA相關機制,本文全部資料來自於網絡。
網絡通訊,必須依靠介質來傳遞數據,將數據調制到模擬信號上,再把此信號通過介質傳遞到遠方。根據介質的不同,分為有線網絡和無線網絡。為了讓世界上各種各樣的網絡設備生產商生產的設備互聯互通,他們必須遵循一定的“通訊語言“,就像一個中國人和美國人在一起,假如他們生產的設備只能夠說“本國語言”,那碰在一起,就是驢頭不對馬嘴,根本無法溝通。為了解決這個問題,IEEE組織推出了兩種協議,一種適用於有線網絡的IEEE 802.3標准和另一種適用於無線網絡的IEEE 802.11標准。在底層傳輸上,有線網和無線網,都屬於廣播形式的網絡,這也就是說,當一個節點發送信息時,網絡范圍內的所有節點,都能夠接收到,如果有多個節點在同時發送數據,這就容易形成數據堵塞和碰撞,導致網絡速度變慢。
為了解決這個問題,協議指定CSMA機制來解決這個問題,CSMA全稱為Carrier Sense Multiple Access,中文為載波監聽多路訪問,具體處理方法根據傳輸介質的不同而不同。有線網絡采用沖突檢測(Collision Detection),無線網絡采用沖突避免(Collision Avoidance),從字面意思上來看差不多,但是具體細節上還是有些不同。
下面介紹兩種避免沖突的方法。
CSMA/CD
這種方式,在發送方發送信號前,先監聽通信信道是否空閑。 如果空閑,則立即發送數據,並且邊發邊監聽信道,如果此時監聽到沖突,則立即停止發送數據,同時告訴其他節點已經發送碰撞(發送阻塞信息),自己則隨機等待一段時間后重新發送數據包。當監聽到信道忙碌時,也需要隨機等待一段時間,時間值通過指數退避算法來獲得。當嘗試若干次都失敗的話,則停止發送,通知上層。
下面介紹二進制指數退避算法的基本流程:
1. 確定基本退避時間單位(2T),對於以太網來說,為51.2us
2. 定義一個參數K,它與重傳次數N之間的關系為, K = min[N,10]
3. 從上述定義的K,構造離散型整數集合[0,1,2,3,4…,(2^k - 1)]
4. 計算重傳時間,從離散整數集合中隨機取一個數,乘以基本退避時間單位就是退避時間。
CSMA/CA
發送數據前,先檢測到信道狀態,等到信道空閑后,再等待一段時間后,再次檢測信道是否空閑,如果還是空閑,那么立刻發送數據,否則,隨機等待一定時間,等時間到期后,再次發送檢測。
發送真實數據前,先向目標端發送的請求傳送報文(RTS),等接收到目標端響應報文CTS,發送端才開始傳送真正的數據。采用這種RTS-CTS機制,可以確保接下來傳送數據時,不會被碰撞。由於RTS-CTS的封包都很小,因此不會增大整體傳輸開銷,此方式可以確保接下來傳送數據時,其他設備不會使用信道以避免沖突。
那么,CSMA/CA是如何避免沖突的發送呢?它采用了帶確認的發送機制,類似於TCP的ACK回應,如果發送方收到了接收方對其發送數據的ACK確認,那么,不管空中信道是多么的擁擠,數據包還是艱難的穿梭到收發雙方,其表現就是收到了ACK信號.
CSMA/CA通過上述三種方式,信道空閑檢測、RTS-CTS和ACK確認,提供避免碰撞的無線信道分時訪問。
信道的空閑檢測有三種方式,分布是通過能量檢測、載波檢測和能量載波混合檢測三種方式來檢測信道,統稱為CCA。
有線網絡和無線網絡,因為傳輸介質的不同,檢測沖突的方法也就不同。在傳統的有線網絡中,檢測方法是通過通過電纜中電壓的變化檢測沖突,當數據傳輸發生碰撞時,電纜中的電壓就隨着發生變化。在無線網絡中,空氣作為傳輸介質,必須采用其他的碰撞檢測機制。CSMA/CA提供了三種檢測信道空閑(CCA)的方式:
1. 能量檢測(ED) : 對接收信號的能量大小進行判斷,當功率大於某一確定值時,就認為信道被占用
2. 載波檢測(CS) : 對接收信號與本地的偽隨機碼(PN碼)進行運算比較,如果其值超過某一極限,就認為信道被占用
3. 能量和載波混合檢測(ED & CS)
為什么采用電纜傳輸和采用空氣傳輸,需要不同方式的檢測方法呢?
這是由於傳輸介質所決定的,不同的傳輸介質上,信號衰減的速度不一樣。在有線傳輸上面,假設發出去的信號對於的電壓值為3.3(瞬間電壓),當檢測到沖突時,也就是接收到來自其他設備的信號,通過電壓的疊加,可能會得到6V左右的瞬間電壓,這很容易檢測出來。但在無線傳輸上,干擾信號就沒有這么強勁了,隨着傳輸距離的增加,信號衰減的很快,在發送端,當接收到其他非預期信號的干擾時,電壓的撥動不會那么明顯,因此需要上面提到CCA方法。
CSMA/CA算法概述
下圖是CSMA/CD機制的發送數據和接收數據的流程圖。
在無線信標網絡中,網絡中的協調器會定期發送信標給所有的可感知節點。所有待發送數據的設備,在發送數據前,都會通過CSMA/CA機制來競爭傳輸媒介的使用權。根據網絡中是否有信標,將無線網絡分為信標網絡和非信標網絡。在不同網絡模式下,CSMA/CA算法版本不一樣,分為信標版本slotted CSMA-CA 和非信標版本的unslotted CSMA-CA算法。
兩者的區別主要在信標版本下,所有設備的退避時間和和協調器的信標幀傳輸時間對齊,保證在每段CAP開始時,才開始傳輸數據,以減少沖突的可能性。在2.4GHz的傳輸頻段下,每1毫秒可以傳送完畢62.5個symbols,那么傳輸一個symbols所需的時間為(1/62.5)毫秒。根據待傳輸的MPDU的長度(以aMaxSIFSFrameSize,默認為18個字節為界限),幀與幀之間的間隔時間有所不同,具體要求如下:
IFS: Interframe spacing 幀與幀之間的空隙
LIFS : long IFS 長幀與長幀之間的空隙
SIFS : short IFS 短幀與短幀之間的空隙
如果需要ACK確認的幀,則在收到ACK后等待IFS時間,如果不需要,則根據傳輸幀長度,在等待相應的時間。
在此算法中,有三個重要的參數:
NB(后退次數,Number of Back):每檢測到信道忙,該值就會加1.在IEEE 802.15.4中,Nb最大值定義為24.為了優化效率,當信道經過4次退避延遲檢測后,仍然為忙,則放棄此次傳送。在每次傳輸開始時,該值初始化為0.
CW(碰撞窗口長度, content window length): 每次退避等待時間值,單位為傳輸20個symbol所需的時間,CW的初始值為2,最大值為31.當判斷信道為忙時,重置該值為2. 此參數僅在信標網絡下才使用。
BE(退避指數,Backoff exponent):設備嘗試去退避的最大次數,也就是節點接入信道的能力。
當接收信標幀中的BLE域為0時,BE應該初始化為MAC層的macMinBE值,否則,BE值應該設為2和macMinBE兩者中的小者。在IEEE 802.15.4中,BE默認值為3,取值范圍在0~macMaxBE。其中,macMaxBE的取值范圍為[3-8],默認為5.
下圖是簡要算法流程圖:
CSMA-CA適用范圍
CSMA-CA算法適用於傳輸數據幀、MAC命令幀帶CAP的,它不適合在信標網絡中傳輸信標幀,ACK幀或者在CFPs時間內的數據幀傳輸。ACK幀和信標幀傳輸,無需CSMA-CA機制。
相關參考鏈接:CSMA/CD和CSMA/CA詳解
IEEE 802.15.4 協議規范