Skip to content

Releases: quic-go/quic-go

v0.37.4

09 Aug 13:09
Compare
Choose a tag to compare

This release contains a fix for a last-minute breaking API change in Go 1.21: #4020

Full Changelog: v0.37.3...v0.37.4

v0.37.3

05 Aug 23:24
Compare
Choose a tag to compare

This patch release

  • fixes handling of ACK frames serialized after CRYPTO frames: #4018
  • sets a net.Conn on the tls.ClientHelloInfo used on GetCertificate and GetConfigForClient, for tls.Configs returned (recursively) from GetConfigForClient: #4016

Full Changelog: v0.37.2...v0.37.3

v0.37.2

04 Aug 00:40
Compare
Choose a tag to compare

This patch release

  • contains a backport of the fix that triggered the Go 1.20.7 / 1.19.12 patch release (golang/go@2350afd): #4012
  • sets a net.Conn with the correct addresses on the tls.ClientHelloInfo used in tls.Config.GetCertificate: #4015

Note that in order to be protected against the DoS attack making use of large RSA keys, it's necessary to update to this patch release (for Go 1.20). For Go 1.21, please update the Go compiler.

Full Changelog: v0.37.1...v0.37.2

v0.36.3

02 Aug 23:51
Compare
Choose a tag to compare

This patch release contains a backport of the fix that triggered the Go 1.20.7 / 1.19.12 patch release (golang/go@2350afd).

Full Changelog: v0.36.2...v0.36.3

v0.37.1

31 Jul 21:41
f3a0ce1
Compare
Choose a tag to compare

This is a patch release fixing two regressions introduced in the v0.37.0 release:

  • http3: fix check for content length of the response by @imroc in #3998
  • set a net.Conn with the correct addresses on the tls.ClientHelloInfo by @marten-seemann in #4001

New Contributors

Full Changelog: v0.37.0...v0.37.1

v0.37.0

21 Jul 18:19
469a615
Compare
Choose a tag to compare

crypto/tls changes

With the upcoming Go 1.21 release, we're now able to rely on the Go standard library's TLS implementation's QUIC support.

If you're curious, here are the discussions that happened in the Go project's GitHub:

Special thanks to @FiloSottile and @neild for the constructive discussions around the new API, and for making this happen!

Using this new API required major changes to the way quic-go interacts with the TLS stack (#3860 and #3939), but ultimately, the new API is a lot cleaner than what we had before.

This means that starting with Go 1.21, we won't have to fork crypto/tls anymore, resolving a longstanding issue (#2727). This also resolves a major pain point for the community, since quic-go now doesn't have to enforce a specific compiler version any longer.
Note that this release still supports Go 1.20 (in line with our policy to always support the two most recent Go versions), which still uses (a completely rewritten) fork of crypto/tls. We're looking forward to dropping support for Go 1.20 once Go 1.22 is released next year.

Other Notable Changes

  • We dropped support for the QUIC draft-29. This draft version was somewhat widely deployed on the internet before RFC 9000 was finalized, but has been phased out since then. quic-go now supports QUIC version 1 (RFC 9000) and version 2 (RFC 9369).
  • Connection.ReceiveMessage now takes a context.Context, allowing the caller to make the call return, even if no message is received: #3926. Thanks to @Glonee for the implementation!
  • A long list of added validations (as required by RFC 9114 and RFC 9110) for request and response parsing in the http3 package, mostly around the processing of headers. Thanks to @Mephue for finding one of the missing checks, and to @WeidiDeng for finding and fixing multiple of them!
  • quic-go now sets the DF bit on packets sent on macOS (as we've done for a long time on Linux already). This allows us to do DPLPMTUD (Path MTU discovery): #3946. Thanks to @sukunrt for implementing!
  • The stream and the connection errors are now surfaced via the contexts exposed by Stream.Context and Connection.Context, and can be accessed by calling context.Cause (#3961 and #3970). Thanks to @fholzer for suggesting and implementing this change!
  • OptimizeConn was removed in favor of a new WriteTo method on the Transport, which allows sending of (non-QUIC) packets on the net.PacketConn passed to the Transport (#3957). Thanks to @MarcoPolo for helpful feedback on the API!

Changelog

New Contributors

Full Changelog: v0.36.0...v0.37.0

v0.36.2

12 Jul 18:07
Compare
Choose a tag to compare

This patch release contains (the backport of) 2 fixes:

  • http3: validate Host header before sending (#3948)
  • perform send / receive buffer increases when setting up the connection (#3949)

Full Changelog: v0.36.1...v0.36.2

v0.36.1

01 Jul 18:23
Compare
Choose a tag to compare

This patch release disables GSO support (#3934), unless explicitly enabled using an environment variable (QUIC_GO_ENABLE_GSO=true). We discovered that GSO fails with some NICs and in some containerized environments. See #3911 for a detailed discussion.

From the user's perspective, GSO should "just work". Once we have a fix that correctly detects GSO support under all circumstances we'll re-enable GSO by default.

v0.36.0

21 Jun 10:39
da298d0
Compare
Choose a tag to compare

Generic Segmentation Offload (GSO)

This release enables GSO (Generic Segmentation Offload) in the send path, drastically increasing the packet send rate. Without GSO, quic-go had to use a single (sendmsg) syscall for every UDP datagram sent. GSO allows us to pass one giant (up to 64k) datagram to the sendmsg syscall, and have the kernel chop it into MTU sized (~1300 bytes) datagrams before sending them out on the wire. For more details on syscall optimizations, CloudFlare published an excellent blog post about this a while ago. GSO is currently only available on Linux (and with kernels >4.18).

Users who are using the same net.PacketConn for QUIC and to send out non-QUIC packets now need to call the newly introduced OptimizeConn function before passing the connection to the Transport. Otherwise, calls to WriteTo will fail after GSO support was enabled. Users who are not using the same net.PacketConn in this way don't need to change anything.

We also continued our effort to further reduce allocations during data transfers (#3526). Work on improving performance even further will continue in future releases.

Other Notable Changes

  • http3: The server now returns http.ErrServerClosed instead of quic.ErrServerClosed (#3900)
  • quic-go now correctly deals with super-short idle timeouts (#3909)
  • uint62 overflows are now correctly handled in the Config (#3866)
  • only run DPLPMTUD (RFC 8899) on connections that support setting the DF bit (#3879)
  • switch to the packet number length derivation logic described in the RFC (#3885)
  • fix panics when closing an uninitialized Transport (#3908)

Full Changelog

New Contributors

Full Changelog: v0.35.1...v0.36.0

v0.35.1

01 Jun 08:08
9237dbb
Compare
Choose a tag to compare

This patch release fixes a regression in the HTTP/3 roundtripper introduced in the v0.35.0 release.

Thanks to @kgersen for reporting and to @Glonee for contributing the fixes!

What's Changed

  • http3: set tls.Config.ServerName for outgoing requests, if unset by @Glonee in #3867
  • http3: correctly use the quic.Transport by @Glonee in #3869
  • http3: close the connection when closing the roundtripper by @Glonee in #3873

Full Changelog: v0.35.0...v0.35.1