Linux - 我可以复制、发送,然后删除重复的 UDP 数据包吗?

Linux - 我可以复制、发送,然后删除重复的 UDP 数据包吗?

我正在通过 2 个基于 Linux(Intel)的路由器传输 UDP 数据,并且遇到了少量数据包丢失,这会干扰应用程序。

有没有办法(理想情况下,但不一定涉及 iptables)我可以接收每个 UDP 数据包并发送 2 个副本,丢弃第二个到达的数据包(如果两个数据包都到达)?我知道这将使用双倍的带宽,我对此表示同意。

答案1

我知道这是一个较老的话题,但您可能想研究一下 FEC。

查看由 wangyu 编写的“UDPspeeder”应用程序。您可以在 git 上找到它: https://github.com/wangyu-/UDPspeeder

该应用程序不仅仅复制数据包,而且还发送包含有关在需要时能够重建丢失的数据包的信息的数据包。

有很多参数可以根据您的需要进行调整。

答案2

如果应用程序传输 UDP 数据包,则必须做好丢弃部分(甚至大量)数据包的准备。

因此,应用程序必须处理该问题(例如实时音频或视频数据,其中缺失的信息会被忽略并导致质量下降,因为您无法重新发送包),或者必须实现自己的协议以确保重新传输,或者必须使用另一个保证最终交付的协议。

实施外部“仅发送 2 份副本”层并不是解决方案。是的,我知道您不想听到这个,但这是事实。

因此,请重写应用程序以使用适当的协议。

或者,通过其他实现适当协议(tun/tap 接口)的应用程序来隧道传输数据包。如果您坚持认为“仅复制数据包”是适当的协议(编写这样的应用程序并不困难,请在 Google 上搜索 tun/tap 示例程序),请尝试一下,看看它是否有效(它不会)。

相关内容