序言
前面两篇文章分别总结了ROHC的基本概念和ROHC的报文/校验/编码方式等,这篇文章将介绍ROHC的压缩系统。ROHC的压缩系统由压缩器和解压器组成,压缩端能对多种类型的报头进行压缩,解压器则进行相应的解压。
1. 压缩端
压缩端主要由以下几个模块组成:模式转换 + 状态转移 + 反馈处理 + 压缩数据包类型选择 + 编码发送压缩ROHC数据包
- 模式转换模块:压缩方解压方初始通信均采用U模式,然后根据信息进行模式转换,适应环境特性。
- 状态转移:压缩状态表明了压缩效率的高低,并直接影响了ROHC压缩数据包的选择。U模式下,要及时根据信息提高压缩状态,以保证压缩效率;O/R模式需要根据反馈信息调整压缩状态,保证数据包选择的正确性。
- 反馈处理:辨别反馈信息,更新压缩方上下文,并将反馈信息通知模式转换和状态转移模块。
- 压缩数据包类型选择:ROHC中规定了14种,不同的压缩数据包,每种压缩数据包都代表了不同的压缩效率和健壮性。包类型选择信息由各个子模块提供。
- 编码压缩:编码后,将数据包按照一定格式压缩成ROHC压缩数据包送入无线链路传送。
1.1 压缩流程
压缩端的功能:
- 将收到的RTP/UDP/IP数据包压缩成为某种可为解压缩方识别的压缩包;
- 接收处理来自解压缩方的反馈信息;
- 完成三种状态间的相互转移;
- 与解压缩方配合,完成三种模式间的相互转换;
- 高效合理地进行CID管理。
压缩端收到的数据包类型:一般情况下,压缩端会收到三种类型的数据包
- 有待压缩的上层传来的RTP/UDP/IP数据包,压缩方需要根据上下文和收到的数据包的不同情况,选择不同的压缩数据包类型。
- RTCP/UDP/IP数据包,它是RTP/UDP/IP的控制信息,在整个数据流中占的比重很小,约为5%左右。所以,对其进行严格压缩的必要性不大,ROHC中不建议对此种类型的数据包进行压缩。
- 在O/R模式下,解压缩方传来的反馈信息。反馈信息可能是FEEDBACK-1或者是FEEDBACK-2(分为ACK、NACK和STATIC-NACK三类)两种形式。压缩方接收到的反馈信息后需要对反馈信息的类别予以识别,并针对不同的反馈信息进行不同的处理。
1.2 CID管理和压缩状态获取
1.2.1 Conctext和CID
不同的context代表不同的数据流信息,ROHC中context由以下五个值决定:
五个值完全相同的数据包来源于同一个数据流,具有相同的context,如果没有,则重新分配一个未使用的CID,作为一个新的数据流的标志。
CID不同取值对应着不同context-上下文,CID有Small CID和Large CID之分,Small CID的取值范围[0 , 15],Large CID的取值范围[0 , 65535]。
1.2.2 CID的分配方法
CID的分配方法有两种:按序分配法 + 优先级分配法
- 按序分配: 压缩方收到新的数据流的数据包时,查看未分配的CID,从中选择CID最小值。
- 优点:这种方法的优点是简单易实现。
- 缺点:在ROHC中规定,为了尽可能的提高压缩效率,当CID为0时,CID可以不必随压缩数据包发送,解压缩方默认CID即为0。
因此,在可能的情况下,压缩方应尽量使数据流的CID为0,以节省一个字节的开销。然而这种方法CID取值的机率是相等的,无法使CID为0取得优先权;
- 优先级分配:这种方法需要每一个CID的context中都设置相应的定时器,并记录下该CID上次使用的时间。如果CID未使用的时间超过了超时门限,则该CID的context将会被释放。这就保证了CID为0的时候总是有实际的通信发生,避免了某数据流长期没有发送而又占用了CID为0的情况。
- 设置的超时门限的值不应过长,过长则导致下一个数据流无法占用实际上已经放弃使用的CID;
- 过短则会造成用户正在使用的数据流的CID突然遭到抢占。
1.2.3 压缩状态的获取
压缩方为数据包找到了CID后,就可获得相应的context,即可获知数据流的压缩模式及状态。
通常有以下四个因素对压缩状态产生影响:
- 1) 反馈机制的影响。在O/R模式下,来自解压缩方的反馈信息将会对压缩状态产生一定影响;
- 2) 优化机制和定时/定量更新的影响。在U/O模式中,采用优化机制进行状态升级,采用定时/定量更新进行高级状态向较低状态的转换;R模式不会受到定时/定量更新的影响;
- 3) 数据流的变化的影响。报头发生变化,如IP头部中的TTL域与context中的TTL域不符时,压缩方只能选择发送IR-DYN压缩包,降低压缩状态;
- 4) 模式转换的影响。ROHC中规定,在模式转换进行过程中,当C_TRANS的值为PENDING时,压缩方只能停留在IR或FO状态。
对压缩状态的正确判断,直接影响了对数据包的选择机制,也即直接影响了压缩效率与健壮性。
1.3 包类型选择策略/机制
ROHC提供了14种类型的包,选择哪种类型的包可以根据具体的工作状态和工作模式以及所需发送的信息类型进行选择。由于每种压缩数据包的长度不同,所包含的内容不同,所得到的压缩效率(Efficiency)与健壮性(Robustness)也是不一样的。一般说来,压缩数据包头部字段越长,健壮性越高,压缩效率则反之。
这14种数据包中,健壮性从高到低(压缩效率正好相反):
以下两个图互补说明压缩端包类型的选择机制
- 说明:
- IR类型:当压缩方的状态为IR时,可以认为解压缩方未拥有足够的可供解压缩的上下文,或者是解压缩方的上下文与压缩方的上下文已经失步。则在这种情况下,应选择IR压缩数据包,以保证解压缩方收到足够的可供解压缩的信息,并建立起与压缩方同步的上下文;
- IR-DYN类型:当压缩方的C_TRANS状态为PENDING时,表明压缩方与解压缩方处于模式转换过程中,只能够发送为所有模式可识别的压缩数据包,一般选择IR-DYN压缩数据包;
- IR-DYN类型:当压缩方收到解压缩方的NACK反馈信息时,压缩方即可获知解压缩方的上下文已经不足以正确解压缩上下文了,这时需要发送IR-DYN压缩数据包,其包含的信息足够令解压缩方正确解压缩,并重新建立与压缩方同步的上下文;
- IR-DYN类型:若SN与TS的关系、SN与IP-ID的关系发生了变化,则需要重新建立与压缩方同步的上下文;
- IR-DYN类型:仅存在于IR或IR-DYN包中的信息发生了变化,说明原有的压缩状态和压缩数据包己经不能满足原始RTP/UDP/IP数据包发生的变化时,就必须采用低级别的压缩状态和相应的包含更多信息的压缩数据包;
- 模式判断:判断当前所处的模式,根据各种不同的压缩数据包包含的信息不同而妥善选择。如UO-1-TS包括的信息有SN域、TS域、M域,则适用于M域发生变化或者SN域与TS域的关系发生变化时选用;R-0包括的信息仅为SN域,适用于仅凭SN域就可推断出其它所有域时选用。
说明:
- IR状态:选择发送具有完整动态信息和静态信息的IR包。
FO状态:如果需要发送完整的动态信息,则选择IR-DYN类型。如果只需要传送部分的动态信息如RTP的M域、TS域、SN域和IP的IP-ID域,需要考虑此时的工作模式。
- U/O模式:发送UOR-2*包。UOR-2*包有UOR-2、UOR-2-ID、UOR-2-TS三种,如果上下文中的RND = 1则选择UOR-2包传输,UOR-2包含有TS和SN信息。当RND = 0时,对IP-ID和TS进行编码,由于UOR-2-ID和UOR-2-TS传输的IP-ID和TS比特数不同,因此,根据编码后的比特数选择相应的包。
- R模式:首先发送UOR-2*包,具体UOR-2*类型的选择机制与U/O模式相同,然后发送R-1*包。当RND = 1时,选择R-1包。当RND = 0时,根据IP-ID和TS编码后所需要传输的比特数,选择R-1-TS或者R-1-ID发送。
SO状态:
- 当工作在U/O模式时:如果此时只需要传输SN信息,可以采用UO-0,当还需要发送IP-ID、TS、M域时,可以选择UO-1*包。UO-1*包有UO-1、UO-1-ID、UO-1-TS三种,上下文中RND = 1时,发送UO-1包;RND = 0时,根据编码后IP-ID、TS的比特数选择UO-1-TS或UO-1-ID发送。
- 当工作在R模式时,先发送R-0-CRC包,然后发送R-0包。
影响压缩包类型选择的因素如下:
- 当前无线网络状况:
- 性能优良的无线网络,侧重于选择压缩效率更高的压缩数据包;
- 性能较差的无线网络,侧重于选择健壮性更高的压缩数据包。
- 当前的压缩模式和压缩状态:
- 网络状况、业务类型及客户需求等决定了压缩模式,不同压缩模式对压缩数据包的要求不一样;
- 不同压缩状态下,数据的压缩效率和健壮性也各不相同。
- RTP/UDP/IP数据包本身的改变:
- 若原有的压缩状态和压缩数据包已经不能满足RTP/UDP/IP发生变化时的情形,就必须采用低级别的压缩状态和相应的包含了更多信息的压缩数据包。
- 如当原始IP数据包的ToS域发生变化时,除了IR和IR-DYN压缩数据包,无法找到其他能够传递这种改变的压缩数据包,此时降低压缩状态,选用健壮性更高的IR或IR-DYN压缩数据包。
- 模式转换的影响:
- 模式转换未结束之前,压缩端只能选择通用于各种模式的压缩数据包,比如IR、IR-DYN、UOR-2-TS等。
- 反馈机制的影响:
- 确认反馈(ACK)会对压缩状态产生影响,从而进一步影响压缩数据包的选择;
- 否定反馈(NACK,STATIC-NACK)对压缩状态和数据包的选择都产生影响,压缩状态降低,选择能传更多信息的压缩数据包。
- 当前无线网络状况:
1.4 反馈信息处理
- 说明:U模式下,将根据自动更新原则,自动调整状态。
- 说明:在R模式中,状态的转换完全由反馈信息决定,与其它因素无关。
- 当收到FEEDBACK-1类型和FEEDBACK-2类型中的ACK反馈信息时,表明解压缩方己经建立解压缩所需的上下文,发送方的状态可直接升为SO。
- 当收到NACK时,表明解压缩方的上下文的动态部分己经损坏,需要压缩方发送较为完整的动态信息才能重新建立上下文,故压缩方的状态应为FO。
- 当压缩方收到STATIC-NACK时,表明解压缩方的上下文中的静态部分已经损坏,需要压缩方重发静态信息,故压缩方的状态应调整为IR。
2. 解压端
解压端主要由以下几个部分组成:模式转换 + 状态转移 + 反馈处理 + 解压缩部分
- 模式转换:压缩双方初始同喜你均采用U模式。如果模式转换模块决定要进行模式转换,则将此信息通知反馈处理模块,反馈处理模块收到这一信息后,将根据解压缩状态和当前解压缩数据包的情况,决定发送携带模式转换信息的反馈信息。
- 状态转移:在状态转换过程中,状态转换模块与解压缩模块保持通信,根据解压缩的情况不同而随时调整自身状态。
2.1 解压缩流程
- 解压端的工作过程:解压端在接收到一个包后,首先检查其是否有填充字节,若有则移去。如果工作在O/R模式,解压端不仅会接收到ROHC压缩包,还会接收到反馈包,此时,需要判断接收到的包是压缩包还是反馈包。如果为压缩包,读取该包的CID,与相应的上下文联系起来。然后判断包类型,得知包的类型后,根据不同的类型做相应的处理,如果解压正确则传递至上层,解压失败需要将错误的包丢弃;若为反馈包,获得其CID后,将反馈包的信息递交给同一侧的压缩端进行处理。
- 解压端的工作流程如下:
解压缩端的功能
- ROHC压缩数据包的解压缩;
- 三种模式间的相互转换;
- 三种解压缩状态的转移;
- 向压缩方发送反馈信息。
设计解压端实现框架应注意的问题
- 保证压缩的透明性:一定误码、乱序、丢包情况下能完整无误的还原数据包;
- 保证解压缩的低延时:ROHC主要用于VoIP、流媒体等实时性要求高的业务,ROHC过程不能引入较大延时;
- 合理利用反馈信道:反馈信息对提高压缩效率和健壮性很有帮助但也会加重无线网络的负担;
- 妥善利用W-LSB算法进行解码:利用CRC对W-LSB算法进行校验是保证W-LSB算法成功的关键。
解压端的工作流程补充
2.2 包类型处理机制
解压端在不同模式不同工作状态下会收到不同类型的包,根据不同包类型做出不同的处理。
包类型处理详细流程如下
说明
- IR类型:解压端在接收到IR类型的包后,根据之前解析得到的CID,查找其上下文是否存在,若不存在,则建立上下文,并将该上下文的CID设置成该IR包的CID。由于IR包的CRC是对其本身而不是原始包进行计算,所以在这里需要对接收到的IR包进行CRC校验。CRC校验通过后,解析IR包中的静态信息和动态信息,还原出原始包。解压成功后,如果解压端状态不是FC状态,则需要将其状态转换至FC状态,然后对上下文进行更新。如果IR包的CRC校验失败,则要将该包丢弃,解压端等待新的IR包。
- IR-DYN类型:解压端在接收到IR-DYN包后,根据获得的CID寻找相应的上下文,IR—DYN与IR类似,其CRC也是对自身而不是对原始包进行计算。CRC校验通过后,需要判断此时的解压端状态,由于NC状态下不接收IR-DYN类型的包,因此,如果此时不是NC状态,则解析IR-DYN中的动态信息,还原出原始包,并更新上下文中信息。如果CRC校验不通过或者此时状态为NC状态,则丢弃该包。
- 类型2:解压端在接收到类型2的包后,根据其CID寻找相应的上下文,然后进行解压端的状态判断,NC状态不接收类型2的包,如果不是NC状态,则解析出类型2包的信息,根据相应的编解码方法和相应的上下文中的信息,还原出SN、TS和IP-ID域,进而还原出整个原始包。与IR和IR-DYN包不同,类型2包中的CRC是对原始包进行计算获得的值,因此,在还原出原始包后,需要进行CRC校验,CRC校验通过,则解压成功,更新上下文信息。若状态为NC状态或者CRC校验不通过,则丢弃该包。
- 类型0/1:解压端在接收到类型0或类型1的包后,根据其CID寻找相应的上下文。这两种类型的包只能在FC状态进行处理,需要进行状态判断。如果不是FC状态,则丢弃该包。
- 当工作在U/O模式时,如果为UO-0包或UO-1*包,则还原出SN域、TS域和IP-ID域,然后获得整个原始包,进行CRC校验。
- 当工作在R模式时,接收到R-0-CRC包后,解析其中的SN域信息,还原出原始包,然后进行CRC校验,并对上下文中信息更新,接收到R-1*包或R-0包后,只需要还原出原始包,不需要进行CRC校验,同时不能更新上下文中的信息。
- 反馈信息处理:对反馈机制的处理要在保证健壮性的前提下,尽量减少反馈信道的使用,以节约无线资源。
- 当工作在U/O模式时,当解压成功后,不发送ACK反馈。
- 当工作在R模式时,需要对更新包即含有CRC域的包发送ACK反馈,对于一序列的R-0-CRC包,第一个包必须被ACK。对于一序列的UOR-2-IR、IR-DYN包,前N个包必须被ACK,N可以设置为2,如果接下来接收到的包的头部变化域与前面的包相同,则在一个RTT中仅ACK这些包中的k个,否则就要当成一个新的序列,ACK其中的前N个包。
- 当工作在FC状态时,如果n1个包中有k1个包CRC校验失败,则转换至SC状态。如果工作模式为R/O模式,则需要向压缩端发送NACK反馈。
- 当工作在SC状态时,如果n2个包中有k2个包CRC校验失败,且工作模式为R/O模式,则发送STATIC-NACK反馈,特别的是,在O模式中,如果接收到了类型0或类型1的包,则发送的反馈类型为NACK。
- 当工作在NC状态时,接收到非IR包后,R模式和O模式下均发送STATIC-NACK反馈,当IR包CRC校验失败后,只有O模式下发送STATIC-NACK反馈,R模式下不作任何处理。在U模式中,当CRC校验失败或者接收到错误类型的包时,只会进行相应的状态转换,除非需要进行模式转换,否则不会发送反馈。
Acknowledgements:
[1] 孙青. 基于LTE的健壮性头压缩(ROHC)的研究和实现[D]. 东南大学, 2013.
[2] 刘天钊. 鲁棒性报头压缩算法研究[D]. 西安电子科技大学, 2008.
2017.05.02