> 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/tcp-congestion-control-a-systems-approach/chapter-1-introduction.md).

# Chapter 1: Introduction

* Resource allocation is a hard problem in any computer system, but especially for a system as complex as the Internet&#x20;
* The network began to experience a phenomenon known as congestion collapse&#x20;
* Solution: congestion control, was developed and deployed in the late 1980s&#x20;
* Congestion control, and resource allocation more broadly, are wide open design spaces with plenty of room for innovation&#x20;
  * New approaches or refinements to the existing approaches will continue to appear as long as the Internet exists&#x20;
* Outline: explore the design space for congestion control in the Internet and present a description of major approaches to managing or avoiding congestion that have been developed over the last three decades&#x20;

### 1.1 What is congestion?

* This book focus on congestion control for packet-switched networks&#x20;
  * Packet switching: multiplexing, a system resource (i.e. a link or a queue in a router) is shared among multiple users or applications&#x20;
  * Statistically multiplexed: as packets show up somewhat randomly, we reply on statistical properties of those arrivals to ensure that we don't run out of resources
  * A network that attempts to allocate bandwidth to particular flows is sometimes said to support Quality-of-Service (QoS) &#x20;
* ![](/files/9OAi1EghcESgQteQBc3F)
  * The link can only carry so many bits per second, and the queue can only hold so many packets (or bytes) before it has to start discarding packets&#x20;
  * Managing the access to these shared resources, and trying to do so in a way that prevents congestion collapse, is the essence of congestion control&#x20;

### 1.2 Controlling Congestion&#x20;

* Challenges&#x20;
  * They are not isolated to a single level of a protocol hierarchy&#x20;
    * Resource allocation is partially implemented in the routers, switches, and links inside the network and partially in the transport protocol running on the end hosts&#x20;
    * End systems may use signaling protocols to convey their resource requirements to network nodes, which respond with information about resource availability
    * Application protocols may themselves be designed to mitigate congestion
    * Key: you cannot fully understand congestion without looking at all the places in the system that it touches&#x20;
* Resource allocation: network resources (primarily link bandwidth and buffer space in routers or switches)&#x20;
* Congestion control: the efforts made by network nodes (including end systems) to prevent or respond to overload conditions&#x20;
  * Note: differ than flow control (i.e., keeping a fast sender from overrunning a slow receiver), while CC is intended to keep a set of senders from sending too much data into the network because of lack of resources at some point&#x20;
* Congestion collapse occurred in early Internet: dropped packets are not just discarded and forgotten; but it is retransmitted&#x20;
  * The number of packets sent into the network increases even if there is no real increase in the offered load from users and applications&#x20;
* Metric: goodput
  * Distinguished from throughput in the sense that only packets doing useful work are counted towards goodput&#x20;
* Key insight of early researcher: is it possible and necessary for TCP to do something other than blindly retransmit lost packets during times of congestions&#x20;
  * Key: interaction between end-to-end protocol and the network during times of congestion
