Sockets 如何使用UDP找到正确的发送速度?

Sockets 如何使用UDP找到正确的发送速度?,sockets,networking,udp,Sockets,Networking,Udp,我想传送大量的信息。这些消息不需要可靠。UDP作为一种协议选择出现在脑海中 延迟也很重要。我不想遭受TCP线路头阻塞的痛苦 我担心当我刚开始以最大速度发送消息时(例如,,而(messagesRemaining!=0)发送(…);),网络可能会过载。我认为,如果我发送的消息超过了一些中间盒所能传递的,那么大量的消息可能会被丢弃。一些被丢弃的消息是可以的,但大多数都应该到达 我如何解决这个问题?我怎样才能知道我能以多快的速度发送?我希望保持合理的数据包丢失率(百分之几),否则会使带宽最大化。是否会使

我想传送大量的信息。这些消息不需要可靠。UDP作为一种协议选择出现在脑海中

延迟也很重要。我不想遭受TCP线路头阻塞的痛苦

我担心当我刚开始以最大速度发送消息时(例如,
,而(messagesRemaining!=0)发送(…);
),网络可能会过载。我认为,如果我发送的消息超过了一些中间盒所能传递的,那么大量的消息可能会被丢弃。一些被丢弃的消息是可以的,但大多数都应该到达


我如何解决这个问题?我怎样才能知道我能以多快的速度发送?我希望保持合理的数据包丢失率(百分之几),否则会使带宽最大化。

是否会使网络过载取决于发送方和接收方主机之间的情况。iperf实用程序有一个UDP选项,可以帮助您确定针对特定级别的可接受数据包丢失可以发送的最大速率

也就是说,根据个人经验: 若它是本地千兆网络,并且客户端/服务器在同一子网上,我很怀疑你们会丢失任何数据包。我以前在这种环境中使用iperf进行过测试,从未丢失过任何数据包;iperf将是将UDP数据包从PC传输到网络的最快、最有效的方法之一,我们仍然不会丢失数据包。我们甚至通过一个基于intel Atom的Linux主机运行数据包,该主机具有桥接端口设置,同时执行tcpdump,但仍然从未丢失数据包(请注意,即使cheapo交换机的性能也与PC中的桥接设置一样好或更好)。我们能够使数据包丢失的唯一方法是使用FPGA/ASIC测试设备,这种设备可以将数据包以真实的线速长时间地传输到线路上。即使如此,当数据包小于大约500字节时,测试设置也只会丢失数据包


但是,如果您不在本地网络上(即通过internet或路由器),您只需要使用iperf进行一些测试,以确定您的环境可以接受什么。问题是,虽然一天可以维持的利率并不能保证第二天是相同的。UDP没有像TCP那样的拥塞/流量控制算法,因此您必须自己计算发送的速度。

您需要基于ACK或NACK的协议,并且需要使用响应通知TCP等计时算法,最终还是会得到流量控制。太宽了。