> 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;
