TCP流量本身会增长,直到它们填充从src
到dst
使用的链接的最大容量(如果所有这些链接都是空的)。
是否有一种简单的方法来限制它?我希望能够以最大X mbps速率发送TCP流。
我想过只使用socket.send()
函数每秒发送X个字节,然后在其余时间休眠。然而,如果链路变得拥挤并且速率降低,一旦链路再次不拥塞,它将需要恢复之前无法发送的内容并且速率将增加。
答案 0 :(得分:1)
在TCP级别,您拥有的唯一控件是传递给send()的字节数,以及调用它的频率。一旦send()将一些字节移交给网络堆栈,它完全取决于网络堆栈它想要发送它们的速度有多快(或慢)。
鉴于上述情况,您可以通过监控已发送的字节数,以及自您开始发送以来已经过了多长时间以及阻止后续调用send()(和/或数量)来粗略地限制传输速率。数据字节传递给send())以保持平均速率不高于目标速率。
如果你想要比那更精细的控制,你需要使用UDP而不是TCP。使用UDP,您可以直接控制每个数据包的发送时间。 (对于TCP,它是网络堆栈,决定何时发送每个数据包,数据包中的内容,何时重新发送丢弃的数据包等)