【发布时间】:2009-02-12 20:42:06
【问题描述】:
系统可以使用 UDP 并使用前向纠错来传输整个消息,而无需重新传输,即使丢失了一些数据包。这在实践中是否有效,或者额外的开销是否浪费太多?
【问题讨论】:
标签: network-protocols error-correction
系统可以使用 UDP 并使用前向纠错来传输整个消息,而无需重新传输,即使丢失了一些数据包。这在实践中是否有效,或者额外的开销是否浪费太多?
【问题讨论】:
标签: network-protocols error-correction
我认为它对于语音 (VoIP) 等一些应用程序很有用,在这些应用程序中,您希望避免错误,并且您永远不想停止(重新传输 NAK 数据包)并等待(直到重新传输) .
因此它可以在Real-time Transport Protocol UDP 风格之上实现。
延迟会不会很糟糕?
您是在问前向纠错是否会增加端到端延迟?如果是这样,我认为答案是否定的,但它确实增加了所需的带宽。
我相信您总是需要一些延迟,以避免抖动;例如,您可能会说“让我们将整个语音通道延迟 200 毫秒,因此任何/每个数据包都可能需要 0 到 200 毫秒才能通过互联网,然后重新组装并通过 D-to-A 转换器发送另一端。”
考虑到这些数字,没有前向纠错可能意味着,在每 200 毫秒的周期内,您发送 10 个数据包,每个数据包包含 20 毫秒的数据……如果一个数据包丢失,那就是一个间隙(故障)在另一端。
然而,进行一些前向纠错可能意味着,在每 200 毫秒的周期内,您仍然发送 10 个数据包……每个数据包包含 20 毫秒的数据,加上已经在另一个数据包中传输的 10 毫秒的数据(或,也许您发送 30 个数据包而不是 20 个)。然后,如果任何单个数据包丢失,它所携带的数据将被冗余传送(其他两个数据包各有一半),这避免了解码输出中的任何故障。
【讨论】:
对于存储介质(例如硬盘驱动器和光盘)也很有意义,因为您不能只返回源头来获取未损坏的数据。事实上,硬盘驱动器和光盘都非常广泛地使用前向纠错。
前向纠错也广泛用于无线通信中,其中错误往往一次只删除几位。不是将整个数据包丢失为单个位错误,而是使用前向纠错来修复损坏的位。
【讨论】:
取决于应用程序。
对于游戏等应用程序,纠错始终是必要的,因为即使丢失了一点数据也不会产生太大影响。
但是,如果应用程序需要特定的有序数据,则需要进行某种纠错。
不是“开销”的问题,而是“应用”的问题。
【讨论】:
简单的答案是,如果您通过高带宽、高延迟(即“长距离”)链路发送,前向纠错是有意义的。否则,它可能不会。
【讨论】:
当重传的“价格”高于您愿意支付的价格时。
以卫星为例,它的传播时间很长,最好多发送几个字节,然后再发送一个数据包。
【讨论】: