>
Home5G NTNMobility & Higher LayersMobility & Feeder Switch
๐Ÿ“ก Mobility & Higher LayersIntermediate

Mobility & Feeder-Link Switch in 5G NTN

Cell types (earth-fixed, quasi-earth-fixed, earth-moving), location- and time-based cell reselection, conditional handover for NTN, and the hard/soft feeder-link switch.

📚 3GPP-basedTS 38.300TS 38.304TS 38.331

In a terrestrial network the cell stands still and the phone walks around it. In Non-Terrestrial Networks the roles invert: the satellite is the fast-moving thing, and a low-Earth-orbit (LEO) bird races overhead at roughly 7.5 km/s. Its cell footprint sweeps across the ground, so even a phone bolted to a rooftop is handed from cell to cell every few seconds. That single fact reshapes how mobility works, and it is why Rel-17 NR-NTN adds location- and time-based handover triggers on top of the familiar radio ones. This page is grounded in TS 38.331 (RRC) and TS 38.304 (idle-mode UE procedures).

Introduction

NTN mobility is the set of procedures that keep a UE attached as the serving satellite — and therefore its cell — moves out from over you. It spans two states: the connected-mode handover of an RRC_CONNECTED UE from one cell/beam/satellite to the next, and the idle-mode cell reselection of an RRC_IDLE / RRC_INACTIVE UE. In both, the trigger to move is anchored to predictable geometry and time rather than to a fading radio measurement.

It sits immediately after cell selection and registration in the UE lifecycle: once the UE has camped and (for connected mode) established a bearer, mobility is what preserves that service through the relentless churn of a LEO constellation. Get it wrong and a stationary sensor drops its session every few seconds; get it right and coverage feels continuous even though no single satellite is ever overhead for long.

Because NTN mobility is a sequence of distinct signalling steps — measurement/assistance configuration, the conditional-handover trigger, the RACH to the target, and the completion — a failure almost always lives in one step. Knowing which step broke (did the CHO ever get provisioned? did D1 fire? did RACH to the target complete?) narrows the root cause enormously, which is exactly the step-by-step habit this page builds.

Why NTN mobility is needed

💡

In plain words: terrestrial mobility is a passenger walking through a train station, handed from one fixed CCTV camera to the next as they move. NTN mobility is the opposite — the passenger stands perfectly still while the cameras themselves glide past overhead on rails. You must be handed to the next camera not when you move, but on a schedule, before the current one slides out of view.

Concretely, mobility exists to solve one problem: a LEO satellite is only above your horizon for a few minutes, and any single beam dwells over a ground point for only seconds to tens of seconds. Without a mobility procedure, a connected UE would lose its serving cell — and its bearer — the instant the beam swept away. So the network must (1) provision the next cell as a candidate before the current one dies, (2) trigger the move on something predictable, and (3) execute a fast, usually contention-free, access to the target so the session survives the gap. NTN mobility is the only thing standing between a moving constellation and a dropped call.

What

A set of RRC and MAC procedures — conditional handover in connected mode, location/time-assisted reselection in idle mode — that move a UE from a departing cell to an arriving one as the constellation sweeps.

Why

A LEO cell serves any ground point only briefly. Service must be handed to the next beam/satellite on schedule, before the current radio collapses, or every session drops.

How

Pre-provision candidates over Xn, store a condRRCReconfig with a geometric condExecutionCond (CondEvent D1/T1), and let the UE execute the stored handover locally — typically via contention-free RACH to the target.

Why NTN mobility is upside-down

The intuition to unlearn is "the cell is a fixed place." For a LEO satellite the beam painted on the ground is moving with the satellite, so the geometry between you and your serving cell changes continuously whether or not you move. A stationary IoT sensor in a field will still see its serving satellite climb the sky, pass overhead, and drop toward the far horizon in the space of a few minutes — and during that pass it may be handed over several times as successive beams and successive satellites take over. Handover in NTN is therefore driven by orbital geometry, not by user movement.

The second thing to unlearn is "RSRP tells me when to move." In terrestrial mobility a falling SS-RSRP is a reliable proxy for "you are leaving the cell." In LEO NTN it is not. The whole footprint is sweeping, the path length to the satellite is enormous and changes fast, and a beam can stay roughly equally strong right up until it leaves you behind — or fade and recover as the satellite's antenna pattern rolls over you. Signal strength no longer maps cleanly to "where am I in the cell," so a purely RSRP-triggered handover fires late, early, or not at all. What is reliable is that the satellite's position as a function of time is known precisely from ephemeris, and your own position is known from GNSS. Mobility in NTN leans on that predictable geometry instead of on noisy radio measurements. See ntn-orbits for why LEO in particular forces this.

🎯

The core inversion: terrestrial = fixed cell, moving UE, RSRP-triggered handover. NTN LEO = moving cell, (often) fixed UE, geometry-triggered handover. A stationary UE still hands over constantly because the footprint, not the user, is what moves.

Earth-moving, earth-fixed and quasi-earth-fixed cells

How the footprint behaves on the ground depends on whether the satellite steers its beams, and 3GPP names three patterns. They matter because each produces a different handover cadence.

Earth-moving

The beam is fixed relative to the satellite, so the footprint slides across the ground as the satellite flies. A ground point is covered only while the moving beam happens to be over it. Simplest for the payload, hardest for mobility — frequent, unavoidable handovers even for a still UE.

Earth-fixed

The satellite steers its beams to hold a footprint over one fixed geographic area for a dwell time, then re-points to the next area as it flies on. The ground cell looks stationary — like a terrestrial cell — for the dwell, so a fixed UE mostly stays put until the cell is handed off wholesale.

Quasi-earth-fixed

A practical middle ground: the beam is held on a fixed area for a bounded period, then jumps to serve the next area. Coverage of any one spot is fixed-then-gap-then-next, rather than a continuous slide. Common for LEO where continuous steering over a full pass is not feasible.

All three tie into one broadcast parameter from SIB19: t-Service. This tells the UE the time at which the serving cell will stop serving its current area — the moment an earth-fixed or quasi-earth-fixed cell is about to re-point away, or the moment a moving beam will have swept past. Knowing t-Service in advance, the UE (idle or connected) can prepare to move before the radio actually collapses, which is exactly the kind of predictive trigger that pure RSRP cannot give you.

PatternWhat movesDwell over a ground pointHandover frequency for a still UE
Earth-movingFootprint slides continuously with the satelliteShort — only while the beam passes overHigh and continuous
Quasi-earth-fixedBeam held on an area, then jumps to the nextA bounded period, then a jumpPeriodic — at each re-point / t-Service
Earth-fixedBeam steered to hold one area for a dwellFull configured dwell timeLowest — cell looks stationary until handed off

Location- and time-based conditional handover

Because radio measurements alone are unreliable, Rel-17 extends Conditional Handover (CHO) with two execution conditions that key off geometry instead of RSRP. The network still pre-provisions candidate targets early over Xn and stores a condRRCReconfig plus a condExecutionCond in the UE inside conditionalReconfiguration; only the trigger changes. The two new NTN CHO events are:

  • CondEvent D1 — a distance/location condition. The UE computes its distance (from its own GNSS position) to a configured serving-side anchor referenceLocation1 and a target-side anchor referenceLocation2, and executes when it moves further than distanceThreshFromReference1 from the serving reference and closer than distanceThreshFromReference2 to the target reference. In effect: "when I have crossed geometrically from the serving cell's area into the target's."
  • CondEvent T1 — a time-window condition. The UE executes when a measured time passes a start threshold t1-Threshold and stays within a configured duration. Because the serving cell's coverage end is predictable (it maps onto t-Service / ephemeris), the network can simply tell the UE "hand over inside this time window."

