Name | Modified | Size | Downloads / Week |
---|---|---|---|
Parent folder | |||
README.md | 2025-02-20 | 6.4 kB | |
v0.50.0 source code.tar.gz | 2025-02-20 | 618.3 kB | |
v0.50.0 source code.zip | 2025-02-20 | 849.4 kB | |
Totals: 3 Items | 1.5 MB | 1 |
This release implements server-side path-probing (as described in section 9 of RFC 9000): [#4932], [#4933], [#4935], [#4938], [#4939], [#4940], [#4941], [#4944], [#4947], [#4959].
When the server receives a packet for an existing connection from a different IP address / port, it first needs to probe the new path before it can send packets on that path. This happens when the client experiences a NAT rebinding, and when the client attempts to migrate to a new connection. Previous versions of quic-go would accept the packets from the new path, but never switch to the new path.
Note that the client side connection migration logic (#234) is not yet implemented in quic-go (but we're working on it!).
Major Changes
- use the new crypto/tls 0-RTT API that we helped design in 2023: [#4953]
- use a ringbuffer to store received packets, significantly reducing memory consumption: [#4929]
- according to our Go version policy, we removed support for Go 1.22. quic-go now requires Go 1.23 or Go 1.24: [#4880]
- the connection timer logic was refactored, enabling future changes to this code path: [#4927]
Other Fixes
- fix busy-looping when pacing packets and the send queue blocks: [#4943]
- don't drop undecryptable packets when deriving 2 sets of keys at the same time (i.e. when resuming a 0-RTT connection): [#4950]
Go 1.24 FIPS 140-3 Caveats
Go 1.24 made several changes related to FIPS 140-3 compliance. Among others, it introduced a fips-only
mode (enabled by setting GODEBUG="fips140=only"
).
It is not possible to use quic-go in fips-only mode, since the QUIC RFC requires initializing an AES GCM cipher with a fixed nonce, which is considered unsafe according to FIPS 140-3, or at least the Go team's interpretation thereof. See https://github.com/quic-go/quic-go/issues/4894 and the discussion on Go issue [#69536].
Before v0.50.0, quic-go would initialize the AES cipher on init
, leading to a panic when using fips-only mode. For v0.50.0 we changed this behavior to lazy initialization (https://github.com/quic-go/quic-go/pull/4916). Note that this still means it's not possible to use QUIC in fips-only mode.
Changelog
- ackhandler: remove unneeded error return from packet history iterator by @marten-seemann in https://github.com/quic-go/quic-go/pull/4917
- proxy: remove Proxy.LocalPort method by @marten-seemann in https://github.com/quic-go/quic-go/pull/4920
- proxy: rename to Proxy, refactor initialization by @marten-seemann in https://github.com/quic-go/quic-go/pull/4921
- proxy: add function to simulate NAT rebinding by @marten-seemann in https://github.com/quic-go/quic-go/pull/4922
- proxy: optimize packet sorting logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4923
- simplify handling of packet unpacking errors by @marten-seemann in https://github.com/quic-go/quic-go/pull/4924
- refactor connection error propagation by @marten-seemann in https://github.com/quic-go/quic-go/pull/4925
- refactor packet handling into a separate function by @marten-seemann in https://github.com/quic-go/quic-go/pull/4926
- congestion: migrate the pacer tests away from Ginkgo by @marten-seemann in https://github.com/quic-go/quic-go/pull/4929
- utils: add a method to reset the RTTStats for connection migration by @marten-seemann in https://github.com/quic-go/quic-go/pull/4930
- add a packet packer method to pack path probe packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4932
- add a method to change the remote address of the sendConn by @marten-seemann in https://github.com/quic-go/quic-go/pull/4933
- ackhandler: add path probe tracking logic to sent packet history by @marten-seemann in https://github.com/quic-go/quic-go/pull/4934
- implement connection ID handling for path probe packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4935
- fix flaky TestConnectionReceivePrioritization by @marten-seemann in https://github.com/quic-go/quic-go/pull/4936
- add a method to the sendQueue to send probe packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4939
- implement a path manager to track the validation status of new paths by @marten-seemann in https://github.com/quic-go/quic-go/pull/4938
- query MTU discoverer for increases after processing ACK frame by @marten-seemann in https://github.com/quic-go/quic-go/pull/4941
- http3: minor simplification of panic handling logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4942
- use a ringbuffer to store received packets in the connection by @marten-seemann in https://github.com/quic-go/quic-go/pull/4928
- refactor connection timer logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4927
- ackhandler: implement timer logic for path probe packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4940
- fix busy-looping when pacing and the send queue blocks by @marten-seemann in https://github.com/quic-go/quic-go/pull/4943
- add a way to reset the MTU discoverer by @marten-seemann in https://github.com/quic-go/quic-go/pull/4947
- migrate the connection ID generator tests away from Ginkgo by @marten-seemann in https://github.com/quic-go/quic-go/pull/4948
- implement server-side path validation logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4944
- keep undecryptable packets when deriving 0-RTT and handshake keys by @marten-seemann in https://github.com/quic-go/quic-go/pull/4950
- ci: update golangci-lint to v1.64.4 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4951
- bump go.mod version to Go 1.23, run 1.23 and 1.24 on CI by @marten-seemann in https://github.com/quic-go/quic-go/pull/4880
- ackhandler: use Go iterators to iterate over sent packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4952
- handshake: use new crypto/tls 0-RTT API by @marten-seemann in https://github.com/quic-go/quic-go/pull/4953
- ackhandler: fix handling of lost path probes on loss timer by @marten-seemann in https://github.com/quic-go/quic-go/pull/4956
- remove unneeded tracking of acknowledgments for PATH_CHALLENGEs by @marten-seemann in https://github.com/quic-go/quic-go/pull/4959
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.49.0...v0.50.0