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

Wit*_*292 8 algorithm udp timeout protocols

我正在进行UDP服务器/客户端配置.客户端向服务器发送一个数据包,其大小不一,但通常<500字节.服务器基本上立即响应单个传出数据包,通常小于传入请求数据包.完整的事务总是由单个数据包交换组成.

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

选择最佳初始T(等待时间),R(重试)和X(等待增加)是否有任何特殊逻辑?应该重试的持久性(即,使用什么最小值R)来达到某种"可靠"协议的近似值?

小智 6

这类似于问题5227520.谷歌搜索"tcp重试"和"tcp重新传输"导致了许多多年来一直在尝试的建议.不幸的是,没有单一的解决方

我选择T开始2或3秒.我的增加X将是T的一半(加倍T看起来很受欢迎,但你很快会得到很长的超时).如果需要的话,我会动态调整R至少为5,所以我的总超时至少是一两分钟.

如果后续交易通常更快,我会小心不要让R和T太高; 您可能希望降低R和T,因为您的统计数据允许,因此您可以重试并获得快速响应,而不是将R和T保持在最大值(特别是如果您的客户是人,并且您希望做出响应).

请记住:如果重试成功,那么你将永远不会像重试比你更多的算法一样可靠.另一方面,如果您的服务器始终可用并且始终"立即响应",那么如果客户端未能看到响应,则表示服务器无法控制,并且唯一可以做的是客户端重试(虽然重试不仅可以重新发送,例如关闭/重新打开连接,尝试使用不同IP的备份服务器等.