>
Home5G NTNAccess & PHYRandom Access (RACH)
📶 Access & PHYAdvanced

Random Access over Satellite in 5G NTN

PRACH when the round-trip is hundreds of milliseconds — TA pre-compensation before Msg1, the extended RAR/ra-ResponseWindow, msg-specific timers, and contention resolution scaling.

📚 3GPP-basedTS 38.213TS 38.321TS 38.331

Random access over a satellite is the same four-step handshake you know from the ground, run across a link that is hundreds to thousands of kilometres long. The messages and the PRACH preamble formats do not change. What changes is who fixes the timing: instead of the gNB measuring the UE's round-trip delay from a preamble, the NTN UE computes and pre-compensates its own timing and frequency before it ever transmits Msg1.

Introduction

Random access is the MAC-layer handshake (TS 38.321) a UE runs whenever it needs uplink synchronisation and a scheduling opportunity — power-on from RRC_IDLE, re-establishment, handover, or regaining sync after the timeAlignmentTimer expires. Over a satellite it is the first place the enormous, drifting propagation delay of NTN collides with a procedure that was designed assuming the network could measure timing from the preamble itself.

The messages are identical to terrestrial NR — Msg1 preamble, Msg2 RAR, Msg3 identity, Msg4 contention resolution (or the two-step MsgA/MsgB). But NTN inverts the timing responsibility: the UE arrives already uplink-synchronised by computation, using its GNSS position, the satellite ephemeris, and the common parameters in SIB19. The gNB is left measuring only a tiny residual.

Because the procedure is still four distinct messages, an NTN RACH failure lives in one specific step — and each step has an NTN-specific twist (pre-compensation at Msg1, residual TA at Msg2, K_offset at Msg3, stretched timers at Msg4). Knowing which message broke, and which twist it involves, is most of the debugging.

The terrestrial baseline, in one breath

On the ground the UE runs the classic four-step contention-based procedure (see random access). It sends a PRACH preamble (Msg1), the gNB replies with a Random Access Response (Msg2 / RAR) carrying a Timing Advance Command and an uplink grant, the UE transmits its identity (Msg3), and the gNB echoes it back to resolve contention (Msg4). Two-step RA collapses this into MsgA (preamble + PUSCH payload) and MsgB. The whole point of Msg1 terrestrially is that the gNB has no idea how far away the UE is, so it measures the preamble arrival time and tells the UE its timing advance in the RAR.

What

The same MAC RACH procedure (TS 38.321) and the same PRACH preamble formats, run over a GEO/LEO satellite link with a one-way delay of tens to hundreds of milliseconds.

Why

The gNB's timing-estimation window is only a few tens of microseconds wide. A raw NTN round-trip of hundreds of ms is thousands of times larger — an un-compensated preamble would land completely outside any detection window.

How

The UE pre-compensates timing and frequency using its own GNSS position plus the satellite ephemeris and common parameters broadcast in SIB19, so the preamble arrives roughly aligned despite the huge delay.

Why NTN reshapes random access

💡

In plain words: terrestrial RACH is like calling across a small room — you speak, the other person hears you almost instantly and tells you to move a little closer. NTN RACH is like a radio conversation with someone on the far side of the world with a half-second delay: you can't afford trial and error. So before you speak you work out exactly how long your voice will take to arrive and start early, and you both agree to wait a long time for each reply. The words are the same; the timing discipline is completely different.

Two physical facts drive every NTN change. First, the delay is huge: a LEO round trip is milliseconds to tens of ms, a GEO round trip approaches 540 ms — orders of magnitude beyond the gNB's few-tens-of-µs preamble-detection window and beyond the range the RAR's 12-bit Timing Advance Command can express. Second, the delay drifts: a LEO satellite moves kilometres per second, so timing and Doppler change continuously during a single access attempt.

The procedure copes not by redesigning the messages but by moving work in time and space: the UE pre-computes timing/frequency before Msg1, the RAR carries only a residual, the response timers are stretched to span the true round trip, and cellSpecificKoffset pushes the Msg3 grant far enough into the future to be reachable. The rest of this page walks those changes message by message.

Msg1 — the UE pre-compensates before it transmits

This is the single idea that reshapes NTN random access. A terrestrial UE transmits its preamble "now" and lets the gNB discover the delay. An NTN UE cannot afford that — the delay is enormous and the Doppler is large — so it makes itself uplink-synchronised by computation before Msg1.

