>
Home5G NRRRC — Radio Resource ControlRRC States
🗂️ RRC — Radio Resource ControlBeginner

RRC States (Idle / Inactive / Connected) in 5G NR

The three RRC states, what context each holds, and the transitions between them — with a state diagram.

📚 3GPP-basedTS 38.331TS 38.300

LTE had two RRC states, and for the traffic LTE was designed around -- web pages, downloads, voice -- two were enough. What changed was not the radio; it was the traffic. A modern handset with thirty background applications generates a near-continuous stream of small, frequent, independent transactions: a keep-alive, a presence update, a push acknowledgement, a few hundred bytes of telemetry. Each one is far too small to justify a connection and far too frequent to leave the connection up between them.

Contents
  1. 01Why NR Has Three States and Not Two
  2. 02The State Machine at a Glance
  3. 03RRC_IDLE, in Detail
  4. 04RRC_INACTIVE, in Detail
  5. 05RRC_CONNECTED, in Detail
  6. 06The Three States Side by Side, and What Each Costs
  7. 07RRC_IDLE and RRC_CONNECTED: Setup, Release and the RLF Path
  8. 08Suspend: RRC_CONNECTED to RRC_INACTIVE
  9. 09Resume: RRC_INACTIVE to RRC_CONNECTED
  10. 10Context Fetch over Xn When the UE Resumes Elsewhere
  11. 11The Four Answers to a Resume Request
  12. 12The RAN Notification Area Update: INACTIVE to INACTIVE
  13. 13Cell Reselection in RRC_IDLE and RRC_INACTIVE
  14. 14Rel-17 Small Data Transmission: Sending Without Leaving INACTIVE
  15. 15Timers, Counters and Parameter Reference
  16. 16Failure Modes and What Each One Means
  17. 17Configuration Reference (ASN.1)
  18. 18Illustrative Message Traces
  19. 19Release Deltas: Rel-15 to Rel-18
  20. 20Reading RRC States in Logs: A Checklist
  21. 21Glossary
  22. 22References

1. Why NR Has Three States and Not Two

LTE had two RRC states, and for the traffic LTE was designed around -- web pages, downloads, voice -- two were enough. What changed was not the radio; it was the traffic. A modern handset with thirty background applications generates a near-continuous stream of small, frequent, independent transactions: a keep-alive, a presence update, a push acknowledgement, a few hundred bytes of telemetry. Each one is far too small to justify a connection and far too frequent to leave the connection up between them.

Both two-state options are bad. Keeping the UE in RRC_CONNECTED between bursts burns UE battery on PDCCH monitoring and burns gNB resources on a context that is doing nothing. Releasing to RRC_IDLE means the next burst pays for a full RRC establishment, a NAS Service Request through the AMF, AS security re-activation and a bearer reconfiguration -- roughly twenty messages and a couple of hundred milliseconds to move four hundred bytes.

RRC_INACTIVE splits the difference by separating two things LTE conflated: the radio connection and the access-stratum context. In RRC_INACTIVE the radio connection is gone -- no C-RNTI, no dedicated channels, no PDCCH monitoring except at paging occasions, so the power profile is essentially that of RRC_IDLE. But the AS context, including the security keys and the whole bearer configuration, is retained at both the UE and the last serving gNB. Resuming therefore does not re-negotiate anything; it re-attaches to something that never went away.

💡
Key Point

The decisive property is what the core network sees. From the AMF's point of view a UE in RRC_INACTIVE is still CM-CONNECTED: the N2 association is up, the UE context is intact, and the N3 tunnel still terminates at the anchor gNB. Suspending a UE generates zero NGAP messages, and so does resuming it at the same gNB. That is where the saving actually comes from -- not from the four fewer messages on the air, but from not having to talk to the core at all.

The cost is the complexity this document exists to describe. A context held in two places must be kept consistent, findable and securely verifiable across cell changes the network does not control. Everything from §8 onwards is machinery for that one problem.

2. The State Machine at a Glance

The three RRC states and their transitionsThe Three RRC States and Every Transition Between ThemTS 38.331 cl. 4.2.1 and 5.3. There is no direct transition between RRC_IDLE and RRC_INACTIVE in either directionRRC_IDLEno AS context anywhereno AS identityUE-controlled reselectionRRC_CONNECTEDcontext at UE + gNB + AMFC-RNTInetwork-controlled handoverRRC_INACTIVEcontext at UE + anchor gNBI-RNTIUE-controlled reselectionRNA updateresume, then re-suspendRRCSetupRequest / RRCSetup /RRCSetupComplete (T300)RRCRelease without suspendConfig,or an unrecovered RLFRRCRelease withsuspendConfigRRCResumeRequest[1]/ RRCResume (T319)T319 expiry, RRCSetupfallback, RRCRelease,or CN pagingRRCRelease with afresh suspendConfigT380 expiry, orreselection outof the RNAA UE enters RRC_IDLE at power-on and after any unrecovered failure. It can only reach RRC_INACTIVE from RRC_CONNECTED,by network decision -- the UE cannot ask to be suspended. The gold loop is the RNA update: a full resume and re-suspendthat leaves the UE in the state it started in.
Figure 1. Every transition defined in TS 38.331 clause 4.2.1. Note the two things this figure says by omission: there is no direct path between RRC_IDLE and RRC_INACTIVE in either direction, and no arrow into RRC_INACTIVE originates at the UE.
TransitionWho decidesTriggerMessagesTimerSee
IDLE -> CONNECTEDUE initiates, network grantsUpper layers request a connection; response to paging; periodic registration updateRRCSetupRequest / RRCSetup / RRCSetupComplete
T300
§7.1
CONNECTED -> IDLENetworkInactivity, load, or an explicit NAS-driven releaseRRCRelease without suspendConfig--§7.2
CONNECTED -> IDLEUE, forcedUnrecovered radio link failure: T310 then T311 both expirenone -- the UE leaves unilaterallyT310, T311§7.3
CONNECTED -> INACTIVENetwork onlyInactivity, with an expectation of more traffic soonRRCRelease with suspendConfigstarts T380§8
INACTIVE -> CONNECTEDUE initiates, network grantsUplink data or signalling; response to RAN pagingRRCResumeRequest[1] / RRCResume / RRCResumeComplete
T319
§9
INACTIVE -> IDLEEitherT319 expiry, an RRCRelease answering a resume request, a fallback RRCSetup, or a CN paging message addressed to the 5G-S-TMSIvaries -- see §11
T319
§11
INACTIVE -> INACTIVEUE initiates, network re-suspendsT380 expiry, or reselection to a cell outside the RNARRCResumeRequest[1] with resumeCause = rna-Update, answered by RRCRelease with a fresh suspendConfigT380, T319§12

Table 1. The seven transitions. Only two of them are UE-initiated state entries, and neither of those is an entry into RRC_INACTIVE -- suspension is always a network decision.

📘
Spec Detail

A UE cannot ask to be suspended, and it cannot refuse. There is no suspendPreference in UEAssistanceInformation; the closest thing is releasePreference, which asks to be released and can carry a preferred RRC state as a hint (Rel-16). Whether the gNB honours it is entirely a gNB scheduler decision. If you are looking for why a particular UE never enters RRC_INACTIVE, look at the gNB's inactivity policy and at the UE's capability signalling, not at the UE's behaviour.

3. RRC_IDLE, in Detail

RRC_IDLE is the state with the least state. No AS context exists anywhere in the RAN -- if the UE were to vanish, no gNB would notice, because no gNB is holding anything for it. What survives is entirely at NAS level: assuming the UE completed registration, it is 5GMM-REGISTERED and holds a 5G-GUTI, and the AMF holds a registration context for it. There is no UE-associated N2 logical connection, so the AMF is CM-IDLE for that UE.

3.1 What the UE does

  • Monitors paging. The UE computes its paging frame and paging occasion from its 5G-S-TMSI and the PCCH-Config in SIB1, and monitors PDCCH for the P-RNTI there. The cycle is defaultPagingCycle (rf32, rf64, rf128 or rf256 -- 320 ms to 2.56 s) or the UE-specific DRX cycle if NAS configured one. See the companion 19 Paging.
  • Reads system information. MIB, SIB1 and whichever other SIBs the UE needs, including on-demand SI requests via RRCSystemInfoRequest on SRB0 or a MSG1-based request. See the companion 17 System Information.
  • Measures and reselects. Entirely autonomously, per TS 38.304 (§13). The network has no visibility of which cell an idle UE is camped on, which is exactly why paging must be broadcast across a whole tracking area.
  • Performs access barring checks. Unified Access Control gates every access attempt by access category and access identity, using the uac-BarringInfo in SIB1, with T390 per category on failure.
  • Optionally logs measurements. A MeasIdleConfig received while connected (Rel-16) makes the UE measure and log in RRC_IDLE under T331, and report the results on its next transition to RRC_CONNECTED. See the companion 20 Measurements and Events.

3.2 What the UE cannot do

It cannot send or receive user data, cannot be reached by any dedicated signalling, and cannot be handed over -- there is nothing to hand over. To do anything it must run the establishment procedure of §7.1, and that is unavoidably expensive because it rebuilds everything from nothing: RRC connection, AS security, bearers.

⚠️
Common Pitfall

RRC_IDLE and 5GMM-DEREGISTERED are not the same thing and are not even correlated. A UE can be RRC_IDLE and fully registered (the steady state of a phone in a pocket), or RRC_CONNECTED and deregistered (the whole of initial registration, before Registration Accept). If you are reading a trace and reasoning about "is the UE attached", you are asking a NAS question and the RRC state will not answer it. The companion 13 RRC Overview §13 has the full state cross-product.

4. RRC_INACTIVE, in Detail

This is the state worth understanding properly, because it is the one where a mismatch between the UE's belief and the network's belief is possible -- in RRC_IDLE there is nothing to mismatch, and in RRC_CONNECTED there is an active link to detect it. In RRC_INACTIVE two parties hold a copy of the same context and neither is talking to the other.

4.1 What suspendConfig actually configures

Everything about the state is set up by one IE inside the RRCRelease that puts the UE there. It is small, and every field in it matters:

FieldType / rangeNeedTypicalWhat it does and what happens if it is wrong
fullI-RNTI
BIT STRING (SIZE(40))
M (mandatory)vendor-allocatedThe 40-bit inactive identity. Implementations conventionally encode the anchor gNB's identity in part of it, so any gNB in the RNA can work out whom to ask for the context (§10). Used when the target cell broadcasts useFullResumeID.
shortI-RNTI
BIT STRING (SIZE(24))
M (mandatory)vendor-allocatedThe 24-bit form, used when useFullResumeID is absent so that RRCResumeRequest fits in 48 bits (§9.2). Sixteen bits fewer means sixteen bits less anchor identification, which is why short I-RNTIs are only safe in small RNAs.
ran-PagingCycle
ENUMERATED {rf32, rf64, rf128, rf256}
M (mandatory)
rf128
The RAN paging DRX cycle, 320 ms to 2.56 s. Longer saves UE power and delays every downlink-initiated resume by up to one cycle.
ran-NotificationAreaInfo
CHOICE of cellList or ran-AreaConfigListNeed Ma cell list of 8-32 cellsThe area inside which the UE may reselect without telling anyone (§4.4). Absent means keep the previously configured area, which is what a re-suspend during an RNA update relies on.
t380
ENUMERATED {min5, min10, min20, min30, min60, min120, min360, min720}
Need R
min60
The periodic RNA update timer. Need R means absent releases it -- so a UE suspended without t380 never sends a periodic update at all, and the anchor has no protocol-level way to learn the UE is still there.
nextHopChainingCount
INTEGER (0..7)
M (mandatory)incremented per suspendSelects horizontal or vertical key derivation on resume (§9.3). A UE that stored a different NCC from the one the gNB used derives a different K_gNB, and the resume fails with an integrity error the UE cannot report.
sl-UEIdentityRemote
RNTI-Value
Need M (Rel-17)absentSidelink remote-UE identity for a relay scenario.
ran-ExtendedPagingCycle
extended cycle valuesNeed R (Rel-17)absentLonger RAN paging cycles for power-sensitive devices, beyond rf256.

Table 2. SuspendConfig, TS 38.331 clause 6.3.2. Four of the six Rel-15 fields are mandatory, which tells you that the state has no usable default configuration -- it is entirely explicit.

4.2 Two I-RNTIs, and why there are two

