Skip to content

QUIC Implementations with multipath support

mirjak edited this page Nov 2, 2024 · 29 revisions

This wiki tracks known implementations of QUIC with multipath extension and list public servers for testing.

Please add your implementation below. Keep sorted alphabetically.

Note

If you are working on a QUIC implementation, please consider joining the QUIC Developers Slack Channel. Also, if possible, please set up a public server and publish its details below, so others can try and interoperate with your code.

IETF QUIC Multipath

The following stacks implement the IETF QUIC with Multipath support.

Ericsson extension to aioquic

QUIC implementation with multipath extension based on aioquic (using Python and asyncio).

  • Language: Python
  • transport parameter: 0f739bbc1b666d11 on port 4433, 0f739bbc1b666d09 on port 4435
  • features: HVDCISUAR, PATH_BLOCKED can be received only but not action
  • Public server: ip: server not running currently
  • services: HTTP/0.9 with ALPN "hq-interop"
  • requests: GET/{n} - returns n bytes

quiche is an implementation of the QUIC transport protocol as specified by the IETF. It provides a low level API for processing QUIC packets and handling connection state, while leaving I/O (including dealing with sockets) to the application. Example client and server are also provided.

Currently work-in-progress as a PR, fork available.

  • Language: Rust
  • Transport parameter: 0x0f739bbc1b666d11
  • Features: HDVCSA
  • Public server: interop.multipath-quic.org:8530
  • Contact: Quentin De Coninck quentin.deconinck@uclouvain.be
  • ALPN: h3 (HTTP3), hq-interop (HTTP 0.9)
  • Supported HTTP requests:
    • GET /{x} : Get the {x} file, where {x} can be {CODEOWNERS, 20MB, 100MB, 400MB, 800MB}.

XQUIC Library released by Alibaba is a cross-platform implementation of IETF QUIC and HTTP/3 protocol. Currently, MPQUIC is supported in the main branch of XQUIC.

  • Language: C

  • Github repo: https://github.com/alibaba/xquic

  • Public server: (support both 09 and 10, negotiate by transport parameter)

    • IP: 59.82.120.200
    • Port: 18001
    • Host: test.xquic.com
  • Features: HDVACS

  • Transport parameter: 0x0f739bbc1b666d09 from draft-ietf-quic-multipath-09/10

  • ALPN: h3 (HTTP3), hq-interop (HTTP 0.9)

  • Supported HTTP requests:

    • GET /{n} : Get {n} bytes. All octets are set to 'D'.
  • Alternative test server by Ericsson: 129.192.83.242, port 4431

A small(ish) implementation of QUIC in C, to explore the protocol and the API, for example for DNS over QUIC. Relies on PicoTLS for TLS 1.3. MIT license. Tested on Windows, Linux, FreeBSD/IOS.

Rask

Rask is an Ericsson-internal multipath QUIC implementation. It has an open design for research and experimentation; for instance it has an API that allows the application to implement its own scheduler without changing the stack. It is intended to have good performance (with, e.g., zero copy) and to be used both as a native stack as well as in network simulators. It is completely event driven and does not do any internal time keeping or network I/O.

  • Language: Rust

  • Contact: Michael Eriksson michael.eriksson@ericsson.com, Marcus Ihlar marcus.ihlar@ericsson.com

  • Public server: tnm002.verkstad.net:30000

  • Transport parameter: 0x0f739bbc1b666d11 from draft-ietf-quic-multipath-11 (as of 2024-10-23); draft-09/10 server is available at port 30001

  • Services: HTTP/0.9 with ALPN "hq-interop"

  • Supported HTTP requests:

    GET / -- Returns a text message that describes the supported requests

    GET /{n} or GET /hex/{n} -- Returns {n} bytes of an ASCII stream with increasing 4-digit hex values

    POST /discard -- Discards all received data

    POST /echo -- Returns all received data

AppleQUIC

AppleQUIC is a client and server implementation, currently testing MPQUIC client.

  • Language: C, Objective-C, Swift
  • Transport Parameter: 0xbabf
  • Public server: None