Skip to content

Commit 7716cf1

Browse files
kixelatedclaude
andcommitted
moq-lite-04: clarify hop tracking semantics and fix editorial issues
Strengthen ANNOUNCE hop tracking: add MUST-level validation for Hop Count matching Hop ID entries, require relays to append Hop IDs when forwarding, and clarify Hop ID value 0 vs Hop Count value 0 semantics. Also fix grammar ("An series" → "A series"), a duplicate "section" word, and invalid BCP 14 keyword "SHOULD BE". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 29696a6 commit 7716cf1

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

draft-lcurley-moq-lite.md

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ moq-lite consists of:
6464

6565
- **Session**: An established QUIC connection between a client and server.
6666
- **Broadcast**: A collection of Tracks from a single publisher.
67-
- **Track**: An series of Groups, each of which can be delivered and decoded *out-of-order*.
68-
- **Group**: An series of Frames, each of which must be delivered and decoded *in-order*.
67+
- **Track**: A series of Groups, each of which can be delivered and decoded *out-of-order*.
68+
- **Group**: A series of Frames, each of which must be delivered and decoded *in-order*.
6969
- **Frame**: A sized payload of bytes within a Group.
7070

7171
The application determines how to split data into broadcast, tracks, groups, and frames.
@@ -132,7 +132,7 @@ The contents are opaque to the moq-lite layer.
132132

133133
# Flow
134134
This section outlines the flow of messages within a moq-lite session.
135-
See the section for Messages section for the specific encoding.
135+
See the Messages section for the specific encoding.
136136

137137
## Connection
138138
moq-lite runs on top of WebTransport.
@@ -306,7 +306,7 @@ Group age is computed relative to the latest group by sequence number.
306306
A group is never expired until at least the next group (by sequence number) has been received or queued.
307307
Once a newer group exists, a group is considered expired if the time between its arrival and the latest group's arrival exceeds `Max Latency`.
308308
The arrival time is when the first byte of a group is received (subscriber) or queued (publisher).
309-
An expired group SHOULD BE reset at the QUIC level to avoid consuming flow control.
309+
An expired group SHOULD be reset at the QUIC level to avoid consuming flow control.
310310

311311
## Unidirectional Streams
312312
Unidirectional streams are used for data transmission.
@@ -369,7 +369,7 @@ ANNOUNCE_PLEASE Message {
369369
Indicate interest for any broadcasts with a path that starts with this prefix.
370370

371371
**Exclude Hop**:
372-
If non-zero, the publisher SHOULD skip ANNOUNCE messages for broadcasts whose hop list contains this value.
372+
If non-zero, the publisher SHOULD skip ANNOUNCE messages for broadcasts whose Hop ID entries contain this value.
373373
This is used by relays to avoid routing loops in a cluster.
374374

375375
The publisher MUST respond with ANNOUNCE messages for any matching and active broadcasts, followed by ANNOUNCE messages for any future updates.
@@ -404,13 +404,15 @@ A flag indicating the announce status.
404404
This is combined with the broadcast path prefix to form the full broadcast path.
405405

406406
**Hop Count**:
407-
The number of Hop ID values that follow.
407+
The number of Hop ID entries that follow.
408+
A value of 0 means no Hop ID entries are present, indicating a fully unknown path (e.g. the announcement originated locally or was received from a peer that does not support hop tracking).
409+
A receiver MUST close the stream with a PROTOCOL_VIOLATION if the Hop Count does not match the number of subsequent Hop ID entries.
408410

409411
**Hop ID**:
410412
A unique identifier for each relay in the path from the origin publisher.
411-
Each relay SHOULD append its own Hop ID when forwarding an announcement.
412-
The number of hops is used as a tiebreaker when there are multiple paths to the same broadcast.
413-
A value of 0 indicates an unknown hop (e.g. when bridging from an older protocol version).
413+
Each relay MUST append its own Hop ID and increment the Hop Count when forwarding an announcement, even if no prior Hop ID entries are present (e.g. when receiving from an older protocol version).
414+
The Hop Count is used as a tiebreaker when there are multiple paths to the same broadcast.
415+
A Hop ID value of 0 indicates an unknown or bridged relay hop (e.g. when bridging from an older protocol version that does not assign Hop IDs); the Hop Count still reflects the total number of entries including unknown hops.
414416

415417

416418
## SUBSCRIBE

0 commit comments

Comments
 (0)