程序如何在网络上应用背压?

How do programs apply backpressure over a network?

考虑可以限制的下载流示例(例如 Torrent 客户端、Dropbox 同步等)。程序如何对网络施加背压?

我的想法是,从软件的角度来看,您可以选择以特定速度从套接字读取。但是,您正在读取的套接字如何知道您只希望您的设备如此快速地接收数据呢?实际的 NIC 是否以某种方式在网络上施加背压?如果是这样,通过什么机制?

背压嵌入在 TCP/IP 协议中。如果慢速消费者没有及时从连接中读取字节,生产者将无法放置比发送端和接收端的缓冲区内存更多的字节。

相比之下,UDP 消息不计算在内,如果接收方没有可用内存来存储它们,则可以将其丢弃。