更多精彩内容,请微信搜索“FPGAer俱乐部”关注我们。
引言
在网络传输和无线通信的过程中,我们会用到很多传输协议,诸如TCP/IP,UDP等。这些协议的报文头都有一定的规律,并且很大一部分在传输过程中是不变的,当我们单次传输的数据比报文头还短时,报头就成了一个累赘。我们可以利用报头的变化规律对报头进行压缩,提高传输效率。ROHC就是这么一种协议。
以下是我看了一些论文和英文版的白皮书之后归纳出来的内容,适合像我一样的初学者看,快速了解这一协议。
ROHC协议原理
预备知识:
完整的信号报头(信头)包括:静态信头 + 动态信头 ,分别有各自的 域 和 值。
解压方需要知道压缩方的传输协议才能解压,协议通过profile标识,对每一种协议固定一个PID
解压方通过 CID 和 PID 实现解压。CID在后面有解释。
文景(contex):英文直译是上下文的意思。在这里表示压缩后的信息。
预备工作
压缩方:
将完整信号报头(信头)保存在本地的“压缩文景”数据结构中。 <- 之后按照这个“表”传递变化的值域;
为每个文景分配一个文景标识符(CID) <- 用于唯一识别数据流;
解压方:
将完整的信头域和值保存到本地“解压文景”数据结构;
建立起一个完整的解压文景后,压缩方才开始发送压缩后的分组;
在后续的数据传输中,解压方根据分组的 CID 查找解压文景进行解压;
压缩方状态:
IR(initiation and refresh state)状态:
初始化/重置状态。初始化/更新文景中的静态/动态域信息。
动作:连续发送全部 PID 和 CID,以及未压缩的明文信息。
FO(first order)一级压缩状态:
动作:传递完整的动态信头域信息。【即简单粗暴地砍掉静态部分,动态部分不压缩】
SO(second order)二级压缩状态:
最高级压缩状态。
动作:仅传递动态域压缩后的值。
解压方状态:
NC(no context)状态:
无文景状态。数据流刚开始传递时的状态。
动作:接收并保存压缩方在 IR 状态发的包含完整信头的分组,解压 IR 包。
对应压缩方状态:IR
跳转条件:成功解压一个IR包 -> FC状态
SC(static context)静态文景状态:
解压方获得了足够的静态域信息,希望接收包含完整动态信头的压缩分组。
动作:接收并保存压缩方在 FO 状态发的包含完整动态信头的分组,解压 FO 包
对应压缩方状态:FO
跳转条件:
. 成功解压一个FO包 -> FC状态。
. 连续 k2 个包解压失败 -> NC状态
FC(full context)全文景状态:
获得了足够的静态域信息和动态域的变化规律信息。
动作:解压 SO 包。
对应压缩方状态: SO
跳转条件:连续 k1 个包解压失败 -> SC状态。
压缩方的基本状态图如下:
解压方的状态图如下:
ROHC协议有好几种模式,分别适用于
无反馈信道(U-mode)
弱反馈信道(O-mode)
强反馈信道(R-mode)
单向(uni-directional)U 模式:
当不存在或不能使用反馈信道时,ROHC 工作在 U 模式,此时解压方不能向压缩方发送反馈信息。 为保证压缩健壮性和压缩率, 压缩方采用乐观逼近原则和周期性原则进行状态转移。
乐观逼近原则:在 IR 状态或 FO 状态时,压缩方向解压方连续发送 n 个分组时就认为解压方建立了正确的解压文景,于是向高级 FO、SO 状态转移。
周期性原则:压缩方在 FO、SO 状态一定时间 timeout 后,就转移到低级压缩状态。
双向乐观(bi-directional optimistic)O 模式:
当无线链路存在可以利用的反馈信道时,ROHC 工作在 O 模式,压缩方向高级状态转移采用乐观逼近原则或者正反馈原则, 向低级状态转移采用负反馈原则。
正反馈原则:当无线链路允许发送反馈分组的时候,解压 方一旦正确解压具有更新文景特性的分组时, 就向压缩方发送正反馈分组,允许压缩方向高级压缩状态转移。
负反馈原则:当无线链路允许发送反馈分组的时候,解压方连续错误地解压 ROHC 分组时, 就要向压缩方发送负反馈分组,促使压缩方向低级状态转移,并发送带有完整信息的分组,以便解压方接收到这些分组后更新解压文景信息,保持压缩和解压文景同步。
双向可靠(bi-directional reliable)R 模式:
当无线链路质量比较好的时候, 状态转移完全采用反馈原则。 压缩方向高级状态转移采用正反馈原则,向低级状态转移采用负反馈原则。
压缩算法
我们可以发现,ROHC协议并没有规定了压缩的算法,它只在行为级模型上规定了状态的跳转,对于不同的压缩算法,ROHC的压缩效率大有不同,所以压缩算法选取是ROHC协议使用的核心。
目前主流的压缩算法有以下两种:
LSB最低有效位压缩编码算法:
LSB 压缩算法是对连续分组中值变化不大的域进行压缩编码,压缩方只传输域值的 k个最低有效位 LSBs,而不是原始域值,LSBs 是要压缩的值 v 与已正确传递到解压方而作为参考值 v_ref 的二进制编码差异的最低有效位,k 是 LSBs 的比特位数。 解压方接收到 LSBs 后,用其取代先前正确接收而作为解压参考值的 v_ref 的 k 个最低有效位,获得原始值。
其实就是指传有变化的部分。核心思想和云天明的只送大脑是一样的,虽然看着简单,但是效率却出奇的高,是最重要的压缩算法之一。
- W-LSB 基于窗口最低有效位压缩编码算法
原理跟上面的LSB基本相同,只是W-LSB做的更彻底,通过调节窗口的大小,只传跟上一次不同的几位,达到更高的效率。
本文转载自:http://xilinx.eetrend.com/article/12749,如涉及侵权,请私信小编删除。
============华 丽 的 分 割 线============
想加入我们FPGA学习交流群吗?可以长按或扫描以下二维码,审核通过后我们邀请您加入。
这些微信群旨在打造一个提供给FPGA工程开发人员及兴趣爱好者(统称“FPGAer”)进行技术交流、答疑解惑和学习的平台。而且我们也将会通过网络举办FPGA技术讲座,分享相关研究文献。
了解更多FPGA知识可以长按或扫描以下二维码关注“FPGAer俱乐部”。