> For the complete documentation index, see [llms.txt](https://doraemonzzz.gitbook.io/cs-144-introduction-to-computer-networking-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doraemonzzz.gitbook.io/cs-144-introduction-to-computer-networking-notes/unit4-congestion-control/4.1.md).

# 拥塞控制(Congestion Control)

在本单元中，我们将学习如何控制网络中的拥塞。你已经知道了一个叫做流量控制的方法，流量控制是指当我们试图防止发送方压倒接收方时，由接收方告诉发送方放慢速度。

拥塞控制本质上是将这个概念扩展到整个网络。缓冲区和路由器将被填满，链路将溢出，我们将开始丢弃分组，这显然不是一件好事，所以拥塞控制是关于防止发送者压倒网络。

所以这让我们很自然地问该如何做？我们希望从拥塞控制机制中得到什么？

* 首先，它需要防止压倒性的情况发生；
* 其次，我们要确保所有被控制的流量都被公平和平等地控制；

因此，出现的一个重要问题是我们想控制拥塞，但我们应该如何做呢？ 我们应该在哪里做呢？我们应该在网络内做吗？如果你遵循(强)端到端的原则，那么它会说，我们希望网络只是转发分组，我们希望智能是在网络边缘，所以这实际上是今天经常做的事情。

所以在这个单元中，我们将谈论TCP和TCP如何控制拥塞。事实证明，这是它最重要的特点之一，即TCP发送方、TCP接收方，特别是发送方可以控制它向网络投放多少分组，以确保它不会使网络不堪重负。这种端到端的方法让网络内部变得简单，事实证明，你可以在网络边缘进行这些操作并且可以做得非常好。

TCP拥塞控制选择使用一种特殊的算法，称为加性增、乘性减(additive increased multiplicative decrease)或AIMD。事实证明，当你看它是如何表现时，可以看到这个算法有一堆非常有趣的属性。例如它有一些非常好的稳定属性，使它能够很好地控制拥塞，甚至可以处理数百万流量竞争的非常大的复杂网络。它被认为是网络的皇冠上的明珠(也是最重要的思想)之一，该算法在TCP中已经有25年了，所以它是控制互联网拥塞的一个非常重要的部分。

在这个单元中，你将学习什么是拥塞控制，我们希望从一个拥塞控制算法中得到什么样的属性？你将会学到很多关于它如何工作的细节，它是如何在实践中实现的，它在不同的情况下是如何工作的，当你有一个流的时候会发生什么，当你有很多流的时候会发生什么，你将学到很多关于TCP的知识，不仅是现在的TCP，而且它会给你很多启示，会给你很多关于TCP拥塞控制在未来可能成为什么样的启示。

学习资料：

* <https://blog.csdn.net/qq_22238021/article/details/80345619>
