问题描述
我正在编写一个 http3(在 quic 上运行)库,并且要求调用者选择不同的拥塞控制算法。我做了一些研究并阅读了这个:
该算法有多种变体和版本 在计算机操作系统的协议栈中实现 连接到互联网。
我突然注意到,除了一些抽象理论之外,我之前从未想过拥塞控制算法是如何工作的(在 tcp 上)。所以这里有一些我不太清楚的问题。
- 客户端和服务器在通信时可以使用不同的拥塞算法吗?例如客户端使用 Reno,服务器使用 CUBIC?
- 如果是,客户端和服务器使用不同的算法有什么缺点吗?
- 如果不是,服务器和客户端如何协商拥塞控制算法?
解决方法
- 是的,拥塞控制仅影响从数据发送方到接收方的路径。两个对等方使用的拥塞控制器之间没有耦合。拥塞控制器唯一需要正常工作的是来自对等方的 ACK,这些 ACK 的发送与对等方使用的拥塞控制器无关。
- 没有。很常见
- 不存在任何协商(甚至没有广告)。你不会知道对方使用什么拥塞控制器。您可能只能根据其传输行为来猜测它。