The UE is always given both, and which one it uses is decided by the cell it resumes in, not by the anchor. If that cell's SIB1 contains useFullResumeID, the UE sends RRCResumeRequest1 carrying the 40-bit fullI-RNTI; if not, it sends RRCResumeRequest carrying the 24-bit shortI-RNTI TS 38.331 cl. 5.3.13.3. The reason is purely an encoding-length one: RRCResumeRequest must fit the 48-bit CCCH codepoint that MSG3 can carry cheaply, and 40 bits of identity plus 16 bits of MAC-I plus a cause does not fit. RRCResumeRequest1 uses the 64-bit CCCH1 codepoint instead (§9.2).

⚠️
Common Pitfall

This is a cell-by-cell decision, so a network can be inconsistent about it. If cell A broadcasts useFullResumeID and neighbouring cell B does not, a UE suspended in A and resuming in B sends a 24-bit identity into a network that allocated identities assuming 40 bits were available for anchor addressing. The symptom is a resume success rate that is fine everywhere except at specific cell borders, with fallback RRCSetup in place of RRCResume. Audit useFullResumeID for consistency across every cell in every RNA.

4.3 The stored UE Inactive AS Context: kept and discarded

On suspension the UE stores what TS 38.331 clause 5.3.8.3 calls the UE Inactive AS Context. What is in it, and what is deliberately left out, decides what a resume has to redo:

ItemKept or discardedWhy, and what it is used for on resume
K_gNB and K_RRCintKeptK_RRCint computes the resumeMAC-I that proves the UE is who it says (§9.3); K_gNB (or the NH) is the input to the new key derivation. Ciphering keys are not kept -- they are re-derived.
ROHC and EHC stateKeptHeader compression context survives, so the first packet after resume does not need a full-header refresh.
QoS flow to DRB mapping rulesKeptSDAP does not need to be reconfigured, so no sdap-Config has to be re-sent.
The source cell's C-RNTIKeptUsed only as an input to the resumeMAC-I computation. It is not reused as an identity -- the UE gets a fresh C-RNTI on resume.
Source PCI and source cellIdentityKeptAlso inputs to resumeMAC-I. This is how the network knows which context the UE thinks it has.
All other RRC configuration -- bearers, PDCP, RLC, measurement configuration, otherConfigKeptThis is the bulk of it, and the reason RRCResume can be a few dozen octets rather than a few hundred.
Parameters inside reconfigurationWithSync of the PCellDiscardedThey describe a synchronisation to a cell the UE has since left. Keeping them would be actively wrong.
Parameters inside reconfigurationWithSync of the NR PSCell, and mrdc-SecondaryCellGroupConfigDiscardedDual connectivity does not survive suspension. An NR-DC UE resumes with the master cell group only and must be re-given an SCG.
SCell configurationDiscarded in effectSCells are released at suspension; carrier aggregation has to be rebuilt after resume, which is a real latency cost for a high-throughput UE.

Table 3. The UE Inactive AS Context, TS 38.331 cl. 5.3.8.3. The pattern is consistent: anything describing a relationship to a specific cell is discarded; anything describing the bearer and security state is kept.

⚠️
Common Pitfall

SCells and the SCG being discarded is the hidden cost of RRC_INACTIVE for high-throughput UEs. A UE with four aggregated carriers resumes on the PCell alone and then needs at least one more RRCReconfiguration -- and for NR-DC, SN addition signalling over Xn -- before it reaches full throughput. For bursty small-packet traffic that does not matter. For a UE that suspends between large transfers, it can cost more than it saves.

4.4 The RAN Notification Area

The RNA is the area inside which the anchor gNB believes it can page the UE. It exists because RAN paging is not broadcast network-wide: the anchor sends an XnAP RAN PAGING message to the gNBs covering the RNA and those gNBs page over the air. Outside the RNA, nobody pages, so a UE that reselects out of its RNA must tell the network -- that is the RNA update of §12.

There are two ways to express an RNA, and they scale differently:

FormASN.1GranularityBoundsWhen to use it
Cell listcellList -> PLMN-RAN-AreaCellListIndividual cells, by CellIdentityUp to 32 cells per PLMN entrySmall, well-understood areas. Precise: the anchor pages exactly those cells and no others.
RAN area listran-AreaConfigList -> PLMN-RAN-AreaConfigListTracking areas, optionally narrowed by RAN-AreaCodeUp to 16 RAN areas per PLMN entry; RAN-AreaCode is INTEGER (0..255)Large areas. Coarser, so RAN paging covers more cells than strictly necessary, but the UE needs no per-cell list.

Table 4. RAN-NotificationAreaInfo, TS 38.331 clause 6.3.2. A RAN area is signalled in SIB1 per cell (ran-AreaCode inside the tracking area information), so a UE can evaluate membership without a cell list.

⚠️
Common Pitfall

The RNA must be a subset of the AMF's registration area, and every cell in it must have Xn connectivity to the anchor. Both constraints are easy to violate in a live network -- a new cell added to a RAN area without Xn to the anchor is inside the RNA as far as the UE is concerned and unreachable as far as the anchor is concerned. The symptom is a UE that never answers RAN paging in one specific area, recovers via CN paging after the anchor gives up, and shows up as a spike in RRCSetupRequest with establishmentCause = mt-Access instead of RRCResumeRequest.

4.5 RAN paging and CN paging

A UE in RRC_INACTIVE monitors for both, at possibly different cycles, and the two mean completely different things:

RAN pagingCN paging
Initiated byThe anchor gNB, when downlink data or signalling arrives for a UE it holds a context forThe AMF, when it has downlink NAS or data for a UE it believes is CM-IDLE
Identity in the paging recordfullI-RNTI -- the AS identityng-5G-S-TMSI -- the NAS identity
Distributed overXnAP RAN PAGING to the gNBs covering the RNANGAP PAGING to every gNB in the registration area
Cycleran-PagingCycle from suspendConfigdefaultPagingCycle from SIB1, or the UE-specific cycle from NAS
UE responseResume: RRCResumeRequest[1] with resumeCause = mt-Access. The UE stays in the resume path.Enter idle. The UE moves to RRC_IDLE, informs NAS, and establishes with RRCSetupRequest, establishmentCause = mt-Access
What it tells you diagnosticallyNormal operationThe AMF thinks the UE is CM-IDLE, i.e. the RAN context is gone. Either the anchor released it, or the UE and network disagree about the state.

Table 5. RAN versus CN paging for a UE in RRC_INACTIVE. The full paging-occasion arithmetic is in the companion 19 Paging.

🔍
What You See In Logs

Seeing CN paging answered by a UE that your logs say is in RRC_INACTIVE is always informative and never good. It means the AMF moved that UE to CM-IDLE, which only happens after the gNB sent an NGAP UE CONTEXT RELEASE REQUEST -- so the anchor had already given up on the context while the UE still believed it had one. Look for what made the anchor release: its own inactivity timer, a failed RAN paging attempt, or a cell or node restart.

For DRX purposes the UE uses the shortest applicable cycle, so configuring a long ran-PagingCycle does not lengthen the UE's monitoring interval if the cell's defaultPagingCycle is shorter TS 38.304 cl. 7.1. That asymmetry catches people trying to tune inactive-mode power consumption: the RAN cycle can only ever be the binding constraint if it is the shortest of the three.

5. RRC_CONNECTED, in Detail

RRC_CONNECTED is the state where the network is in charge. The UE has a C-RNTI, dedicated logical channels, an active security context and a scheduler that knows about it. Crucially, mobility inverts: the UE no longer decides which cell to use. It measures what it is told to measure, reports when a configured event fires, and moves when it receives an RRCReconfiguration containing reconfigurationWithSync.

  • Identity. A 16-bit C-RNTI, scoped to one cell and reassigned at every handover. Possibly also a CS-RNTI for configured grants, an MCS-C-RNTI, and group RNTIs (SFI-RNTI, INT-RNTI, TPC-*-RNTI).
  • Channels. PDCCH in its configured search spaces for its own C-RNTI; DCCH on SRB1/SRB2 (and SRB3/SRB4 if configured); DTCH per DRB; SSB and CSI-RS for measurement and beam management; the RLM reference signals.
  • Still monitors paging -- but for Short Message only, carrying systemInfoModification and etwsAndCmasIndication. A connected UE is not paged for itself.
  • DRX. Connected-mode DRX if configured, which is a completely different mechanism from paging DRX: drx-onDurationTimer, drx-InactivityTimer, short and long cycles. See the companion 11 DRX.
  • Radio Link Monitoring is active. N310 out-of-sync indications start T310; if N311 in-sync indications do not arrive before it expires, the UE declares Radio Link Failure (§7.3). See the companion 16 RLM and RLF.
💡
Key Point

The mobility inversion is the single most consequential difference between RRC_CONNECTED and the other two states, and it changes what you can conclude from a log. In RRC_IDLE and RRC_INACTIVE a cell change leaves no trace at the network at all unless it crosses an RNA or tracking area boundary. In RRC_CONNECTED every cell change is a signalled, logged, network-decided event. A UE that appears to teleport between cells was almost certainly not connected while it moved.

6. The Three States Side by Side, and What Each Costs

RRC_IDLERRC_INACTIVERRC_CONNECTED
AS context at the UENoneUE Inactive AS Context (§4.3)Full active configuration
AS context in the RANNone anywhereHeld by the anchor gNB -- the last serving gNB, which may not be the cell the UE is camped onHeld by the serving gNB
State at the AMF5GMM-REGISTERED, CM-IDLE. No UE-associated N2 connection.5GMM-CONNECTED with RRC inactive indication. N2 up, N3 terminating at the anchor.5GMM-CONNECTED. N2 and N3 both up and in use.
AS identityNonefullI-RNTI (40 bits) and shortI-RNTI (24 bits)C-RNTI (16 bits, per cell)
NAS identity5G-GUTI5G-GUTI5G-GUTI
Channels monitoredPDCCH / P-RNTI at CN paging occasions; BCCHPDCCH / P-RNTI at both RAN and CN paging occasions; BCCH; CG-SDT resources if configured (Rel-17)PDCCH / C-RNTI in configured search spaces; DCCH; DTCH; SSB, CSI-RS, RLM RS; P-RNTI for Short Messages only
Who owns mobilityUE -- cell reselection (§13)UE -- cell reselection, plus RNA tracking (§12)Network -- handover, on the basis of UE measurement reports
DRXPaging DRX: defaultPagingCycle or the UE-specific cycleShortest of ran-PagingCycle, the UE-specific cycle and defaultPagingCycleConnected-mode DRX (drx-Config) if configured; otherwise continuous PDCCH monitoring
SecurityNo AS security contextKeys stored on both sides; re-derived on resume (§9.3)Active integrity and ciphering on SRBs and DRBs
Can send user data?NoOnly via Rel-17 SDT (§14)Yes
Can be handed over?NoNoYes
RLM active?NoNoYes

Table 6. The three states across every dimension that matters when reading a log. The RRC_INACTIVE column is almost always the middle value -- except for the anchor-gNB row, which has no analogue in either neighbour and is where the complexity lives.

6.1 What each state costs to leave

🧮
Worked Calculation

Signalling to get one 400-byte uplink packet onto the air, counting messages on the Uu interface and on NGAP:

from RRC_IDLE (registered, no PDU session active)

Uu: MSG1, MSG2, MSG3, MSG4, RRCSetupComplete,

SecurityModeCommand/Complete,

RRCReconfiguration/Complete = 9 messages

NGAP: INITIAL UE MESSAGE, DL/UL NAS TRANSPORT x2,

INITIAL CONTEXT SETUP REQ/RESP,

PDU SESSION RESOURCE SETUP REQ/RESP = 9+ messages

approximate elapsed time ................... ~150-300 ms

from RRC_INACTIVE, resuming at the anchor gNB

Uu: MSG1, MSG2, MSG3 (RRCResumeRequest1),

MSG4 (CR CE + RRCResume), RRCResumeComplete = 5 messages

NGAP: none = 0 messages

approximate elapsed time ................... ~20-50 ms

from RRC_INACTIVE, resuming at a different gNB

Uu: 5 messages, as above

Xn: RETRIEVE UE CONTEXT REQ/RESP, UE CONTEXT RELEASE = 3

NGAP: PATH SWITCH REQUEST / ACKNOWLEDGE = 2

approximate elapsed time ................... ~35-70 ms

from RRC_INACTIVE with Rel-17 RA-SDT (§14)

