博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。
博客内容主要围绕:
5G/6G协议讲解
算力网络讲解(云计算,边缘计算,端计算)
高级C语言讲解
Rust语言讲解
AM模式的数据传输详解
在5G NR中,RLC有TM
、UM
和AM
三种不同的业务模式,每种模式都可以发送和接收数据,根据其需求提供不同的逻辑信道。本篇博文介绍了AM模式数据传输。
RLC AM模式的特点:
- 在发送和接收端都实现了缓存;
- TX侧会进行分段。而RX侧会进行分段重组;
- 对于每个RLC PDU都要求有反馈机制(ACK或者NACK);
- SRB1/SRB2/SRB3和DRBs都采用RLC AM模式;
- AM模式的SN长度可以是12bit或者18bit;
- RLC AM模式一个完整的或者分段的SDU与一个SN相关联;
如何通过RLC进行数据传输?
RLC实体通过PDCP层接收/发送PDCP PDUs(也就是RLC SDUs),并通过MAC和PHY层向对端RLC实体发送/接收RLC PDUs。
- PDU是一个层的输出;
- SDU是一个层的输入;
PDU的传输顺序是什么?
RLC AM模式下按照下面的顺序进行PDU传输:
- 控制PDU(RLC 状态PDU);
- 重传PDU;
- 分段的PDU;
- 完整的PDU;
RLC传输(完整或分段的PDU)
下图描述了完整和分段的PDU的传输。
RLC PDU(s)的传输数量与MAC TB的大小有关。如果MAC TB大小不足以传输完整的RLC PDU,则RLC将会对RLC PDU进行分段。MAC的TB大小取决于基站对终端的上行授权字节数,这与当前的空口环境有关。
- SI:SI字段表示RLC PDU中是否包含完整的RLC SDU,或者RLC SDU的第一段、中间段、最后一段;
- SO:分段偏移量(不用于第一个分段);
RLC AM模式数据重传
在AM模式下,每个RLC PDU以序列号升序发送,并存储在重传缓冲区中。由于RLC AM支持ARQ以保证可靠交付,因此UE会发送RLC STATUS PDU报文,通知发送侧UE当前接收到的RLC PDU。如下图所示:
- SN=2 的RLC PDU丢失;
- 所以在UE发送的RLC STATUS PDU中ACK SN=4,NACK SN=2;
- 发送侧收到RLC STATUS PDU后,从DU中重发SN=2的RLC PDU。
RLC的最大重传次数
如果STATUS PDU被丢弃,则在轮询重传定时器(Poll Retransmission timer)到期后,重传SN=2的RLC PDU——该RLC PDU是DU最近一次传输的RLC PDU。如果轮询重传定时器过期次数超过maxRetxThreshhold
阈值,则触发RLF
(Radio Link Failure),释放终端。
RLC Window Stall
当TxNext和TxNextAck之间的差等于SN窗口大小(最大SN大小的一半)时,RLC窗口发送停滞。如下图所示,窗口停滞发生了,如果重传缓冲区中没有RLC PDU,则重新传输SN最高的PDU (SN=131172)。
- TxNext:该状态变量保存了要为下一个新生成的AMD PDU分配的SN值;
- TxNextAck:该状态变量保存了按序下一个期望收到ACK的RLC SDU的SN值,作为发送窗口的下界。
当出现窗口停滞时,CU向PDCP发送请求,要求停止发送数据。根据规范,当发送的PDUs(WINDOW_SIZE =13072)没有收到ACK时,就会发生停滞状态,这意味着DU必须维护131072个缓冲区。
这里有一个问题:
- 由于系统限制,DU可能不支持这种巨大的缓冲区;
- 可能的情况是,虚假的UE消耗了所有的缓冲区,而没有为其它UE留下缓冲区。
因此,可以根据此公式修改窗口停滞条件的阈值:Window Stall Threshhold = (MAX_DATA_RATE/AVG_PDU_SIZE)*RLC_RTT
RLC_RTT = Status Prohibit Timer + MAX_HARQ_RETX
- 其中:
- MAX_DATA_RATE: Maximum Data Rate Supported by UE
- RLC_RTT: RLC Round Trip Time
- MAX_HARQ_RETX: Maximum Harq Retransmission
- AVG_PDU_SIZE: Average RLC PDU Size
RLC AM模式下PDU的接收和重组
- AM PDU是从MAC层接收的;
- 如果RLC PDU SN在接收窗口内,则RLC继续后续处理;如果不在,则直接丢弃该数据包;
- RLC层还会检查AM PDU是否携带已经接收到的RLC SDU分段字节(检查是否重复)。当接收到的AM PDU包含新数据时,它继续进行处理;
- RLC将AM PDU放在接收缓冲区中;
定时发送状态报告,向终端共享上行数据包的接收状态。下面两幅图描述了在定时器t-reassembly
(t1,t2,t3)期间内对RLC数据包的处理,以及RLC UL状态变量的更新。假设在每个t-reassembly
中,会接收50个RLC PDU,在每个t-reassembly期间,都会发送STATUS PDU。由于没有从UE接收到TB (MAC传输块),所以RLC SN丢失了。
如上图所示,具有RLC SN(5~8)的MAC TB在t1时间丢失,在t2时间由于HARQ重传而收到。从图中可以看出,在t2时间内发送的状态PDU中没有AckSn=5。
- 注意:t1时间内的数据包丢失将在t3时间内使用STATUS PDU通知UE(使用NackSn)。
上图中,包含RLC SN(5~8)和RLC SN(40~49)的MAC TBs在t1持续时间内丢失。在t2中,Status PDU在接收到带有RLC SN(5~8)的Harq Retx (Harq retransmit TB)之前发送,因此Status PDU不报告收到RLC SN(5~8),只发送Status PDU(AckSn-5)。t2到期后,假设RLC SN(40~49)的MAC TB丢失,将丢失的数据包信息在Status PDU(AckSn-50,NackSn-40,range-10)中发送给UE。
t1丢失的RLC包在t3的STATUS Report中上报给UE。在STATUS PDU (AckSn 50,NackSn-40,range10)中。SN(40 - 49)中的PDU被认为丢失或丢弃。
- 注意:Reassembly timer是DU-RLC等待UE对丢失的RLC包进行HARQ重传的时间。
接收和重组RLC计时器
- tReassembly:tReassembly >= DL数据包到达UE的时间 + HARQ 的时间;
- tpollretransmit:tpollretransmit >= tstatusProhibit + 2 PUSCH transmission ( BSR + RLC Status PDU);
- tstatusProhibit:HARQ RTT <= tstatusProhibit <= tReassembly;