Three ingredients make this possible, all available before the UE transmits:

  • GNSS position. An NTN UE is assumed to have a GNSS fix, so it knows exactly where it is.
  • Satellite ephemeris. SIB19 broadcasts the serving satellite's orbital position and velocity (as ephemeris, either an orbital-element set or a position/velocity state vector). The UE propagates it to the current time to know where the satellite is and how fast it is moving.
  • Common timing/frequency parameters. SIB19 also carries a cell-common timing offset — the common TA parameters (ta-Common, ta-CommonDrift, ta-CommonDriftVariation) — that account for the feeder link and a reference-point delay the UE cannot see.

From position + ephemeris the UE computes the service-link propagation delay and its rate of change; it adds the SIB19 common TA to cover the part of the path beyond the satellite. The result is a full timing advance the UE applies to Msg1 itself. It does the same for frequency, pre-compensating the service-link Doppler so the preamble lands near the expected subcarriers. See timing advance in NTN for the exact UE-specific + common decomposition.

The preamble is transmitted on PRACH; there is no DCI and no RNTI for Msg1 (the UE just transmits). From the PRACH occasion the UE derives the RA-RNTI it will use to find the RAR — computed exactly as on the ground from the occasion's symbol, slot, and frequency index (TS 38.321). The preamble formats are the unchanged terrestrial long/short families; see NTN PRACH.

🎯

Key inversion: terrestrially the network measures timing from Msg1 and tells the UE. In NTN the UE computes timing from GNSS + ephemeris + SIB19 and is already UL-synced when it sends Msg1. The PRACH preamble formats are unchanged — only the UE's pre-transmission behaviour changes.

✅ Debugging steps

  • Confirm the UE holds a valid, fresh GNSS fix before Msg1 — without it there is no pre-compensation.
  • Verify SIB19 decoded and the UE propagated the ephemeris from the correct epochTime.
  • Check the UE applied both the UE-specific term and ta-Common, plus frequency pre-correction, before transmitting.
  • Confirm the RA-RNTI the UE derived from the PRACH occasion matches what the gNB expects.

⚠ Common causes of failure

  • No/stale GNSS fix, so the preamble is transmitted with no or wrong pre-advance and lands outside the detection window.
  • SIB19 not read or ephemeris stale (ntn-UlSyncValidityDuration expired), so the computed timing is wrong.
  • Frequency pre-compensation omitted, so residual Doppler smears the preamble off its subcarriers.
  • PRACH config mismatch (occasion, root sequence, format) — the same terrestrial failure mode still applies.

Msg2 — why the RAR only needs to carry a small residual

Because the UE already pre-compensated the bulk of the delay, its preamble arrives at the satellite/gNB nearly aligned. The gNB still measures a tiny leftover — the difference between the UE's computed timing and reality (GNSS error, ephemeris propagation error, quantisation). That leftover is the residual TA.

