D2D supplements terrestrial networks
GSMA defines satellite direct-to-device as connectivity between satellites and ordinary mobile handsets, supplementing operator coverage and resilience. 3GPP Release 17 introduced standardized NTN support for NR and IoT, with Release 18 enhancements. The ecosystem also includes proprietary satellite messaging and operator partnerships with different devices, spectrum, regions, and service capabilities.
A backend cannot infer capability from a “satellite” icon. Discover whether the session supports emergency messaging, text, packet data, IoT telemetry, voice, or another profile; whether uplink and downlink are available; and what payload, latency, cost, and visibility constraints apply.
AvailabilityTerrestrial and satellite reach, sky visibility, regulatory region, operator agreement, device, subscription, and battery.
Transport envelopePayload size, uplink/downlink, expected delay, contact window, throughput, cost, and delivery semantics.
Message policyPriority, expiry, sensitivity, compression, retries, acknowledgment, deduplication, and fallback routes.
Local autonomyWhat the device can read, decide, record, alert, and safely execute without a current server response.
Model the connection as states, not online or offline
Useful states include terrestrial healthy, terrestrial degraded, satellite available, satellite constrained, waiting for a contact window, local-only, and emergency-only. A state is determined by measured capability, not merely interface presence. The application can then select a transport profile and user experience.
Do not continuously probe every path. Use operating-system and modem signals, provider callbacks, cached capability with expiry, and bounded active checks. Switching paths should not reset business operations or create duplicate side effects.
Connectivity fallback and delivery flow01 ClassifyDefine message intentEmergency, command, alert, position, form, telemetry, attachment, sync delta, or bulk history.
02 PackageCreate a durable envelopeStable ID, source, destination, schema, created time, expiry, priority, dependencies, hash, and encryption.
03 SelectChoose the best eligible pathWi-Fi, terrestrial mobile, satellite D2D, gateway relay, delayed transfer, or local-only mode.
04 AdaptFit the transport envelopeCompress, split attachments, send a summary, lower sample rate, batch, or preserve only critical fields.
05 TransferStore and forwardPersist before sending, use bounded retries and jitter, retain until acknowledged or expired.
06 AcceptDeduplicate and validateAuthenticate sender, verify integrity, reject replay, validate schema, and record idempotent acceptance.
07 ReconcileApply delayed events safelyCheck version, causality, business validity, conflicts, current authorization, and compensating actions.
08 ObserveExpose delivery outcomeQueued, path selected, sent, network accepted, server accepted, applied, rejected, expired, or unresolved.
The message envelope is the core abstraction
Every important operation needs a stable identifier and creation time independent of transmission time. Add expiry, priority, schema version, source device, actor, destination, sequence, base entity version, content hash, encryption metadata, and dependencies. Separate the small routing envelope from optional large content.
Use CloudEvents-compatible metadata where useful, but add domain fields for delay tolerance. A position update may remain useful for hours; an emergency alert may be urgent but still valuable after delay; a remote unlock command should expire quickly and require current authorization.
Prioritize by business value and lifetime
| Message | Priority and lifetime | Satellite payload | Backend behavior | Unsafe design |
|---|
| Emergency or safety alert | Highest; explicit expiry based on incident. | Identity/pseudonym, coarse location, event type, time, callback capability, integrity proof. | Immediate routing, duplicate suppression, escalation, repeated delivery status, human ownership. | Showing “delivered” after local queueing or discarding because a rich attachment failed. |
| Operational command | High but short-lived. | Command ID, target, parameters, preconditions, expiry, authorization reference. | Recheck authorization and current state; require acknowledgement and result; never execute stale commands. | Automatic replay after hours without verifying that the command remains safe. |
| Position or check-in | Medium; useful within a bounded window. | Compressed coordinates, accuracy, sample time, motion, battery, status. | Preserve sample time, accept out of order, build track by event time. | Displaying delayed coordinates as current location. |
| Sensor telemetry | Policy-dependent; aggregates often outlive individual samples. | Min/max/average, threshold crossings, quality, sample window. | Aggregate locally, deduplicate, merge windows, retain anomalies. | Sending every raw reading until the queue exhausts storage and battery. |
| Form or field report | Medium; durable until acknowledged. | Structured fields and attachment manifest; defer media. | Accept form first, upload attachments later, preserve draft and version conflicts. | Blocking the whole report because one photo cannot upload. |
| Bulk media or software update | Low; terrestrial-only by default. | Manifest or request, not the full object. | Wait for eligible Wi-Fi/terrestrial path and verify resumable chunks. | Consuming constrained satellite capacity and starving critical traffic. |
At-least-once delivery requires application idempotency
Constrained links and uncertain acknowledgements make duplicates normal. MQTT QoS 1 and many store-and-forward systems provide at-least-once semantics. The server must deduplicate by operation ID and return the original result for replay. Database writes, ticket creation, alerts, and commands need business idempotency, not only transport packet deduplication.
A timeout may happen after the server committed. Never generate a new operation ID simply because the client did not see the response. Retain a result ledger long enough for the maximum reconnection window.
Delayed events must retain event time and uncertainty
Store device event time, receive time, apply time, clock quality, location accuracy, and transport path. Process event-time windows rather than pretending arrival order is causal order. Permit late data where the domain benefits, but do not let old telemetry reopen a resolved incident or overwrite current state.
Clock drift and spoofing matter. Use monotonic local sequences, server-issued epochs, GNSS or network time quality, and plausibility checks. Show users when a value is delayed or estimated.
Commands need stricter rules than telemetry
Telemetry can often be merged later. Commands change the world. A command envelope needs authenticated issuer, target, scope, preconditions, creation and expiry, nonce, idempotency, expected version, approval, and required result. The receiver must evaluate current local safety before execution.
When disconnected, devices should follow bounded local policy: safe shutdown, alert, cache, rate limit, or continue a preapproved workflow. Do not wait indefinitely for cloud authorization in a safety-critical loop, and do not allow stale cloud intent to override newer local conditions.
Use explicit degraded modes
Degraded mode should remove expensive or unsafe behavior while preserving essential tasks. Send text instead of media, coarse location instead of a track, threshold events instead of raw streams, drafts instead of consequential writes, and cached instructions instead of live AI generation.
The interface must state which path is active, what may be delayed, approximate cost or battery impact where relevant, and the difference between stored, transmitted, accepted, and acted upon. False certainty is dangerous in emergency and remote operations.
Security spans long-lived queues
Encrypt content end to end where the transport or relay is not fully trusted. Sign or authenticate envelopes, prevent replay, rotate keys with disconnected devices in mind, and expire authorization independently from message storage. Protect queue contents at rest because a lost field device may hold unsent operational and location data.
Revocation is eventually consistent during disconnection. Limit offline authority, issue short scopes with carefully designed renewal, maintain deny lists that synchronize quickly, and require current online checks for high-risk actions.
Test contact windows and reconnection storms
Test no visibility, brief visibility, asymmetric links, high latency, low throughput, duplicate acknowledgements, out-of-order delivery, interrupted attachments, clock drift, full local storage, battery constraints, provider handover, roaming, expired credentials, and thousands of devices reconnecting together.
Use a transport simulator with configurable contact schedules, loss, delay, payload caps, and cost. Verify that critical traffic preempts bulk work and that queue compaction never deletes unacknowledged high-priority operations.
Observe each stage of delivery
Track queue depth and oldest age by priority, bytes by path, contact-window use, retries, duplicate rate, expiry, compression ratio, battery impact, time to network acceptance, time to server acceptance, time to business application, command result, and fallback frequency.
Business metrics include emergency acknowledgement, remote-worker check-in success, recovered telemetry, completed field reports, false location freshness, delayed-command rejection, and terrestrial capacity saved. Carrier and satellite availability are inputs; application outcomes prove resilience.
What I would build
I would build a connectivity abstraction with a durable message store, policy-based path selector, payload transformer, priority scheduler, provider adapters, idempotent ingest, event-time reconciler, secure command service, and a delivery-state API shared by mobile, IoT, and operations dashboards.
Each message type would declare maximum delay, payload tiers, eligible paths, cost ceiling, required acknowledgement, local fallback, security level, and conflict policy. The application would remain functional when new satellite providers or NTN profiles are added because transport details stay behind the contract.
The design principle
Satellite D2D is valuable because it adds a path where no terrestrial path exists. Resilient software does not pretend that path behaves like broadband. It packages intent durably, adapts to the available envelope, preserves local autonomy, verifies delayed effects, and communicates uncertainty honestly.