Contrast this with the classic radio events. Ordinary CHO uses CondEvent A3 (a candidate becomes an a3-Offset better than the serving cell) or CondEvent A5 (serving falls below a5-Threshold1 while a candidate rises above a5-Threshold2) — both comparing SS-RSRP/SS-RSRQ. In NTN those still exist, but D1 and T1 are the workhorses because they fire on where you are and what time it is, quantities that are dead-reckonable from ephemeris and GNSS long before the radio tells you anything. The RRC machinery lives in TS 38.331; the idle/location handling in TS 38.304.

LEO footprint sweeping over a stationary UE ground, time → stationary UE Cell A (serving) Cell B (target) Cell C (next) footprint sweep direction (satellite motion) referenceLocation1 referenceLocation2 D1: far from ref1 & near ref2 → execute CHO to B
Figure 1. As the LEO footprint sweeps, the UE's own GNSS distance to the serving anchor (referenceLocation1) grows and its distance to the target anchor (referenceLocation2) shrinks. CondEvent D1 executes the stored handover when both distance thresholds are crossed — no RSRP report needed.
🔑

Same CHO container, geometric trigger: D1 and T1 plug into the ordinary CHO framework — stored condRRCReconfig, up to eight candidates, UE-local execution — but the condExecutionCond points at a condTriggerConfig carrying distance thresholds (distanceThreshFromReference1/2) or a time threshold (t1-Threshold) rather than an RSRP offset.

🔀

LTE ↔ NR: LTE had no conditional handover at all — every handover was a hard, network-commanded RRCConnectionReconfiguration with mobilityControlInfo that could arrive too late if the radio dropped first. NR added baseline CHO in Rel-16 (radio events A3/A5), and Rel-17 NTN added the geometric events CondEvent D1/T1. There is no LTE-NTN equivalent of D1/T1; NB-IoT/eMTC over NTN reuse the NR-NTN assistance concepts rather than an LTE mechanism.

The CHO flow, step by step

Even though the UE executes the handover locally, an NTN CHO is a signalling sequence with four distinct phases. Walk them in order — the first phase that misbehaves is your root cause.

UE Serving gNB Target gNB Xn: CHO Request / ACK (prepare candidates) RRCReconfiguration (conditionalReconfiguration: D1/T1) RRCReconfigurationComplete UE evaluates GNSS vs ref locations / t-Service D1/T1 fires CFRA: PRACH preamble (rach-ConfigDedicated) RRCReconfigurationComplete → on target
Figure 2. NTN conditional handover: the serving gNB prepares candidates over Xn, configures the UE with a geometric D1/T1 condition, the UE evaluates it locally against its GNSS fix and t-Service, and on trigger runs contention-free RACH to the target and completes there.

Step 1 — Candidate preparation and CHO configuration

The serving gNB decides, from ephemeris and the UE's reported GNSS/measurements, which cells will next cover the UE, and prepares them over Xn (an Xn Handover Request / acknowledge). It then sends the UE an RRCReconfiguration carrying conditionalReconfiguration — one or more condRRCReconfig entries (each a full target config with its reconfigurationWithSync), each paired with a condExecutionCond selecting CondEvent D1 and/or T1. The UE confirms with RRCReconfigurationComplete and starts evaluating locally. This message is scheduled like any dedicated DL RRC: PDSCH โ† DCI format 1_1 / C-RNTI in the UE-specific search space.

✅ Debugging steps

  • Confirm the UE actually received and stored the conditionalReconfiguration — check for RRCReconfiguration with a condRRCReconfig list and a matching RRCReconfigurationComplete.
  • Verify each candidate carries valid referenceLocation1/2 and thresholds (distanceThreshFromReference1/2) or t1-Threshold/duration consistent with the serving cell's t-Service.
  • Check the Xn preparation succeeded for every candidate (no Xn Handover Preparation Failure); an unprepared target cannot be executed to.
  • Confirm the UE has a current GNSS fix — a stale or missing fix means D1 can never be evaluated.

