Skip to content

Commit dfeff06

Browse files
kixelatedclaude
andauthored
Reference moq-transport padding in probe extension (#18)
* Reference moq-transport padding instead of defining it moq-wg/moq-transport#1475 added padding streams and datagrams to draft-18. Remove the duplicate padding definitions and IANA datagram registration, referencing Section 7.7 instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Replace 0xPROBE_TODO with TBD1/TBD2 placeholders Use RFC-style TBD tokens: TBD1 for the setup option key, TBD2 for the stream type. Consistent across wire format and IANA registry entries. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 59bdc77 commit dfeff06

1 file changed

Lines changed: 11 additions & 45 deletions

File tree

draft-lcurley-moq-probe.md

Lines changed: 11 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ informative:
2424
--- abstract
2525

2626
This document defines a PROBE extension for MoQ Transport {{moqt}}.
27-
A subscriber opens a bidirectional PROBE stream to request that the publisher pad the connection up to a target.
28-
The publisher periodically responds with the measured bitrate and an elapsed timestamp, enabling the subscriber to estimate the available bandwidth.
27+
A subscriber opens a bidirectional PROBE stream to request that the publisher pad the connection up to a target bitrate.
28+
The publisher sends padding as defined in {{moqt}} Section 7.7 and periodically responds with the measured bitrate and an elapsed timestamp, enabling the subscriber to estimate the available bandwidth.
2929

3030
--- middle
3131

@@ -47,11 +47,10 @@ A viewer may get stuck at a low quality rendition indefinitely because the conge
4747
If the viewer does attempt to switch to a higher rendition without first probing, they risk buffering — either because the congestion window has not been warmed up to support the higher bitrate, or because the network genuinely cannot sustain it.
4848
Without probing, the subscriber cannot distinguish between these two cases.
4949

50-
{{moqt}} Section 3.7.2 suggests subscribing to additional tracks at low priority to fill the congestion window during probing intervals.
50+
{{moqt}} Section 3.7.2 suggests subscribing to additional tracks at low priority or sending padding to fill the congestion window during probing intervals.
5151
However, this is difficult in practice because the subscriber does not know when probing is needed or by how much.
5252
The congestion window and bandwidth estimate are internal to the sender's congestion controller and are not exposed to the application, let alone the remote peer.
5353
The subscriber cannot distinguish between "the network has more capacity" and "the congestion controller is already fully utilizing the link".
54-
It also requires the publisher to have pre-encoded padding tracks and the subscriber to manage extra subscriptions.
5554

5655
## Hop-by-Hop
5756
MoQ is designed to work end-to-end via relays.
@@ -62,8 +61,8 @@ Using a wire-level extension ensures that PROBE measurements are scoped to a sin
6261
A relay terminates the PROBE stream and does not forward it upstream, avoiding incorrect measurements that reflect intermediate link capacity.
6362

6463
## This Extension
65-
This extension provides a simple mechanism for bandwidth estimation.
66-
The subscriber opens a PROBE stream and requests that the publisher pad the connection to a target.
64+
{{moqt}} defines padding streams and datagrams (Section 7.7) for probing, but does not define a signaling mechanism for a subscriber to request padding or for a publisher to report measurements.
65+
This extension fills that gap: the subscriber opens a PROBE stream to request that the publisher pad the connection to a target bitrate using {{moqt}} padding.
6766
The publisher responds with periodic measurements, allowing the subscriber to adjust its subscriptions accordingly.
6867

6968

@@ -74,7 +73,7 @@ Both endpoints indicate support by including the following Setup Option:
7473

7574
~~~
7675
PROBE Setup Option {
77-
Option Key (vi64) = 0xPROBE_TODO
76+
Option Key (vi64) = TBD1
7877
Option Value Length (vi64) = 0
7978
}
8079
~~~
@@ -87,7 +86,7 @@ If a peer receives a PROBE stream without having negotiated the extension, it MU
8786
The PROBE extension uses a new bidirectional stream type.
8887

8988
~~~
90-
STREAM_TYPE = 0xPROBE_TODO
89+
STREAM_TYPE = TBD2
9190
~~~
9291

9392
The stream type is sent at the beginning of the stream, encoded as a variable-length integer, consistent with {{moqt}} stream type framing.
@@ -109,7 +108,7 @@ PROBE_REQUEST {
109108

110109
**Target Bitrate**:
111110
The desired bitrate in kilobits per second.
112-
The publisher SHOULD pad the connection to attempt to reach this rate.
111+
The publisher SHOULD send padding as defined in {{moqt}} Section 7.7 to attempt to reach this rate.
113112
A value of 0 indicates no padding is needed; the publisher SHOULD only send media data but MUST continue sending PROBE_RESPONSE messages.
114113
This is useful for passively monitoring the current bitrate without actively probing for more bandwidth.
115114
Either endpoint MAY close or reset the stream to stop receiving updates entirely.
@@ -146,32 +145,7 @@ The interval is implementation-defined but a value between 100ms and 1000ms is R
146145

147146

148147
# Padding
149-
Padding is optional and depends on the capabilities of the QUIC implementation.
150-
A publisher that does not support padding MUST still send PROBE_RESPONSE messages based on the actual sending rate.
151-
152-
## QUIC-Level Padding
153-
The preferred method is for the QUIC implementation to send PING+PADDING frames.
154-
PADDING frames alone MUST NOT be used, as they are not ack-eliciting and can cause starvation of the congestion controller.
155-
PING+PADDING is transparent to the application and does not consume application-level flow control.
156-
157-
## Datagram Padding
158-
If the QUIC implementation does not expose a padding API, the publisher MAY send QUIC datagrams as a fallback.
159-
Datagrams are unreliable and do not consume stream-level flow control, making them suitable for padding.
160-
161-
A PROBE datagram is identified by a well-known datagram type:
162-
163-
~~~
164-
PROBE Datagram {
165-
Datagram Type (vi64) = 0xPROBE_TODO
166-
Padding (..)
167-
}
168-
~~~
169-
170-
The contents of the Padding field are arbitrary and MUST be discarded by the receiver.
171-
The receiver MUST NOT interpret the contents as application data.
172-
173-
## General Requirements
174-
Padding SHOULD be sent at the lowest priority to avoid interfering with media delivery.
148+
The publisher SHOULD send padding using the mechanisms defined in {{moqt}} Section 7.7 (padding streams and/or padding datagrams).
175149

176150
The publisher MUST NOT exceed the target with padding alone.
177151
If media traffic already meets or exceeds the target, no additional padding is necessary.
@@ -201,23 +175,15 @@ This document registers the following entry in the "MoQ Setup Option Types" regi
201175

202176
| Value | Name | Reference |
203177
|:------|:-----|:----------|
204-
| 0xPROBE_TODO | PROBE | This Document |
178+
| TBD1 | PROBE | This Document |
205179

206180
## MOQT Stream Type
207181

208182
This document registers the following entry in the "MoQ Stream Types" registry:
209183

210184
| Value | Name | Reference |
211185
|:------|:-----|:----------|
212-
| 0xPROBE_TODO | PROBE | This Document |
213-
214-
## MOQT Datagram Type
215-
216-
This document registers the following entry in the "MoQ Datagram Types" registry:
217-
218-
| Value | Name | Reference |
219-
|:------|:-----|:----------|
220-
| 0xPROBE_TODO | PROBE | This Document |
186+
| TBD2 | PROBE | This Document |
221187

222188

223189
--- back

0 commit comments

Comments
 (0)