algorithm - 什么是好的 UDP 超时和重试值?

标签 algorithm timeout udp protocols

我正在研究 UDP 服务器/客户端配置。客户端向服务器发送单个数据包,其大小各不相同,但通常小于 500 字节。服务器基本上立即响应单个传出数据包,通常小于传入请求数据包。完整的事务始终由单个数据包交换组成。

如果客户端在 T 时间内没有看到响应,它将重试 R 次,在每次重试之前将 T 增加 X,最后放弃并返回错误。目前,R 永远不会改变。

选择最佳初始 T(等待时间)、R(重试)和 X(等待增加)是否有任何特殊逻辑?重试的持久性(即,使用多少最小 R)才能达到某种“可靠”协议(protocol)的近似值?

最佳答案

这类似于问题 5227520 .谷歌搜索“tcp retries”和“tcp retransmission”会得到很多多年来尝试过的建议。不幸的是,没有一种解决方案是最佳的。

我会选择 T 从 2 或 3 秒开始。我增加的 X 将是 T 的一半(加倍 T 似乎很流行,但你很快就会超时)。如果有必要,我会即时将 R 调整为至少 5 或更多,因此我的总超时时间至少为一两分钟。

如果后续交易通常更快,我会注意不要将 R 和 T 设置得太高;您可能希望在您的统计数据允许的情况下降低 R 和 T,这样您就可以重试并获得快速响应,而不是将 R 和 T 保持在最大值(特别是如果您的客户是人类并且您希望响应迅速)。

请记住:如果重试成功,您永远不会像重试次数比您多的算法那样可靠。另一方面,如果您的服务器始终可用并且始终“基本上立即响应”,那么如果客户端未能看到响应,则表明服务器无法控制失败,唯一可以做的就是让客户端重试(尽管重试不仅仅是重新发送,例如关闭/重新打开连接、尝试使用不同 IP 的备份服务器等)。

关于algorithm - 什么是好的 UDP 超时和重试值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150868/

相关文章:

java - 95% 如何确定客户端上的默认超时设置?

c++ - 如何在 C++ 中的一个应用程序中同时使用 TCP 和 UDP

algorithm - 打印数组的所有产品组合

c - 二分查找与最后一次出现的最接近的匹配

asp.net - 查找未关闭的SqlConnection的最快方法

jQuery 循环插件,每张幻灯片具有不同的超时值

java - 需要java中udp套接字编程的帮助

windows - 在 Windows 上发送数据报时出现 EACCES 错误

python - 使用堆栈的 Hanoi Python 解决方案的递归塔

python - 需要帮助根据比赛表创建联赛时间表