>
HomeLTE 4GRLC — Radio Link ControlTimers & Windows
🔗 RLC — Radio Link ControlIntermediate

RLC Timers & Windows in LTE 4G

t-Reordering, t-PollRetransmit, t-StatusProhibit and the AM windows.

📚 3GPP-basedTS 36.322

RLC Acknowledged Mode has to deliver every byte, in order, over a link that loses, delays and reorders PDUs. It pulls that off with just three timers and a pair of sliding windows. The timers answer "how long do I wait before I act?" and the windows answer "which sequence numbers am I even allowed to think about right now?" Get those five objects straight and the whole of LTE RLC reliability falls into place. This page is grounded in TS 36.322.

Introduction

The RLC (Radio Link Control) layer sits between PDCP above and MAC below, and its Acknowledged Mode (AM) is the layer that turns the lossy, reordering air interface into a reliable, in-order pipe. It does that with an ARQ loop — sequence numbers, gap detection, NACKs and retransmissions — but ARQ only works if both ends agree on when to act and which sequence numbers are live. Those two questions are answered by three timers and two sliding windows, all defined in TS 36.322 and configured by RRC in RLC-Config.

These objects are in play on essentially every LTE call. A default-bearer DRB mapped to RLC AM uses them continuously; every signalling radio bearer (SRB) runs AM and therefore leans on the poll and STATUS machinery; and any latency-sensitive UM DRB (VoLTE, for example) runs the reordering half of the same story. When a bearer stalls, throughput collapses, or STATUS storms clog the uplink, the root cause is almost always one specific timer misconfigured or one window edge stuck.

Because each timer is (re)started on a defined event and, on expiry, drives exactly one reaction, an RLC problem almost always lives in one specific timer or window edge. That is why a structured, per-object troubleshooting habit pays off: if you know which timer fired (or failed to), or which window edge froze, you have already narrowed the root cause enormously.

Why AM needs timers and windows

💡

In plain words: think of the receiver as someone taking dictation over a bad phone line. If a word is garbled they do not interrupt instantly — they wait a beat in case it was just slow, and only then ask "sorry, can you repeat word 12?" The timers are that patience — how long to wait before asking again. And they only track a limited run of recent words at once — that bounded run is the window. Ask too fast and you interrupt constantly for words that were merely late; track too many words at once and you lose track of which "word 5" someone means.

In Acknowledged Mode (AM) the RLC entity is a reliable, in-order pipe built on top of an unreliable one. PDUs are numbered with a Sequence Number (SN), the receiver detects gaps, and it asks for retransmissions by sending a STATUS PDU carrying NACKs. But nothing on the air is instantaneous: a "missing" PDU might just be a slow HARQ retransmission arriving a few milliseconds late, or a reordered burst from a lower layer. If the receiver screamed for a retransmission the moment SNs arrived out of order, it would flood the uplink with needless NACKs and trigger retransmissions of PDUs that were never actually lost.

What

Three AM timers — t-Reordering, t-PollRetransmit, t-StatusProhibit — plus a transmit window and a receive window, each bounded by a small set of state variables.

Why

Reliability without waste. The timers stop the receiver from over-reacting to reordering, keep a stalled poll from hanging forever, and rate-limit STATUS feedback. The windows cap how far ahead of an unacknowledged PDU the entity is willing to run, so wrap-around of the SN stays unambiguous.

How

Each timer is (re)started on a defined event and, on expiry, triggers exactly one reaction — declare-loss, re-poll, or lift the STATUS ban. Windows advance only as PDUs are acknowledged (Tx) or delivered in order (Rx).

The timer durations and polling thresholds are signalled by RRC inside RLC-Config (the AM branch, am-Config), separately for each direction (ul-AM-RLC and dl-AM-RLC). The window sizes, by contrast, are not configured at all — they are fixed by the SN length the standard assigns to the mode. That single choice, tying window size to SN length, is where the number 512 comes from.

🎯

Mental model: the windows decide what is in play; the timers decide when to act on what is in play. Nothing at the receiver escalates to a NACK, and nothing at the transmitter re-polls, until a timer says the wait is over.

The 10-bit SN and the 512 Window

An AM RLC PDU carries a 10-bit SN. Ten bits count from 0 to 1023 and then wrap back to 0, so the entire sequence-number space is 1024 values arranged in a circle. A sliding window is just an arc of that circle: a contiguous run of SNs the entity currently cares about. The receiver accepts PDUs whose SN falls inside its receive window and rejects the rest; the transmitter is allowed to send new PDUs only while their SN falls inside its transmit window.

