RLC窗口的维护
RLC窗口是指的RLC协议层在处理数据时,需要维护的一个最大的处理数据范围。在此范围之外的数据,处理模块不需要理会。窗口的维护依赖于一系列变量,来确定这个窗口有多大,窗口的边界怎么确定?窗口边界值如何变化,也就是窗口的滑动。
发送变量及发送窗口
发送窗口的维护,非常依赖于接收端的ACK,通过ACK来推动发送窗口的移动。
TX_Next_Ack
该状态变量指示的是等待ACK的first AMD PDU的SN。该变量的初始值为0;当接收到SN等于TX_Next_Ack的AMD PDU的ACK指示时更新;此变量为传输窗口的下边界,也就是小于此变量的数据全部已经回复ACK。
AM_Window_Size
AM窗口的大小,取决于RLC SN号所占的bit数和对数据传输快慢及系统实现的综合考虑。当使用12位SN时AM_Window_Size = 2048,当使用18位SN时AM_Window_Size = 131072。此大小是协议确定。
TX_NEXT
该状态变量指示的是分配给下一个新产生的包含RLC SDU报文的SN。该变量的初始值为0。在此变量之前的报文都曾经发送且进行过编号,只是不一定成功送达。当包含分片场景时,当AMD PDU包含RLC SDU的最后一个segment时更新TX_Next=TX_Next+1。因为同一个报文的不同分片,其SN号是一致的。
如下场景为例:上层来包2和3被打包成报文2,而6号报文则被分片为两个分片发送。2号之前的报文都已经接收到ACK,所以发送窗口的下边界是3,窗口长度是5,所以窗口的上边界是8。大于等于8的报文在窗口之外,无法进行发送。6号及之前的报文都进行了发送,则下一个需要发送的报文TX_NEXT是7。
接收变量及接收窗口
接收窗口的维护与发送窗口不同,因为接收端要负责ACK的答复,所以引入t-reassembly定时器,用于主动触发ACK的答复。如果报文一直顺序接收,原则上可以不答复状态报告,发送端一直发,接收端一直收不会出现问题。所以状态报告的触发的是基于乱序接收或者丢包而设计的。
RX_Next
该变量指向已经正确收到的SN+1,即接收端期望收到的下一个最小的SN。此变量之前的报文,接收端都已经全部成功接收。
RX_Next_Highest
该变量指向所有已经收到的RLC SDU中的最大SN+1。
RX_Next_Status_Trigger
该状态变量保持在触发t重组的RLC SDU的SN之后的SN的值。当发现乱