ROHC协议简介

引言

在网络传输和无线通信的过程中,我们会用到很多传输协议,诸如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协议简介_第1张图片

解压方的状态图如下:
ROHC协议简介_第2张图片

ROHC协议有好几种模式,分别适用于
无反馈信道(U-mode)
弱反馈信道(O-mode)
强反馈信道(R-mode)

  • 单向(uni-directional)U 模式
    当不存在或不能使用反馈信道时,ROHC 工作在 U 模式,此时解压方不能向压缩方发送反馈信息。 为保证压缩健壮性和压缩率, 压缩方采用乐观逼近原则周期性原则进行状态转移。
    • 乐观逼近原则:在 IR 状态或 FO 状态时,压缩方向解压方连续发送 n 个分组时就认为解压方建立了正确的解压文景,于是向高级 FO、SO 状态转移。
    • 周期性原则:压缩方在 FO、SO 状态一定时间 timeout 后,就转移到低级压缩状态。

ROHC协议简介_第3张图片

  • 双向乐观(bi-directional optimistic)O 模式
    当无线链路存在可以利用的反馈信道时,ROHC 工作在 O 模式,压缩方向高级状态转移采用乐观逼近原则或者正反馈原则, 向低级状态转移采用负反馈原则
    • 正反馈原则:当无线链路允许发送反馈分组的时候,解压 方一旦正确解压具有更新文景特性的分组时, 就向压缩方发送正反馈分组,允许压缩方向高级压缩状态转移。
    • 负反馈原则:当无线链路允许发送反馈分组的时候,解压方连续错误地解压 ROHC 分组时, 就要向压缩方发送负反馈分组,促使压缩方向低级状态转移,并发送带有完整信息的分组,以便解压方接收到这些分组后更新解压文景信息,保持压缩和解压文景同步。

ROHC协议简介_第4张图片

  • 双向可靠(bi-directional reliable)R 模式
    当无线链路质量比较好的时候, 状态转移完全采用反馈原则。 压缩方向高级状态转移采用正反馈原则,向低级状态转移采用负反馈原则。

ROHC协议简介_第5张图片

压缩算法

我们可以发现,ROHC协议并没有规定了压缩的算法,它只在行为级模型上规定了状态的跳转,对于不同的压缩算法,ROHC的压缩效率大有不同,所以压缩算法选取是ROHC协议使用的核心。
目前主流的压缩算法有以下两种:

  • LSB最低有效位压缩编码算法

LSB 压缩算法是对连续分组中值变化不大的域进行压缩编码,压缩方只传输域值的 k个最低有效位 LSBs,而不是原始域值,LSBs 是要压缩的值 v 与已正确传递到解压方而作为参考值 v_ref 的二进制编码差异的最低有效位,k 是 LSBs 的比特位数。 解压方接收到 LSBs 后,用其取代先前正确接收而作为解压参考值的 v_ref 的 k 个最低有效位,获得原始值。

其实就是指传有变化的部分。核心思想和云天明的只送大脑是一样的
虽然看着简单,但是效率却出奇的高,是最重要的压缩算法之一。

ROHC协议简介_第6张图片
- W-LSB 基于窗口最低有效位压缩编码算法
原理跟上面的LSB基本相同,只是W-LSB做的更彻底,通过调节窗口的大小,只传跟上一次不同的几位,达到更高的效率。
ROHC协议简介_第7张图片

你可能感兴趣的:(Linux)