⚠ Common causes of failure

  • CHO never provisioned — serving gNB failed to prepare candidates over Xn, so there is nothing to execute.
  • Thresholds mis-set relative to ephemeris/t-Service, so D1/T1 would fire far too early or after the cell is already gone.
  • Missing/stale GNSS fix at the UE, so distance to the reference locations cannot be computed.
  • Wrong or absent referenceLocation2 for the target, so the "near the target" half of D1 is never satisfied.

Step 2 — Local evaluation and trigger

The UE now continuously computes its distance from referenceLocation1 and referenceLocation2 (using its GNSS position) and tracks the clock against t1-Threshold/t-Service. When CondEvent D1 (far enough from serving and close enough to target) or CondEvent T1 (inside the time window) is satisfied for a prepared candidate, the UE selects that candidate and begins execution — no measurement report is sent to the network; the decision is entirely UE-local.

✅ Debugging steps

  • In the UE trace, check the evaluated distances against distanceThreshFromReference1/2 — are both halves of D1 crossing as expected?
  • For T1, verify the UE clock and epochTime/ephemeris are aligned so t1-Threshold is evaluated against the right reference time.
  • Confirm exactly one candidate is selected on trigger; multiple simultaneous triggers can indicate overlapping thresholds.
  • Check the GNSS update rate is fast enough that the trigger is not detected several seconds late.

⚠ Common causes of failure

  • Trigger never fires — thresholds too loose, or GNSS fix drifted/lost so distances are wrong.
  • Trigger fires too late — sparse GNSS updates or a coverage gap delay evaluation until the serving radio is already gone.
  • Clock/ephemeris misalignment makes T1 evaluate against the wrong epoch.
  • Selected candidate is no longer suitable (its own t-Service already elapsed), so the UE hands over to a dying cell.

Step 3 — Random access to the target

On trigger the UE applies the stored target configuration (the reconfigurationWithSync inside the chosen condRRCReconfig) and runs random access toward the target cell. NTN handover normally uses contention-free RACH via a rach-ConfigDedicated in the stored config, so the target already reserves a dedicated preamble for this UE. The critical NTN twist: the UE pre-compensates the target's timing advance and Doppler from that cell's ephemeris (in its SIB19) plus the UE's own GNSS position, so Msg1 lands inside the target's window despite the enormous round trip. The RAR (Msg2) is carried on PDSCH โ† DCI format 1_0 / RA-RNTI in the Type1-PDCCH common search space, exactly as in terrestrial RACH — only the timing pre-compensation differs.

✅ Debugging steps

  • Confirm the UE launched RACH on the target — check for a dedicated preamble from rach-ConfigDedicated and a matching RAR (DCI 1_0 / RA-RNTI).
  • Verify the UE-computed NTN timing advance/Doppler for the target used the target's ephemeris, not the serving cell's.
  • Check the RAR arrived within the (NTN-extended) ra-ResponseWindow, which must account for the long propagation delay.
  • Cross-check the reserved preamble index at the target against what the UE transmitted.

⚠ Common causes of failure

  • Wrong TA/Doppler pre-compensation (used serving-cell ephemeris) so Msg1 lands outside the target's window and is never detected.
  • ra-ResponseWindow too short for the NTN round trip, so a valid RAR is declared missing.
  • Dedicated preamble not actually reserved at the target (Xn prep incomplete), forcing a contention-based fallback or failure.
  • Target beam already swept past by the time RACH starts — a late Step-2 trigger cascading into RACH failure.

Step 4 — Completion and release

After RACH succeeds, the UE sends RRCReconfigurationComplete to the target gNB, which becomes the new serving cell; the path is switched in the core and the old serving resources (and the other prepared candidates) are released. From here the UE resumes normal scheduling under its C-RNTI on the target. If any step failed before completion, the UE falls back to re-establishment (RRCReestablishmentRequest) or, if idle, to reselection.

