【5G RLC】AM模式的数据传输详解

news2024/10/10 6:16:09

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。


博客内容主要围绕:
       5G/6G协议讲解
       算力网络讲解(云计算,边缘计算,端计算)
       高级C语言讲解
       Rust语言讲解



AM模式的数据传输详解

在这里插入图片描述

       在5G NR中,RLC有TMUMAM三种不同的业务模式,每种模式都可以发送和接收数据,根据其需求提供不同的逻辑信道。本篇博文介绍了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


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内核死锁检测工具——Lockdep

文章目录前言配置内核简单的AB-BA死锁案例实际项目中的死锁前言 死锁是指两个或多个进程因争夺资源而造成的互相等待的现象&#xff0c;如进程A需要资源X&#xff0c;进程B需要资源Y&#xff0c;而双方都掌握对方所需要的资源&#xff0c;且都不释放&#xff0c;这会导致死锁。…

【圣诞快乐】如何用代码画一颗圣诞树?

文章目录一、前言二、创意角度三、java swing版 效果展示四、java swing版 实现步骤&代码五、springboot项目banner版 效果展示六、springboot项目banner版 实现步骤七、 linux shell界面打印版 效果展示八、 linux shell界面打印版 实现步骤一、前言 一年一度的圣诞节来了…

Allegro如何设置差分对内等长规则

Allegro如何设置差分对内等长规则 Allegro上可以对差分网络设置对内等长规则,方便把P/N网络进行等长处理,以下面这对USB为例 具体操作如下 打开Constraint Manage找到这对USB网络

vue3 antd table表格的样式修改(一)调整table表格每行(row)行高过高问题

vue3 antd项目实战——修改ant design vue table组件的默认样式&#xff08;调整每行行高&#xff09;知识调用场景复现实际操作解决a-table表格padding过宽知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vue组件库引入】css样式穿透&#xff08;…

RV1126笔记十三:实现RTMP多路拉流

若该文为原创文章,转载请注明原文出处。 一、介绍 通过RV1126实现RTMP的多路拉流,并在屏幕上显示出来,这里涉及到ffmpeg几个重要知识点,和RV1126如何在屏幕分屏显示。 二、流程图 流程和单路拉流类似,这里只是涉及拉取后的图像需要解码缩放,在合成分屏显示出来。 具体…

【完整】分类模型中类别不均衡问题解决

目录 1. 数据类别不均衡问题 2. 解决办法 过采样&#xff1a; 欠采样&#xff1a; ensemble 方法&#xff1a; 修改损失函数&#xff1a; 梯度调和机制&#xff1a; Dice Loss&#xff1a; 标签平滑&#xff1a; 3. 类别不均衡问题loss设计 4. 梯度调和机制GHM Gradi…

Graphviz安装向导

目录 1、首先在官网下载graphviz 2、安装。 3、测试 1、首先在官网下载graphviz 下载网址&#xff1a;Download | Graphviz 根据自身电脑位数选择合适的下载地址 2、安装。 打开第一步已经下载好的软件。点击下一步&#xff0c;在安装路径选择时可将安装路径修改为 E:\G…

JavaScript:栈的封装及十进制转二进制栈方法实现案例

栈的定义&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 JavaScript中对栈的封装 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&qu…

微信HOOK 协议接口 实战开发篇 2.好友列表与二叉树

前言&#xff1a;由于篇幅所限&#xff0c;文章无法详细到每个步骤&#xff0c;仅能写出关键的HOOK思路 好友列表 好友和群列表在汇编代码中有固定的常量保存 如图示&#xff0c;找到常量&#xff0c;回车进入 入口地址结构为 其指针内部便是我们需要的数据 群列表 搜索Ch…

Linux中的进程状态

目录 一、冯诺伊曼体系结构​编辑 关于冯诺依曼&#xff0c;必须强调几点&#xff1a; 二、操作系统 1、概念 2、操作系统的作用 3、本质 4、总结 5、系统调用和库函数概念 三、进程 1、基本概念 2、描述进程 3、task_struct 4、查看进程 5、通过系统调用获取进程…

