5G NR - RLC协议阅读笔记 - RLC AMD PDU发送过程

“不就是...”

虽大学未专门开设计算机网络相关课程,然作为CS学生,若对TCP/IP没有基本了解也说不过去,因此当时很多同学也在课外学了一些相关的知识,有上进心的甚至还考了CCNA. 很惭愧的是,我大学期间基本就是浑浑噩噩度过的,连必修课都学得一塌糊涂,更别说网络相关的东西了,以至于工作后第一次接触到RLC不理解AM_Window_Size去请教同事时,就得到一句轻描淡写的回复“这个不就是滑动窗口吗”,我问什么是滑动窗口,他说“就是TCP的滑动窗口啊!!!”

刚参加工作时,因基础太差遇到不理解的东西请教别人时遇到过多次这样的'不就是…'的回复,此时方明白基础的重要性,后悔大学虚度了那么多时光。

其实我现在还是不太懂TCP/IP, 因为工作中接触的场合不多,只是偶尔用到时会看一些相关的知识,所以现在只是知道一些常见的概念。不过对这些概念有个印象后,再回头看RLC就好理解很多了, 因为RLC的收发机制有些方面确实类似于TCP:滑动窗口、ARQ(自动重传)等等…

我们常说’收/发’, 但先有发才有收,因此先学习RLC的发送过程。这里仍然聚焦AM,并且专注协议5.1&5.2节而不会涉及polling机制和重传过程(这些将于专门的ARQ章节讨论).

(以前这篇也是讲AMD PDU发送过程,但只有一张截图,这篇加了文字描述并细化,同时把RLC实体相关的这篇整合进来了)


RLC实体

要收发RLC数据,就得有具体执行收发的实体,这个就是协议里提到的RLC Entity.

1. RLC实体是为RB服务的,传输的是RB(经由PDCP)的数据, 从上层收到数据后构建成PDU通过逻辑信道发送给下层,所以一般是L3(RRC)建立RB的时候,请求L2建立对应的RLC实体,RLC实体建立过程主要干两件事:
1).建立一个RLC实体
2).所有状态变量初始化

同时RRC通过空口消息(RB建立/RB重配)将RLC的配置告诉UE(站在gNodeB角度)。以某条PDU Session建立时,对应的逻辑信道5/DRB-2为例:
--- clip ---

--- clip ---

再看一个状态变量初始化的例子(我们只看逻辑信道5:这里一共有4条逻辑信道,另外3条是之前SRB和别的DRB相关的):

当前两个发送变量Tx_Next_Ack和Tx_Next初始化为0.

2. RLC实体重建时,丢弃所有RLC SDU/Segments/RLC PDU, 停止并复位所有定时器,并且重置所有状态变量到初始值。

3. 同样如果RB释放了,也会丢弃所有RLC SDU/Segments/RLC PDU,然后释放对应的RLC实体。


AMD PDU发送过程

AM RLC实体发送端数据传输优先级如下:
- Control PDU高于Data PDU
- 包含了之前传输过的RLC SDU或RLC SDU segments的Data PDU高于未包含之前传输过的RLC SDU或RLC SDU segments的Data PDU.

AM RLC实体发送端根据状态变量TX_Next_Ack的值维护一个发送窗口:
- 如果TX_Next_Ack <= SN < TX_Next_Ack + AM_Window_Size,那么SN落在发送窗口内
- 否则落在发送窗口外

当AMD PDU的SN落在发送窗口之外的时候,RLC实体就不会将其发送给下层。
比如SN=1, 2的RLC SDU已经收到ACK,3, 4, 5已经发送但还未收到ACK时, 假设AM_Window_Size为4,那么窗口类似如下,这个时候可以发送SN=6的PDU, 但SN=7因为落在窗口之外,就不能往下层发送。
当再次收到SN=3的ACK之后,更新TX_Next_Ack, 窗口就可以往前滑动:

对于从上层接收到的每个RLC SDU, AM RLC实体将做如下处理:
- 给该RLC SDU分配值为Tx_Next的SN,并创建一个AMD PDU,PDU的SN跟SDU相同。
- 将Tx_Next值增1.

比如上图中收到PDCP的新SDU之后,将其SN设为6,构建一个SN为6的PDU,然后TX_Next值更新为7,也可以看文章底部图中橙色箭头指向的图片。

当需要将包含某个RLC SDU的一个segment的PDU发给下层时,RLC实体将该PDU的SN设置成对应RLC SDU的SN.

RLC实体发送端可以通过接收端反馈的STATUS PDU来获取某个RLC SDU的肯定确认(Positive Acknowledgement), 当接收到SN=x的RLC SDU的肯定确认时:
- 告知上层(比如PDCP)该RLC SDU已经成功发送了
- 将TX_Next_Ack更新为尚未收到肯定确认并且落在TX_Next_Ack<= SN <= TX_Next 范围内的最小的SN的值。
具体例子请看下图中绿色部分文字对应的箭头指向的图片。


虽然在熟悉的某些领域我永远不会对初学者说“不就是...”,但是对于我正在学习的主题,虽然不敢奢望成为专家,但希望至少能达到“某天能轻松地对自己说一句'不就是...'”的程度。

笔者在公众号“协议工程师笔记”定期发布NR/LTE/IMS...学习笔记系列, 敬请关注、订阅和分享,谢谢

                                                     图片          

                                                                  一起努力,蒸蒸日上
 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值