# 802.11 - DCF (Carrier Sense) [TOC] ## 課程影片 ### 第 3J 講 IEEE 802.11 無線區域網路 (Wireless LAN) L03 10 {%youtube 2EstjEeOp3k %} ## Virtual Carrier Sense 在一開始的時候,要怎麼知道目的地是否正在忙碌中?有兩種方法做 *carrier sense*。一種稱為 *physical carrier sense*,意思是使用直接用硬體檢測 *channel* 上的能量強度,以判斷是否正在進行傳輸; 另外一種則稱為 *virtual carrier sense*,即 RTS/CTS 機制。在這個機制下,不用直接聽到封包廣播,也可以知道對方是否正在忙碌。 ### 第一階段:RTS 首先,在監聽接收方 *DIFS* 時間之後,如果目的地都沒有動靜,表示他真的在閒置(而不是正在等待某個更短的 *IFS*),那就送出一個 *RTS* 給目的地,跟他說接下來多長的時間內要對他傳輸。而其他節點收到 *RTS* 時,會把 *RTS* 中的 `duration` 記在 *NAV* 中,知道接下來的這段時間內,這個節點都會處在傳輸訊息給別人的狀態: ![](https://i.imgur.com/WUaks1w.gif) ### 第二階段:CTS 目的地收到 *RTS* ,並經過 *SIFS* 時間後,接著傳送 *CTS*。*CTS* 的 `duration` 欄位會紀錄接下來發送方需要多長的時間不要打擾。所有收到 *CTS* 的其他節點就會把這個 *CTS* 中的 `duration` 時間記在另外一個 *NAV* 的欄位。只要這個 *NAV* 尚未倒數結束,其他節點就認定這個目的地處在忙碌狀態。 ![](https://i.imgur.com/DzyeyKq.gif) 在這種作法之下,==即使其他節點未必收得到發送端傳送的封包(因為 *hidden node problem*),但只要看看 *NAV* 是否已經倒數到 0,就可以知道目的地是否仍然處在忙碌==。 ### 第三階段:Data 與 ACK *RTS/CTS* 交握完畢(也就是確認收到 *CTS* 之後)並等待一段 *SIFS* 時間之後,就開始傳輸資料封包。而 ==資料封包傳輸給目的地之後,目的地就需要在 *SIFS* 時間內回覆 *ACK*== 。若發送方沒有收到目的地的 *ACK*,就表示有碰撞發生,需要重送。 ![](https://i.imgur.com/yIDURRv.gif)