近日按照老师的命令读了一下Networking Coding这篇文章,真是痛苦,还好,多少明白了一点,下面是我的一些体会(ps:其实就相当于一个翻译,还不完整),大家不要见笑。
本文是一篇介绍网络编码的入门读物,共分为四个部分,分别介绍了网络编码概念、原理、作用和应用范围。
一、介绍
传统理论认为独立的数据流可以共享网络资源,但信息本身是相互独立,传统网络的所有功能包括存储、转发、纠错都是基于这个假设的。而网络编码改变了这一假设,它允许节点能够将几个输入分组组合成一个或几个输出分组,文中以一个经典的例子说明了什么是NC。
Traditional Method Networking Coding
A----a-->S----- -B A-----a---->S----- -B
A----a---S<--b-- B A----a-- - S<----b---- B
A<--a----S---a-->B A<--a xor b---S---a xor b -->B
A<--b----S---b-->B
这是在一个无线网络环境,A要将packet a发送给B,B要将packet b发送给A,两者都需要通过S作为中转节点。在传统无线网络环境中,传输完整的信息要求在同一时刻只能有一个节点发送信息,要完成A、B数据传输必须要四步:A给S发送a,B给S发送b,S给B发送给(此时A也可以听到),S给A发送b。而采用NC的方法只需要三步就可以完成传输,S收到数据a,b后广播a xor b数据,A、B由于分别知道a、b,可以根据a xor b恢复自己所要的信息。
NC不止有益于提升网络吞吐量,还适用于不完全或不定信息决策的环境,信息成功的接受不依赖于收到确切的分组内容而是取决于收到足够数量的独立分组,再通过计算恢复所有的分组信息。
二、原理
(一)线性网络编码
NC允许节点将它收到的分组组合成一个或者多个的输出分组。
假设每个分组都由L比特组成,当要组合的分组没有同样的长度,较短的分组将自己的高位赋值为0,以补充位数。将一个分组中连续的S比特看做为F2s域的标志,每个分组就是由L/S个标志构成。输出分组就是原始分组的线性组合,在F2s域主要进行的是加乘运算。
线性组合不是简单的串联:输入多少,输出就是多少。每个编码的分组只由原始分组的一小部分组成。
(二)编码
假设一列原始数据M1,…,Mn由一个或几个源产生,在线性网络编码中,每个分组都与一个编码向量g1,…,gn相联系,编码的数据也叫信息向量为X。编码向量也被接收方用于解码。
编码也可以表现递归性,也就是对已经编码的向量再实行编码,每个节点对已接受的信息都可以进行再编码。
(三)解码
当接受节点收到(G,X)集合时,为了恢复初始分组,它需要解方程:X=GM,M是未知数。
方程要求m大于等于n才能解出方程。
(四)选择线性组合
随机网络编码,种类数列可以达2的s次方。随机网络编码肯存在线性依赖组合,但是可能性可以被忽略。
(五)实际考虑
解码:要解大量线性数列。接受节点将接受的分组数列,构成一个解码矩阵,每收到一个分组序列,就把它放在矩阵的最后一列。使用高斯消元法将矩阵变形为三角矩阵。如果一个分组序列增加了矩阵的范围,就叫做新的分组;如果不是,分组序列就会被减为0序列并被忽略掉。
批次(代数):分组常常分组成批次,只有同一批次的分组才能组合。批次的规模和组成对NC有着显著的影响。
延迟:分组解码需要一点小的时延,但分组解码不需要等待收到所有编码分组,可以边解码边接受,其时延往往小于正常的端到端时延。
有限域运算:
三、作用
(一)静态环境吞吐量的提升
对于多播和单薄,NC都能增加网络吞吐量,文中用了一个形象的例子来描述NC的作用。在传统网络中,R1的接受rate是1,R2是2,平均就是1.5;而在NC中,可以达到2。
(二)强制性和适应性
NC适用于没有收到完整信息的节点,可以计算恢复损失的数据
(三)优惠收集问题
网络编码通过适用一种简单的分流算法可以达到传输最优表现。
(四)分组擦除网络
通过中间节点解码和再编码,可以降低数据丢失的概率,相应的也会带来一定的时延。