5G RLC UM(Unacknowledged Mode,非确认模式)接收端的主要职责是**按序重组并向上层递交RLC SDU**,同时通过窗口机制和定时器来管理乱序、分段和丢失的PDU。其过程严格遵循3GPP TS 38.322规范。
### 📦 核心状态变量与重组窗口
接收端维护一个**重组窗口(Reassembly Window)**,用于判断接收到的PDU是否在有效处理范围内。窗口边界由以下两个关键状态变量决定:
* **`RX_Next_Highest`**:接收到的最高SN的下一个值,作为窗口的**上边缘**。
* **`RX_Next_Reassembly`**:最早仍在等待重组的SN,作为窗口的**下边缘**。
窗口大小由常量 **`UM_Window_Size`** 定义(通常为SN空间的一半)。一个SN在窗口内的条件是:`(RX_Next_Highest - UM_Window_Size) <= SN < RX_Next_Highest`。
### 📥 接收与初步处理(TS 38.322 §5.2.2.2.2)
当接收端从底层收到一个UMD PDU时,会根据其SN和当前窗口状态执行以下操作之一:
1. **无SN的PDU**:如果PDU头不包含SN(如某些完整的SDU),则直接**移除RLC头并递交上层**。
2. **过时的PDU**:如果SN满足 `(RX_Next_Highest - UM_Window_Size) <= SN < RX_Next_Reassembly`,说明该PDU的SN早于最早待重组的SN,属于重复或过时数据,直接**丢弃**。
3. **窗口内的PDU**:其他情况则**放入接收缓冲区**,等待后续处理。
### 🔗 重组与状态更新(TS 38.322 §5.2.2.2.3)
PDU放入缓冲区后,会触发更复杂的重组与状态机更新逻辑:
* **重组完成**:当某个SN(设为`x`)的所有字节分段都收齐后,会**重组出完整的RLC SDU**,移除RLC头后递交上层。
* **推进下边缘**:如果`x`恰好等于`RX_Next_Reassembly`,则需要**更新`RX_Next_Reassembly`**,将其推进到大于当前值且尚未重组递交的第一个SN。
* **窗口滑动**:如果`x`落在了重组窗口之外(即`x >= RX_Next_Highest`),则**将`RX_Next_Highest`更新为`x + 1`**,窗口整体前移。同时,**丢弃所有已落在新窗口之外的旧PDU**。如果`RX_Next_Reassembly`也因此落在窗外,则将其重置为新窗口下边缘之后第一个未递交的SN。
* **定时器管理**:根据重组进度,可能会**停止或重启`t-Reassembly`定时器**。例如,当`RX_Next_Highest`远大于`RX_Next_Reassembly`(存在空洞),或当前SN的分段有缺失时,会启动定时器。
### ⏱️ 定时器`t-Reassembly`超时处理(TS 38.322 §5.2.2.2.4)
`t-Reassembly`定时器用于**检测丢失的PDU,防止接收端无限等待**。当其超时时,执行以下操作:
* **更新`RX_Next_Reassembly`**:将其推进到`RX_Timer_Trigger`(触发定时器的SN)之后第一个未重组的SN。
* **丢弃过期分段**:**丢弃所有SN小于新`RX_Next_Reassembly`的分段**。
* **判断是否重启**:如果更新后,`RX_Next_Highest`仍大于`RX_Next_Reassembly + 1`(仍有空洞),则**再次启动`t-Reassembly`**,并将`RX_Timer_Trigger`设为当前`RX_Next_Highest`。
### 💎 总结
UM接收端的核心是一个**基于窗口的滑动重组机制**:通过`RX_Next_Highest`和`RX_Next_Reassembly`界定有效数据范围,丢弃过时PDU,重组窗口内完整的数据单元。`t-Reassembly`定时器则作为一种“超时放弃”机制,确保接收端不会因为个别PDU的永久丢失而阻塞后续数据的递交,在**低时延和可靠性之间取得平衡**。