【问题标题】:How to control the throughput of an UDP socket?如何控制 UDP 套接字的吞吐量?
【发布时间】:2014-12-09 07:27:09
【问题描述】:

我想要实现的是通过一个socket以稳定的速度输出数据,比如600KB/s。因为TCP有自己的流控,所以我选择UDP。

问题来了:如何做到这一点?我可以每分钟发送一个 600KB 大小的数据包吗?以及如何控制两个数据包之间的时间间隔?我可以用select()设置一个时间间隔吗:

select(fd, NULL, NULL, NULL, &tv); //tv is set as 1 second

我对此表示怀疑,因为套接字的sendto()是在应用层运行的,我们无法确保数据包已经被操作系统内核发送出去。

如何解决这个问题?还是有更好的办法?

PS:C语言

【问题讨论】:

  • 您建议的 600KB 消息将被操作系统分解为 600 多个数据包。此外,如果“流量控制”是指“速率”,那么 TCP 没有流量控制...... TCP 保证 1)对数据包内容的错误检查 2)数据包以正确的顺序传递给对等方 3)丢失数据包的重传.使用 UDP,您将一无所获。如果这些问题对您很重要,那么您将不得不使用 TCP,或者将它们构建到您的应用程序中(即也称为重新发明轮子)。

标签: c linux sockets udp throughput


【解决方案1】:

最简单的方法是在发送之间等待足够长的时间以降低总吞吐量。这将使“平均”发送速率保持在所需值。

但是,更好的实现是接收器在接收到输入后发送 ACK。因此,以可用的最佳速率起搏。当然,那就需要有超时重发等等。

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多