The critical rule is how big that arc is allowed to be. In AM, AM_Window_Size = 512 — exactly half of the 1024-value space. This is not a tunable knob; it is baked into TS 36.322 as a direct consequence of the 10-bit SN. The reason is disambiguation of wrap-around. When you only have a modulo-1024 counter, a raw SN value like 5 could mean "5 just after 1020 wrapped" or "5 a long time ago." By promising never to let the live window span more than half the circle, the entity can always tell which side of the current lower edge any received SN belongs to, using modular arithmetic centred on that edge. Make the window larger than half the space and two different PDUs could map to the same relative position — the receiver would no longer know whether a SN is "ahead" (a future PDU to buffer) or "behind" (an old duplicate to drop).

SN space = 2^10 = 1024  →  AM_Window_Size = 1024 / 2 = 512

So each window holds at most 512 PDUs in flight before its lower edge must advance. If that edge stalls — because a low SN is stuck being retransmitted — the transmitter eventually hits the top of its own window and can send no new data at all. That condition is a window stall, and it is precisely why the poll and reordering timers exist: to get a stalled window moving again before it becomes permanent. UM uses the same halving rule against its own shorter SN, as we will see.

🔑

Spec note: the window size is derived, not configured. For the 10-bit AM SN the value is always 512; RRC never sends it. What RRC does send is the three timer durations and the polling thresholds (pollPDU, pollByte, maxRetxThreshold) inside RLC-Config.

t-Reordering — waiting out reordering before declaring loss

t-Reordering lives at the receiving side and it exists in both AM and UM. When PDUs arrive out of order, the receiver cannot immediately tell "lost forever" from "merely late." So instead of reacting, it arms t-Reordering against the gap and waits. If the missing PDU shows up before the timer fires, the gap closes silently: no NACK, no fuss. If the timer expires and the gap is still open, the receiver concludes the PDU really is lost and finally acts.

What "acts" means depends on the mode, and this is the single most important distinction on the page:

  • In AM, expiry drives the receiver to include the missing SN as a NACK in its next STATUS PDU, asking the transmitter to retransmit it. AM never drops a hole — it repairs it.
  • In UM, there is no retransmission machinery at all, so expiry means "give up on the hole, deliver everything you already have below and up to it in order, and slide the reordering window forward past the lost PDU." UM discards rather than repairs.

The timer is armed the moment a gap first appears — when a PDU arrives with a SN higher than the one the receiver is still waiting for, so reception has run ahead of the in-sequence edge. At that instant the receiver records which SN boundary it is timing: VR(X) in AM (and VR(UX) in UM). Only one t-Reordering runs per entity at a time; if reception later advances but a gap still remains beyond the one being timed, the timer is restarted against the new boundary rather than left to time a stale gap.

t-Reordering timeline at the receiver time → gap detected SN 13 arrives, SN 12 missing start timer t-Reordering running — VR(X) = 12 timer expires or SN 12 arrives first filled before expiry → stop timer, no NACK, no discard AM: NACK SN 12 add to next STATUS PDU, ask for retx UM: discard the hole deliver SDUs below it in order, advance reordering window
Figure 1. SNs up to 11 arrived in order and SN 13 turned up, but SN 12 is missing. The receiver arms t-Reordering against VR(X) = 12 and waits. If 12 arrives first, the gap closes silently. If the timer expires, AM NACKs SN 12 in the next STATUS PDU while UM gives up on it, delivering what it has and sliding the window past the hole.

Choosing t-Reordering is a latency-versus-overhead trade. Too short and the receiver declares loss on PDUs only a HARQ round-trip late, provoking wasteful retransmissions; too long and every genuine loss stalls in-order delivery for that whole duration, throttling a TCP flow above. It is normally tuned to comfortably exceed the worst-case HARQ delay so only real losses reach expiry. The configured value is an enumeration in milliseconds — the RRC field t-Reordering spans roughly ms0ms200, and setting it to ms0 effectively disables the wait so any gap is treated as loss immediately.

✅ Debugging steps

  • Confirm the configured t-Reordering value from the RLC-Config (AM branch) in the RRCConnectionReconfiguration — read it for the direction that is stalling.
  • Correlate a stall in upper-layer delivery with a t-Reordering expiry: does the STATUS PDU that follows carry a NACK for the SN that was being timed (VR(X))?
  • Check the underlying MAC/HARQ trace — is the "missing" SN actually arriving late (reordering) rather than lost, which would mean the timer is set too short?
  • Verify only one gap is being timed at a time and that the timer restarted against the new boundary when reception advanced.

