我无法回答为什么您没有找到任何允许对传入数据进行整形的解决方案(而且我什至不知道),但是关于发送方如何知道接收方可以多快地接收数据的问题:
TCP / IP的基本设计是,对于源发送到目的地的每个数据包,它必须等待目的地回复(带有ACK
数据包),说它收到了数据包。
因此,如果您有一个4Mbps的发送器和一个56Kbps的接收器,则发送器必须坐下来等待发送数据包之间的时间,以便接收器对每个数据包做出响应(有一些技术细节可以减少这种开销,但是前提仍然是抽象的)水平)。
那么,如果发件人已经发送了56Kbps的数据,然后又尝试发送更多的数据,会发生什么呢?
数据包丢失。(好吧,它可能在交换机的缓冲区中排队,但是一旦填满,数据包就会丢失)。由于数据包丢失,因此接收方永远不会收到它,因此也永远不会发送ACK
数据包。由于发送方永远不会收到此ACK
数据包(因为它从未发送过,而且可能会丢失,或者可能会导致网络中断),因此需要发送方重新发送额外的数据包。它坐下来,尝试重新发送数据包,直到数据包通过为止,然后ACK
回复返回。
因此,要概括一下,一旦发送方使接收方的带宽最大化,它就必须停止并反复发送下一个数据包,直到有足够的可用带宽通过为止。这有效地将发送速度降低到客户端可以接收的最大速度。(在这种情况下,还有一些优化方法可以减少必须重新发送数据包的次数,基本上发件人每次必须重新发送数据包的速度都会减慢,但这超出了此简化描述的范围。