随机线性网络编码的C语言实现,实现可靠传输:原理(1)

线性方程组,大家都不陌生吧。来一组

A11 *X1 + A12 *X2   + A13 *X3   + A14 *X4 =Q1
A21 *X1 + A22 *X2   + A23 *X3   + A24 *X4 =Q2
A31 *X1 + A32 *X2   + A133 *X3  + A34 *X4 =Q3
A41 *X1 + A142 *X2  + A143 *X3  + A44 *X4 =Q4

把未知数Xi 看成你要传输的数据包,这里一共是4个,通常情况下,我们就直接发四个数据给对方,收不收得到听天由命。

现在呢,新方法:我们不仅发四个数据(X),我们还把数据(Qi)也全部扔给对方。

  • 情况一,(太不幸了)数据(X)全部丢了,只收到了全部的数据(Qi)。

  咋办,只有数据(Qi)能有什么用??我们再假设下,假如通信双方约定了同一套(Aij)系数矩阵意味着什么?

       现在答案很明显啊,我就有一套上面的四元线性方程组,求解出来就是原来要接收 四个数据(X)。

  • 情况二,(运气不错)数据(X)只丢了一个,但只收到了一个数据(Qi)。

       很简单的,仔细观察下,其实接收端收到的是一个一元一次线性方程组,解出来的未知数就是丢的那个数据(X)。

  • 情况其他,不用再举例子了吧,原理就是这么简单。原本要发送4个数据包,那么现在我发送5个数据包(有一个数据包是构造出来的),那么对方收到任意4个数据,都可以得到原本要收到的4个数据。

不闲扯了,原理讲完了,剩下的都是编程问题。

有人可能还有些小疑问,数据包怎么做乘法和加法运算???

有办法,把上面那些运算定义成伽罗华域的四则运算就行了,乘法就成了域的多项式乘法,计算机很容易实现;加法就是大家经常接触到(C语言中的)异或运算。

这些东西真的有人用吗?有的,QUIC协议中FEC了解一下,虽然没看过代码,QUIC协议中FEC实现得东西应该比我这个将要讲的方案简单很多,哈哈哈

 

用兴趣可以来信交流(vslinux@qq.com),我这里已经有完整的随机线性网络编码的C语言实现。

posted @ 2019-10-17 15:35  Ray.floyd  阅读(1036)  评论(2编辑  收藏  举报