Uu: MSG1, MSG2, MSG3 carrying the data itself = 3 messages

no state change at all

already RRC_CONNECTED

Uu: scheduling request, grant, data = 3 messages

approximate elapsed time ................... ~4-10 ms

Timings are order-of-magnitude and dominated by core-network round trips in the first case and by nothing at all in the last.

The five-to-nine ratio on the air understates the benefit. The real saving is the nine-plus NGAP messages and the AMF and SMF processing behind them, which is where most of the two hundred milliseconds and essentially all of the core-network load sit. Multiply by the number of handsets in a busy cell and by the transaction rate of a background notification service, and RRC_INACTIVE is the difference between a core network that copes and one that does not.

7. RRC_IDLE and RRC_CONNECTED: Setup, Release and the RLF Path

7.1 IDLE to CONNECTED: RRCSetup

Triggered by upper layers -- a NAS Service Request, a registration procedure, an answer to CN paging -- the UE runs random access and sends RRCSetupRequest in MSG3 on SRB0. T300 starts when the request is submitted to lower layers and stops on RRCSetup or RRCReject.

StepMessageSRB / channelCarriesTimer
1
RRCSetupRequest
SRB0 / UL-CCCH, 48 bitsue-Identity (5G-S-TMSI-Part1 or a 39-bit random value), establishmentCausestarts T300
2
RRCSetup
SRB0 / DL-CCCHradioBearerConfig establishing SRB1, masterCellGroupstops T300
2'
RRCReject
SRB0 / DL-CCCHwaitTime 1-16 sstops T300, starts T302
3
RRCSetupComplete
SRB1 / UL-DCCHselectedPLMN-Identity, dedicatedNAS-Message (the piggybacked NAS PDU), registeredAMF, s-NSSAI-List--

Table 7. RRC connection establishment. Everything after step 3 -- security, capability, bearers -- is separate procedures; see the companion 15 RRC Procedures and 01 Registration Process.

T300 expiry is not a radio link failure. The UE resets MAC, releases the connection, stores a connEstFailReport and returns to RRC_IDLE to reselect. That report is retrievable later via UEInformationRequest and is the intended way to diagnose repeated establishment failures -- see the companion 16 RLM and RLF.

7.2 CONNECTED to IDLE: RRCRelease

A network decision, delivered on SRB1. Without suspendConfig the UE releases everything and enters RRC_IDLE. Three optional IEs make an ordinary release into a mobility instruction, and all three are worth recognising in a log:

IENeedEffect on the UEWhy a network uses it
redirectedCarrierInfo
Need NThe UE performs cell selection on the indicated NR or E-UTRA carrier first, instead of following its normal reselection prioritiesSteer a UE off a loaded carrier, or off NR entirely to LTE, at the moment of release
cellReselectionPriorities
Need RDedicated per-frequency cellReselectionPriority values that override the broadcast ones, valid until t320 expiresPer-UE traffic steering in idle mode -- e.g. keep IoT devices off the capacity layer
deprioritisationReq
Need NThe UE deprioritises either the current frequency or all of NR (deprioritisationType = frequency or nr) for deprioritisationTimer (min5 to min30)Push a UE away after a failed or unwanted access attempt; the nr form is a blunt instrument that moves the UE to LTE for minutes
suspendConfig
Need RThe UE enters RRC_INACTIVE instead of RRC_IDLE (§8)The whole subject of this document

Table 8. RRCRelease-IEs, TS 38.331 clause 6.2.2. The message is only "just a release" when none of these are present.

⚠️
Common Pitfall

deprioritisationReq with deprioritisationType = nr removes the UE from NR for up to thirty minutes. It is intended for cases where a specific UE cannot be served, but it is occasionally used as a load valve, and the effect on a KPI dashboard is dramatic and delayed: NR traffic drops for half an hour after the event that caused it, long after anyone would think to correlate. If NR attach rates dip on a schedule you cannot explain, count deprioritisationReq in your release messages.

7.3 CONNECTED to IDLE the hard way: radio link failure

The UE can also leave RRC_CONNECTED unilaterally. N310 consecutive out-of-sync indications from Radio Link Monitoring start T310; if N311 in-sync indications do not arrive before it expires, the UE declares Radio Link Failure. It then starts T311 and attempts re-establishment: select a suitable cell, send RRCReestablishmentRequest with a shortMAC-I, and hope the target can retrieve the context. If T311 expires with no suitable cell, or if T301 expires after the request, the UE goes to RRC_IDLE with release cause RRC connection failure and stores an RLF report.

💡
Key Point

RLF and re-establishment are the subject of the companion 16 RLM and RLF, which covers T310, T311, T301, shortMAC-I and the RLF report in full. The state-machine point for this document is narrower and worth stating on its own: radio link failure never leads to the inactive state. A UE that loses its link either recovers into RRC_CONNECTED through re-establishment or lands in RRC_IDLE. There is no failure path into RRC_INACTIVE, because suspension requires a working link to deliver the suspendConfig over.

8. Suspend: RRC_CONNECTED to RRC_INACTIVE

The trigger is always a gNB decision, almost always an inactivity timer, and the message is an ordinary RRCRelease on SRB1 with suspendConfig present. What makes it interesting is the sequence of internal actions on the UE side, because they determine what a resume has to do.

Suspend: RRC_CONNECTED to RRC_INACTIVESuspend: RRC_CONNECTED to RRC_INACTIVEUEgNB (anchor)AMFRRC_CONNECTED. C-RNTI 0x4601, PCI 41, SRB1+SRB2and one DRB active, security ongNB inactivity timer expires: no UL or DL data for 10 s.Traffic pattern is bursty -> suspend rather than release.RRCReleaseSRB1 / DCCH, with suspendConfig present1suspendConfig: fullI-RNTI 0x0A1234C05F | shortI-RNTI 0x1234C0 |ran-PagingCycle rf128 | t380 min60 | nextHopChainingCount 3 |ran-NotificationAreaInfo = cellList of 12 cellsstore the UE Inactive AS Context: K_gNB and K_RRCint,ROHC/EHC state, QoS-flow-to-DRB map, C-RNTI 0x4601,source PCI 41 and source cellIdentitysuspend SRB1, SRB2 and every DRB (SRB0 stays up),reset MAC, re-establish the RLC entity for SRB1enter RRC_INACTIVE, start T380, run cell selectionNo NGAP signalling of any kind. The AMF still believes the UE is5GMM-CONNECTED, the N2 association is intact and the N3 tunnel stillterminates at this gNB. That is the entire point of the state.from here the UE behaves like an idle UE that happens to own a contextmonitored: RAN paging (I-RNTI) and CN pagingP-RNTI on PDCCH at the paging occasionsT380min60Suspension is a gNB decision the UE cannot request and cannot refuse. The RRCRelease that suspends and the RRCReleasethat releases are the same message; the presence of suspendConfig is the only difference, which is why it is worth checkingfor explicitly in a log rather than assuming a release means IDLE.
Figure 2. Suspension. Every action after the RRCRelease is internal to the UE; nothing is acknowledged, and the gNB has no protocol confirmation that the UE actually entered RRC_INACTIVE rather than losing the message and going nowhere.

1. Store the UE Inactive AS Context -- keys, ROHC/EHC state, QoS flow mapping, source C-RNTI, source PCI and cellIdentity, and the rest of the configuration (§4.3).

2. Reset MAC and release the default MAC cell group configuration.

3. Re-establish the RLC entity for SRB1 and apply the default SRB1 configuration. This is the step people miss: SRB1 is left in a state from which it can be brought back cheaply, precisely so the resume response can be delivered on it.

4. Suspend SRB1, SRB2 and every DRB. SRB0 stays -- it is the only bearer that survives, and it is what carries the resume request.

5. Indicate PDCP suspend to lower layers for all DRBs.

6. Start the periodic update timer. T380 runs if t380 was configured -- and does not exist at all if it was not.

7. Enter the state and select a cell. The UE is now in RRC_INACTIVE and performs cell selection per TS 38.304.

⚠️
Common Pitfall

An RRCRelease carrying suspendConfig is not acknowledged. If it is lost on the air -- which RLC-AM makes unlikely but not impossible, particularly if the UE's link is already failing, which is often why it went inactive -- the gNB believes the UE is in RRC_INACTIVE and holds a context, while the UE is still in RRC_CONNECTED with a connection that will shortly fail RLM. The UE then declares RLF and attempts re-establishment, not resume. Seeing RRCReestablishmentRequest shortly after you sent a suspending RRCRelease is exactly this, and it is not a UE bug.

One consequence of the suspension being silent at NGAP level is that the anchor gNB is now holding resources -- the context, the N3 tunnel endpoint, the I-RNTI allocation -- with no protocol timer forcing it to let go. T380 is a UE timer that makes the UE check in; if t380 was not configured, nothing at all obliges the UE to contact the anchor again. Every implementation therefore runs its own context ageing timer, and how long it is set to is one of the most important undocumented parameters in the system (§16).

9. Resume: RRC_INACTIVE to RRC_CONNECTED

Triggered by uplink data, uplink signalling, or RAN paging. The UE runs random access and sends its resume request in MSG3 on SRB0, starting T319.

Successful Resume at the Anchor gNBSuccessful Resume at the Anchor gNBRandom accessResumeDoneUEgNB (anchor)AMFRRC_INACTIVE for 4 min. Uplink data arriveson DRB 1.MSG1 RA preamble4-step CBRA; see the companion 03 Random Access1MSG2 RARTA command + UL grant + TC-RNTI 0x51A32MSG3 RRCResumeRequest1SRB0 / CCCH1 (UL LCID 0), 8 octets, no security3resumeIdentity = fullI-RNTI 0x0A1234C05F | resumeMAC-I 0x9C4E |resumeCause mo-Data | spare 0I-RNTI resolves to a context held locally.Recompute resumeMAC-I over (source PCI 41, target cellIdentity,source C-RNTI 0x4601) with the stored K_RRCint -> matches.Derive K_gNB* from the stored NH using NCC 3, thenK_RRCint, K_RRCenc, K_UPint, K_UPenc from it.MSG4 UE Contention Resolution CE + RRCResumeSRB1 / DCCH -- integrity protected, ciphered4restore the stored context, derive the same keys from NCC 3,resume SRB1, SRB2 and DRB 1, stop T319, discard thestored UE Inactive AS ContextRRCResumeCompleteSRB1 / DCCH, selectedPLMN-Identity, optional NAS PDU5Still no NGAP signalling: the N3 tunnel already terminates here, so there isnothing to move. Compare the Xn case in the next figure.user data flows on DRB 1T319ms1000Five messages, of which four are the random access procedure. Compare the fourteen-plus messages of a setup-from-IDLEfollowed by a NAS Service Request and a full security and bearer reconfiguration -- that saving is what RRC_INACTIVE buys.
Figure 3. A successful resume at the anchor gNB. Note where the security boundary falls: MSG3 is unprotected on SRB0, and MSG4 is already integrity protected and ciphered on SRB1 with keys neither side has ever used before.

9.1 What the UE does before and after sending the request

The subtlety in the resume procedure is that the UE restores SRB1 before it has any response TS 38.331 cl. 5.3.13.3. It re-establishes PDCP and RLC for SRB1, applies the default SRB1 configuration, derives the new keys, and configures lower layers to apply integrity protection and ciphering with them. Only then does it wait. This is why RRCResume and RRCRelease -- both DL-DCCH messages -- can be the response, while RRCSetup and RRCReject -- both DL-CCCH -- are also possible answers on SRB0.

ResponseChannel / SRBMeaningWhere the UE ends up
RRCResume
DL-DCCH / SRB1, protectedContext found and verified; resume the connection
RRC_CONNECTED
RRCRelease
DL-DCCH / SRB1, protectedContext found and verified, but the network does not want the connection. With suspendConfig: re-suspended. Without: released.RRC_INACTIVE or RRC_IDLE
RRCSetup
DL-CCCH / SRB0, unprotectedContext not found, or resumeMAC-I verification failed. Fall back to establishment.RRC_CONNECTED, but from scratch
RRCReject
DL-CCCH / SRB0, unprotectedCongestion. waitTime starts T302.RRC_INACTIVE -- the UE stays where it was
nothing--T319 expiresRRC_IDLE, context discarded

Table 9. The five possible outcomes of a resume request. Two arrive protected on SRB1 and two arrive in the clear on SRB0, and that difference is itself diagnostic: an SRB0 answer means the network could not or would not use the stored context.

