C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索
查看: 5750|回复: 6

[技术讨论] 5G RLC协议UM模式的收发处理流程 [复制链接]

军衔等级:

亚星游戏官网-yaxin222  新兵

注册:2016-7-8
发表于 2020-10-15 14:42:31 |显示全部楼层
1) UM模式不提供重传和重分段功能,其提供的是一种不可靠的服务。UM模式常用于实时性要求较高的业务,如VoIP等,这种业务允许有一定的错包或丢包,但对延迟较为敏感,同时要求按序传输,并丢弃重复报文。点到多点的服务,如MBMS,由于没有可用的反馈路径而不能使用AM模式,也使用UM模式。
2) UM模式通过逻辑信道DL/UL DTCH、MCCH或MTCH来接收/发送RLC PDU。
3) 与TM模式类似,一个UM实体只能接收或发送数据,而不能同时收发数据。UM实体只提供单向的数据传输服务。

UM实体在发送端需要做2件事:
1)将来自上层(PDCP层)的RLC SDU构造成RLC PDU,然后缓存在传输buffer(transmission buffer)中;
2)在MAC层通知其发送RLC PDU时,根据MAC指示的传输块大小,决定是否需要把buffer中的某个SDU进行分段,然后把1个或多个RLC PDU或RLC PDU分段发给MAC层。
UM发送端功能比较简单,它没有重传,只有分段处理。收到上层下发的SDU后,加一个RLC头部生成一个UM PDU,在收到下层的可发送指示时把一个或多个UM PDU提交给下层,当最后的PDU不足以放入到剩余的buffer时就会对该PDU分段。
UM RLC发送端实体只维护一个变量TX_Next,该变量保存了下一个新生成的UM PDU将被赋予的SN值。该变量初始化时为0,并在提交一个SN = TX_Next的UM PDU的最后一个分段给下层时其值加1。简单地说,SN是RLC对SDU的编号,只有一个SDU的最后分段发送后TX_Next才会加1。
UM接收端因为要分段重组,所以有一个接收窗口,接收端所有的处理都围绕窗口进行。一个典型的接收窗口如下图:


接收窗口定义: (RX_Next_Highest – UM_Window_Size) <= SN <RX_Next_Highest,可以得出UM接收窗口用上边沿RX_Next_Highest确定下边沿。
如图所示,接收窗口被RX_Next_Reassembly分为两部分,小于RX_Next_Reassembly的PDU会被认为已经处理过,就算收到SN < RX_Next_Reassembly的PDU,RLC接收实体也不会再处理,只是简单的丢弃。RLC接收实体用t-Reassembly定时器来控制RX_Next_Reassembly后移到的目的PDU SN。
重组定时器t-Reassembly决定了在多长时间内等待一个还未收到的PDU,每个UM实体只有一个t-Reassembly。使用该定时器的目的是为了检测MAC层是否丢失了某个RLC PDU分段,如果在t-Reassembly指定的时间内没有收到该PDU,也就是说t-Reassembly超时了,则接收端认为该PDU已经丢失了,后移RX_Next_Reassembly到t-Reassembly对应的RX_Timer_Trigger之后的第一个未完成组包的SN。

接收端窗口变量:
1)RX_Next_Reassembly: UE接收状态变量(UM receive state variable)。该变量保存了等待重组的最早一个UMD PDU的SN值。该变量初始化时为0。接收端认为SN小于RX_Next_Reassembly的UMD PDU都已被成功接收(即使没有成功接收,也认为小于RX_Next_Reassembly的UMD PDU已经丢失而不再去接收了),RX_Next_Reassembly对应重排序窗口内还未接收到的拥有最小SN的UMD PDU。
2)RX_Next_Highest:UM最高接收状态变量(UM highest receiving state variable)。该变量保存的SN值等于所有已经接收到的UMD PDU中,拥有最高SN的那个UMD PDU的SN值,再加1。该变量初始化时为0。该变量对应重排序窗口的上边界(不包含RX_Next_Highest)。简单地说,“RX_Next_Highest– 1”等于已接收的拥有最高SN的UMD PDU的SN值。
3)UM_Window_Size: 常量,由RRC设置,对应重组窗口的大小。当使用6比特SN时,UM_Window_Size = 32;当使用12比特SN时,UM_Window_Size = 2048
4)RX_Timer_Trigger: 触发t-Reassembly的PDU对应的SN的下一个序号。当启动t-Reassembly时,说明有小于RX_Timer_Trigger)的UMD PDU还未接收到,此时需要等待这些UMD PDU以便进行重排序。
当UM实体从MAC层收到一个SN = x的UMD PDU时,如果 (RX_Next_Highest – UM_Window_Size) <= SN < RX_Next_Highest,则进入重组窗口。否则落入重组窗口之外。
其中,如果(RX_Next_Highest – UM_Window_Size) ≤ x < RX_Next_Reassembly时,则该PDU会被丢弃。否则会进入接收缓存。

