我正在制作通过UDP接收传感器数据(如陀螺仪)的应用程序,我需要恢复丢失的数据。 怎么做?
例如,如何在太空火箭中处理它?您无法请求重新传输,因为设备在太空中时需要很长时间。
抱歉语法。
// EDIT
我忘了说我以固定频率发送数据包,因此设备知道什么时候丢失了什么
答案 0 :(得分:0)
对于具有非常高延迟的连接或单向连接,通常对数据进行编码,以便不仅可以检测到传输错误,而且还可以对其进行大部分修复。在最简单的情况下,您只是一次又一次地发送相同的数据,希望在一段时间后,它们会被对等方成功接收。但是有比这更聪明的编码。要了解一些想法,看看RAID-5和类似技术如何工作,即使磁盘崩溃,数据仍然可以被复制。
答案 1 :(得分:0)
多年前我为一个视频通信产品做了类似的事情:对于每个数据包,编号为P0,P1,P2等,您可以选择需要承受多长时间的损失。我们以3个数据包为例。
通过像往常一样发送P0到P5来开始通信,但是P6附加了额外的数据:P0和P3的xor。 P6具有P1和P4等的xor。如果丢失任何三个数据包,则可以重建它们。如果丢失了Pn,Pn + 1和Pn + 2,则可以使用" extra" Pn + 6上的数据以恢复数据包Pn。
如果您能够支付最大可靠性来支付内存和带宽,我建议让每个数据包携带多个xors。例如,Pn可能带有Pn-3和Pn-6的xor以及Pn-12和Pn-24的另一个xor。
您还可以使用收到的反馈机制,使其能够告知发件人更改其恢复特征,发送更多或更少的恢复数据以及调整间隔。