✅ Debugging steps

  • Confirm RRCReconfigurationComplete reached the target and the target began scheduling the UE under its C-RNTI.
  • Verify the core path switch completed (Xn Path Switch / user-plane update) so downlink data now flows via the target.
  • Check the serving side released the UE context and the stale candidate configurations were cleared.
  • If completion failed, look for a subsequent RRCReestablishmentRequest — that is the recovery path, and its cause points back to the broken step.

⚠ Common causes of failure

  • Completion message lost on a poor target downlink, so the target never adopts the UE.
  • Path switch failure in the core, so user-plane data still targets the old cell.
  • Serving context not released, leaving stale bearers and duplicate paging.
  • Handover ping-pong across a fixed-TA/beam boundary from thresholds too tight.

Representative UE mobility log (NTN CHO) — illustrative, values vary by vendor/build:

RRC_RECONFIG: condReconfig stored, numCandidates=3 cand[0] physCellId=214 event=D1 refLoc1=(48.85,2.35) refLoc2=(49.10,2.60) distThreshRef1=40000 m distThreshRef2=35000 m cand[1] physCellId=217 event=T1 t1-Threshold=+18.4 s duration=2560 ms NTN_ASSIST: t-Service=+21.0 s ephemerisValid=1 gnssFixAge=1.2 s CHO_EVAL: dToRef1=41250 m (>40000) dToRef2=33800 m (<35000) -> D1 MET cand[0] CHO_EXEC: applying reconfigurationWithSync pci=214, CFRA preamble=51 RACH_TARGET: MSG1 preamble=51 taNTN=8.42 ms dopplerHz=-41230 RACH_TARGET: MSG2 RAR rxWin=OK, TA-cmd applied RRC: RRCReconfigurationComplete sent to pci=214 -> HO SUCCESS
FieldMeaningExampleCheck
numCandidatesHow many CHO targets were provisioned in conditionalReconfiguration.3Zero means CHO never provisioned; must be ≤ 8 candidates.
eventTrigger type stored for the candidate (D1/T1/A3/A5).D1Should be geometric (D1/T1) for LEO; a bare A3 may fire unreliably.
refLoc1/refLoc2Serving/target reference anchors for D1 (referenceLocation1/2).lat/lon pairsMust be present and geographically sane vs the cells' footprints.
distThreshRef1/2Distance thresholds (distanceThreshFromReference1/2).40000/35000 mBoth halves must be crossable before t-Service elapses.
t-ServiceTime the serving cell stops serving this area (from SIB19).+21.0 sTrigger must fire comfortably before this, or the radio dies first.
gnssFixAgeAge of the UE's GNSS position fix.1.2 sA stale fix (large age) invalidates D1 distance math.
taNTN/dopplerHzUE pre-computed timing advance / Doppler for the target service link.8.42 ms/-41230Must be derived from the target's ephemeris, not the serving cell's.
RRCReconfigurationCompleteCompletion sent to the target — handover succeeded.sent to pci=214Absent = HO failed; expect re-establishment next.

Idle-mode reselection with location and timing

An idle NTN UE cannot lean on RSRP ranking the way a terrestrial idle UE does, for the same geometric reason. Instead, cell reselection in NTN is assisted by location and timing. The cell broadcasts a reference location and satellite ephemeris in SIB19, and the UE combines that with its own GNSS fix to reason about which cell it should be on and how long the current one will last. Crucially, the UE is told t-Service — the time the serving cell will stop serving its area — so it can reselect in time, before coverage of that cell ends, rather than waiting to discover a dead radio and then scrambling. The ordinary S-criterion (Srxlev) and the broadcast q-RxLevMin thresholds still apply for suitability, but the timing of the move is anchored to predictable geometry, not to a fade.

💡

Why a still, idle UE still reselects: with an earth-moving beam the serving satellite simply flies out of range on schedule. The UE reads t-Service and the ephemeris, sees the clock running out on its current cell, and reselects to the next satellite/cell before the old one goes dark — all with no signalling, exactly as terrestrial reselection is connectionless.

