# ABC: A Simple Explicit Congestion Controller for Wireless Networks

* Wireless Links have Variable Rates&#x20;
* Drop-based E2E Schemes: NewReno, Cubic, etc.&#x20;
  * Rely on drops to infer congestion
  * Drops are infrequent --> under-utilization or bufferbloat&#x20;
  * ![](/files/3j3h96TwiCJXW2ikWnDC)
  * Cubic: deploy deep buffer&#x20;
* AQM Schemes: RED, PIE, CoDel, etc.
  * Drops and ECN signal only congestion&#x20;
  * Do not signal that higher rates are possible&#x20;
* Other E2E Schemes: Verus, Copa, Sprout, etc.
  * Use RTT, send/receive rate, etc.
  * Require queue build-ups to estimate available rate&#x20;
    * Queues --> trade-off between throughput and delay&#x20;
  * Need more feedback for increasing rates&#x20;
* Explicit Schemes: XCP, RCP, etc.&#x20;
  * Explicit feedback using the packet header&#x20;
  * Compare enqueue rate to link rate for computing feedback&#x20;
  * ![](/files/d6oFlnxZkIzKE84d3Wp3)
  * Challenges:
    * Control loop designed for fixed capacity links&#x20;
      * Less accurate in tracking wireless link rates&#x20;
    * Multi-bit feedback --> hard to deploy
      * IP header has no space&#x20;
      * IP options are not an option&#x20;
      * TCP options: IPSec problems&#x20;
  * Accel-Brake Control (ABC)
    * Single bit feedback - signal both increase and decrease&#x20;
      * Repurpose ECN for deployment&#x20;
    * Control algorithm for fast-varying links&#x20;
      * Use dequeue rate for better feedback&#x20;
    * Coexistence&#x20;
      * With legacy bottleneck routers&#x20;
      * With legacy transport protocol&#x20;
  * ABC Overview&#x20;
    * Single bit feedback&#x20;
      * Sender adjusts window using these accelerate and brake signals&#x20;
        * Accelerate: W += 1&#x20;
        * Brake: W -= 1&#x20;
      * Router controls rate by setting f(t)&#x20;
        * f(t) = 0, throttles the transmission&#x20;
        * f(t) = 1/2, maintain the current rate&#x20;
        * f(t) = 1, doubles the congestion windows every RTT&#x20;
      * Within 1 RTT,
        * W --> 2 \* f(t) \* W&#x20;
      * Sender's rate can be varied from 0 to 2 \* current\_rate&#x20;
    * Control loop for time-varying links&#x20;
      * ABC Router: target rate&#x20;
      * ![](/files/DCrvy6helLDDmqaYXqxs)
      * ![](/files/hADwZz4aRCQKxDmwdpw3)
      * ABC predicts the future enqueue rate for improved control&#x20;
      * ![](/files/2ZHbaQ4amlEThutijGVi)
      * Varying link capacity --> enqueue and dequeue rate can differ significantly&#x20;
      * Building block for congestion control loops!&#x20;
    * ABC: high utilization, low delay&#x20;
    * Evaluation&#x20;
      * ABC endpoints&#x20;
        * Linux - pluggabel TCP API
      * ABC router
        * Cellular&#x20;
          * Trace driven emulation with Mahimahi&#x20;
        * Wi-Fi
          * Commodity router - Netgear WNDR 3800
          * Linux implementation using OpenWrt&#x20;
  * Summary
    * Single bit feedback - signal both increase and decrease&#x20;
      * Control sender's rate from 0 to 2\*Current Rate in 1 RTT
    * Control loop for fast-varying wireless links&#x20;
      * ABC quickly and accurately adapts to varying link rates&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sliu583.gitbook.io/blog/specific-work/seminar-and-talk/reading-groups/network-reading-group/ml-and-networking/congestion-control/abc-a-simple-explicit-congestion-controller-for-wireless-networks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