第19章 随机变量

第19章 随机变量 19.1随机变量示例 定义19.1.1&#xff1a;概率空间上的随机变量R是域等于样本空间的全函数。 R的陪域可以是任何东西&#xff0c;但通常是实数的一个子集。 例&#xff1a; 例如&#xff0c;假设我们抛三个独立的、公平的硬币。令C表示正面朝上的次数。如…

js中的JSON的简单用法

目录 1.JSON说明 2.JSON.stringify 3.JSON.parse 4.示例 1.JSON说明 当数据在浏览器与服务器之间进行交换时&#xff0c;这些数据只能是文本&#xff0c;JSON 属于文本并且我们能够把任何 JavaScript 对象转换为 JSON&#xff0c;然后将 JSON 发送到服务器。我们也能把从服…

最强docker部署模板

00.背景 最近学校让一个小组做一个web项目最后部署到linux服务器上&#xff0c;项目本身并不难就是简单的增删改查&#xff0c;但是我想借着这个机会写一个docker部署的模板&#xff0c;方便自己以后用&#xff0c;也希望可以帮助到大家。 01.docker简介 docker可以快捷 轻量…

Redis原理篇—网络模型

Redis原理篇—网络模型 笔记整理自 b站_黑马程序员Redis入门到实战教程 用户空间和内核态空间 服务器大多都采用 Linux 系统&#xff0c;这里我们以 Linux 为例来讲解: ubuntu 和 Centos 都是 Linux 的发行版&#xff0c;发行版可以看成对 Linux 包了一层壳&#xff0c;任何 …

第八章:数据库编程

一、嵌入式、过程化SQL、存储过程和函数 1、【单选题】 下表为oracle数据库表cj.temp_20221106的数据。建立存储过程: CREATE OR REPLACE PROCEDURE proc_temp_20221106(i INT) IS CURSOR c_temp IS SELECT * FROM cj.temp_20221106; ROW_NR c_temp%ROWTYPE; i_count …

【Linux】基础IO——系统文件IOfd重定向理解

文章目录一、回顾C文件接口1.打开和关闭2.读写文件3.细节二、系统文件I/O 1.open和closeumask小细节2.read和write1.write2.read3.小总结三、理解文件四、文件描述符fd1.引入2.理解3.分配规则4.close(1)问题五、重定向1.重定向2.接口3.追加重定向4.输入重定向六、Linux一切皆文…

信息技术 定义内涵

工作流运行 定义内涵 工作流运行是工作流模板的依次执行&#xff0c;在工作流运行时&#xff0c;用户可以随时取消或查看正在 运行的任务。由于工作流运行的模板的不同&#xff0c;运行过程中可能会产生不同的新资源&#xff0c;如数据 处理类型的工作流会产生新的数据集&…

Java框架精品项目【用于个人学习】

难度系数说明&#xff1a; 难度系数用来说明项目本身进行分析设计的难度 难度系数大于1的项目可用作参赛作品、大作业、计算机毕业设计等需求 前言 大家好&#xff0c;我是二哈喇子&#xff0c;此博文整理了各种项目需求&#xff0c;用于博主自己学习&#xff0c;当做个人笔记…

黑烟车识别抓拍系统 python

黑烟车识别抓拍系统利用Python基于YOLOv5通过道路已有卡口相机对现场画面中包括黑烟车、车牌信息、车头车尾照片、林格曼黑度等级数据回传给后台。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0c;主要是因为它的简单性和代码可…

IMX6ULL学习笔记(14)——GPIO接口使用【C语言方式】

一、GPIO简介 i.MX6ULL 芯片的 GPIO 被分成 5 组,并且每组 GPIO 的数量不尽相同&#xff0c;例如 GPIO1 拥有 32 个引脚&#xff0c; GPIO2 拥有 22 个引脚&#xff0c; 其他 GPIO 分组的数量以及每个 GPIO 的功能请参考 《i.MX 6UltraLite Applications Processor Reference M…