9.2 RRCResumeRequest1 bit by bit

Both resume requests are fixed-length by design, for the same reason RRCSetupRequest is: they have to fit a CCCH codepoint that MSG3 can carry without a length field. RRCResumeRequest is 48 bits and uses UL-SCH LCID 52; RRCResumeRequest1 is 64 bits and uses LCID 0 (the CCCH1 channel).

RRCResumeRequest1: All 64 Bits, Field by FieldRRCResumeRequest1: All 64 Bits, Field by FieldUL-CCCH1-Message -> c1 -> rrcResumeRequest1, TS 38.331 cl. 6.2.2bit76543210Oct 100 0fullI-RNTI bits 39..35Oct 2fullI-RNTI bits 34..27Oct 3fullI-RNTI bits 26..19Oct 4fullI-RNTI bits 18..11Oct 5fullI-RNTI bits 10..3Oct 639..0resumeMAC-I bits 15..11Oct 7resumeMAC-I bits 10..3Oct 815..0resumeCausespGold = UL-CCCH1-MessageType CHOICE index (1 bit). Purple = c1 CHOICE index (2 bits, 4 alternatives). Then 40 bits ofI-RNTI, 16 bits of truncated MAC-I, 4 bits of resumeCause (16 enumerated values) and one spare bit: 3 + 40 + 16 + 4 + 1= 64 exactly. RRCResumeRequest is the same shape with a 24-bit shortI-RNTI, totalling 48 bits.
Figure 4. RRCResumeRequest1, all 64 bits. The 40-bit I-RNTI and the 16-bit MAC-I both straddle octet boundaries, which is where hand-decoding a resume request goes wrong. The companion 13 RRC Overview §7 works the same exercise on RRCSetupRequest.
🧮
Worked Calculation

Bit budget for the two forms:

RRCResumeRequest1 (UL-CCCH1-Message)

UL-CCCH1-MessageType CHOICE, 2 alternatives ..... 1 bit

c1 CHOICE, 4 alternatives ....................... 2 bits

resumeIdentity I-RNTI-Value, SIZE(40) .......... 40 bits

resumeMAC-I BIT STRING SIZE(16) ................ 16 bits

resumeCause ENUMERATED, 16 members ............. 4 bits

spare BIT STRING SIZE(1) ....................... 1 bit

----------------------------------------------------------

total ....................................... 64 bits = 8 octets

RRCResumeRequest (UL-CCCH-Message)

same, but resumeIdentity is ShortI-RNTI-Value, SIZE(24)

1 + 2 + 24 + 16 + 4 + 1 ..................... 48 bits = 6 octets

Sixteen bits of I-RNTI is the entire difference between the two messages, and it is what makes anchor addressing in a large RNA possible.

9.3 Key handling on resume, and why it looks backwards

This is the part that reliably confuses people, and the confusion is reasonable: the resume request is integrity-protected under the old key while the new key is derived in parallel, and the response arrives protected under the new key. Both things happen before either side has confirmed anything to the other.

1. The UE computes the resume MAC-I with the old integrity key. resumeMAC-I is the 16 least significant bits of a MAC-I computed over VarResumeMAC-Input -- the source PCI, the target cell's CellIdentity and the source C-RNTI -- using the integrity algorithm and key that were in force in the source cell TS 38.331 cl. 5.3.13.3. This proves two things at once: that the UE holds the old key, and that it is resuming into this cell and not replaying a request captured elsewhere.

2. In parallel, the UE derives the new key. It computes a fresh K_gNB from the nextHopChainingCount it stored from suspendConfig, together with the target cell's physical cell identity and downlink ARFCN, exactly as in a handover TS 33.501 cl. 6.11. If the stored NCC differs from the one associated with the current key, the derivation is vertical and uses a fresh Next Hop from the AMF's chain; if it is the same, the derivation is horizontal and chains from the current K_gNB.

3. From that it derives the four AS keys. K_RRCint, K_RRCenc, K_UPint and K_UPenc all come from the new K_gNB, and SRB1 is configured to use them.

4. The network does the same two things independently. It verifies resumeMAC-I with the stored old key -- which requires the anchor, since only the anchor has it -- and derives the same new K_gNB from the NH and NCC.

5. The response arrives protected under the new keys. RRCResume is integrity protected and ciphered with them, and the UE's ability to decode and check it is the implicit confirmation that both sides derived the same key. There is no explicit key confirmation message.

💡
Key Point

Because the resumeMAC-I check needs the old key and the old key lives at the anchor, a UE resuming at a different gNB cannot be verified locally. The new gNB must forward the resumeMAC-I to the anchor and let the anchor check it -- which is exactly what the RETRIEVE UE CONTEXT REQUEST of §10 is for. The security design and the Xn procedure are the same mechanism seen from two directions.

⚠️
Common Pitfall

There is no way for the UE to report a key mismatch. If the two sides derive different keys -- most often because the UE never received the suspendConfig that carried the current NCC, or because a re-suspension updated the NCC and the update was lost -- the UE cannot integrity-check RRCResume, discards it at PDCP, and simply waits. T319 expires and the UE goes to RRC_IDLE. From the gNB side the resume looks like it succeeded up to the point where RRCResumeComplete never arrives. This asymmetry -- gNB thinks success, UE thinks silence -- is the signature of an NCC problem. See the companion 27 AS Security Mode for the key hierarchy.

10. Context Fetch over Xn When the UE Resumes Elsewhere

A UE in RRC_INACTIVE reselects freely inside its RNA, so by the time it resumes it is often camped on a cell belonging to a different gNB than the one holding its context. The whole reason fullI-RNTI is 40 bits is to make this case solvable: implementations encode the anchor's identity into part of the I-RNTI, so the receiving gNB can work out whom to ask.

Resume at a Different gNB: Context Fetch over XnResume at a Different gNB: Context Fetch over XnFetchResumePath switchUEnew gNBanchor gNBAMFThe UE reselected two cells away whileinactive, but stayed inside its RNARRCResumeRequest1SRB0 / CCCH1 -- fullI-RNTI 0x0A1234C05F1the gNB-ID field inside the fullI-RNTI does not match mine-> the context belongs to another gNB; find it over XnXnAP RETRIEVE UE CONTEXT REQUESTI-RNTI | resumeMAC-I | target NR CGI2verify resumeMAC-I over (source PCI, target cellIdentity,source C-RNTI) -- only the anchor holds the key to do thisXnAP RETRIEVE UE CONTEXT RESPONSEcontext + security (NH, NCC 3) + bearers3RRCResumeSRB1 / DCCH, keyed from the anchor's NH4RRCResumeComplete5NGAP PATH SWITCH REQUESTmove the N3 tunnel to the new gNB6NGAP PATH SWITCH REQUEST ACKNOWLEDGE7XnAP UE CONTEXT RELEASEthe anchor may discard the context8If the anchor rejects the retrieval -- context already discarded, resumeMAC-Imismatch, or no Xn at all -- the new gNB has no context to resume and mustanswer the UE with RRCSetup instead. See the next figure.T319This is Xn handover's machinery reused: context retrieval, key derivation from a supplied NH, path switch, context release.The difference is that the source node was not serving the UE when it started -- see the companion 23 Xn Handover.
Figure 5. Resume with a context fetch. Steps 2, 3 and 8 are XnAP and steps 6 and 7 are NGAP -- none of them visible on the air, and all of them additive to the resume latency the UE experiences.
#MessageInterfaceKey contentIf it fails
1
RRCResumeRequest1
UufullI-RNTI, resumeMAC-I, resumeCauseT319 eventually expires -> RRC_IDLE
2
RETRIEVE UE CONTEXT REQUEST
Xn-C (XnAP)I-RNTI, resumeMAC-I, the new cell's NR CGINo Xn to the anchor: the new gNB has no way to get the context and must answer RRCSetup
3
RETRIEVE UE CONTEXT RESPONSE
Xn-C (XnAP)The full UE context: security information including the Next Hop and NCC, bearer configuration, PDU session resources, UE capabilitiesRETRIEVE UE CONTEXT FAILURE if the anchor has aged the context out or the resumeMAC-I does not verify -> RRCSetup fallback
4-5RRCResume / RRCResumeCompleteUuThe resumed configuration, keyed from the supplied NHAs §9.3 -- a key mismatch produces silence
6-7PATH SWITCH REQUEST / ACKNOWLEDGENG-C (NGAP)Move the N3 tunnel endpoint from the anchor to the new gNBThe UE is connected but downlink user data still arrives at the anchor; some implementations forward it over Xn-U in the interim
8
UE CONTEXT RELEASE
Xn-C (XnAP)Tells the anchor it may discard the stored context and free the I-RNTIThe anchor keeps a stale context until its own ageing timer fires -- wasteful but not incorrect

Table 10. Resume with context fetch, TS 38.423 and TS 38.413. The pattern is Xn handover's, reused: retrieve, re-key, switch the path, release. See the companion 23 Xn Handover.

🔍
What You See In Logs

Data forwarding is the part that differs between implementations. Between the retrieval and the path switch there is a window in which downlink data for the UE is still arriving at the anchor. The Xn procedures allow the anchor to forward it to the new gNB over Xn-U, and whether a given deployment does so is a configuration choice with an observable consequence: without forwarding, the first packets after a resume-elsewhere are lost and recovered by TCP, which shows up as a latency spike rather than as an error anywhere.

⚠️
Common Pitfall

The absence of an Xn link is the single most common cause of resume failures in a real network, and it is geographically specific. Every cell in an RNA needs Xn to the anchor, and RNAs are configured per-UE while Xn is configured per-node-pair -- so the two drift apart as the network grows. The signature is unmistakable once you look for it: resume attempts in a particular set of cells that are always answered with RRCSetup rather than RRCResume, at a rate that does not vary with load or radio conditions.

11. The Four Answers to a Resume Request

Four Answers to a Resume Request, and Where Each Leaves the UEFour Answers to a Resume Request, and Where Each Leaves the UEUEgNBRRCResumeRequest1SRB0 / CCCH1, fullI-RNTI, resumeMAC-I, resumeCause mo-DataA -- context not found, or resumeMAC-I verification failsRRCSetupSRB0 / CCCH -- fall back to establishmentdiscard the stored UE Inactive AS Context, treat this as afresh setup from RRC_IDLE, tell NAS -> Service Request neededRRCSetupCompletewith a NAS Service Request; security must be re-activatedB -- the network does not want the connectionRRCReleaseno suspendConfig -> RRC_IDLE. Common answer to an RNA update.C -- congestionRRCRejectwaitTime 8 s -> T302 starts. The UE STAYS in RRC_INACTIVE.D -- nothing arrives(no response)T319 runs outT319 expiry -> RRC_IDLE, release cause RRC resume failure.The stored context is discarded; the next attempt is a setup.T319Only outcome C leaves the UE where it started. A and D both cost the stored context and force a full establishment;B is a deliberate release. Distinguishing them in a log is the whole diagnostic value of watching the resume path.
Figure 6. The three non-success answers plus the no-answer case, drawn against a single T319. Only the RRCReject path leaves the UE in RRC_INACTIVE with its context intact.
OutcomeWhat the network didWhat the UE doesState afterWhat it costs
RRCSetup fallbackCould not find or could not verify the contextDiscard the stored UE Inactive AS Context, treat the RRCSetup as an establishment from RRC_IDLE, tell NAS that a Service Request is neededRRC_CONNECTED, from scratchFull security re-activation and bearer setup, plus NAS signalling to the AMF. The most expensive outcome.
RRCRelease without suspendConfigFound and verified the context, but does not want a connectionRelease everything and enter RRC_IDLE
RRC_IDLE
The stored context, deliberately. Common as the answer to an RNA update when the network is shedding contexts.
RRCRelease with suspendConfigFound and verified, and wants the UE to stay suspendedStore the new suspendConfig, restart T380, remain in RRC_INACTIVE
RRC_INACTIVE
Nothing but the signalling. This is the normal RNA update answer (§12).
RRCReject
Congestion or admission controlStop T319, reset MAC, start T302 with the waitTime, and if the resume was an RNA update set pendingRNA-UpdateRRC_INACTIVE -- unchangedNothing. The context survives and the UE retries after T302.
No responsePossibly nothing -- the request may never have arrivedT319 expires: go to RRC_IDLE with release cause RRC resume failure, discard the stored context
RRC_IDLE
The stored context, and the whole resume attempt.

