Skip to content

Replace TCP with QUIC in bindings #72

@gnarea

Description

@gnarea

Executive summary

QUIC offers much better performance in a connection with a large latency by reducing the number of roundtrips, at the expense of slightly increased bandwidth for error correction purposes. This is the appropriate tradeoff in a Delay-Tolerant Network like Relaynet, so we should try to migrate to QUIC once its supported in all the third party dependencies used in Relaycorp's implementations. We should still support TCP for backwards compatibility.

The problem you're trying to solve

TCP and TLS handshakes require a series of roundtrips before the first byte is transmitted, which can be noticeable in a connection with a large latency. QUIC solves this issue by effectively "combining" the handshakes into one and doing fewer roundtrips (TLS 1.3 helps with the latter).

The solution you'd like

Migrate all bindings to QUIC, once all the dependencies below support QUIC:

  • Axios, or any other HTTP client for Node.js.
  • ws, or any other WebSocket client for Node.js.
  • Ktor, or any other HTTP/WebSocket client for the JVM and Android.
  • gRPC clients for Node.js and JVM/Android.
  • GCP loadbalancer frontends.
  • Cloudflare frontend servers.

We also need WebSocket itself to run over HTTP/3, but it doesn't even support HTTP/2 as of this writing. Alternatively, we could replace WebSocket with a generic or purpose-built L7 protocol.

We'll still support TCP for backwards compatibility, especially with public endpoints.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions