Nit: messages almost always have a known length, while streams are a superset 
which may/may not have a known length, and address spaces are supersets of 
streams.

Yes, still sad we're not making address spaces work.

Get Outlook for Android<https://aka.ms/AAb9ysg>
________________________________
From: QUIC <[email protected]> on behalf of Mike Bishop 
<[email protected]>
Sent: Wednesday, March 20, 2024 3:55:45 PM
To: Matt Joras <[email protected]>; Marten Seemann <[email protected]>
Cc: QUIC WG <[email protected]>; WebTransport <[email protected]>
Subject: RE: Head-of-Line-Blocking of WebTransport Flow Control Messages

I agree with Matt. Unidirectional streams are messages, simply without the MTU 
length restriction. The feature Marten’s draft defines which isn’t present is 
the application’s ability to cancel/modify the message in case retransmission 
is needed. 
ZjQcmQRYFpfptBannerStart
This Message Is From an Untrusted Sender
You have not previously corresponded with this sender.

ZjQcmQRYFpfptBannerEnd

I agree with Matt. Unidirectional streams are messages, simply without the MTU 
length restriction. The feature Marten’s draft defines which isn’t present is 
the application’s ability to cancel/modify the message in case retransmission 
is needed. A similar effect can be achieved on unidirectional streams by 
canceling the old stream and sending a new one when a new instance is ready to 
be sent.



If WebTrans chooses to register a Single Capsule stream type in HTTP/3, they 
can do that either now or as an extension. (In either case, they would still 
need to define an internal framing layer to tie the stream/MESSAGE to the 
WebTransport session, similar to H3 Datagrams.)



From: QUIC <[email protected]> On Behalf Of Matt Joras
Sent: Sunday, March 17, 2024 12:30 PM
To: Marten Seemann <[email protected]>
Cc: QUIC WG <[email protected]>; WebTransport <[email protected]>
Subject: Re: Head-of-Line-Blocking of WebTransport Flow Control Messages



Speaking personally, I think this would be a confusing semantic to add to QUIC. 
RFC 9308[1] says of streams:



> Streams can provide message orientation and allow messages to be canceled. If 
> one message is mapped to a single stream, resetting the stream to expire an 
> unacknowledged message can be used to emulate partial reliability for that 
> message.



Indeed when discussing QUIC with application designers I often find myself 
explaining streams as arbitrarily lengthed messages that can even be made 
partially reliable. Introducing what is essentially a reliable datagram 
undermines the value proposition of streams over datagram-like abstractions, 
which I believe have less utility to applications in general. While this draft 
seems to be solving a real issue for WebTransport I would hope we could come up 
with a different solution that doesn't unintentionally reinforce the idea that 
QUIC streams are as semantically limited as stream sockets of yore.



Best,

Matt Joras



[1] 
https://www.rfc-editor.org/rfc/rfc9308.html#name-use-of-streams<https://www.rfc-editor.org/rfc/rfc9308.html#name-use-of-streams>



On Sun, Mar 17, 2024, 12:14 PM Marten Seemann 
<[email protected]<mailto:[email protected]>> wrote:

The current proposal 
(https://datatracker.ietf.org/doc/draft-thomson-webtrans-session-limit/<https://datatracker.ietf.org/doc/draft-thomson-webtrans-session-limit/>)
 for transmitting flow control messages serializes the capsules onto the 
WebTransport control stream. Since the control stream is a QUIC stream, this 
means that these messages suffer from HoL blocking in the case of packet loss.

Depending on the usage pattern of the WebTransport application, this will 
matter more or less.



Here's an alternative way to solve this problem: By allowing WebTransport to 
send the flow control messages / capsules directly on the QUIC connection, 
these messages can be transmitted independently from each other. This can be 
achieved by introducing a new QUIC frame: the MESSAGE frame. MESSAGEs are kind 
of similar to DATAGRAM frames, with the important distinction that MESSAGE 
frames are 1. delivered reliably to the application, and 2. retransmitted / 
updated in case of packet loss.



For more details, please refer to my (very early-stage) draft: 
https://marten-seemann.github.io/draft-seemann-quic-reliable-message/draft-seemann-quic-reliable-message.html<https://marten-seemann.github.io/draft-seemann-quic-reliable-message/draft-seemann-quic-reliable-message.html>

Reply via email to