Open aochagavia opened 4 weeks ago
On a second thought, I also feel the attractive of keeping things as simple as possible. Instead of coming up with a mapping to multiple QUIC streams (and validating that we have everything covered), we could use a single bidirectional stream instead and let all traffic go through it. This is analogous to what happens in NETCONF over TLS, so we could even base our specification on RFC 7589. We won't be using any fancy QUIC features, but since we probably don't need them anyway, this might be the best way forward after all.
From Andy Bierman, andy@yumaworks.com on mailing list (https://mailarchive.ietf.org/arch/msg/netconf/eRWTJVsikihEt-UdaRYqTrXA-Ko/)
NETCONF uses sessions. RESTCONF does not.
https://datatracker.ietf.org/doc/html/rfc6241#section-4.5
Within a single session the RPC processing is serialized.
There is a bi-directional stream per NETCONF session, not per request.
Good to hear! That will probably let us reuse most of RFC 7589.
The current specification of the QUIC stream mapping is ambiguous. Below are a few ideas to improve it.
4.1. Bidirectional Stream Between client and server
Current text:
Suggestions:
<rpc>
is initiated by the server, but also that<rpc-reply>
is sent by the server. That sounds contradictory. From the perspective of QUIC,<rpc>
is sent by the client, so I'd suggest we change the wording to reflect that.4.2. Unidirectional Stream from server to client
Same as for 4.1, my suggestion would be to explicitly mandate one unidirectional stream for each message, if the possibility of having notifications arrive out-of-order is acceptable. Otherwise, we should probably mandate one unidirectional stream for the whole session (messages would be then framed outside of QUIC, e.g. prepending a length to each notification).
Handling of capabilities exchange (aka
<hello>
)There's currently no mapping for the
<hello>
message, sent on startup by the server and the client. IMO, the logical QUIC mapping for this would be to require the following:<hello>
message right away<hello>
message right away<hello>
message from the peer you may start handling other kinds of messages