我有UDP实现,可以从服务器获取确认。客户端在指定时间内重新发送未从服务器收到确认的数据包。客户端在等待服务器对第一个数据包的确认时发送大约10个数据包。然后重复发送未收到确认的数据包。这在正常情况下工作正常,网络延迟较小。
真正的问题是在低带宽连接上遇到,其中往返延迟有点重要。客户端根据确认超时继续在发送队列中添加数据包。这导致许多重复的数据包被添加到队列中。
试图找到任何优雅的解决方案,以避免发送队列中的重复数据包没有运气。任何帮助将不胜感激。
如果我能找到一种方法来标记/设置数据包的属性,这样如果数据包没有在NN ms内发送,那么它将从队列中删除,然后我可以围绕它构建算法。
答案 0 :(得分:0)
UDP没有内置的重复检测,就像TCP的情况一样。这意味着任何类型的此类检测都必须由应用程序本身完成。由于应用程序与发送队列交互的唯一方法是发送数据报,因此必须在将数据包放入发送队列之前在发送方进行任何类型的重复检测。
如果这个实际上是一个不应该发送的前一个数据包的重复数据包,或者如果由于原始数据丢失而应该发送的重复数据包完全取决于应用程序,那么你在这个阶段如何计算出来。任何“......不能在NN ms内发送......”也必须在应用程序中使用定时器或类似程序实现。您还可以通过使用SO_SNDBUF减小发送队列的大小来尝试更多地控制队列。