Buffer Status Reporting(BSR)

本文深入探讨5G中的Buffer Status Reporting (BSR)机制,解释了BSR与SR的区别,详细介绍了BSR的相关参数,如logicalChannelSR-Mask、logicalChannelSR-DelayTimer等,并阐述了BSR的触发场景、类型以及上报流程。此外,还讨论了在资源不足情况下的Padding BSR处理和BSR取消规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

   以一个实网中的异常场景开始,大概流程是有UL data要发送,UE触发BSR->no UL grant->SR->no UL grant->trigger RACH->RACH fail->RLF->RRC reestablishment:简单描述就是UE触发BSR,此时没有UL grant,之后触发SR,仍然没有 UL grant,之后触发RACH,RACH fail引起RLF,引起RRC reestablishment;这个异常场景在弱信号情况下比较常见,其中涉及的具体内容其实是比较多的,这篇就看下BSR的内容,BSR 的内容主要在38.321 5.4.5章节。

     开始之前简单看下BSR和SR的区别:UE通过SR向gNB请求上行资源时,只指明了UE有上行数据需要发送,并没有指明需要发送的上行数据数量。而BSR的作用是将UE当前buffer中待发送的数据情况通知给gNB,gNB可根据BSR上报的UE buffer的数据量,给UE分配上行资源;换个角度看,UE发BSR时,是通过BSR MAC CE,既然能发BSR,肯定是有UL grant,足够发BSR,如果没有UL grant,UE要通过SR向gNB要UL grant,进而UE就要发送SR。接下来看看协议中是如何描述BSR的。

### SPS NB 缓冲区状态报告概述 在网络通信系统中,SPS( Semi-Persistent Scheduling )是一种用于减少信令开销的技术,尤其适用于周期性数据传输场景。NB(Narrow Band)通常指窄带网络环境下的应用。缓冲区状态报告(Buffer Status Report, BSR)则是终端设备向基站汇报其上行缓存中有待发送的数据量的一种机制。 在 LTE 或其他无线通信标准下,BSR 的作用在于帮助调度器决定分配给用户的资源块数量以及优先级[^1]。对于 SPS 场景中的 BSR 报告而言,它具有特定的行为模式: - **触发条件**:当 UE (User Equipment)有新数据到达并进入逻辑信道组对应的缓冲区时会触发 BSR 发送请求;如果当前存在激活的 SPS 配置,则可能依据配置参数调整实际行为。 - **报告内容**:包括各逻辑信道组内的等待传输字节数目信息。这些数值被编码成一定格式嵌入 MAC 控制单元上传至 eNodeB/eNB (Evolved Node Base Station)[^2]。 下面展示了一个简化版实现该功能伪代码例子: ```python def generate_sps_nb_bsr(buffer_states): """ Generate an SPS NarrowBand Buffer Status Report based on given buffer states. Args: buffer_states (dict): A dictionary mapping logical channel group IDs to their respective byte counts. Returns: str: Encoded BSR content ready for transmission. """ bsr_content = [] total_bytes = sum(buffer_states.values()) if not any(buffer_states.values()): return 'No data available' # Encode each LCG's state according to specification rules... for lcg_id, bytes_in_buffer in sorted(buffer_states.items(), key=lambda item:item[0]): encoded_value = encode_lcg_state(lcg_id, bytes_in_buffer) bsr_content.append(encoded_value) final_report = ''.join(bsr_content).strip() return f'Total Bytes={total_bytes}, Details=[{final_report}]' def encode_lcg_state(logical_channel_group_id, num_of_bytes): """Simple placeholder function simulating encoding process.""" threshold_values = [(b'0', 37), ('1', 98)] # Example thresholds per spec section X.Y.Z... category_found = False result_str = '' for codepoint, upper_limit in reversed(threshold_values): if num_of_bytes <= int(upper_limit): result_str += chr(codepoint) + format(num_of_bytes,'X').zfill(2)[-2:] category_found = True break assert category_found,"Invalid input value encountered during processing!" return result_str # Usage example with hypothetical inputs ... buffer_info = {0:56 ,1:24} print(generate_sps_nb_bsr(buffer_info)) ``` 上述脚本定义了如何基于输入缓冲状态构建一份完整的 BSR 数据包字符串形式表示方法,并通过辅助函数完成具体细节处理工作流程演示[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

modem协议笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值