我将多个 udp 数据包连续发送到远程 pc。问题是,如果数据量太大,通道之间的某些设备会出现缓冲区溢出。我打算限制/限制/控制 udp 数据包的发送速率。有人可以给我一些关于如何找到最佳速率发送间隔的指南吗?
顺便说一句,请停止建议 tcp over udp。目标不是可靠地发送数据,而是测量最大吞吐量。
我将多个 udp 数据包连续发送到远程 pc。问题是,如果数据量太大,通道之间的某些设备会出现缓冲区溢出。我打算限制/限制/控制 udp 数据包的发送速率。有人可以给我一些关于如何找到最佳速率发送间隔的指南吗?
顺便说一句,请停止建议 tcp over udp。目标不是可靠地发送数据,而是测量最大吞吐量。
反复试验。观点。
永远不要(!)假设所有数据包都会到达。意味着:您需要(!)一种重新请求丢失数据包的方法。即使在完美的条件下,数据包有时也会丢失。
如果损失没问题并且只应该最小化,那么统计方法几乎是我认为处理这个问题的唯一方法。
那么试试这个:
Sleep()
的时间,剩下的时间,等待新的时间段。RATE = RATE * .9
- 将发送率降低到前一个的 90%一些注意事项: - 如果反向连接是 TCP,你会有一些开销 - 如果反向连接是 UDP,你也可以在这里丢弃数据包(因为你正在淹没通道)并且发送者永远不会知道数据包被丢弃 - 算法以上不会解决丢失数据问题或乱序数据问题,它只会测量吞吐量。
尽管您建议我不建议 TCP over UDP,但我必须这样做。在同一段中,您说您的测试的主要目的是测量吞吐量 - 即带宽 - 并且在不重新发明整个 TCP 堆栈的情况下正确执行此操作的唯一方法是实际使用 TCP 堆栈。
TCP 的大部分设计用于处理流量控制问题,当使用 TCP 流时,您将获得您所需要的 - 给定连接的最大带宽,轻松且无需“温水发明”。
如果这个答案不适合你,那可能意味着你必须重新陈述你对这个问题的要求。他们是冲突的。