A self made implementation of QUIC Version 1 in Rust following RFC 9000 and 9001, accompanied by my bachelors thesis. For now, this is purely a research project and in no way intended for commercial use!
This repository contains my bachelor thesis from Heinrich-Heine Universität Düsseldorf, Germany. It has the title "Development Of A Minimal QUIC Implementation In Rust: An Introduction To Next Generation Networking", is written in english, and covers the design and connection mechanics of QUIC as well as details of my implementation as of the submit date. The rendered pdf can be found in the document
subdirectory. It may also be helpful to those who simply want to get started with QUIC without using the RFCs directly.
The QUIC library is still in a early development stage and a majority of the features required for any kind of meaningful use are not yet implemented. As I lack the resources of the likes of Amazon, Cloudflare and co, development may only progress slowly. The following features are implemented:
- QUIC 1-RTT handshake
- QUIC stream implementation
- QUIC Flow control
- Basic async socket io wrapper
- Full TLS 1.3 integration using rustls
- Server API for easy integration with HTTP/3 or other application protocols
However, some fundamental features are still incomplete. Therefore, currently in development are:
- Client API
- Sophisticated and performant async socket io wrapper
- Congestion control with loss detection and retransmissions
Once the basic QUIC spec is implemented and taurus fully complies with RFC 9000, RFC 9001, RFC 9002, and RFC 8999, the following extensions are planned:
- QUIC datagrams, RFC 9221
- QUIC version negotiation, RFC 9368
- QUIC Version 2, RFC 3969
- QUIC Grease bit, RFC 9287
- QUIC ACK Frequency, draft
- QUIC multipath draft
- QUIC BDP frames draft
Feel free to open a pull request or report an issue. All contributions are welcome!
Building requires a recent version of rustc (>=1.80.0):
# Clone & Build
$ git clone https://github.com/ilumary/taurus.git
$ cd taurus/project/ && cargo build
Note Windows is not supported, because I want to keep my sanity. Also it does not deserve to be called an operating system.
Until the Client API is implemented, one has to use an external QUIC implementation as Client. I recommend quinn. An example local server implementation can be found in main.rs
.
# Start the server
~/taurus/project/ $ cargo run
# Start client
~/quinn/ $ cargo run --example client https://localhost:4433/Cargo.toml
ilumary - Me
MIT