众力资讯网

古法编程 一篇介绍RaptorQ 算法的文章地址:www.jeffreyeman

古法编程 一篇介绍RaptorQ 算法的文章地址:www.jeffreyemanuel.com/writing/raptorqRaptorQ 是一种前向纠错编码算法,常用于在网络传输中对抗丢包。"不得不承认,RaptorQ 的存在让我感到由衷震惊。你可以把任意一个文件转换成一串可互换的“数据块”,以完全任意的顺序接收这些数据块,而且每收到一个新的数据块,都会帮助你重建原始文件——光是这个想法就已经相当令人惊叹了。

但接着你会发现,完成这一切所需的总开销不到 5%,而且接收方通常只需要比理论最小值多出两个符号,就能以近乎确定的概率完成解码。这听起来既像魔法,又坦率地说有些不可思议。

要理解这为什么重要,可以想想我们平时是如何传输数据的。

TCP 本质上是一场对话:“我发送了第 4 个数据包。”“我没收到第 4 个数据包。”“好,我重发第 4 个数据包。”“收到了。”对于加载网页来说,这种方式完全没问题;但当延迟极高(比如往返火星需要 40 分钟)时,或者当你要通过不稳定的蜂窝网络同时向一百万个接收方广播数据时,它就会失效。

TCP 需要一个反馈回路。发送方必须准确知道接收方缺少哪些数据。把这种机制扩展到一百万个接收方:每个人丢失的数据包都不一样,而且都在同时发送重传请求。这就是所谓的“反馈内爆(feedback implosion)”。发送方会被彻底淹没。

RaptorQ 则采用了完全不同的方法。你把文件变成一种数学意义上的液体,然后不断向接收方喷洒数据包。接收方基本上就像一个水桶。落进桶里的究竟是哪几滴水并不重要,即使有一半的水滴被风吹走也无所谓。只要桶里积累了大约 K+ϵ 个水滴(不需要是特定的那些水滴,只要数量足够),接收方就能够重建出原始数据。"

AI创造营