⚠ Common causes of failure

  • t-Reordering set shorter than the worst-case HARQ retransmission delay, so late-but-not-lost PDUs are NACKed — wasteful retransmissions and duplicate delivery.
  • t-Reordering set too long, so a genuine loss stalls in-order delivery for the whole duration, throttling the TCP flow above.
  • t-Reordering misconfigured to ms0, disabling the reordering wait entirely and treating every reordered burst as loss.
  • Persistent low-SN loss that keeps re-arming the timer, so the receive window never advances and the bearer appears frozen.

t-PollRetransmit — guarding a poll that got no answer

The transmitter learns what the receiver is missing only when a STATUS PDU comes back, and a STATUS is normally produced because the transmitter asked for one. It asks by setting the polling bit (P) in an AMD PDU header — essentially "please tell me what you have." The transmitter sets that bit when a polling condition is met, for example after it has sent pollPDU data PDUs or pollByte bytes since the last poll, or when it has just submitted the last PDU currently in its buffer. When it does, it records POLL_SN = the highest SN it has sent so far, and starts (or restarts) t-PollRetransmit.

The problem the timer solves is that a poll, or the STATUS it should have produced, can itself be lost. Without a safeguard the transmitter would wait forever for feedback that never comes, and since its window cannot advance without acknowledgements, it would stall and go silent. If a STATUS reaching up to POLL_SN arrives before the timer fires, the timer is stopped. If it expires with the poll still unanswered, the transmitter forces the issue: it re-polls by retransmitting the PDU with the highest SN still awaiting acknowledgement (or includes a fresh poll on another PDU), and restarts t-PollRetransmit so the loop is protected again.

💡

Think of t-PollRetransmit as a "did you hear me?" timeout. It exists only on the transmitting side and only concerns polls; it says nothing about ordinary data delivery. Its value should be at least one STATUS round-trip so the transmitter does not re-poll before a legitimate STATUS has had time to arrive.

✅ Debugging steps

  • In the Tx trace, locate the AMD PDU whose header P bit is set and confirm POLL_SN was recorded and t-PollRetransmit started at that instant.
  • Check whether a STATUS PDU reaching POLL_SN returned before expiry — if not, look for a re-poll (retransmission of the highest unacknowledged SN) at the expiry timestamp.
  • Compare the configured t-PollRetransmit against the observed STATUS round-trip; a value below one round-trip causes premature re-polls.
  • Confirm the polling thresholds pollPDU / pollByte are actually being reached, otherwise the transmitter may never poll and never learn about losses.

⚠ Common causes of failure

  • Lost poll or lost STATUS with no re-poll, so the transmit window stalls at VT(MS) and the transmitter goes silent.
  • t-PollRetransmit shorter than one STATUS round-trip, so the transmitter re-polls before a legitimate STATUS has had time to arrive — redundant retransmissions.
  • pollPDU / pollByte thresholds set so high that polling almost never happens, delaying loss recovery.
  • maxRetxThreshold reached on a stuck low SN, which the transmitter reports to RRC as an RLC failure — typically triggering re-establishment or RLF handling.

t-StatusProhibit — rate-limiting STATUS feedback

Every gap the receiver detects tempts it to fire off a STATUS PDU, and several triggers can pile up in quick succession: a poll arrives, then a t-Reordering expires, then another poll. If the receiver honoured each one immediately, a burst of losses could produce a storm of STATUS PDUs — wasting uplink resources and, worse, NACKing PDUs that are already in flight as retransmissions, which provokes yet more redundant retransmissions. t-StatusProhibit throttles this.

When the receiver sends a STATUS PDU, it starts t-StatusProhibit. While that timer runs, the receiver is prohibited from sending another STATUS PDU even if new triggers occur; those triggers are simply remembered as pending. Once the timer expires, STATUS reporting is allowed again, and any pending trigger produces a single consolidated report covering everything learned in the meantime. The value is a direct knob on feedback frequency: a short prohibit gives snappier retransmissions but more uplink overhead and more risk of duplicate NACKs; a long prohibit gives leaner feedback but slower loss recovery. A common configuration is to keep t-StatusProhibit comfortably shorter than t-PollRetransmit, so that the receiver is generally free to answer a poll by the time the transmitter would otherwise give up and re-poll.

🎯

