3

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

4

5 回答 5

5

我认为它对于语音 (VoIP) 等一些应用程序很有用,在这些应用程序中,您希望避免错误,并且您永远不想停止(重新传输 NAK 数据包)并等待(直到重新传输)。

所以它可以在 UDP 的实时传输协议风格之上实现。

延迟不是很可怕吗?

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

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

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

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

于 2009-02-12T20:48:40.490 回答
1

这对于存储介质(例如硬盘驱动器和光盘)也很有意义,因为您不能只返回源头来获取未损坏的数据。事实上,硬盘驱动器和光盘都非常广泛地使用前向纠错。

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

于 2009-05-08T23:08:46.323 回答
0

取决于应用程序。

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

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

这不是“开销”的问题,更多的是关于“应用程序”的问题。

于 2009-02-12T20:48:09.523 回答
0

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

于 2009-05-08T22:44:28.207 回答
0

当重传的“价格”高于你愿意支付的。
以卫星为例,它的传播时间很长,最好多发送几个字节,然后再发送一个数据包。

于 2013-05-30T16:39:48.030 回答