RTS/CTS =========== .. contents:: :local: :depth: 3 Overview -------- The **RTS/CTS (Request to Send / Clear to Send)** mechanism in IEEE 802.11b is a collision-avoidance protocol that reduces data frame collisions on shared wireless media. It is particularly effective in environments with **hidden stations**, where multiple transmitters cannot sense each other's activity. RTS/CTS performs **virtual carrier sensing** using short control frames that reserve the medium before data transmission, ensuring that only one sender transmits during the reserved interval. Purpose ------- - Mitigate hidden node collisions. - Minimize retransmission cost by colliding only short control frames. - Reserve the channel using the **Duration/ID** field for all subsequent frames. - Enable fair medium access in dense networks. RTS Threshold ------------- RTS/CTS is **not mandatory** for all frames. A frame is preceded by an RTS/CTS exchange only when its size exceeds the ``dot11RTSThreshold`` value. +--------------------+--------------------------------------+ | Parameter | Description | +====================+======================================+ | ``dot11RTSThreshold`` | Frame size threshold (bytes) | | Range | 0–2347 | | Default | 2347 (RTS/CTS disabled) | +--------------------+--------------------------------------+ Rule: .. code-block:: none if MSDU_length > RTS_Threshold: perform RTS/CTS exchange else: transmit DATA directly Frame Roles ----------- +--------+------------------+----------------------------------+ | Frame | Purpose | Sent by | +========+==================+==================================+ | RTS | Request medium | Sender (transmitter) | | CTS | Clear to send | Receiver (responding STA) | | DATA | Payload frame | Sender | | ACK | Acknowledgment | Receiver | +--------+------------------+----------------------------------+ RTS/CTS Basic Exchange ---------------------- Sequence ~~~~~~~~ .. code-block:: none RTS → SIFS → CTS → SIFS → DATA → SIFS → ACK Timing Diagram ~~~~~~~~~~~~~~ .. code-block:: none |<-- DIFS -->|<-- Backoff -->| RTS | SIFS | CTS | SIFS | DATA | SIFS | ACK | | Symbol | Meaning | |:-------|:---------| | DIFS | Interframe spacing before new contention | | SIFS | Short interframe spacing between controlled frames | | NAV | Network Allocation Vector (medium reservation timer) | Duration Field Computation -------------------------- Each frame carries a **Duration/ID** value indicating how long the medium will remain busy. .. math:: D_{RTS} = T_{CTS} + SIFS + T_{DATA} + SIFS + T_{ACK} .. math:: D_{CTS} = T_{DATA} + SIFS + T_{ACK} .. math:: D_{DATA} = SIFS + T_{ACK} .. math:: D_{ACK} = 0 Stations hearing any of these frames update their **NAV** accordingly and defer transmissions until NAV expires. Scenarios --------- Scenario 1 — Normal RTS/CTS Exchange ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **Condition:** Two stations (A and B), no hidden nodes, RTS enabled. Sequence: .. code-block:: none A: RTS → SIFS → wait CTS B: receives RTS → SIFS → sends CTS A: receives CTS → SIFS → sends DATA B: receives DATA → SIFS → sends ACK Timeline: .. code-block:: none STA A → STA B ------------------------- RTS ----------------------------> <--- CTS --- ---- DATA ----------------------> <--- ACK --- Outcome: - Medium reserved successfully. - NAVs updated for all overhearing stations. - ACK resets CW to CWmin. Scenario 2 — Hidden Node Problem (Solved) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **Condition:** STA A and STA C both transmit to STA B, but cannot hear each other. **Without RTS/CTS:** DATA collisions occur at B. **With RTS/CTS:** CTS from B informs hidden stations to defer. Timeline: .. code-block:: none STA A (Tx) STA B (Rx) STA C (Hidden) ----------- ----------- --------------- RTS ------------> <------ CTS ----------- NAV=Duration DATA ------------> <------ ACK (Success; C waits due to NAV) Effect: - CTS broadcast protects channel from hidden senders. Scenario 3 — RTS Collides (No CTS Received) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If multiple stations transmit RTS simultaneously → collision. Behavior: - Receiver (B) does not decode either RTS. - No CTS is sent. - Senders (A, C) time out → increase CW → retry RTS after backoff. Advantage: - Only small RTS frames collide (low overhead). Scenario 4 — CTS Lost ~~~~~~~~~~~~~~~~~~~~~ - Sender (A) transmits RTS; receiver (B) replies CTS. - CTS lost in transmission. - A waits CTS_Timeout → fails → retries after backoff. - B still expects DATA (no DATA received → discard context). Scenario 5 — DATA Lost ~~~~~~~~~~~~~~~~~~~~~~ - RTS and CTS succeed. - DATA corrupted at receiver. - Receiver does not send ACK. - Sender waits for ACK_Timeout → retries. Duration fields from RTS/CTS still protect channel (NAV active) during failure. Scenario 6 — Small Frame (RTS Disabled) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When frame size < RTS Threshold → DATA transmitted directly. Sequence: .. code-block:: none |<-- DIFS -->|<-- Backoff -->| DATA | SIFS | ACK | Simpler but susceptible to hidden node collisions. Scenario 7 — CTS Heard by Third STA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - STA A sends RTS to B. - STA C hears CTS (but not RTS). - C sets NAV based on CTS duration and defers. This demonstrates **virtual carrier sensing**: CTS notifies all nearby STAs. Scenario 8 — Capture Effect During RTS Collisions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If two RTS frames collide but one is much stronger: - Receiver decodes stronger RTS. - Responds with CTS to stronger sender. - Weaker sender times out → retries. - NAV of hidden stations updated via CTS. Scenario 9 — Fragmentation with RTS/CTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When fragmentation is used, only the **first fragment** is protected by RTS/CTS. - CTS Duration covers all fragments + ACKs. - No new RTS/CTS between fragments. - Subsequent fragments separated by SIFS. Scenario 10 — NAV and Virtual Carrier Sensing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Stations hearing RTS or CTS frames update **NAV** (Network Allocation Vector): .. code-block:: none NAV_from_RTS = Duration_RTS NAV_from_CTS = Duration_CTS NAV ensures all nearby stations remain silent until transmission sequence ends. Retransmission Rules -------------------- | Failure | Cause | Recovery Action | |----------|--------|----------------| | No CTS | RTS collision or CTS lost | Backoff; double CW; resend RTS | | No ACK | DATA or ACK lost | Backoff; double CW; restart exchange | | RTS/CTS success | DATA success | CW reset to CWmin | Timing Values (IEEE 802.11b Example) ------------------------------------ +---------------------+------------------+ | Parameter | Typical Value | +=====================+==================+ | SlotTime | 20 µs | | SIFS | 10 µs | | DIFS | 50 µs | | PHY preamble | 192 µs (long) | | ACK duration (1 Mbps)| ≈ 112 µs | | RTS duration (1 Mbps)| ≈ 352 µs | | CTS duration (1 Mbps)| ≈ 304 µs | +---------------------+------------------+ Advantages and Tradeoffs ------------------------ +---------------------------+------------------------------------+------------------------------------+ | Aspect | RTS/CTS Enabled | RTS/CTS Disabled | +===========================+====================================+====================================+ | Hidden Node Protection | ✅ Yes | ❌ No | | Overhead | High (extra frames + SIFS gaps) | Low | | Efficiency (small frames) | Lower | Higher | | Efficiency (large frames) | Higher | Lower (due to collisions) | | Collision Cost | Low (RTS loss only) | High (full DATA loss) | | Typical Use | Long frames, noisy channels | Small frames, clean links | +---------------------------+------------------------------------+------------------------------------+ Example Timing Diagram (Success Case) ------------------------------------- .. code-block:: none STA A (Sender) STA B (Receiver) STA C (Hidden) ------------------------------ ------------------------- -------------------------- DIFS + Backoff RTS --------------------------> CTS ----------------------> NAV set (STA C defers) <----------------------------- CTS DATA -------------------------> ACK -----------------------> <----------------------------- ACK (Success; C waits until NAV expires) Implementation Notes -------------------- - RTS/CTS frames are **control frames** sent at **basic rate** for reliability. - **SIFS timing** must be precise; CTS and ACK sent exactly after SIFS. - **Duration field** must reflect total exchange time. - **NAV** must be honored strictly for collision avoidance. - **ACK/CTS timeouts** depend on PHY characteristics. - Capture effect may cause asymmetric RTS collisions. Summary Table ------------- +-----------+-----------------------------+-----------------------------+ | Scenario | Description | Result | +===========+=============================+=============================+ | Normal | Basic RTS/CTS handshake | Success | | Hidden Node | CTS informs hidden nodes | Success | | RTS Collision | Two RTS overlap | Retransmission | | CTS Lost | CTS corrupted/lost | Retransmission | | DATA Lost | DATA corrupted, no ACK | Retransmission | | Small Frame | RTS bypassed | Fast, risk of collision | | Capture Effect | Strong RTS decoded | Successful reservation | | Fragmented Data | RTS protects fragments| Efficient burst | +-----------+-----------------------------+-----------------------------+ References ---------- - IEEE Std **802.11-2020**, Clause **9.3.2.6** — RTS/CTS Procedure - IEEE Std **802.11b-1999**, Clause **18** — DSSS PHY Details - M. Gast, *802.11 Wireless Networks: The Definitive Guide*, O’Reilly - Heusse et al., *Performance Anomaly of 802.11b*, IEEE INFOCOM 2003 - Tanenbaum & Wetherall, *Computer Networks* (5th Ed.) Figures ------- .. figure:: _static/rts_cts_timing.svg :align: center :alt: RTS/CTS timing diagram RTS/CTS + DATA + ACK sequence timing. .. figure:: _static/hidden_node.svg :align: center :alt: Hidden node scenario Hidden node problem resolved by CTS protection.