Three timers, three sides of the same loop: t-Reordering (receiver) decides when a gap is real; t-StatusProhibit (receiver) decides how often to report gaps; t-PollRetransmit (transmitter) decides when a request for a report went unanswered. Together they turn a lossy, reordering link into an ordered, reliable one without ever flooding it with feedback.

✅ Debugging steps

  • Measure the interval between successive STATUS PDUs in the trace — it should never be shorter than the configured t-StatusProhibit.
  • If loss recovery feels sluggish, check whether STATUS reports are being held pending behind a long t-StatusProhibit.
  • If the uplink shows a STATUS storm, confirm t-StatusProhibit is non-zero and large enough to consolidate bursts of triggers.
  • Cross-check that t-StatusProhibit is shorter than the peer's t-PollRetransmit, so a poll is generally answerable before the peer re-polls.

⚠ Common causes of failure

  • t-StatusProhibit set to ms0 or very short, allowing a STATUS storm that wastes uplink and NACKs PDUs already in flight as retransmissions.
  • t-StatusProhibit set too long, so consolidated STATUS reports arrive late and loss recovery lags.
  • t-StatusProhibit longer than the peer's t-PollRetransmit, so the transmitter re-polls needlessly while STATUS is still prohibited.

State Variables and the AM Windows

AM keeps a small set of state variables per direction. On the transmit side they bound the transmit window; on the receive side they bound the receive (reordering) window. You do not need to memorise every arithmetic rule, but you should know what each variable stands for and why the window exists.

VariableSideMeaning
VT(A)TxAcknowledgement state: the lowest SN still awaiting acknowledgement. The lower edge of the transmit window.
VT(MS)TxMaximum send state: VT(A) + AM_Window_Size. The upper edge — new PDUs at or beyond it cannot be sent.
VT(S)TxSend state: the SN to assign to the next new AMD PDU.
POLL_SNTxThe SN of the highest PDU sent when the last poll was included; t-PollRetransmit is waiting for a STATUS reaching this.
VR(R)RxReceive state: the SN of the next in-sequence PDU expected — the lower edge of the receive window.
VR(MR)RxMaximum acceptable receive state: VR(R) + AM_Window_Size — the upper edge; PDUs at or beyond it are discarded.
VR(X)Rxt-Reordering state: the SN following the PDU that triggered the currently running t-Reordering (the gap being timed).
VR(MS)RxMaximum STATUS transmit state: the highest SN that can be reported ACKed in a STATUS PDU.
VR(H)RxHighest received state: one above the highest SN received so far.

The transmit window runs from VT(A) up to VT(MS) = VT(A) + 512. The transmitter may send new PDUs (advancing VT(S)) only while they fall inside this window; it cannot outrun the oldest unacknowledged PDU by more than 512. As STATUS PDUs acknowledge low SNs, VT(A) slides up and the whole window drags forward, freeing room for new data. If VT(A) stops moving because a low SN is stuck, VT(S) eventually reaches VT(MS) and the transmitter stalls — which is exactly the situation t-PollRetransmit is there to break.

The receive window runs from VR(R) up to VR(MR) = VR(R) + 512. PDUs inside it are accepted and buffered; PDUs at or beyond VR(MR), or below VR(R), are discarded. A gap is detected whenever reception runs ahead — whenever VR(H) gets in front of VR(R) because a higher SN arrived while a lower expected one is still missing — which is exactly the condition that starts t-Reordering against VR(X). As the missing PDUs fill in, VR(R) advances and the window slides forward, releasing complete, in-order data to the upper layer. Meanwhile VR(MS) tracks the highest SN the receiver is entitled to report as ACKed, so that a STATUS PDU never claims to have received something above the contiguous run it can actually vouch for.

🎯

How reordering detects a gap: the receiver compares what has arrived (VR(H)) against what it is still waiting for (VR(R)). When VR(H) is ahead of VR(R), there is a hole. It pins the hole at VR(X), runs t-Reordering, and only escalates to a NACK if the timer expires before the hole fills.

The UM Reordering Window

Unacknowledged Mode has no NACKs, no STATUS PDUs and no retransmissions — it never asks for anything back. What it keeps is the reordering half of the story: a receive window and one timer, t-Reordering, used purely to bound how long it will wait for out-of-order PDUs before it gives up on a hole and delivers what it has. That makes UM the natural home for latency-sensitive traffic like VoLTE, where a late packet is worthless and repairing a loss would only add delay.

UM in LTE uses a shorter SN than AM, and it can be configured to one of two lengths. The reordering window follows the same halving rule as AM:

ModeSN lengthSN spaceWindow size
AM10 bits1024AM_Window_Size = 512
UM (short)5 bits32UM_Window_Size = 16
UM (long)10 bits1024UM_Window_Size = 512

The 5-bit SN keeps UM headers tiny for small, frequent packets, at the cost of a shallow window that tolerates only modest reordering; the 10-bit option trades header bytes for a deeper window when more reordering is expected. The SN field length is signalled by RRC in the UM configuration (sn-FieldLength).

UM tracks its window with its own state variables: VR(UR) is the UM receive state, the lower edge (the earliest SN still considered for reordering); VR(UH) is the UM highest received state, one above the highest SN received; and VR(UX) is the UM t-Reordering state — the SN following the PDU that triggered the running timer, the analogue of AM's VR(X). The reordering window covers the UM_Window_Size values ending just below VR(UH). When t-Reordering expires in UM, the receiver advances VR(UR) up to the first SN at or beyond VR(UX) that has not yet been received, reassembles and delivers in SN order every SDU it can now complete, and — if reception is still ahead of the new edge — restarts the timer against the next hole. The hole that expired is simply abandoned; UM never looks back.

🔑

AM vs UM in one line: both run t-Reordering to wait out reordering, but AM's expiry means "repair the hole" (NACK it) while UM's expiry means "abandon the hole" (deliver below it and slide on). UM has no t-PollRetransmit and no t-StatusProhibit because it never polls and never sends STATUS.

Reading RLC AM in the logs

The RLC loop is a sequence of concrete events you can walk through in a trace: a data PDU is sent with the poll bit, a timer starts, a STATUS comes back (or does not), the window advances (or stalls). Two things anchor everything — the state variables above and the AMD/STATUS PDU fields below. When a bearer stalls, the fastest root-cause is to line up the configured timers against the observed events and find the first one that does not match.

Representative RLC AM trace — illustrative, values vary by vendor/build:

RLC-AM DL cfg: t-Reordering=ms45, t-StatusProhibit=ms20, t-PollRetransmit=ms60, pollPDU=p64, pollByte=kB25, maxRetxThreshold=t8 RLC-AM TX: SN=418 P=1 POLL_SN=418 start t-PollRetransmit VT(A)=402 VT(S)=419 VT(MS)=914 RLC-AM RX: SN=421 recv, VR(R)=419 -> gap at SN=419,420 start t-Reordering VR(X)=419 VR(H)=422 RLC-AM RX: t-Reordering EXPIRY VR(X)=419 -> NACK 419,420 queued for STATUS RLC-AM RX: STATUS sent ACK_SN=419 NACK_SN=419,420 start t-StatusProhibit RLC-AM TX: STATUS rcvd ACK_SN=419 -> retx SN=419,420 ; VT(A)=419 window advances RLC-AM TX: SN=402 retxCount=8 == maxRetxThreshold -> RLC failure indicated to RRC
FieldMeaningExampleCheck
t-ReorderingReceiver's wait for a gap to fill before declaring loss.ms45Should exceed worst-case HARQ delay; if losses are really late arrivals, it is too short.
t-PollRetransmitTransmitter's wait for a STATUS answering its poll.ms60Must be ≥ one STATUS round-trip; a re-poll before that = value too small.
t-StatusProhibitMinimum gap between STATUS PDUs.ms20Interval between STATUS lines must never be shorter; keep it < peer's t-PollRetransmit.
P (poll bit)AMD header flag requesting a STATUS.1Confirm a poll is actually being sent when pollPDU/pollByte is reached.
POLL_SNHighest SN sent when the poll went out.418t-PollRetransmit waits for a STATUS reaching this; if none, expect a re-poll.
VT(A) / VT(MS)Lower / upper edge of the transmit window.402 / 914If VT(A) stops advancing, the Tx will stall when VT(S) reaches VT(MS).
VR(R) / VR(X)Next expected SN / the gap being timed.419 / 419A frozen VR(R) means a low SN is stuck and the receive window is not sliding.
maxRetxThresholdMax retransmissions of one SN before RLC declares failure.t8Hitting it reports an RLC failure to RRC (re-establishment / RLF); indicates a persistently unrecoverable PDU.
📡

Where the config is signalled: the three timers and the polling thresholds are carried per direction in RLC-Configam-Config (the ul-AM-RLC and dl-AM-RLC branches) inside an RRCConnectionReconfiguration. The window sizes are never signalled — they are derived from the SN length by the halving rule.

Summary

