My web server is in New York, USA, using a Vultr server(AS20473). I am located in Asia(AS17816). 2–10% packet loss at night is a natural phenomenon (measured by ping -t). I always encounter extremely slow network speed with HTTP/3, while HTTP/2 with BBR does not. Therefore, I plan to fork the project to implement BBR v1 myself.
Thanks for http://arthurchiao.art/blog/bbr-paper-zh/ .
Thanks for @tsuna .
I only tested this branch in my specific scenario and found significant improvements for me, so I opened it up. I hope it can help others.
I will sync with upstream every 1–2 months to ensure this branch remains useful.
Issues and PRs are welcome, and @qiulaidongfeng .
This branch also includes my experimental algorithm, MCC (Measuring the Contribution to Congestion). It judges the degree to which the current flow contributes to congestion by checking whether the difference between the current smoothed RTT and the minimum RTT over the past 5 seconds exceeds a threshold. During the mccStart phase, slow start is performed. When the limit is reached, it enters mccStop, where the current delivery rate becomes the new sending rate. When the limit is lifted, it enters mccGuard, with the sending rate increased by a factor of 1.25 per second. If no smaller MINRTT is observed for 5 consecutive seconds, it enters a 200‑millisecond mccProbeRTT phase (cwnd is halved). This keeps the long‑term in‑flight data volume at approximately 1.n or 2.n times the BDP. As a result, the algorithm yields when its share exceeds the fair share, and reclaims bandwidth when other flows exceed the fair share. For details, refer to the implementation comments
quic-go is an implementation of the QUIC protocol (RFC 9000, RFC 9001, RFC 9002) in Go.
Other QUIC specifications:
- Unreliable Datagram Extension (RFC 9221)
- Datagram Packetization Layer Path MTU Discovery (DPLPMTUD, RFC 8899)
- QUIC Version 2 (RFC 9369)
- QUIC Event Logging using qlog (draft-ietf-quic-qlog-main-schema and draft-ietf-quic-qlog-quic-events)
- QUIC Stream Resets with Partial Delivery (draft-ietf-quic-reliable-stream-reset-07 and draft-ietf-quic-reliable-stream-reset-09)
quic-go also supports HTTP/3 (RFC 9114).
Other HTTP/3 specifications:
- QPACK: Field Compression for HTTP/3 (RFC 9204)
- Extensible Prioritization Scheme for HTTP (RFC 9218)
- HTTP Datagrams and the Capsule Protocol (RFC 9297)
Related projects:
- webtransport-go implements WebTransport over HTTP/3 (draft-ietf-webtrans-http3).
- masque-go implements CONNECT-UDP (RFC 9298).
- connect-ip-go implements CONNECT-IP (RFC 9484).
Detailed documentation can be found on quic-go.net.
Starting with v0.60, quic-go supports use in FIPS 140-3 environments when built with Go 1.26 or newer, using Go standard library cryptography for the QUIC code paths relevant in FIPS mode; see FIPS140.md for details.
| Project | Description | Stars |
|---|---|---|
| AdGuardHome | Free and open source, powerful network-wide ads & trackers blocking DNS server. | |
| algernon | Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support | |
| caddy | Fast, multi-platform web server with automatic HTTPS | |
| cloudflared | A tunneling daemon that proxies traffic from the Cloudflare network to your origins | |
| frp | A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet | |
| go-libp2p | libp2p implementation in Go, powering Kubo (IPFS) and Lotus (Filecoin), among others | |
| gost | A simple security tunnel written in Go | |
| Hysteria | A powerful, lightning fast and censorship resistant proxy | |
| Mercure | An open, easy, fast, reliable and battery-efficient solution for real-time communications | |
| nodepass | A secure, efficient TCP/UDP tunneling solution that delivers fast, reliable access across network restrictions using pre-established TCP/QUIC/WebSocket or HTTP/2 connections. | |
| OONI Probe | Next generation OONI Probe. Library and CLI tool. | |
| reverst | Reverse Tunnels in Go over HTTP/3 and QUIC | |
| RoadRunner | High-performance PHP application server, process manager written in Go and powered with plugins | |
| syncthing | Open Source Continuous File Synchronization | |
| traefik | The Cloud Native Application Proxy | |
| v2ray-core | A platform for building proxies to bypass network restrictions | |
| YoMo | Streaming Serverless Framework for Geo-distributed System |
If you'd like to see your project added to this list, please send us a PR.
quic-go always aims to support the latest two Go releases.
We are always happy to welcome new contributors! We have a number of self-contained issues that are suitable for first-time contributors, they are tagged with help wanted. If you have any questions, please feel free to reach out by opening an issue or leaving a comment.
The code is licensed under the MIT license. The logo and brand assets are excluded from the MIT license. See assets/LICENSE.md for the full usage policy and details.