✅ Debugging steps

  • Confirm the idle UE decoded SIB19 with a valid t-Service, reference location and ephemeris.
  • Check the UE holds a fresh GNSS fix so it can evaluate Srxlev/q-RxLevMin suitability and the geographic anchor.
  • Verify the UE reselects before t-Service rather than after the serving radio collapses.

⚠ Common causes of failure

  • Missing/stale GNSS fix, so the UE cannot judge suitability or timing and camps too long.
  • t-Service not read (SIB19 decode failure), so the UE reselects reactively after the cell dies.
  • No suitable neighbour available in the gap for a sparse constellation — see discontinuous coverage handling in NTN registration.

Summary

The fastest way to root-cause an NTN mobility failure is to remember that the cell, not the user, is what moves — then walk the handover phases in order and find the first that broke. Provision → Trigger → RACH → Complete: if the UE never has a candidate, suspect Xn preparation or a missing conditionalReconfiguration. If the candidate is stored but D1/T1 never fires, suspect thresholds versus t-Service, or a stale GNSS fix. If the trigger fires but RACH to the target fails, suspect TA/Doppler pre-compensation against the wrong ephemeris, or an ra-ResponseWindow too short for the round trip. If RACH succeeds but the UE never settles on the target, suspect the completion message, the core path switch, or context release.

The unifying idea is that NTN replaces the terrestrial "RSRP fell, so move" logic with "geometry and time say the cell is about to leave, so move first." Isolating the broken phase turns a vague "NTN drop" into a specific, testable hypothesis — each phase points at a small, distinct set of causes, so knowing where it broke usually tells you why.

Interview quickfire

Q&A Interview quickfire

Q. Why are RSRP-based handover triggers unreliable in LEO NTN?

A. The whole footprint sweeps with the fast-moving satellite, and the very long, rapidly changing path length means SS-RSRP no longer maps cleanly to "where am I in the cell." A beam can stay strong until it leaves you, or fade and recover with the antenna pattern, so a purely RSRP-triggered handover fires late, early, or not at all. Geometry — ephemeris plus the UE's GNSS position — is predictable and is used instead.

Q. What new CHO trigger types did Rel-17 add for NTN, and why?

A. CondEvent D1 (distance/location): execute when the UE is farther than distanceThreshFromReference1 from serving referenceLocation1 and closer than distanceThreshFromReference2 to target referenceLocation2. And CondEvent T1 (time): execute inside a window defined by t1-Threshold and duration. Both key off predictable geometry/time rather than noisy radio, which is far more reliable when the cell itself is moving.

Q. What is different about the RACH the UE runs toward the target during an NTN handover?

A. It is normally contention-free (a dedicated preamble from rach-ConfigDedicated in the stored reconfigurationWithSync), and the UE must pre-compensate the target's timing advance and Doppler from the target cell's ephemeris plus its own GNSS position — not the serving cell's. The RAR still comes on PDSCH via DCI format 1_0 / RA-RNTI in the Type1-PDCCH CSS, but ra-ResponseWindow is extended to absorb the long round trip.

Q. Hard versus soft feeder-link switch?

A. Hard is break-before-make — the satellite drops the old gateway then acquires the new one, causing a brief interruption. Soft is make-before-break — two feeder links run simultaneously so service is never dropped, at the cost of dual feeder-link capability. Either may appear to the UE as a handover or be transparent, depending on whether the serving gNB/cell changes.

Q. Why does a stationary NTN UE still hand over?

A. Because in NTN the cell moves, not the user. A LEO satellite's footprint sweeps across the ground (earth-moving beams) or re-points periodically (quasi-earth-fixed), so a fixed UE is handed between successive beams and satellites as they pass. The UE uses t-Service and ephemeris to move before its current cell stops serving.

Where NTN mobility connects

Mobility rests on what the cell broadcasts about itself, on why a single beam can span many jurisdictions, and on how the core keeps a moving UE reachable. Follow these next.

SIB19 & NTN assistance — t-Service, ephemeris, reference locationGNSS, Location & Tracking Areas — registration as beams sweepNTN & the 5GC — feeder-link switch and reachability