The three timers and two windows form one cooperative loop: the transmit window paces sending, the receive window catches and orders arrivals, and the timers decide precisely when patience turns into action. The fastest way to root-cause an RLC stall is to identify which object is stuck — a frozen VT(A) points at unanswered polls (t-PollRetransmit); a frozen VR(R) points at an unrecovered low SN (t-Reordering and retransmission); a STATUS storm points at t-StatusProhibit. The table below is the one-glance reference for the timers; a second table gives typical configured ranges so you can sanity-check a real RLC-Config.

TimerWho runs itStarted onWhat expiry does
t-ReorderingReceiver (AM & UM)A gap appears — a PDU received above the expected SN (VR(H) ahead of VR(R))Declare the missing PDU lost: in AM add it as a NACK to the next STATUS; in UM deliver everything below the hole and advance the window past it.
t-PollRetransmitTransmitter (AM only)A PDU carrying the poll (P) bit is sentRe-poll: retransmit the highest unacknowledged SN or include a new poll, and restart the timer.
t-StatusProhibitReceiver (AM only)A STATUS PDU is sentLift the prohibition, allowing the next (consolidated) STATUS PDU to be sent.
ParameterTypical configured rangeTuned against
t-Reordering~ms35–ms100 (range ms0–ms200)Longer than the worst-case HARQ delay, so only real losses reach expiry.
t-PollRetransmit~ms40–ms100 (range ms5–ms500)At least one STATUS round-trip, so a legitimate STATUS is not pre-empted.
t-StatusProhibit~ms10–ms50 (range ms0–ms500)Short enough to answer polls promptly, long enough to avoid STATUS storms.
AM_Window_Size512 (fixed)Half the 10-bit SN space — not configurable.
🔀

LTE ↔ NR: the same three timers and the halving rule survive into NR (TS 38.322), but the numbers grow. NR AM uses a configurable SN of 12 or 18 bits (against LTE's fixed 10), so AM_Window_Size becomes 2048 or 131072 rather than 512; NR UM uses a 6- or 12-bit SN. NR also removes RLC concatenation and moves reassembly so segmentation is per-retransmission, but t-Reordering, t-PollRetransmit and t-StatusProhibit keep the exact roles described here.

Q&A Interview quickfire

Q. Why does the receiver run t-Reordering instead of NACKing a missing PDU immediately?

A. Because out-of-order arrival is usually reordering, not loss — a lower SN may still be en route via HARQ. Waiting out t-Reordering avoids NACKing PDUs that are merely late, which would waste air resources on needless retransmissions. Only if the timer expires with the gap still open is the PDU declared lost.

Q. Why is the AM window exactly 512, and who configures it?

A. Nobody configures it. The AM SN is 10 bits, giving a 1024-value modular space; the window is fixed at half of that, 512, so the receiver can always tell whether a wrapped SN is ahead or behind the lower edge. A window larger than half the space would make wrap-around ambiguous.

Q. What problem does t-PollRetransmit solve that t-Reordering does not?

A. t-Reordering protects the receiver against a lost data PDU. t-PollRetransmit protects the transmitter against a lost poll or STATUS: if the transmitter polled for feedback and none came back, its window would stall forever. On expiry it re-polls so the acknowledgement loop restarts.

Q. How does t-Reordering expiry differ between AM and UM?

A. In AM the missing SN is added as a NACK to the next STATUS PDU and eventually retransmitted — the hole is repaired. In UM there is no retransmission, so expiry means deliver every SDU below the hole in order and advance VR(UR) past the lost PDU — the hole is abandoned.

Q. What advances the lower edge of the transmit window, and what happens if it stops?

A. The lower edge VT(A) advances when incoming STATUS PDUs acknowledge low SNs, dragging the window forward and freeing room for new data. If it stalls, VT(S) eventually reaches VT(MS) = VT(A) + 512 and the transmitter can send nothing new — the stall that t-PollRetransmit exists to break.

Q. Why keep t-StatusProhibit shorter than t-PollRetransmit?

A. So the receiver is generally free to send a STATUS in answer to a poll before the transmitter's t-PollRetransmit expires and forces a re-poll. If STATUS were prohibited for longer than the transmitter waits, the transmitter would re-poll needlessly and waste the link.

Where RLC timers connect

The timers and windows only make sense alongside the retransmission machinery they drive and the mode framework they belong to. Follow these next.

ARQ & STATUS PDUs — how NACKs and retransmissions actually flowRLC Overview & Modes — TM, UM and AM comparedPDCP & reordering — reliability above RLC