前向纠错是什么:让丢包不一定要靠重传
重传的代价
传统做法是丢包就重传:接收方发现少了一个包,通知发送方重发。这需要至少一个往返的时间。
如果延迟是 100 毫秒,那么一次重传就要多等 100 毫秒以上。在丢包率较高的链路上,这个等待会不断累积,最终让连接变得不可用。
前向纠错的思路
发送方在发送原始数据的同时,额外发送一些校验数据。这些校验数据是原始数据的数学组合,接收方只要有足够多的数据包,就能通过解方程的方式还原出丢失的那几个。
代价是占用额外带宽(通常 10% 到 30%),收益是不需要等待重传,延迟不会因为丢包而累加。
什么时候值得开启
丢包率在 2% 到 15% 之间的链路上收益最明显。低于 2% 时收益有限,纯属浪费带宽。
高于 30% 时收益也会下降,因为需要的冗余量太大,额外带宽的成本超过了收益。
实时性要求高的场景最需要它:游戏、语音、直播推流。(示例数据,上线前请替换)而对于文件下载,重传成本可以接受,前向纠错的必要性就低得多。