A QUIC look at HTTP/3
lwn.net
lwn.net
Looking at the (draft) DNS specs for HTTPSSVC records [0] it seems that there's also the equivalence of SRV records? (SRV records is something that the browsers have never implemented)
I recall a semi-recent discussion about the prevalence of CDNs and what options there are for smaller players and DIY-ers and how SRV could have had a role in that [1]. I'm really looking forward to the spec rolling out if this is the case!
(There's a little example given in the Appendix of the DNS specs [2])
[0] https://tools.ietf.org/html/draft-ietf-dnsop-svcb-httpssvc-0...
[1] https://news.ycombinator.com/item?id=22073098
[2] https://tools.ietf.org/html/draft-ietf-dnsop-svcb-httpssvc-0...
It will be interesting to see which is the biggest deployability headache out of QUIC itself (UDP doesn't work for a noticeable fraction of users) and HTTPSSVC (not only will lots of people who have a shiny new HTTP/3-capable server not have a DNS server that understands HTTPSSVC lots of their clients have DNS servers which reject queries they don't understand outright).
Remember it was about a year between TLS 1.3 being finished and being really finished, because the standard that was cryptographically sound and made sense from an engineering perspective couldn't be deployed - what we've got now is that protocol seen through a funhouse mirror that lets it pass middleboxes.
For example the version field where you'd write TLS 1.3 (actually in a sense SSL 4.2 or maybe SSL 5) you can't do that. To sneak past a middlebox say instead that you're TLS 1.2 like it expects, and furthermore, you are re-connecting. It shouldn't worry that it can't understand the rest of what you say because you're just re-connecting - it must have approved that previous connection and so logically this one is likewise fine. Actually remembering which such connections have happened would cost money and isn't required to make the test pass so the middlebox doesn't do that and many will just allow all re-connections past untouched.
At least the designers of IPv6 seemed to care more about efficiency, even if the protocol otherwise seems quite bloated and overengineered.
Their article doesn't even mention against which kernel verison they're comparing
> In the future, TLS1.3 will support 0-RTT, but the TCP three-way handshake will still be required.
This is outright wrong. With TCP you have fast open, which provides 0-RTT send just like the TLS 0-RTT handshake.
BBR has very few if any middlebox problems. Neither do tail loss probe improvements or any other sender side optimizations such as TCP_NOTSENT_LOWAT. TFO may cause issues in corporate environments (works fine with my home equipment) but fallback is easy. So I don't think this really "addresses" the issue. Improved acking is not strictly needed if you use tcp timestamps for RTT estimation and still ack improvements have been added to the kernel over the years.
Start running some HTTP requests multiple times and you can quickly see hard to debug breakage.
Yes in theory but it fails on its face in practice. Many middle boxes are not happy with TCP Fast Open, and there's the tracking problem. Chrome dropped TFO.
But TCP lives down in the OS stack, so maybe without knowing it the browser's new TLS connection has TFO cookies the OS learned from the Tom Hanks connection, which ties the two sessions together. Oops.
But cookieless TFO is also an option, combined with 0RTT TLS the application would be in charge of either accepting or rejecting the connection based on the TLS resumption cookie.
(Though with HTTP/3 around the corner, I can't imagine anyone will bother working on HTTP/2 to backends.)
Request pipelining and multiplexing are good enough reasons.
"Just" seems like an understatement here, there's a reason why ELBs and ALBs are popular solutions.
Some of the people involved in the early QUIC development in Google had been heavily involved in the SCTP work and blamed its lack of success on the difficulty in getting firewalls, middleboxes (and the teams that manage them) to accept a new IP protocol. So they wrapped QUIC in UDP.
(That site is also served over HTTP/3 if you want to try it out).
>"In HTTP/2, the single connection carries hundreds of streams. In this case, when we lose one packet, "one hundred streams are waiting for that one single packet"
Could someone elaborate on how this is worse if all of those streams are part of the some client request? Am I missing something really obvious.
This problem is known as head of line blocking.
In HTTP/2, all those requests are multiplexed across only one TCP connection per origin (each request becomes an HTTP/2 stream); so now when a packet is lost, all requests in progress are affected, rather than as few as ⅙ of them.
If you only ever make one request at a time, this difference does not affect you, because only one connection would be used under HTTP/1.1 as well.
But this case can make HTTP/2 significantly worse than HTTP/1.1 on low-quality mobile networks.
So... it's complicated. I'm not saying that HoL is a non-issue and that TCP is perfect. It's just that you're not eating the latency penalty N times and for anything that is dominated by throughput rather than latency it's even less relevant.
I wonder the "for the same bandwidth consumption" is based on what. HTTP/2 with TLS I guess?
This sounds like insanity to me. Is there an old implementation of TLS?