#quic #udp-socket #protocols #packets #sockets #explicit #ecn

kvarn-quinn-udp

Temporary Kvarn fork: UDP sockets with ECN information for the QUIC transport protocol

1 unstable release

0.5.0-alpha1 Feb 4, 2024

#5 in #ecn


Used in 2 crates (via kvarn-quinn)

MIT/Apache

69KB
1.5K SLoC

Uniform interface to send and receive UDP packets with advanced features useful for QUIC

This crate exposes kernel UDP stack features available on most modern systems which are required for an efficient and conformant QUIC implementation. As of this writing, these are not available in std or major async runtimes, and their niche character and complexity are a barrier to adding them. Hence, a dedicated crate.

Exposed features include:

  • Segmentation offload for bulk send and receive operations, reducing CPU load.
  • Reporting the exact destination address of received packets and specifying explicit source addresses for sent packets, allowing responses to be sent from the address that the peer expects when there are multiple possibilities. This is common when bound to a wildcard address in IPv6 due to RFC 8981 temporary addresses.
  • Explicit Congestion Notification, which is required by QUIC to prevent packet loss and reduce latency on congested links when supported by the network path.
  • Disabled IP-layer fragmentation, which allows the true physical MTU to be detected and reduces risk of QUIC packet loss.

Some features are unavailable in some environments. This can be due to an outdated operating system or drivers. Some operating systems may not implement desired features at all, or may not yet be supported by the crate. When support is unavailable, functionality will gracefully degrade.

Dependencies

~0.6–9MB
~75K SLoC