Table 11. Every answer to a resume request and its cost. Note that RRCReject is the only one that preserves the stored context, which makes it the cheapest rejection available to a loaded gNB.

📘
Spec Detail

RRCReject in response to a resume leaves the UE in RRC_INACTIVE TS 38.331 cl. 5.3.13.6 -- it does not send the UE to RRC_IDLE. This is easy to get wrong because RRCReject in response to an RRCSetupRequest does leave the UE in RRC_IDLE, but only because it was already there. For a loaded cell this makes RRCReject the right rejection to use against resumes: the context is preserved, so the retry after T302 is still cheap. Rejecting with RRCRelease instead throws away the context and guarantees the retry is expensive.

There is one further INACTIVE-to-IDLE path that does not involve a resume request at all: a Paging message whose paging record contains the UE's ng-5G-S-TMSI rather than its fullI-RNTI. That is CN paging, and it means the AMF believes the UE is CM-IDLE. The UE enters RRC_IDLE, informs upper layers, and establishes with RRCSetupRequest (§4.5).

12. The RAN Notification Area Update: INACTIVE to INACTIVE

An RNA update is a full resume followed by an immediate re-suspend, and it exists so the anchor knows the UE is still reachable and still inside a set of cells the anchor can page. There are two triggers:

  • Periodic, on T380 expiry. The UE has not moved out of the RNA but the anchor has not heard from it for t380, so it checks in.
  • Mobility, on reselection to a cell outside the configured RNA. The UE evaluates membership from the cell's cellIdentity (for a cellList RNA) or from the tracking area code and ran-AreaCode broadcast in SIB1 (for a ran-AreaConfigList RNA).

Both use resumeCause = rna-Update, and both are answered by an RRCRelease carrying a fresh suspendConfig -- which restarts T380 and, in the mobility case, carries a new RNA appropriate to where the UE now is. If the anchor changed (the update was received by a different gNB, which fetched the context over Xn), the new gNB becomes the anchor and issues new I-RNTIs.

T380 and the RAN Notification Area Update CycleT380 and the RAN Notification Area Update Cyclet380 = min60, ran-NotificationAreaInfo = a 12-cell cellListRRC stateRRC_INACTIVERRC_INACTIVERRC_INACTIVET380(min60)running -> expires at 60 minrestarted -> cut short at 95 minrestarted; would expire at 157 minRNAmembershipserving cell is inside the configured RNAreselected outside -> new RNA configuredRNA updateperiodicmobility020406080100120140Time in RRC_INACTIVE (minutes)Khaki dashed at 60 min: T380 expiry, resumeCause = rna-Update. Orange dashed at 95 min: the UE left the RNA, same cause.Each RNA update is a full resume followed by an immediate re-suspend, and it restarts T380 -- so a mobile UE that keepscrossing RNA boundaries never reaches the periodic timer, while a stationary UE fires it exactly on schedule.
Figure 7. T380 and the two update triggers over two hours. The important behaviour is that a mobility update restarts T380, so the two triggers are not independent -- movement suppresses the periodic timer entirely.
🧮
Worked Calculation

Signalling cost of periodic RNA updates for one stationary UE left in RRC_INACTIVE for 12 hours:

with t380 = min60

updates = 12 x 60 / 60 = 12

each update = MSG1, MSG2, MSG3, MSG4, RRCRelease = 5 Uu messages

total = 12 x 5 = 60 Uu messages purely to say "still here"

with t380 = min720 (the maximum)

updates = 12 x 60 / 720 = 1

total = 5 Uu messages

with t380 absent (Need R -- the timer is released)

updates = 0. The anchor never hears from the UE again unless

the UE has data or leaves the RNA.

Multiply the first case by ten thousand suspended UEs in a busy cluster and periodic RNA updates become a measurable fraction of RACH load -- roughly 600 000 messages over the same 12 hours, all of them carrying no information beyond the UE's continued existence.

The trade is reachability confidence against signalling. A short t380 means the anchor learns quickly when a UE has gone away, so it can release the context and free the N3 tunnel. A long t380 means the anchor may hold a context for a UE that was switched off eleven hours ago, and will discover this only when a RAN paging attempt goes unanswered.

🔍
What You See In Logs

An RNA update at a different gNB is indistinguishable, on the air, from an ordinary resume: same message, same resumeCause field width, same random access. The only thing that distinguishes them is the resumeCause value (rna-Update) and the answer (RRCRelease with suspendConfig rather than RRCResume). When counting resume attempts for a KPI, separate rna-Update from the data-driven causes -- mixing them makes resume success rate look worse than it is, because an RNA update that ends in RRCRelease is a success that never reaches RRC_CONNECTED.

13. Cell Reselection in RRC_IDLE and RRC_INACTIVE

In both non-connected states the UE chooses its own cell, using the rules in TS 38.304. The network's only influence is the parameters it broadcasts, plus per-UE cellReselectionPriorities handed out in an RRCRelease (§7.2). Understanding the shape of the decision matters because it explains cell changes that no network log records.

13.1 The S-criteria: is a cell usable at all?

Before ranking anything, a cell must be suitable. That is the S-criteria, evaluated on the measured RSRP and RSRQ:

TS 38.304 cl. 5.2.3.2 -- cell selection criterion S
Srxlev = Q_rxlevmeas - (q-RxLevMin + q-RxLevMinOffset)
                     - P_compensation - Qoffset_temp

Squal  = Q_qualmeas  - (q-QualMin  + q-QualMinOffset)
                     - Qoffset_temp

A cell is suitable when   Srxlev > 0   AND   Squal > 0

  Q_rxlevmeas       measured RSRP of the cell
  Q_qualmeas        measured RSRQ of the cell
  q-RxLevMin        minimum required RSRP, broadcast in SIB1/SIB2/SIB4
  q-QualMin         minimum required RSRQ
  q-RxLevMinOffset  offset applied only when evaluating a higher-priority
                    PLMN while camped elsewhere
  P_compensation    max(p-Max - P_PowerClass, 0) -- an uplink-limited
                    correction, so a cell can be inaudible in the uplink
                    despite a strong downlink
  Qoffset_temp      a temporary penalty applied after a failed access
🧮
Worked Calculation

Srxlev with q-RxLevMin = -110 dBm, measured RSRP = -102 dBm, p-Max = 23 dBm, UE power class 3 (23 dBm):

P_compensation = max(23 - 23, 0) = 0 dB

Srxlev = -102 - (-110 + 0) - 0 - 0 = +8 dB -> suitable

Now the same cell with p-Max = 26 dBm, which an operator might set to allow higher-power devices:

P_compensation = max(26 - 23, 0) = 3 dB

Srxlev = -102 - (-110) - 3 = +5 dB -> still suitable, but 3 dB

of margin has quietly disappeared for every power-class-3 UE

At RSRP -108 dBm the same UE would compute Srxlev = -1 dB and consider the cell unsuitable -- while a power-class-2 UE (26 dBm) at the same spot computes 0 dB - 0 = +2 dB and camps happily. Two UEs, same place, different verdicts.

13.2 The reselection decision

What a UE in RRC_IDLE or RRC_INACTIVE Decides Before ReselectingWhat a UE in RRC_IDLE or RRC_INACTIVE Decides Before ReselectingTS 38.304 cl. 5.2.4 -- priority first, then rank, then downgradeCamped on serving cell S, S-criteria satisfiedyesIntra-frequencymeasurements maybe skippedSrxlev_S > s-IntraSearchP andSqual_S > s-IntraSearchQ ?no -> measureyesReselect there.Priority beatsrank.Higher-priority frequency withSrxlev_n > threshX-HighP for Treselection ?noyesReselect thebest-ranked cellEqual-priority cell withR_n > R_s for Treselection ?noyesReselect down(inter-frequencyor inter-RAT)Srxlev_S < threshServing-LowP andSrxlev_n > threshX-LowP on a lowerpriority frequency, for Treselection ?noStay on SRRC_INACTIVE only: is the new cell in the RNA?If not -> RAN Notification Area UpdatePriority is evaluated before rank, which is why a UE will leave a strong cell for a weaker one on a higher-priorityfrequency. None of this exists in RRC_CONNECTED, where the UE only measures and reports and the network decides --see the companion 20 Measurements and Events.
Figure 8. The reselection decision in order of evaluation. Priority is checked before rank, which is what makes frequency-priority steering work -- and what makes a UE leave a strong cell for a weaker one.

Three cases, evaluated in this order TS 38.304 cl. 5.2.4.5:

CaseConditionHeld forEffectWhat it is for
Higher priority frequencySrxlev_n > threshX-HighP (and Squal_n > threshX-HighQ if signalled)t-ReselectionNR (or the inter-RAT equivalent)Reselect to the best suitable cell on that frequency, regardless of how good the serving cell isAbsolute steering. This is how a network keeps UEs on a preferred layer.
Equal priority frequencyR_n > R_s, where R_s = Q_meas,s + q-Hyst - Qoffset_temp and R_n = Q_meas,n - q-OffsetCell - Qoffset_temp
t-ReselectionNR
Reselect to the best-ranked cellOrdinary intra- and inter-frequency mobility. q-Hyst is what stops ping-ponging.
Lower priority frequencySrxlev_s < threshServing-LowP and Srxlev_n > threshX-LowP
t-ReselectionNR
Reselect downCoverage fallback -- only when the serving cell is genuinely poor.

Table 12. The three reselection cases. Note the asymmetry: going up in priority needs only the target to be good enough, while going down needs the serving cell to be bad as well.

13.3 What the UE can skip, and mobility state scaling

Measuring costs power, so the UE is allowed to skip measurements when the serving cell is comfortably good. If Srxlev_s > s-IntraSearchP and Squal_s > s-IntraSearchQ, intra-frequency measurements may be skipped; s-NonIntraSearchP and s-NonIntraSearchQ do the same for inter-frequency and inter-RAT measurements of equal or lower priority -- higher-priority frequencies must always be measured, which is the mechanism that makes priority steering reliable.

The UE also scales t-ReselectionNR by its own estimated mobility state. It counts reselections in a sliding window (t-CrMax): more than n-CellChangeMedium puts it in medium-mobility state, more than n-CellChangeHigh in high-mobility state, and each applies a scaling factor from t-ReselectionNR-SF -- typically shortening the timer so a fast-moving UE reselects sooner.

💡
Key Point

None of this exists in RRC_CONNECTED. There the UE measures what measConfig tells it to, evaluates the A1-A6 and B1-B2 events, and reports; the network decides. The parameter names are different, the hysteresis mechanisms are different, and the timers are different. Comparing an idle-mode reselection threshold with a connected-mode event threshold is meaningless -- see the companion 20 Measurements and Events. The one shared consequence is that a poorly tuned reselection configuration produces UEs that resume on the wrong cell, which is then blamed on the resume procedure.

For a UE in RRC_INACTIVE there is one extra step after every reselection: check whether the new cell is inside the RNA, and if not, start an RNA update (§12). That check is the only thing that distinguishes inactive-mode reselection from idle-mode reselection; everything else in this section applies identically to both.

14. Rel-17 Small Data Transmission: Sending Without Leaving INACTIVE

RRC_INACTIVE made resuming cheap. Rel-17 asked the obvious follow-up question: for a payload of a few hundred bytes, why transition at all? Small Data Transmission lets a UE in RRC_INACTIVE send user data -- and receive a response -- without ever entering RRC_CONNECTED. Two flavours exist:

RA-SDTCG-SDT
Full nameRandom-access-based Small Data TransmissionConfigured-grant-based Small Data Transmission
How the data is sentMultiplexed with the resume request in MSG3 (4-step) or in the MSGA payload (2-step)On a pre-allocated PUSCH resource configured before suspension, with no random access at all
PrerequisiteNone beyond configurationA valid timing advance -- the UE must still be inside the timing window of the cell it was configured in, which in practice means it has not moved
Messages on the airMSG1, MSG2, MSG3-with-data (3)One PUSCH transmission (1)
Where it is configuredsdt-Config in suspendConfig, plus common parameters broadcast in SIB1As RA-SDT, plus a configured-grant configuration tied to the specific cell

Table 13. The two SDT variants. CG-SDT is dramatically cheaper and dramatically more fragile -- losing timing alignment or changing cell invalidates it.

