OK, thanks for explaining. I wonder if the current asymmetric approach could be enhanced relatively easily by allowing a server to announce a list of address/port/QoE tuples that it can recommend the client to use as virtual endpoints, without initiating anything. The client would then issue path challenges as usual, but can do so to any one of the proposed endpoints. The server could periodically propose new such tuples or update QoE on existing. If a server wants to retire an endpoint, it could send that information too, but a draining period would be needed.
This could also piggy back on the existing CID update system where a server CID is associated with a virtual endpoint. Mikkel On 14 December 2020 at 21.01.27, Christian Huitema ([email protected]) wrote: On 12/14/2020 2:38 AM, Mikkel Fahnøe Jørgensen wrote: Sorry, “async design “ should read asymmetric design, in that only one endpoint can create multiple paths, as opposed to a symmetric design where both can. On 14 December 2020 at 11.33.46, Mikkel Fahnøe Jørgensen ([email protected]) wrote: async design The proposal indeed keeps the asymmetric design of QUIC v1. That design is grounded in practical realities, such as the prevalence of NAT and stateful firewalls that would drop "unexpected" packets sent to a client. Also, the client typically knows about the cost of paths better than the server, for example whether sending more data on a given path will generate larger invoices from the provider. The design goal is to let the client express these preference to the server using a simple priority scheme. Anything more complex probably requires application level decisions. That why the design provides the QOE frame. That frame let applications exchange information about paths in an application specific way. The expectation is that the application posts them as it sees fit, and the transport delivers them as they are received. The application then uses locally provided API to affect the way data is sent over multiple paths. We could debate whether the QOE frame is needed at all. Applications could also exchange the data as part of application protocol itself. I think that having a separate frame reduce the overall complexity, by separating application specific path control from the application protocol itself. We could also debate whether the QOE frame should be specified in greater details. The current design simply passes a byte string. The DNS SVCB RR type addresses a related problem by an SvcParams field that contains a list of key-value pairs. It is possible that having a similar list of key-value pairs would be useful there. On the other hand, we do not yet have a lot of experience. And open design with a byte string is probably good enough for now. -- Christian Huitema
