> For the complete documentation index, see [llms.txt](https://sliu583.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](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).

# 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` 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>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