The UE may use SDT only when several conditions all hold:

  • The data volume is below the configured threshold. A data-volume threshold broadcast by the cell bounds what counts as "small"; a larger buffer forces an ordinary resume.
  • The measured RSRP is above the configured threshold. SDT is transmitted before any closed-loop power control or link adaptation, so it is only allowed in good coverage -- the same reasoning that gates 2-step random access on msgA-RSRP-Threshold, in the companion 03 Random Access.
  • Every radio bearer with pending data is SDT-enabled. The network marks specific bearers as usable for SDT. If any bearer with buffered data is not on that list, the UE must resume normally -- so a single background bearer can disable SDT for the whole UE.
  • For CG-SDT, the timing advance must still be valid. Otherwise the UE falls back to RA-SDT or to an ordinary resume.

The network's response decides what happens next, and this is the part that changes how you read logs. It may send a downlink response and leave the UE in RRC_INACTIVE; it may keep the SDT procedure open for further transmissions; it may send RRCRelease to end it; or it may send RRCResume and pull the UE into RRC_CONNECTED after all -- for instance because more data arrived than the UE declared. A Rel-17 SDT timer bounds the procedure in the same way T319 bounds a resume.

🔄
Release Delta

A completed random access procedure no longer implies a state transition. Before Rel-17, a UE that ran RACH from RRC_INACTIVE and got a MSG4 was on its way to RRC_CONNECTED. With SDT it may send data, get an acknowledgement and remain suspended throughout, with no RRCResumeComplete anywhere. Any log analysis or KPI that infers "resume succeeded" from "RACH succeeded from INACTIVE" will silently miscount as soon as SDT is enabled.

15. Timers, Counters and Parameter Reference

ParameterConfigured inValuesTypicalEffect, and what a wrong value looks like
T300
UE-TimersAndConstants in SIB1ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000ms1000Bounds establishment. Too short and marginal-coverage UEs give up before the network answers; too long and a UE waits a second before reselecting to a cell that would have worked.
T302
RRCReject waitTime
1..16 seconds8 sAccess barring after a reject. Applies to the access category, not the whole UE.
T319
UE-TimersAndConstants in SIB1same set as T300ms1000Bounds resume. On expiry the UE goes to RRC_IDLE and discards the stored context -- so a short T319 in a network with slow Xn context fetch destroys contexts that would have resumed fine.
T320
cellReselectionPriorities in RRCRelease, or SIBmin5, min10, min20, min30, min60, min120, min180min30Validity of dedicated reselection priorities. On expiry the UE reverts to the broadcast priorities, which can look like spontaneous traffic re-steering.
T380
t380 in SuspendConfigmin5, min10, min20, min30, min60, min120, min360, min720min60Periodic RNA update. Short means signalling load (§12); long or absent means stale contexts at the anchor.
T310 / T311 / T301UE-TimersAndConstants in SIB1see the companion 16 RLM and RLF--The RLF and re-establishment chain that takes a UE out of RRC_CONNECTED the hard way (§7.3).
ran-PagingCycle
SuspendConfig
rf32, rf64, rf128, rf256rf128RAN paging DRX, 320 ms to 2.56 s. Only binding if it is shorter than the CN paging cycle (§4.5).
defaultPagingCycle
PCCH-Config in SIB1rf32, rf64, rf128, rf256rf128CN paging DRX for the cell. See the companion 19 Paging.
nextHopChainingCount
SuspendConfig
INTEGER (0..7)
incremented per suspendSelects horizontal or vertical key derivation on resume. A mismatch produces silent resume failure (§9.3).
useFullResumeID
SIB1present / absentpresentSelects RRCResumeRequest1 (40-bit I-RNTI) over RRCResumeRequest (24-bit). Must be consistent across every cell in an RNA (§4.2).
q-RxLevMin
SIB1, SIB2, SIB4 per frequency-70 .. -22 in units of 2 dBm-110 dBmThe floor of the S-criteria (§13.1). Too high and the UE declares usable cells unsuitable and camps further away.
q-Hyst
SIB2dB0 .. dB24dB2 or dB4Ranking hysteresis for the serving cell. Too small and the UE ping-pongs between two cells; too large and it clings to a fading cell.
t-ReselectionNR
SIB2 / SIB40 .. 7 seconds1 or 2 sHow long a reselection condition must hold. Scaled by the mobility state (§13.3).
cellReselectionPriority
SIB2 / SIB4 per frequency, or dedicated in RRCRelease
INTEGER (0..7)
varies per layerAbsolute frequency priority. 0 is the lowest; a frequency with no priority signalled is not considered for reselection at all.
threshX-HighP / threshX-LowPSIB2 / SIB4 per frequencyReselectionThreshold, 0..31 in 2 dB stepsvariesEntry thresholds for higher- and lower-priority reselection (§13.2).
s-IntraSearchP / s-NonIntraSearchPSIB2ReselectionThreshold, 0..31 in 2 dB stepsvariesAbove these the UE may stop measuring. Set too high and the UE measures constantly, costing idle-mode battery for nothing.

Table 14. Parameters governing the three states and the transitions between them. Timer enumerations are from TS 38.331 clause 7.1 and 6.3.2; reselection parameters are from TS 38.331 SIB2 / SIB4 and are evaluated per TS 38.304.

16. Failure Modes and What Each One Means

FailureDetected byWhat the UE doesObservable asDiagnostic pointer
T319 expiry -- no answer to the resume requestUE RRCGo to RRC_IDLE with release cause RRC resume failure, discard the stored contextA resume attempt followed by an RRCSetupRequest about a second laterEither the request never arrived (coverage, RACH), or the network took too long -- most often an Xn context fetch that did not complete inside T319. Check T319 against your Xn round-trip time.
resumeMAC-I verification fails at the anchorAnchor gNBNothing -- the UE is answered with RRCSetup and falls backRRCSetup in response to RRCResumeRequestKey desynchronisation, an I-RNTI collision, or a replayed request. Check whether the source PCI and cellIdentity the UE used match what the anchor stored.
I-RNTI does not resolve -- the anchor already discarded the contextAnchor gNBAnswered with RRCSetup; discards its own stored contextRRCSetup fallback, correlated with long inactive durationsThe anchor's own context ageing timer is shorter than the UE's expectation. Compare it against t380: an ageing timer shorter than t380 guarantees this.
No Xn between the resuming cell's gNB and the anchorThe new gNBAnswered with RRCSetupRRCSetup fallback that is geographically clustered and insensitive to load or radio qualityThe highest-value check in this table. Cross-check every cell in every RNA against the Xn topology (§10).
useFullResumeID inconsistent across the RNANeither side, explicitlySends RRCResumeRequest with a 24-bit identity where the network expected 40 bitsFallback RRCSetup at specific cell borders onlyAudit useFullResumeID per cell. Symptom and cause look nothing alike (§4.2).
nextHopChainingCount mismatchNobody, explicitlyCannot integrity-check RRCResume; discards it at PDCP and waits for T319gNB sees a successful RRCResume with no RRCResumeComplete; UE sees silenceThe signature asymmetry of a key problem. Usually a lost suspendConfig update (§9.3).
Suspending RRCRelease lost on the airUE RLM, eventuallyStays in RRC_CONNECTED, then declares RLF and attempts re-establishmentRRCReestablishmentRequest shortly after a suspend the gNB believes succeededNot a UE bug (§8). Look at the radio quality at the moment of suspension -- a link bad enough to lose the release is a link bad enough to have triggered the inactivity in the first place.
RAN paging unanswered because a cell in the RNA has no Xn to the anchorAnchor gNB, by timeoutNothing -- the UE never heard the pageThe anchor gives up, the AMF eventually CN-pages, and the UE arrives as RRCSetupRequest with establishmentCause = mt-AccessSame root cause as the Xn row, seen from the downlink direction (§4.4).
t380 absent from suspendConfigNobodyNever sends a periodic RNA updateAnchor gNBs accumulating contexts for UEs that have gone awayCheck whether t380 is actually being sent. It is Need R, so omitting it releases the timer rather than applying a default.
CN paging received while in RRC_INACTIVEUE RRCEnter RRC_IDLE, inform NAS, establish with RRCSetupRequestA UE your logs say is suspended answering a CN pageThe AMF has moved the UE to CM-IDLE, so the gNB must have sent an NGAP UE CONTEXT RELEASE REQUEST. Find out why (§4.5).
SCells and the SCG discarded at suspensionNeither -- by designResumes on the PCell aloneThroughput after a resume that ramps over several hundred millisecondsExpected behaviour, not a fault. If it matters for the traffic, the UE should not be suspended (§4.3).

Table 15. State-transition failure modes. Four of the eleven manifest as an RRCSetup in response to a resume request, and telling them apart is most of the diagnostic work.

💡
Key Point

A fallback setup in response to a resume request is the single most informative event in this whole document. An RRCSetup answering an RRCResumeRequest means the context was unusable, and there are exactly four reasons: the anchor threw it away, the anchor was unreachable, the MAC-I did not verify, or the identity was the wrong width. Each has a different fix and all four look identical on the air. Instrument the anchor's decision, not the UE's experience.

17. Configuration Reference (ASN.1)

17.1 RRCRelease and SuspendConfig

RRCRelease-IEs ::= SEQUENCE {
    redirectedCarrierInfo    RedirectedCarrierInfo     OPTIONAL, -- Need N
    cellReselectionPriorities CellReselectionPriorities OPTIONAL, -- Need R
    suspendConfig            SuspendConfig             OPTIONAL, -- Need R
    deprioritisationReq      SEQUENCE {
        deprioritisationType   ENUMERATED {frequency, nr},
        deprioritisationTimer  ENUMERATED {min5, min10, min15, min30}
    }                                                  OPTIONAL, -- Need N
    lateNonCriticalExtension OCTET STRING              OPTIONAL,
    nonCriticalExtension     RRCRelease-v1540-IEs      OPTIONAL
}

SuspendConfig ::= SEQUENCE {
    fullI-RNTI               I-RNTI-Value,          -- BIT STRING (SIZE(40))
    shortI-RNTI              ShortI-RNTI-Value,     -- BIT STRING (SIZE(24))
    ran-PagingCycle          PagingCycle,           -- rf32|rf64|rf128|rf256
    ran-NotificationAreaInfo RAN-NotificationAreaInfo OPTIONAL, -- Need M
    t380                     PeriodicRNAU-TimerValue  OPTIONAL, -- Need R
    nextHopChainingCount     NextHopChainingCount,  -- INTEGER (0..7)
    ...,
    [[
    sl-UEIdentityRemote-r17  RNTI-Value               OPTIONAL, -- Need M
    srs-PosRRC-Inactive-r17  SetupRelease {SRS-PosRRC-Inactive-r17}
                                                      OPTIONAL, -- Need M
    ran-ExtendedPagingCycle-r17 ExtendedPagingCycle-r17
                                                      OPTIONAL  -- Need R
    ]]
}

PeriodicRNAU-TimerValue ::= ENUMERATED {
    min5, min10, min20, min30, min60, min120, min360, min720 }

RAN-NotificationAreaInfo ::= CHOICE {
    cellList            PLMN-RAN-AreaCellList,
    ran-AreaConfigList  PLMN-RAN-AreaConfigList,
    ...
}

PLMN-RAN-AreaCell ::= SEQUENCE {
    plmn-Identity   PLMN-Identity                        OPTIONAL,
    ran-AreaCells   SEQUENCE (SIZE (1..32)) OF CellIdentity
}

RAN-AreaConfig ::= SEQUENCE {
    trackingAreaCode  TrackingAreaCode,
    ran-AreaCodeList  SEQUENCE (SIZE (1..32)) OF RAN-AreaCode  OPTIONAL
}                                             -- RAN-AreaCode 0..255

Listing 1. Abridged from TS 38.331 clause 6.2.2 and 6.3.2. ... marks extension markers and omitted members. The [[ ]] block is a Rel-17 extension addition group.

17.2 The resume requests and what the MAC-I is computed over

RRCResumeRequest ::= SEQUENCE {
    resumeIdentity   ShortI-RNTI-Value,      -- BIT STRING (SIZE(24))
    resumeMAC-I      BIT STRING (SIZE (16)),
    resumeCause      ResumeCause,
    spare            BIT STRING (SIZE (1))
}                                            -- 48 bits total

RRCResumeRequest1 ::= SEQUENCE {
    resumeIdentity   I-RNTI-Value,           -- BIT STRING (SIZE(40))
    resumeMAC-I      BIT STRING (SIZE (16)),
    resumeCause      ResumeCause,
    spare            BIT STRING (SIZE (1))
}                                            -- 64 bits total

