# 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;
  * ![](https://2097630930-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVORxAomcgtzVVUqmws%2Fuploads%2FBU2kfj5CQ1kVBppfepNp%2Fimage.png?alt=media\&token=d6e6bd8b-3d4d-4b85-a45a-8044a0a6e847)
  * 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;
  * ![](https://2097630930-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVORxAomcgtzVVUqmws%2Fuploads%2FgVYbtQSSjojR5xEkBlgo%2Fimage.png?alt=media\&token=2fbfd97c-cc25-4450-846b-926cda733e8b)
  * 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;
      * ![](https://2097630930-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVORxAomcgtzVVUqmws%2Fuploads%2F4Fsu2ATu3xHMZgcVBquj%2Fimage.png?alt=media\&token=2d3bf286-616b-4677-91bd-993bc4e2de39)
      * ![](https://2097630930-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVORxAomcgtzVVUqmws%2Fuploads%2FtGfnwMSw7b8qkSSdDUuk%2Fimage.png?alt=media\&token=f7b59562-7e5b-4cc9-818e-8027c6536b27)
      * ABC predicts the future enqueue rate for improved control&#x20;
      * ![](https://2097630930-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVORxAomcgtzVVUqmws%2Fuploads%2FAFD58nbGDqTSgxh9lrya%2Fimage.png?alt=media\&token=bb73e01b-7bb0-4160-a98c-1fa0278b7089)
      * 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;
