1. 程式人生 > >CSMA/CD vs CSMA/CA

CSMA/CD vs CSMA/CA

Aloha vs CSMA

  • Aloha協議的特點是有資料立即傳送
  • CSMA是在Aloha協議之上增加了一個通道檢測

CSMA/CD

  • 監聽通道,如果通道忙,繼續監聽(這個忙應該不需要指數回退,實時監測即可)。
  • 如果通道空閒,等待IFG幀間間隙,傳送資料。
  • 這個時候如果多個節點發送資料,就會發生衝突。一旦某一個節點檢測到衝突,其就在通道上傳送一個Jamming訊號通知所有節點。
  • 退避的時間是slot_time的整數倍N = 0 ~ (2^k - 1)。最開始K=0。
  • K最大為16。如果退避次數超過了上限,傳送失敗。丟棄該幀,傳送下一幀。

延遲的slot數為N = 0 ~ (2^k - 1)

,k有範圍
k=1,N = 0~1
k=2,N = 0~3
k=3,N = 0~7
、、、
這樣可以最大程度的避免衝突

CSMA/CA

普通DCF

  • 如果通道忙,等待
  • 如果通道空閒,接著等待DIFS
  • 如果通道忙,等待
  • 如果還空閒,立即傳送資料
  • 如果沒有收到ACK訊號,說明發生了碰撞
  • 等待DIFS,如果空閒,競爭視窗內選擇一定的時隙傳送。

帶RTS/CTS的DCF

CA的載波監聽分為:

  • 虛擬載波監聽
  • 物理載波監聽

RTS/CTS包的頭部都有一個Duration欄位。因為無線的資料包都是廣播的,很多節點都能收到。非目標節點接收到後,會根據Duration欄位的值來設定各自的NAV(Network Allocation Vector)。NAV指定了可以接入通道的最早時間。

問題

lmz_0:
出於效率考慮,DCF使用離散退避機制。
一個空閒的DIFS的時間片被劃分為時隙,一個節點只能在某個時隙開始的時刻開始傳送資料包,從而避免了使用者傳送資料的隨意性,提高了通道利用速率。
競爭視窗CW的值以2為底的整數。

一個節點真正的傳送時刻是空閒後的
DIFS+隨機退避時間

如何防止某一個節點一直競爭不到通道?
感覺不同的節點的CW的值最開始是一樣的。
如果某一個節點多次接入不了通道,其CW值應該是越來越小的。

lmz_1:

不論是CD還是CA,都會監測通道是否空閒。感覺這個通道狀態的監測是實時的。即忙的時候繼續監測就可以,而不用在這個時候就執行指數回退。

lmz_2:

為什麼無線通道不使用碰撞檢測?

  • 隱藏終端的存在檢測不到
  • 無線接收不能同時

lmz_3:

  • 簡單來說,CA是在監測通道空閒時間達到DIFS後才傳送資料,即實時監測通道時發現空閒,等待DIFS後仍發現空閒,這時才傳送資料。
    而CD只要監測到空閒,立即傳送資料(等待的幀間間隔和CA不是一回事)。
  • CD監測碰撞是實時的,CA監測碰撞是通過ACK的反饋
  • 是在傳送之前執行指數回退

lmz_4:

個人感覺所謂的指數回退,不論是在CD還是在CA中都是減少碰撞機率的一種方法。
那麼,無線中的碰撞避免主要體現在哪裡呢?
體現在必須監測到通道空閒一段時間才傳送資料。這就避免了低優先順序的訊號(普通包) 和高優先順序訊號(確認包)的碰撞。

lmz_5:

CA中的通道忙有兩種情況:

  • 最初監測到通道忙
  • 在DIFS週期內監測到通道忙

tags:opnet