什么时候前向纠错是一个好主意的数据包?

时间:2009-02-12 20:42:07

标签: network-protocols error-correction

系统可以使用UDP并使用前向纠错来传输整个消息,而无需重新传输,即使丢失了一些数据包。这在实践中是否运作良好,或者额外的开销是否过多浪费?

5 个答案:

答案 0 :(得分:5)

我认为它对某些应用程序很有用,比如语音(VoIP),你想要避免错误,你永远不想停止(重新传输NAKed数据包)等待(直到它重新传输)

所以它可能会在UDP的Real-time Transport Protocol风格之上实现。

  

延迟会不会很糟糕?

您是否询问前向纠错是否会增加端到端延迟?如果是这样,我认为答案是“不”,但它确实增加了所需的带宽。

我相信你总是需要一些延迟,以避免抖动;例如,您可能会说“让我们将整个语音通道延迟200毫秒,因此任何/每个数据包都需要0到200毫秒才能通过互联网,并重新组装并通过D-to-A转换器发送到另一端。“

鉴于这些数字,那么没有前向纠错可能意味着,在每200毫秒的时间内,你发送10个数据包,每个数据包包含20毫秒的数据......如果丢失了一个,那么这就是一个间隙(一个小故障)在另一端。

然而,进行一些前向纠错可能意味着,在每200毫秒的时间内,您仍然发送10个数据包......每个数据包包含20毫秒的数据,加上已经在另一个数据包中传输的10毫秒的数据(或,也许你发送30个包而不是20个包。然后,如果任何单个数据包丢失,它携带的数据将被重新传送(其他两个数据包中的每一个数据包的一半),这可以避免解码输出中出现任何故障。

答案 1 :(得分:1)

对于存储介质(例如硬盘驱动器和光盘)而言,它也是有意义的,您不仅可以返回源来获取未损坏的数据。事实上,硬盘驱动器和光盘都非常广泛地使用前向纠错。

前向纠错也广泛用于无线通信,其中错误往往一次只能消除几个比特。不是将整个数据包丢失为单个位错误,而是使用前向纠错来修复损坏的位。

答案 2 :(得分:0)

取决于申请。

对于游戏等应用程序,错误更正总是必要的,因为如果丢失一些数据,它不会产生很大的影响。

但是,如果应用程序需要特定的有序数据,则需要进行某种纠错。

这不是“开销”的问题,更多的是“申请”。

答案 3 :(得分:0)

简单的答案是,如果您通过高带宽高延迟(意为“长距离”)链路发送,则前向纠错是有意义的。否则,它可能不会。

答案 4 :(得分:0)

当转播的“价格”高于您愿意支付的价格时 例如,卫星具有非常长的传播时间,最好再发送几个字节然后再发送一个数据包。