Skip to content

quic: Add support for quic codepoint , interpreted as QUIC version draft-29 #3133

@elenaf9

Description

@elenaf9

Description

The QUIC transport currently only supports the quic-v1 codepoint in multiaddresses. This codepoint was recently added to represent QUIC version 1 / RFC 9000, whereas the previous codepoint quic should be interpreted as QUIC version draft-29. See multiformats/multiaddr#145.

quinn supports the versions draft-29..34 and version 1. On the server side this means that our users could already advertise each quic-v1 address also as quic address.
For dialing however we have to set one version, right now we use the default v1. We can add support for quic(-draft-29) by checking the multiaddress on dials and set the current version in the quinn_proto::ClientConfig.

Motivation

go-libp2p does not support quic-v1 yet, although there is WIP to add support in the very near future: libp2p/go-libp2p#1841. However, even when support is added we won't be able to communicate via QUIC with any go-libp2p nodes that did not upgrade to the newest version. cc @dignifiedquire.

Requirements

  1. Allow dialing quic multiaddresses
  2. Use QUIC draft-29 version when dialing quic addresses, use version 1 for quic-v1
  3. To be discussed: support quic codepoint in listening addresses

Open questions

go-libp2p is planning a transition period (6 months?) before removing support for quic. @marten-seemann raised a valid point on whether it even makes sense for rust-libp2p to add support, if ideally eventually the quic codepoint dies out because all new nodes run on v1.

I am in favor of at least adding support for dialing quic addresses so that we can connect to old go-libp2p nodes. I don't see any drawbacks in that.
I would propose to not add support for quic listening addresses. However, since in practice we still support draft-29 as servers, users are still free to announce a quic-v1 address also as quic if they need it. They can already do this right now anyway unless we explicitly remove support for draft-29 in our config.
Wdyt @marten-seemann @mxinden?

Are you planning to do it yourself in a pull request?

Yes (if folks agree with this).

Metadata

Metadata

Assignees

No one assigned

    Labels

    decision-pendingMarks issues where a decision is pending before we can move forward.difficulty:easypriority:importantThe changes needed are critical for libp2p, or are blocking another project

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions