TD-SCDMA/HSPA无线网络优化原理与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3 RLC层的ARQ机制

4.3.1 RLC层的3种模式浅说

在控制层面,RLC层向高层(RRC)提供的服务为信令无线承载(SRB);在用户层面,RLC向高层提供的服务为无线承载。RLC层为高层提供3种模式的数据传输服务:透明模式、确认模式和非确认模式。

1.透明模式

通过该模式传输数据,RLC层将不需要增加任何协议信息,也就是说,RLC层不需要对高层传输的数据进行任何处理(但可能包含分段/重组功能)。透明模式无法纠错,不能向高层提供QoS保障,但处理时延小,适合实时业务,比较典型的应用场景是CS域的用户平面。当然,CS业务虽然无法通过RLC层进行重传纠错,但可以通过空口严格的功率控制来尽可能保障QoS。TM模式无法对数据进行分段,必须在一个TTI内把数据发完,因为没有包头编号,接收端也无法对数据包进行重组,因此,一般只用于发一些格式相对固定的、短小的数据包。

2.确认模式

在确认模式下,RLC将保证把接收到的高层数据传输到对等层。当RLC接收端无法正确接收数据时,RLC发送端将得到通知。确认模式虽然可以提供完善的重传纠错机制,但处理时延较长,因此多用于对实时性要求不是很高的业务。比较典型的应用场景是PS业务。在各类PS业务中,RLC层通过有效的重传机制确保向上层(TCP层)提供最小差错率的数据包,使得到达TCP层的数据差错率处于一个可接受的范围。换句话说,RLC层相当于下层(物理层、MAC层)与上层(TCP层)之间的缓冲。本章重点介绍确认模式的工作原理,及其对网络优化的影响。

3.非确认模式

非确认(UM)模式也不需要保证数据可靠地传输到对等层。但与透明模式相比,非确认模式可以检测出错的数据。非确认模式用于必须按次序接收包,但不太关注时延和差错的情形。例如流媒体和某些类型的信令(如RRC Connection Request)。如果检测到出错,不能请求重传。对UM数据包的处理,通常仅限于排序、加密或分段/拼接。UM模式有包头和包尾,用于分段和串接,接收端可由此得知哪些PDU属于一个SDU。SRB1一般采用UM模式,因此诸如RRC Connection Release、RRC Connection Release Complete、Cell Update Confirm这些信令都是采用UM模式传输的。

4.3.2 确认模式的工作原理

从网络优化的角度来看,确认模式的核心内容是ARQ机制和流控机制,RLC层通过轮询来实现ARQ,通过滑动窗口实现流量控制。对于RLC层参数优化的讨论,也将围绕这两个问题展开。

当高层服务数据单元(SDU)到达时,AM RLC将所有SDU进行分段,并为每个RLC分段加包头、串接为AM PDU(协议数据单元)在空口上发送,如图4.2所示。

图4.2 RLC层分段示意图

当一个AM PDU被发出后,同时也被保存在发送端的缓存中,等待来自收端的确认信息。如果来自接收端的Status PDU指示这一PDU未被成功接收,那么该PDU将被重传(Status PDU中携带了处于发送窗口内的AM PDU的接收情况,发送端将根据Status PDU中的信息移动发送窗口)。AM RLC配置了多种机制用于触发接收端发送Status PDU,其中一种即为轮询(Polling)机制,即AM PDU中携带一个轮询比特位(Pollingbit)。发送端检测到轮询条件满足时,即发送一个轮询比特位为1的AM PDU,同时启动Timer_Poll和Timer_Poll_Prohibit;接收端接收时,一旦检测到某一轮询比特为1,即向发端发送Status PDU,报告对AM PDU的接收情况。在发端,当下一次的轮询条件满足时(或者Timer_Poll超时),仅当Timer_ Poll_ Prohibit超时后才可再一次将PDU轮询比特置1。如果轮询的频率太高,有利于尽早发现丢包问题,及时重传,从而改善传输时延,但带来的副作用是造成上行过多的Status PDU,并产生一系列不必要的重传,影响吞吐率。轮询参数的优化也是折中和平衡的过程。RLC层规定了使用确认模式发送AM PDU的最大重传次数。如果重传次数达到了最大值,根据配置协议可以丢弃包含该AM PDU的RLC SDU。这时,需要使用Status PDU通知接收端更新PDU的相应接收窗口。反过来,协议也可以不丢弃RLC SDU,在这种情况下,需要在发送实体和接收实体之间启动RLC复位流程。下面对RLC层相关参数进行简单介绍。

1.定时器与计数器

RLC AM模式比较重要的定时器和计数器包括Timer_Poll、Timer_Poll_Prohibit、Timer_Status_Prohibit等。

1)Timer_poll

Timer_Poll表示发送Polling PDU后等待接收端ACK的定时器时长。定时器超时后重发Polling PDU。也就是说,在某个Pollingbit等于1的AM PDU被发送后,启动该定时器。定时器超时则意味着载有Polling请求的数据包丢失,发送端会重发这个PDU。

Timer_Poll的设置需要考虑多重因素之间的相互影响。若Timer_Poll设置过小,例如小于RLC层RTT,会引起过于频繁的轮询:在Timer_Poll超时后,接收端反馈的Status PDU尚未到达发送端,发送端就再次重发polling PDU,而接收端也不得不再次反馈Status PDU,浪费上/下行带宽。当然,在实际情况下,如果Timer Poll设置小于RTT,只要Timer_Poll_ Prohibit和Timer_Status_Prohibit的设置较为合理,也会对频繁的轮询进行限制。此外,Timer_Poll的取值一般情况下应大于Timer_Poll_ Prohibit。如果Timer_Poll的值小于Timer_Poll_ Prohibit,则很难对吞吐量的变化产生影响,这是因为即使Timer_Poll超时,发送端未能收到Status PDU反馈,但必须等待Timer_Poll_Prohibit超时后才可以设置轮询。因而这种场景下实际上触发轮询的是同一个定时器——Timer_Poll_Prohibit。

另一方面,如果Timer_Poll设置过大,吞吐量将下降,这是因为长时间不允许轮询会导致发端长时间收不到Status PDU,发送窗无法滑动,随着发送窗变量VT(S)的移动,发端可以发送的数据量将越来越少。如果继续增大Timer_Poll,超过某一门限之后,这个参数就不再发挥作用,即使Timer_Poll的值继续增大,吞吐量变化也不大,这是因为当Timer_Poll超过某一值后,在Timer_Poll还未超时之前,其他的轮询机制Last PDU in transmit buffer、Last PDU in retransmit buffer、Window based polling等已经触发了轮询,使发端收到Status PDU反馈。

2)Timer_Poll_Prohibit

该定时器用于保证两次Polling 之间的时间间隔大于一定周期(即该定时器时长),也就是规定了两次发送包含Polling的PDU的最小时间间隔。在某个Pollingbit等于1的AM PDU被发送后,启动该定时器。在该定时器超时前,将不允许新的Polling功能被使用。如果该定时器超时前,又启动新的Polling要求,则必须等到该定时器超时后才能启动Polling功能。

当Timer_Poll_Prohibit的值很小时,基本不会限制RLC发端的各种轮询,频繁的轮询将导致收端不断地向发端发送Status PDU,产生不必要的重传,浪费了上/下行带宽。Timer_Poll_Prohibit的值设置过大也会影响吞吐量,这是因为长时间不允许轮询会导致发端长时间收不到Status PDU,随着发送窗变量VT(S)的移动,发端可以发送的数据量将会越来越小。Timer_Poll_Prohibit设得过大或过小都会对系统的性能产生影响,适当的Timer_Poll_ Prohibit值既可以避免不必要的重传又不会导致发送窗停滞。若要使Timer_Poll事实上起作用并且不产生不必要的重发,其值首先应该大于Timer_Poll_Prohibit的值并且至少应该保证大于RLC RTT的时间。

3)Timer_Status_Prohibit

Timer_Status_Prohibit用于控制接收端连续反馈Status PDU的节奏,也就是两个连续的Status PDU之间的最短时间。只有在上层进行了相应配置的情况下,才使用该定时器,它用于禁止接收端在短时间内连续发送Status PDU。定时器的值由上层信令指示。在UE端,当下层指示一个确认状态报告的最后一个Status PDU被成功或者不成功发送时,该定时器启动。在UTRAN端,当一个确认状态报告的最后一个Status PDU被发送给下层时,该定时器启动。在定时器运行期间,接收端暂停发送任何确认接收的Status PDU。

若Timer_Status_Prohibit设置过小,小于单程时延(RTT/2),接收端反馈的第一个Status PDU尚未到达发送端,又发出了第二个Status PDU,过于频繁。此时Timer_Status_Prohibit很难起到控制反馈节奏的作用。若Timer_Status_Prohibit设置得过大,虽然可以避免不必要的RLC层重传,但会引起RLC层时延增大,甚至会触发TCP层重传,引起TCP层RTT抖动,使TCP性能降低。在链路质量较好的情况下,可以将Timer_Status_Prohibit设置为略大于RTT。如果链路质量较差,一般设置RTT/2<Timer_Status_Prohibit<RTT ,也就是介于单程时延和环回时延之间。

4)MaxDAT

MaxDAT等于某个AMD PDU的最大发送次数+1,是VT(DAT)的上限。当VT(DAT)等于MaxDAT时,RLC复位过程或者SDU丢弃通知过程将被触发。

5)MaxRST

MaxRST等于RESET PDU的最大发送次数+1。MaxRST是变量VT(RST)的上限。当VT(RST)等于MaxRST时,说明发生了RLC不可恢复错误。该参数仅用于RLC AM实体的发送侧。当RLC AM实体进行复位时,若链路通信质量太差,发送端因不能及时收到对端的RESET ACK PDU而重发RESET PDU达到一定的次数(Max_RST -1)后,即向高层报告“不可恢复错误”,不再重发。如果一个PDU重传了MaxDAT次,将触发RLC复位过程。发送端发送一个复位PDU并等待确认。如果链路仍然恶化,使RLC复位PDU不能达到目标,那么在定时器Timer RST超时后发送第二个复位PDU,最多发送MaxRST次,此后向上层报告RLC Unrecoverable error,其结果是触发Cell Update(如图4.3所示)或释放信道,可能导致用户掉话。

图4.3 Cell Update流程

2.其他定时器和计数器

此外,RLC层还有一些定时器和计数器,调整的频率并不高,并且必须在打开相关功能项之后,这些参数才会发挥作用。举例如下。

Poll_PDU:表示两次发送Polling PDU之间最多能够发送PDU的数量,即每发送Poll_PDU个PDU就必须触发一次Polling功能。

Poll_SDU:表示两次发送Polling PDU之间最多能够发送SDU的数量,即每发送Poll_SDU个SDU就必须触发一次Polling功能。

Last transmission PDU poll:如果设置为TRUE,当发送缓冲区的最后一个PDU时,触发Polling功能。

Last retransmission PDU poll:如果设置为TRUE,当发送重传缓冲区的最后一个PDU时,触发Polling功能。

Poll_Window:当发送窗口的使用比例超过本项的值时,触发Polling功能。

Timer_poll_periodic:指示周期性触发Polling功能的周期。该定时器超时且存在AM PDU将被发送和重传,则触发Polling功能;如果该参数不存在,则表示不支持周期性Polling。

3.滑动窗口与状态变量

图4.4是一个滑动发送窗的原理简图,下面结合几个状态变量来说明其工作原理。

图4.4 滑动发送窗原理简图

VT(S)是下一个需要发送的AMD PDU的序号。在发送一个新的AMD PDU后,VT(S)加1;VT(A)是下一个期待被确认的序列号,或者说是已被接收方连续确认的最大的AMD PDU序号加1,是发送窗口的下边沿。VT(MS)是尚未允许接收的首个PDU的序列号,或者说,是接收方拒绝接收的第一个AMD PDU序号。VT(MS)=VT(A) + VT(WS),其中VT(WS)是发送窗口的大小。VT(MS)代表发送窗口的上限,初始值为Configured_Tx_Window_size。这个上限“右边”的,来自于高层的SDU分段,需要等待发送窗向“右边”滑动之后,才能进入发送队列。

图4.5是一个滑动接收窗的原理简图。

VR(R)表示下一个按序接收的AMD PDU的序号,是接收窗口的下边沿。VR(R)在收到序号等于VR(R)的AMD PDU后进行更新。VR(MR)表示被接收方拒绝的AMD PDU的最小序号,是接收窗口的上边沿。VR(MR)=VR(R) + Configured_Rx_Window_Size。VR(H) 是最大的期待接收的PDU的序列号,设接收方已接收的所有AMD PDU的最大序号为x,如果收到一个序号大于x且小于VR(MR)的AMD PDU,则将VR(H)置为该AMD PDU的序号+1。VR(H)的初始值为0。这个状态变量包含接收到的最高AMD PDU“Sequence Number”后的序列号。当接收到“Sequence Number”x满足VR(H)≤x<VR(MR)的AMD PDU时,这个状态变量会变为x+1。

图4.5 滑动接收窗的原理简图

1)Transmit Window Size

Transmit Window Size表示在没有收到对方确认信息的情况下,发送端最多可以发送的RLC数据PDU的个数。该参数仅用于RLC AM实体的发送侧,发送窗口的大小与RLC数据吞吐率相关。一般来说,窗口越大,RLC吞吐率越高,但也会消耗更多的系统内存空间。若窗口设置得过小,会降低RLC吞吐率,并导致业务数据传输时延增大。通过调整窗口大小可以对发送端进行流量控制。发送窗口过小,容易导致在发端未接收到Status PDU移动发送窗口时,发送窗即被占满,此时发端存储了大量PDU但不能发送,这种情况称为发送窗停滞。发送窗停滞将直接导致链路吞吐量下降。若窗口过大,由于序列号的重复性,接收端可能收到具有相同序列号的不同RLC数据包而无法区分,导致Reset。

2)Receive Window Size

参数Receive window size指示了在一次连续接收过程中,允许接收的最大RLC数据PDU的数目。该参数仅用于RLC AM实体的接收侧,定义接收窗口大小。接收滑动窗口大小一般不小于发送滑动窗口大小。

下行RLC参数优化的主要思路是尽量延长它的定时器参数,以便让HARQ的快速重传恢复尽可能多的误块,即选取定时器参数大于HARQ定时器参数的取值。引入HSDPA后,下行RLC定时器参数的变化很小,原因就是前面讲到的其作用的弱化。上行的情况就有所不同,HSDPA虽然复用R4的上行业务信道,但RLC层的作用发生了变化。它既不同于下行的情形,又不是简单地重复R4,需要考虑环回时延显著降低的因素来优化RLC上行的定时器参数。具体地说,优化取值的思路使定时器参数与环回时延相匹配。