UM接收实体功能-放入接收缓存的处理:
步骤1:
如果本次的SN = x的RLC PDU是接收窗口中序号为SN的最后一包,则:
(10) 重组RLC SDU,递交给上层
(20) 如果RX_Next_Reassembly=x,则把RX_Next_Reassembly更新成“SN > 当前RX_Next_Reassembly”且还未完全接收的第一个UMD PDU的SN值。可以认为“SN < 更新后的RX_Next_Reassembly”之前的UMD PDU都已成功接收。
步骤2:
如果x位于重排序窗口之外,此时应该是后出窗(协议会假定x一定是超出了重排序窗口的后边界,即x ≥ RX_Next_Highest)。因为SN是循环的,就算前出窗也会被当作后出窗处理:
(10) 将RX_Next_Highest设置成x + 1,即,后移接收窗口上边沿。
(20) 由于RX_Next_Highest的更新,重组窗口也将相应地向前移动,如果此时有一些UMD PDU移到了重组窗口之外(前出窗),则丢弃前出窗的UMD PDU。
(30)如果此时也导致了RX_Next_Reassembly前出窗,则将RX_Next_Reassembly设置成重组窗口的下边沿(RX_Next_Highest – UM_Window_Size),即设置成重排序窗口的下边界。这种场景发生在接收端一直没有收到SN = RX_Next_Reassembly的UMD PDU 后续分段,但不断地收到新的位于重排序窗口上边界之外的UMD PDU,从而RX_Next_Highest不断前移,直至RX_Next_Reassembly落到重排序窗口之外。
步骤3:
如果t-Reassembly没有启动,
(10) 如果RX_Next_Highest > RX_Next_Reassembly + 1,或者
(20) RX_Next_Highest = RX_Next_Reassembly + 1,并且在SN = RX_Next_Reassembly的UMD PDU序列中至少有一个中间分段没有收到,即,SO中间存在空洞,
(30) 启动t-Reassembly,设置RX_Timer_Trigger = RX_Next_Highest(说明在RX_Timer_Trigger之前存在未接收的分段)
说明: 这里的处理说明在大于RX_Next_Reassembly的接收窗口中,只要在最后一个分段之前存在还未收到的分段,就要启动定时器t-Reassembly
步骤4:
如果t-Reassembly已经启动,
(10) 如果RX_Timer_Trigger <= RX_Next_Reassembly,或者RX_Timer_Trigger出窗并且RX_Timer_Trigger!= RX_Next_Highest,或者
(20) RX_Next_Highest = RX_Next_Reassembly + 1,并且SN = RX_Next_Reassembly的UMD PDU序列中不存在SO空洞;
(30) 停止t-Reassembly定时器,RX_Timer_Trigger=0
说明: 原RX_Timer_Trigger之前不存在空洞或者RX_Timer_Trigger已经前出窗,则停止定时器。
步骤5:t-Reassembly超时处理
当t-Reassembly超时,接收端会按如下步骤进行操作:
(10) 设置RX_Next_Reassembly为第一个SN >= RX_Timer_Trigger的未完全接收的UDM PDU的SN
(20) 丢弃SN < RX_Next_Reassembly的UDM 分段
(30) 如果RX_Next_Highest > RX_Next_Reassembly + 1,或者
(40) RX_Next_Highest = RX_Next_Reassembly + 1,并且在SN = RX_Next_Reassembly的UMD PDU序列中至少有一个中间分段没有收到,即,SO中间存在空洞,
(50) 启动t-Reassembly,设置RX_Timer_Trigger = RX_Next_Highest(说明在RX_Timer_Trigger之前存在未接收的分段)
说明: 如果t-Reassembly超时,则只要RX_Next_Highest之前存在空洞就要重启定时器。


举报本楼

本帖有 6 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-11-24 23:37 , Processed in 0.553893 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图