Expand description
SRT ARQ (Automatic Repeat reQuest) reliability engine —
draft-sharabayko-srt-01 §4.8 (Acknowledgement and Lost Packet
Handling), §4.8.1 (Packet Acknowledgement — ACKs, ACKACKs), §4.8.2
(Packet Retransmission — NAKs), §4.10 (Round-Trip Time Estimation).
Curated behavioural rules: specs/rules/srt-arq.md. The wire field
layouts this module drives (ACK/NAK/ACKACK) are the existing
crate::packet codecs — this module never re-encodes them, it only
decides when to build one and what to do with one received.
Sans-IO, like the rest of this crate: Sender and Receiver never
read a wall clock. All timing is driven by a caller-supplied
now: core::time::Duration (elapsed time since a fixed epoch the caller
owns) passed to tick/feed_data/on_data/on_ack/on_ackack.
§Module map
seq— wrap-safe 31-bit sequence-number arithmetic (not itself asrt-arq.mdrule — the draft does not specify a comparison algorithm; see the module doc there for the resolution).rtt::RttEstimator— the rule 29-31 RTT/RTTVar EWMA, shared by both roles (rule 34: a socket’s RTT state is really one estimator usable by both a sender and a receiver path).Sender— send buffer, NAK-driven retransmit queue, ACK/ACKACK handling (rules 1, 3, 5, 7-10, 15-18, 23-24, 33).Receiver— loss detection, Full/Light ACK generation, periodic NAK, ACKACK-driven RTT measurement (rules 4, 8, 11-14, 21-22, 26-30, 32).
§Non-goals (explicit follow-ups, not curated as ARQ rules here)
- TLPKTDROP fake-ACK skip handling (rule 13) —
srt-tsbpd.mdscope. - RTO-based periodic retransmission without a NAK / congestion control (§5, FileCC) — srt-arq.md is explicit that the RTO formula is congestion-control scope, not curated there.
- Send-queue overflow / unsent-packet drop sizing (rules 19-20) — the latency-window math is §4.4/§4.5 scope.
Re-exports§
pub use rtt::RttEstimator;
Modules§
- rtt
- RTT / RTTVar EWMA estimation —
draft-sharabayko-srt-01§4.10 (Round-Trip Time Estimation),specs/rules/srt-arq.mdrules 29-31. - seq
- 32-bit wrap-safe sequence-number arithmetic for SRT ARQ.
Structs§
- Feed
Outcome - Outcome of one
Receiver::feed_datacall. - Receiver
- ARQ receiver-side state (
draft-sharabayko-srt-01§4.8.1/§4.8.2/§4.10). - Sender
- ARQ sender-side state (
draft-sharabayko-srt-01§4.8). See the module doc for the sans-IO contract.
Constants§
- FULL_
ACK_ PERIOD - Full ACK timer period — 10 milliseconds (
specs/rules/srt-arq.mdrule 11, quotingdraft-sharabayko-srt-01L2874-2876: “the ACK period or synchronization time interval SYN”). - LIGHT_
ACK_ THRESHOLD - Light-ACK packet-count threshold — 64 packets (
specs/rules/srt-arq.mdrule 12, L2877-2883): if this many packets have been sent/received within the Full ACK period, the receiver sends a Light ACK early. - NAK_
INTERVAL_ FLOOR NAKIntervalfloor — 20 milliseconds (specs/rules/srt-arq.mdrule 22, L2953-2960 / L3276):NAKInterval = max((RTT + 4*RTTVar) / 2, 20ms).