ResumeCause ::= ENUMERATED {
    emergency, highPriorityAccess, mt-Access, mo-Signalling,
    mo-Data, mo-VoiceCall, mo-VideoCall, mo-SMS, rna-Update,
    mps-PriorityAccess, mcs-PriorityAccess,
    spare1, spare2, spare3, spare4, spare5 }

-- The input the 16-bit resumeMAC-I is computed over, using the
-- K_RRCint and integrity algorithm in force in the SOURCE cell:
VarResumeMAC-Input ::= SEQUENCE {
    sourcePhysCellId    PhysCellId,      -- INTEGER (0..1007)
    targetCellIdentity  CellIdentity,    -- BIT STRING (SIZE (36))
    source-c-RNTI       RNTI-Value       -- INTEGER (0..65535)
}

RRCResume-IEs ::= SEQUENCE {
    radioBearerConfig   RadioBearerConfig                OPTIONAL, -- Need M
    masterCellGroup     OCTET STRING (CONTAINING CellGroupConfig)
                                                          OPTIONAL, -- Need M
    measConfig          MeasConfig                        OPTIONAL, -- Need M
    fullConfig          ENUMERATED {true}                 OPTIONAL, -- Need N
    lateNonCriticalExtension  OCTET STRING                OPTIONAL,
    nonCriticalExtension      RRCResume-v1560-IEs         OPTIONAL
}

Listing 2. Abridged from TS 38.331 clause 6.2.2 and 6.3.2. Note that RRCResume can carry a whole radioBearerConfig and masterCellGroup -- resume is not obliged to restore the stored configuration unchanged, and fullConfig forces the UE to discard it entirely and start from the message.

📘
Spec Detail

VarResumeMAC-Input includes the target cell's identity. That is the anti-replay mechanism: a resumeMAC-I computed for cell A does not verify in cell B, so an attacker cannot capture a resume request and replay it elsewhere. It also means the UE must know the target cell's 36-bit CellIdentity before it can build the request -- so it must have read SIB1 in the new cell. A UE that resumes without a valid SIB1 cannot compute a verifiable MAC-I at all.

18. Illustrative Message Traces

🔍
About These Traces

Illustrative trace. Field names and encodings follow 3GPP; the values are constructed for this document and are not a capture from any deployed or lab network.

18.1 The suspension

[RRC] RRCRelease with suspendConfig
14:22:08.114  [gNB]      UE 0x4601: inactivity timer expired (10 s)
              policy .................. suspend (bursty traffic profile)
              allocate fullI-RNTI ..... 0x0A1234C05F
              allocate shortI-RNTI .... 0x1234C0
              NCC to signal ........... 3

14:22:08.116  [RRC-DL]   DL-DCCH-Message on SRB1, LCID 1
              c1 = rrcRelease
                rrc-TransactionIdentifier ....... 2
                criticalExtensions = rrcRelease
                  suspendConfig
                    fullI-RNTI ................. 0x0A1234C05F
                    shortI-RNTI ................ 0x1234C0
                    ran-PagingCycle ............ rf128     -- 1.28 s
                    ran-NotificationAreaInfo
                      cellList
                        PLMN-RAN-AreaCell[0]
                          ran-AreaCells ........ 12 CellIdentity values
                    t380 ....................... min60
                    nextHopChainingCount ....... 3

14:22:08.131  [UE RRC]   RRCRelease with suspendConfig -> suspend
              store UE Inactive AS Context:
                K_gNB, K_RRCint ......... retained
                ROHC / EHC state ........ retained
                QoS flow -> DRB map ..... retained (1 flow -> DRB 1)
                source C-RNTI ........... 0x4601
                source PCI .............. 41
                source cellIdentity ..... (36 bits)
                reconfigurationWithSync . DISCARDED
                SCell configuration ..... DISCARDED (2 SCells released)
              reset MAC; re-establish RLC for SRB1; suspend SRB1/SRB2/DRB1
              start T380 (min60); enter RRC_INACTIVE; run cell selection

-- nothing on NGAP. The AMF is unchanged: 5GMM-CONNECTED with RRC
-- inactive indication, N2 up, N3 still terminating at this gNB.

Listing 3. A suspension end to end. The two DISCARDED lines are the ones worth noting: an NR-DC or carrier-aggregated UE loses that configuration and has to be given it again after resume.

18.2 A successful resume at the anchor

[MAC/RRC] Resume at the anchor gNB
14:26:41.902  [UE RRC]   uplink data on DRB 1, 412 bytes
              volume above sdt threshold -> ordinary resume
              SIB1 of this cell contains useFullResumeID
              -> use RRCResumeRequest1 with the 40-bit fullI-RNTI

14:26:41.904  [MAC-UL]   RA preamble 17, RA-RNTI 1204
14:26:41.911  [MAC-DL]   RAR: TA 189, UL grant, TC-RNTI 0x51A3

14:26:41.916  [MAC-UL]   MSG3 on PUSCH, TC-RNTI 0x51A3, 10 octets
              subheader  LCID 0        -- CCCH1, 64-bit form
              SDU ..................... 0A 24 68 98 0B F9 C4 E1
              UL-CCCH1-Message
                c1 = rrcResumeRequest1
                  resumeIdentity ...... 0x0A1234C05F
                  resumeMAC-I ......... 0x9C4E
                  resumeCause ......... mo-Data
                  spare ............... 0
              start T319 (ms1000)

14:26:41.917  [UE RRC]   re-establish PDCP and RLC for SRB1
              derive K_gNB* from stored NH, NCC 3, target PCI 41
              derive K_RRCint / K_RRCenc; apply to SRB1

14:26:41.919  [gNB RRC]  I-RNTI 0x0A1234C05F -> local context (anchor = self)
              recompute resumeMAC-I over VarResumeMAC-Input:
                sourcePhysCellId ...... 41
                targetCellIdentity .... (this cell, 36 bits)
                source-c-RNTI ......... 0x4601
              computed 0x9C4E, received 0x9C4E -- MATCH
              derive the same K_gNB* from NH with NCC 3

14:26:41.926  [MAC-DL]   PDSCH to TC-RNTI 0x51A3
              LCID 62  UE Contention Resolution Identity  (echoes MSG3)
              LCID 1   SRB1: DL-DCCH-Message, PDCP SN 0, MAC-I non-zero
                c1 = rrcResume
                  rrc-TransactionIdentifier ... 0
                  criticalExtensions = rrcResume
                    masterCellGroup ........... (OCTET STRING, 96 octets)
              -- TC-RNTI 0x51A3 promoted to C-RNTI

14:26:41.927  [UE RRC]   stop T319; restore the stored context;
                         resume SRB1, SRB2 and DRB 1;
                         discard the UE Inactive AS Context
14:26:41.934  [RRC-UL]   rrcResumeComplete  txn 0  on SRB1
14:26:41.941  [MAC-UL]   DRB 1: 412 bytes on DTCH

-- 37 ms from data arrival to data on the air. No NGAP, no Xn.

Listing 4. A resume at the anchor. Note the MAC-I on the very first downlink SRB1 PDU: unlike the setup case, security is already active on the first protected message, under keys derived independently by both sides.

18.3 A resume that falls back to setup

[RRC/XnAP] Resume falling back to RRCSetup
16:55:02.338  [RRC-UL]   rrcResumeRequest1
                resumeIdentity .......... 0x0A1234C05F
                resumeMAC-I ............. 0x71B0
                resumeCause ............. mo-Data
              start T319 (ms1000)

16:55:02.341  [gNB RRC]  fullI-RNTI decodes to anchor gNB-ID 0x0A12
                         which is not this node -> retrieve over Xn
16:55:02.342  [XnAP-TX]  RETRIEVE UE CONTEXT REQUEST
                I-RNTI .................. 0x0A1234C05F
                resumeMAC-I ............. 0x71B0
                new cell NR CGI ......... (this cell)

16:55:02.389  [XnAP-RX]  RETRIEVE UE CONTEXT FAILURE
                cause ................... unknown-or-already-allocated-
                                          gNB-CU-UE-F1AP-ID / context not
                                          available
              -- the anchor aged this context out 4 minutes ago;
              -- its local inactivity ageing timer is 30 min, t380 was 60

16:55:02.392  [RRC-DL]   DL-CCCH-Message on SRB0
              c1 = rrcSetup
                rrc-TransactionIdentifier ... 0
                radioBearerConfig -> srb-ToAddModList -> srb-Identity 1
                masterCellGroup ............. (OCTET STRING, 208 octets)
              -- note: SRB0, in the clear. That alone tells the UE the
              -- stored context was not usable.

16:55:02.395  [UE RRC]   RRCSetup received while T319 running
              -> stop T319
              -> discard the stored UE Inactive AS Context
              -> inform upper layers: RRC connection was NOT resumed;
                 a NAS Service Request is required
              -> apply the RRCSetup as an establishment from RRC_IDLE

16:55:02.408  [RRC-UL]   rrcSetupComplete on SRB1
                dedicatedNAS-Message ........ (NAS Service Request)
              -- SecurityModeCommand, UECapabilityEnquiry and a full
              -- RRCReconfiguration all follow. Cost: ~9 more messages.

Listing 5. The fallback path, with its root cause visible: the anchor's own context ageing timer was shorter than the t380 it signalled, so the UE was checking in on a schedule the anchor had already stopped waiting for.

18.4 An RNA update, and a CN page received while inactive

[RRC] RNA update, then CN paging in RRC_INACTIVE
15:22:08.118  [UE RRC]   T380 expired (min60 since 14:22:08)
                         -> initiate RAN Notification Area Update
15:22:08.140  [RRC-UL]   rrcResumeRequest1
                resumeIdentity .......... 0x0A1234C05F
                resumeMAC-I ............. 0x2D77
                resumeCause ............. rna-Update      -- not mo-Data
              start T319
15:22:08.166  [RRC-DL]   DL-DCCH-Message on SRB1
              c1 = rrcRelease
                suspendConfig
                  fullI-RNTI ............ 0x0A1234C05F    -- unchanged
                  shortI-RNTI ........... 0x1234C0
                  ran-PagingCycle ....... rf128
                  ran-NotificationAreaInfo  ABSENT  -- Need M: keep the
                                                    -- existing RNA
                  t380 .................. min60
                  nextHopChainingCount .. 4               -- incremented
15:22:08.171  [UE RRC]   stop T319; store the new suspendConfig;
                         restart T380; remain in RRC_INACTIVE
              -- five messages on the air, no NGAP, no state change

-- Two hours later, a different story:

17:41:19.002  [MAC-DL]   PDCCH / P-RNTI at a CN paging occasion
17:41:19.003  [RRC-DL]   PCCH-Message
                paging
                  pagingRecordList
                    PagingRecord[0]
                      ue-Identity = ng-5G-S-TMSI ..... matches this UE
                      accessType .................... non3GPP absent
              -- CN paging, NOT RAN paging: the record carries the NAS
              -- identity, not the fullI-RNTI
17:41:19.004  [UE RRC]   matching ng-5G-S-TMSI while in RRC_INACTIVE
              -> enter RRC_IDLE
              -> discard the UE Inactive AS Context
              -> inform upper layers about the paging
17:41:19.088  [RRC-UL]   rrcSetupRequest
                ue-Identity = ng-5G-S-TMSI-Part1
                establishmentCause ...... mt-Access
              -- diagnostic: the AMF believed this UE was CM-IDLE, so the
              -- anchor must already have sent NGAP UE CONTEXT RELEASE
              -- REQUEST. Find out why it gave up on the context.

Listing 6. Two INACTIVE events with opposite meanings. The RNA update is routine housekeeping; the CN page proves the RAN and the core had already diverged about this UE's state.

18.5 A silent key mismatch

[RRC/PDCP] Resume failing on a key mismatch
18:02:44.511  [RRC-UL]   rrcResumeRequest1  resumeCause mo-Data
                resumeIdentity .......... 0x0A1234C05F
                resumeMAC-I ............. 0x2D77
              start T319 (ms1000)
              UE derives K_gNB* using its stored NCC = 3

18:02:44.519  [gNB RRC]  context found; resumeMAC-I verifies
                         (it is computed with the OLD K_RRCint, which
                          both sides still agree on)
              gNB derives K_gNB* using NCC = 4
              -- the last suspendConfig it sent carried NCC 4; the UE
              -- never received it and is still using NCC 3

