# 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


---

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