The RAR itself is delivered exactly as on the ground: a MAC RAR on PDSCH, scheduled by a DCI format 1_0 whose CRC is scrambled with the RA-RNTI, decoded by the UE in the Type1-PDCCH common search space (ra-SearchSpace, in CORESET#0 / the initial DL BWP) — but only inside a ra-ResponseWindow that NTN has stretched to span a full round trip. It echoes the detected preamble index (RAPID) and carries the residual Timing Advance Command, an uplink grant for Msg3, and a TC-RNTI.

What

The Timing Advance Command in the RAR (the 12-bit TA field) conveys only the small residual correction, not the full path delay.

Why

The full NTN delay is hundreds of ms — orders of magnitude beyond the range the RAR TA field can express. Only because the UE pre-compensated does the leftover fit in the ordinary command range.

How

The gNB estimates the small offset of the received preamble within its detection window and signals it exactly as on the ground; the UE adds it on top of its own computed TA and its ta-Common term.

📘

Spec anchor: the NTN UE-autonomous TA acquisition and the common-TA signalling are defined in TS 38.213 and TS 38.321, with the SIB19 assistance IEs in TS 38.331. The RAR TA command range itself is unchanged from terrestrial NR.

✅ Debugging steps

  • Confirm the gNB detected the preamble and generated a RAR against the correct preambleId/RAPID.
  • Verify the Msg2 PDCCH was scrambled with the same RA-RNTI the UE computed, and CCEs were allocated in the RA search space.
  • Check the residual Timing Advance Command is small — a large value means the UE's pre-compensation was off, not that Msg2 is broken.
  • Confirm the RAR arrived inside the (NTN-extended) ra-ResponseWindow; a window sized for terrestrial timing will expire before the RAR can physically return.

⚠ Common causes of failure

  • ra-ResponseWindow left at a terrestrial length, so the UE gives up before the RAR crosses the link.
  • Wrong RA-RNTI derivation (UE/gNB disagree on the occasion-to-RNTI mapping), so the UE never decodes its RAR.
  • Residual TA exceeds the 12-bit field because pre-compensation was poor (stale ephemeris / bad GNSS) — the RAR cannot correct it.
  • PDCCH CCE allocation failure or DL congestion, so no grant reaches the UE despite a detected preamble.

Msg3 — stretched windows and K_offset

Pre-compensation fixes the arrival alignment, but nothing removes the raw propagation delay from the message exchange. Every "wait for the response" timer must be widened, and every "transmit N slots after you receive a grant" relationship must be pushed out past the round-trip.

Response windows. After Msg1 the UE monitors for the RAR inside ra-ResponseWindow. On the ground that window is a few milliseconds; in NTN the RAR physically cannot arrive until at least one round-trip later, so the permitted values of ra-ResponseWindow (and msgB-ResponseWindow for two-step) are extended so the UE waits long enough. The same applies to ra-ContentionResolutionTimer for Msg4 — it must cover another round-trip. These extensions are tied to the round-trip time and to K_offset; see NTN timers.

Msg3 timing. Here is the subtle one. In the RAR the gNB grants an uplink resource for Msg3 a fixed number of slots after the RAR. Terrestrially the UE can reach that slot easily. In NTN, by the time the grant physically arrives, the "scheduled slot" would already be in the past. So NTN adds a cell-specific offset cellSpecificKoffset (K_offset) into the timing relationship: the UE applies the RAR grant to a slot shifted later by K_offset, guaranteeing the scheduled UL slot is still reachable given the delay. K_offset is broadcast in SIB19 and is sized to the cell's round-trip time.

Msg3 itself is unchanged in form: it is sent on PUSCH using the RAR uplink grant (a Msg3 retransmission is scheduled by DCI format 0_0 with CRC scrambled by TC-RNTI in the Type1-PDCCH CSS), carrying the CCCH SDU (RRCSetupRequest) or a C-RNTI MAC CE, and it is HARQ-protected up to maxHARQ-Msg3Tx.

Msg3 slot ≈ (RAR-reception slot) + k2 + K_offset  — K_offset pushes the grant past the round-trip
UE Satellite gNB UE pre-compensates TA & freq (GNSS + ephemeris + SIB19) before Msg1 Msg1: PRACH preamble arrives roughly aligned despite huge delay Msg2: RAR TA Command = small RESIDUAL only; UL grant + TC-RNTI UE waited within extended ra-ResponseWindow Msg3: RRCSetupRequest scheduled at RAR grant + K_offset so slot is reachable Msg4: contention resolution within extended ra-ContentionResolutionTimer; TC-RNTI → C-RNTI every round-trip spans tens–hundreds of ms — windows & K_offset absorb it
Figure 1. Four-step RACH over a satellite: the UE pre-compensates before Msg1, the RAR carries only a residual TA, and stretched windows plus K_offset make Msg3 reachable.

✅ Debugging steps

  • Confirm the scheduled Msg3 slot = RAR-slot + k2 + cellSpecificKoffset, and that it is actually in the future when the grant arrives.
  • Check the UE applied the same K_offset the gNB assumed; a mismatch puts Msg3 in the wrong slot.
  • Verify Msg3 CRC at the gNB and the HARQ retransmission count against maxHARQ-Msg3Tx.
  • Confirm ra-ContentionResolutionTimer is stretched to span another round trip before Msg4 is expected.

⚠ Common causes of failure

  • cellSpecificKoffset too small, so the Msg3 UL slot is unreachable and the grant is wasted.
  • UE and gNB apply different K_offset (SIB19 mis-read), so Msg3 lands where the gNB is not listening.
  • Msg3 CRC failures from residual timing/frequency error or a Msg3 collision, exhausting maxHARQ-Msg3Tx.
  • ra-ContentionResolutionTimer not extended, so the UE declares failure before Msg4 can return.

PRACH capacity and low elevation

A happy side-effect of pre-compensation is that the gNB's job stays manageable. Because every UE arrives inside the expected window, the gNB's timing-estimation range does not have to span the full cell round-trip — it only has to resolve the small residual, so the preamble detector behaves much like a terrestrial one and preamble/occasion capacity is not consumed by wild timing spread.

The stress case is very low elevation. When the satellite is near the horizon, the differential delay and Doppler across the wide beam are largest and change fastest, and residual errors from ephemeris propagation grow. Network planning responds by choosing PRACH configurations and preamble formats (larger cyclic prefix / restricted sets) and by keeping SIB19 ephemeris and common-TA parameters fresh, so residuals stay within the RAR TA command range even at the edge of the pass. This links directly to coverage margins discussed in NTN spectrum.

⚠️

Common confusion: the large NTN delay does not force new PRACH preamble formats. The formats are the terrestrial ones; NTN handles the delay by UE pre-compensation and by scaling timers/K_offset, not by redesigning Msg1.

Channels, DCI and RNTI at a glance

The physical-layer plumbing of each message is identical to terrestrial NR — only the timing around it changes. It is worth pinning down the exact channel / DCI / RNTI / search-space for each step, because in NTN the temptation is to assume "everything is different" when in fact only the timers and offsets are.

MessagePhysical channelScheduled byRNTI (CRC scramble)Search spaceNTN change
Msg1 (preamble)PRACHUE-initiated (no DCI)UE pre-compensates TA + freq first
Msg2 (RAR)PDSCHDCI format 1_0RA-RNTIType1-PDCCH CSS (ra-SearchSpace)TA field = residual; ra-ResponseWindow stretched
Msg3PUSCHRAR UL grant (retx: DCI 0_0)TC-RNTI (retx)— (retx: Type1 CSS)slot += cellSpecificKoffset
Msg4PDSCHDCI format 1_0TC-RNTI (or C-RNTI)Type1-PDCCH CSSra-ContentionResolutionTimer stretched
MsgA (2-step)PRACH + PUSCHUE-initiated— (MsgA-RNTI for MsgB)pre-compensation applies to both parts
MsgB (2-step)PDSCHDCI format 1_0MsgB-RNTIType1-PDCCH CSSmsgB-ResponseWindow stretched

Reading NTN RACH in the logs

An NTN RACH trace reads like a terrestrial one with three extra columns bolted on: the UE's pre-compensation state at Msg1, the residual (not full) TA at Msg2, and the K_offset-shifted slot at Msg3. Walk the messages in order and the first NTN-specific field that looks wrong is usually the root cause.

Representative NTN RACH log (UE + gNB, merged) — illustrative, values vary by vendor/build:

RACH start: reason=ConnRequest, contention=CBRA, ntnMode=1, gnssFixValid=1 MSG1 preCompensate: N_TA_ue_us=13.16, ta_common_us=17020.4, freqPreCorr_Hz=-41250 MSG1 TX: preambleId=27, raRnti=14, occasion(SFN=812,sym=0,fId=0), kOffset_slots=52 MSG1 detect (gNB): preambleId=27, rxPwrDbm=-96.4, residualTA_us=1.9, withinWindow=1 MSG2 RAR: raRnti=14, RAPID=27, TA_cmd(12b)=21 (residual +0.66us), ULgrant ok, TC-RNTI=0x00C1 MSG2 window: ra-ResponseWindow=sl80 (extended), rxWithin=1 MSG3 PUSCH: slot=RARslot+k2(4)+kOffset(52), crc=PASS, sinr=9.8dB, nRTX=0 MSG4: UEContResId matches Msg3 CCCH -> SUCCESS; TC-RNTI 0x00C1 -> C-RNTI (contResTimer=sf128 extended; rxWithin=1)
FieldMeaningExampleCheck
gnssFixValidUE has a current GNSS position to pre-compensate from.1Must be 1 before Msg1; 0 means no pre-advance and a missed preamble.
N_TA_ue_us / ta_common_usUE-specific + common pre-compensation applied to Msg1.13.16 / 17020.4Both non-zero for a transparent payload; a zero common term means feeder link uncompensated.
freqPreCorr_HzDoppler pre-correction on the preamble.-41250Should track elevation/velocity; if 0, residual CFO may smear the preamble.
raRntiRA-RNTI from the PRACH occasion; scrambles the Msg2 PDCCH.14UE and gNB must agree, exactly as terrestrial.
residualTA_us / TA_cmd(12b)Leftover the gNB measured and the RAR command that trims it.1.9 / 21Must be small; a large residual means poor pre-compensation, not a Msg2 fault.
ra-ResponseWindowRAR monitoring window, NTN-extended.sl80Must exceed one round trip; a terrestrial-length window expires before the RAR returns.
kOffset_slotscellSpecificKoffset shifting the Msg3 slot.52Must cover the cell RTT and match between UE and gNB.
contResTimerra-ContentionResolutionTimer, NTN-extended.sf128Must span another round trip or Msg4 is declared lost prematurely.
🔀

LTE ↔ NR · TN ↔ NTN: the four messages, the preamble formats, the DCI formats, and the RA/TC/C-RNTI roles are all inherited unchanged from terrestrial NR (and are close cousins of LTE's Msg1–Msg4). Everything NTN-specific is additive: UE pre-computation of timing/frequency before Msg1, a residual-only RAR TA command, cellSpecificKoffset on the Msg3 grant, and extended ra-ResponseWindow / msgB-ResponseWindow / ra-ContentionResolutionTimer. Terrestrial NR has none of these because its round trip is microseconds; LTE-NTN (via IoT-NTN) reuses the same additive ideas with its own timers.

Summary

NTN random access is terrestrial four-step RACH with the timing responsibility inverted and the clocks stretched. Walk it message by message. Msg1: the UE must arrive pre-synchronised — check the GNSS fix, SIB19 ephemeris/epoch, the UE-specific + ta-Common terms, and the frequency pre-correction. Msg2: the RAR is ordinary (PDSCH / DCI 1_0 / RA-RNTI / Type1 CSS) but its Timing Advance Command carries only a residual and its ra-ResponseWindow must span a round trip. Msg3: the grant is reachable only because cellSpecificKoffset pushes the slot into the future; check both sides apply the same value. Msg4: contention resolution is unchanged except that ra-ContentionResolutionTimer is extended.

The debugging discipline is the same as terrestrial RACH — find the first broken message — with one added question at each step: is the NTN-specific twist (pre-compensation, residual, K_offset, stretched timer) correct? Get the geometry inputs right at Msg1 and most of the rest follows.

Q&A Interview quickfire

Q. Why does the NTN UE pre-compensate timing and frequency before Msg1?

A. The raw round-trip is tens to hundreds of ms and the Doppler is large — far outside the gNB's few-tens-of-microseconds detection window. So the UE computes its own timing advance and frequency offset from GNSS position, satellite ephemeris and the common-TA parameters in SIB19, and applies them to the preamble. It arrives roughly aligned, so it is detectable at all.

Q. Why must ra-ResponseWindow be longer in NTN?

A. The RAR physically cannot come back until at least one round-trip after Msg1. On the ground that is microseconds; over a satellite it is tens to hundreds of ms. If the window kept its terrestrial length the UE would give up before the RAR ever arrived, so the permitted values are extended (as are msgB-ResponseWindow and ra-ContentionResolutionTimer).

Q. What does the RAR's Timing Advance Command carry in NTN versus terrestrial?

A. Terrestrially it carries the UE's full timing advance, which the gNB measured from the preamble. In NTN the UE already pre-compensated the bulk of the delay, so the RAR TA command conveys only the small residual — the leftover from GNSS/ephemeris error. The command field and its range are unchanged; only its meaning shrinks to a residual.

Q. What is K_offset's role in Msg3 timing?

A. cellSpecificKoffset is added into the RAR-grant-to-Msg3 slot relationship. Without it, the UL slot scheduled by the RAR would already be in the past by the time the grant crosses the long link. K_offset, broadcast in SIB19 and sized to the cell round-trip, shifts the scheduled slot later so it is actually reachable.

🎯

Preparing for a 4G/5G technical interview?

Random Access is one of the first things a mock interviewer digs into — Msg1/Msg2/Msg3/Msg4, RA-RNTI, contention resolution, backoff. Get live feedback on how clearly you can walk through it.

Book a Mock Interview ₹199 →

Related NTN topics

Random access leans on the UE's timing computation and on the delay-scaled timers around it — follow those threads next.

Timing Advance in NTN — the UE-specific + common TA the UE pre-computes for Msg1. HARQ over a Long Round-Trip — how the same delay reshapes retransmission. NTN Timers & K_offset — where the extended windows and K_offset come from.