18:02:44.526  [RRC-DL]   rrcResume on SRB1, PDCP SN 0, MAC-I 0x8A31F0C2
              -- ciphered and integrity-protected under the gNB's keys

18:02:44.528  [UE PDCP]  SRB1 PDCP SN 0: integrity check FAILED
              -> discard the PDU; indicate the failure to upper layers
              -> RRC never sees a message, so RRC does nothing
              -- there is no RRC-level way to report this

18:02:44.529  [gNB RRC]  RRCResume sent; waiting for RRCResumeComplete
18:02:45.511  [UE RRC]   T319 expired
              -> RRC_IDLE, release cause RRC resume failure
              -> discard the stored UE Inactive AS Context
18:02:45.98x  [gNB RRC]  no RRCResumeComplete; guard timer expires
              -> release the UE context, NGAP UE CONTEXT RELEASE REQUEST

-- Signature: resumeMAC-I verified (so the OLD keys matched) but the
-- response was never acknowledged (so the NEW keys did not). That pair
-- of facts together points at nextHopChainingCount and nothing else.

Listing 7. The NCC mismatch, which is the hardest resume failure to diagnose because the gNB's log shows every step succeeding. The combination of a verified resumeMAC-I and an absent RRCResumeComplete is the only evidence, and it is conclusive.

19. Release Deltas: Rel-15 to Rel-18

ReleaseChangeWhy it matters when reading state transitions
Rel-15The three-state model itself: RRC_INACTIVE, SuspendConfig, both I-RNTIs, RAN paging, RAN Notification Areas, RETRIEVE UE CONTEXT over XnThe baseline. Everything in §3 to §13 is Rel-15.
Rel-16MeasIdleConfig and T331: measure and log while in RRC_IDLE or RRC_INACTIVE, report on the next transition to connectedA UE can now bring measurement history out of a non-connected state. See the companion 20 Measurements and Events.
Rel-16UEInformationRequest / Response carrying RLF, connEstFail and RA reportsThe failure history of previous transitions is retrievable after the fact. See the companion 16 RLM and RLF.
Rel-16releasePreference in UEAssistanceInformation, with a preferred RRC stateThe UE can now hint that it wants to be released, and indicate a preferred state -- but the decision is still the gNB's (§2).
Rel-16NR-U: RRC_INACTIVE on unlicensed spectrum; LBT failure as a distinct conditionA resume can now fail for channel-access reasons with no radio problem at all.
Rel-17Small Data Transmission (RA-SDT and CG-SDT): data from RRC_INACTIVE with no state changeThe most significant change to the state model since Rel-15. A successful RACH from RRC_INACTIVE no longer implies a transition (§14).
Rel-17ran-ExtendedPagingCycle, eDRX in RRC_IDLE and RRC_INACTIVERAN paging cycles beyond rf256, so a resume triggered by downlink data can be delayed far longer than 2.56 s.
Rel-17RedCap: reduced-capability UEs with their own initial BWP and access resources, frequently long-lived in RRC_INACTIVETwo UE classes with different suspension economics in the same cell.
Rel-17srs-PosRRC-Inactive in SuspendConfig: positioning reference transmissions while suspendedA UE in RRC_INACTIVE can now be transmitting on a schedule, which changes what "inactive" looks like on the uplink.
Rel-17MUSIM: a UE can request release to serve another SIMA release with no radio or traffic cause at all. Do not look for a coverage explanation.
Rel-17NTN: RRC_IDLE and RRC_INACTIVE under satellite mobility, with pre-compensated timingReselection is driven by ephemeris and location, not only by measurements, so §13 is necessary but not sufficient there.
Rel-18L1/L2-triggered mobility (LTM) in RRC_CONNECTED; further network energy saving; SDT enhancementsCell changes in RRC_CONNECTED may now occur with no RRCReconfiguration, so the clean "connected mobility is always signalled" rule of §5 acquires an exception.

Table 16. State-model changes by release. Rel-17 SDT is the one that changes how logs must be read; the rest add parameters and cases.

20. Reading RRC States in Logs: A Checklist

1. Check every release message for a suspend configuration. RRCRelease is the same message either way, and the presence of suspendConfig is the whole difference between RRC_IDLE and RRC_INACTIVE. Getting this wrong invalidates everything downstream (§8).

2. Record the I-RNTI pair and the NCC from each suspend. The values inside suspendConfig are the only handles you have on the suspended UE. The NCC in particular is the value you will need if a later resume fails silently (§9.3).

3. On a resume, read the cause before anything else. A resumeCause of rna-Update is housekeeping that legitimately ends in RRCRelease; mo-Data, mt-Access and the rest are real resumes that should end in RRCResume. Mixing them corrupts every resume-success KPI (§12).

4. Note which SRB the response arrived on. RRCResume and RRCRelease come back protected on SRB1, meaning the context was used. RRCSetup and RRCReject come back in the clear on SRB0, meaning it was not. That is a one-glance verdict on whether the state machine worked (§9.1).

5. For every fallback setup, determine which of the four causes it was: the anchor discarded the context, there is no Xn to the anchor, the resumeMAC-I did not verify, or the I-RNTI width was wrong. All four produce an identical RRCSetup on the air and have four different fixes (§16).

6. Compare the resume timer against your Xn context-fetch round-trip time. If a fetch can take longer than T319, resumes at non-anchor gNBs will fail under load and succeed when idle -- which reads as a capacity problem and is a timer problem (§16).

7. Compare the anchor's context ageing timer against the periodic update timer. If the ageing timer is shorter than t380, every long-lived suspended UE eventually resumes into a context that is not there (§18.3).

8. When a resume looks successful at the gNB but the Complete never arrives, suspect the NCC. A verified resumeMAC-I plus a missing RRCResumeComplete is the signature of a key mismatch and of nothing else (§18.5).

9. Treat CN paging answered from the inactive state as an alarm. A UE in RRC_INACTIVE that answers a CN page proves the anchor had already released the context while the UE still believed it had one (§4.5).

10. Audit the resume-identity flag and the Xn topology against every configured RNA. useFullResumeID and Xn connectivity are both per-cell facts that RNAs assume and neither is checked anywhere. This is the highest-yield configuration audit in the state machine (§4.2, §10).

11. Once SDT is enabled, stop inferring state from RACH. A completed random access from RRC_INACTIVE may leave the UE exactly where it was (§14).

21. Glossary

TermExpansionMeaning in this document
RRC_IDLE
--No AS context anywhere in the RAN, no AS identity, UE-controlled reselection, CN paging only (§3).
RRC_INACTIVE
--AS context retained at the UE and the anchor gNB, I-RNTI as identity, UE-controlled reselection inside an RNA, RAN and CN paging (§4).
RRC_CONNECTED
--Full active context, C-RNTI, network-controlled handover, RLM active (§5).
Anchor gNB--The last serving gNB, which holds the UE Inactive AS Context. Not necessarily the gNB of the cell the UE is camped on.
UE Inactive AS Context--The bundle the UE and the anchor both store at suspension: keys, ROHC state, QoS mapping, source cell identifiers and the bearer configuration (§4.3).
I-RNTI
Inactive RNTIThe AS identity in RRC_INACTIVE. fullI-RNTI is 40 bits, shortI-RNTI 24; which is used depends on the resuming cell's useFullResumeID (§4.2).
RNARAN Notification AreaThe set of cells inside which the UE may reselect without informing the network, and across which the anchor can RAN-page it (§4.4).
RNAURAN Notification Area UpdateA resume with resumeCause = rna-Update, answered by a re-suspend. Triggered by T380 expiry or by leaving the RNA (§12).
resumeMAC-I
--A 16-bit truncated MAC-I over VarResumeMAC-Input, computed with the old K_RRCint. Proves both possession of the old key and that the request is for this specific cell (§9.3).
NCC
nextHopChainingCount
INTEGER (0..7) in suspendConfig, selecting horizontal or vertical key derivation on resume. A mismatch fails silently (§9.3).
NH
Next HopThe key-chain value supplied by the AMF and used for vertical key derivation. See the companion 27 AS Security Mode.
S-criteria--The Srxlev > 0 and Squal > 0 test that decides whether a cell is suitable to camp on, before any ranking happens (§13.1).
R_s / R_nRanking of serving / neighbour cellThe rank values compared for equal-priority reselection; R_s includes q-Hyst, which is what suppresses ping-pong (§13.2).
Treselection
t-ReselectionNR and its inter-RAT equivalentsHow long a reselection condition must hold before the UE acts; scaled by mobility state (§13.3).
SDTSmall Data TransmissionRel-17 feature allowing user data to be sent from RRC_INACTIVE with no state transition (§14).
CM-IDLE / CM-CONNECTEDConnection Management statesThe TS 23.501 names for what TS 24.501 calls 5GMM-IDLE and 5GMM-CONNECTED. RRC_INACTIVE corresponds to 5GMM-CONNECTED with RRC inactive indication.

22. References

  • 3GPP TS 38.331 -- NR RRC protocol specification. Clause 4.2.1 (RRC states), 5.3.3 (RRC connection establishment and T300), 5.3.8 (RRC connection release, including 5.3.8.3, suspension), 5.3.13 (RRC connection resume, including 5.3.13.3 request contents and resumeMAC-I, and 5.3.13.6 reception of RRCReject), 5.3.15 (RRCReject), 6.2.2 (RRCRelease, RRCResumeRequest, RRCResumeRequest1, RRCResume), 6.3.2 (SuspendConfig, RAN-NotificationAreaInfo, CellReselectionPriorities), 7.1 (UE timers and constants), 7.4 (VarResumeMAC-Input).
  • 3GPP TS 38.304 -- UE procedures in idle mode and RRC_INACTIVE state. Clause 5.2.3 (cell selection criterion S), 5.2.4 (cell reselection, priorities, ranking and Treselection), 5.2.4.3 (measurement rules and the search thresholds), clause 7 (paging occasions and the DRX cycle a UE in RRC_INACTIVE uses).
  • 3GPP TS 38.300 -- NR and NG-RAN overall description. Clause 4.2.3 (RRC states and the state model), clause 9.2.2 (RRC_INACTIVE state management, RAN paging and RNA).
  • 3GPP TS 33.501 -- Security architecture and procedures for 5G System. Clause 6.8 (AS key derivation, horizontal and vertical), clause 6.11 (RRC_INACTIVE state security, including key handling on suspend and resume).
  • 3GPP TS 38.423 -- Xn application protocol (XnAP). Retrieve UE Context, RAN Paging, and UE Context Release procedures.
  • 3GPP TS 38.413 -- NG application protocol (NGAP). Path Switch Request, Paging, and UE Context Release procedures.
  • 3GPP TS 24.501 -- NAS protocol for 5G System. Clause 5.1.3 (connection management states, including 5GMM-CONNECTED with RRC inactive indication).
  • 3GPP TS 38.321 -- NR MAC protocol specification. Clause 5.1 (random access, which every resume runs), and the CCCH / CCCH1 LCID codepoints that make the two resume-request lengths matter.

Companion documents in this set

  • 13 RRC Overview -- the layer, the SRBs, unaligned PER, the message catalogue, and the RRC-versus-5GMM state cross-product.
  • 15 RRC Procedures -- setup, resume, release, reconfiguration and the rest, procedure by procedure, with delta configuration worked through.
  • 01 Registration Process -- what the NAS side of an IDLE-to-CONNECTED transition actually costs.
  • 03 Random Access -- every resume begins with a RACH; the triggers table there lists resume among them.
  • 11 DRX -- connected-mode DRX, which is a different mechanism from the paging DRX of §3 and §4.
  • 16 RLM and RLF -- T310, T311, T301, re-establishment and the RLF report: the other way out of RRC_CONNECTED (§7.3).
  • 17 System Information -- SIB1, UE-TimersAndConstants, useFullResumeID and the reselection parameters of §13.
  • 19 Paging -- paging frames and occasions, and the RAN-versus-CN paging distinction of §4.5 in full.
  • 20 Measurements and Events -- connected-mode measurement reporting, and the Rel-16 idle/inactive measurement logging that crosses the boundary.
  • 23 Xn Handover -- the procedures §10 reuses: context transfer, key re-derivation and path switch.
  • 26 UE Capability -- what is discarded and what is retained across suspension is partly capability-dependent.
  • 27 AS Security Mode -- the key hierarchy, K_gNB, the NH chain and the NCC that §9.3 depends on.