The example below is from a real 5G network. The sites were selected from network KPIs showing high PDCCH blocking, then verified in the field. I used XCAL/XCAP to analyze Layer 3 messages, and backed it up with a speed test (user experience) plus UE throughput, PRB utilization, PDCCH blocking, RRC user count, and RRC/RACH success rate KPIs from the network side.
Testing ran across the full day; the 10 x failure appeared in a handful of cases rather than continuously, and the example below is one of them.
What the field log showed: repeated FAILURE_MSG4_CT_TIMER_EXPIRED. Msg1 sent → Msg2 received inside the response window → Msg3 sent → the chain stops. Retries continue until the preamble attempts are exhausted, the RACH procedure is aborted, and the call ends in setup failure.
A contention resolution timeout has several possible causes. Working through them:
Weak coverage or poor radio quality — signal level and SINR were good throughout the failing attempts.
Random decode failure (Msg3 or the Msg4 grant) — possible on any single attempt, but less likely for ten in a row.
Hardware or software fault — the behavior appeared across multiple sites, and only in a handful of cases across a full day of testing rather than on every attempt. A persistent fault would be expected to fail more consistently, and would not be expected to follow the busy hours.
Load-driven scheduling limitation — the one that fits: it explains the intermittency, the timing, and the fact that the sites were selected from PDCCH blocking counters.
What that picture looks like from the network side:
The gNB has Msg4 (RRC Connection Setup) ready, but needs a PDCCH allocation to tell the UE where and when to receive it.
When control channel capacity is under pressure, scheduling opportunities become scarce — Msg4 waits in the buffer while the UE’s contention resolution timer runs down.
This is consistent with the PDCCH blocking already visible in the counters for the same cells and hours.
And this is why the user experiences low throughput, not only failed calls. A full abort (10 x failures) is the visible extreme — more often the UE does get through, just later. The same control channel shortage that delays access also limits how frequently a connected user can be scheduled. Fewer grants over time means lower throughput, even with a good signal and available PRBs.
LinkedIn: ![]()


