TCP流本身的性质会增长,直到它们填满了从src到dst的链路的最大容量(如果所有这些链路都是空的)。
有没有一种简单的方法来限制它?我希望能够发送具有最大X mbps速率的TCP流。
我考虑使用socket.send()函数每秒发送X个字节,然后在其余时间休眠。但是,如果链路拥塞并且速率降低,一旦链路再次变得不拥塞,它将需要恢复之前无法发送的内容,并且速率将会增加。
发布于 2016-08-09 05:17:23
在TCP级别,您拥有的唯一控制是传递给send()的字节数,以及调用它的频率。一旦send()将一些字节移交给网络堆栈,那么发送这些字节的速度(或速度)完全取决于网络堆栈。
考虑到上述情况,您可以通过以下方法大致限制传输速率:监视已发送的字节数,以及自开始发送以来经过了多少时间,并推迟后续调用send() (和/或传递给send()的数据字节数),以防止平均速率高于目标速率。
如果你想要更好的控制,你需要使用UDP而不是TCP。使用UDP,您可以直接控制每个数据包的确切发送时间。(而对于TCP,网络堆栈决定何时发送每个数据包、数据包中的内容、何时重新发送丢弃的数据包等)
https://stackoverflow.com/questions/38836898
复制相似问题