Google’s QUIC protocol: moving the web from TCP to UDP
ma.ttias.be
ma.ttias.be
Please don't complain about Sourceforge, UDT is an old project: http://udt.sourceforge.net/
And here's their distributed filesystem built on top of UDT: http://sector.sourceforge.net/
Edit: Protocol-level security is being worked on for UDT5, but in the meantime there's a Rust-based experimental attempt at replacing SCP with UDT-based solution: https://github.com/mcginty/shoop
https://www.reddit.com/r/sysadmin/comments/4n3e1s/the_state_...
I use uftp[1] now for bulk transfers across oceans-- it's a little confusing to use, but it generally accomplishes the goal of pushing packets at 70Mbps from Europe to Seattle.
Thanks for the link to uftp, didn't know about.
Also, UDT works in a LAN too, of course, and before finding UDT, I had been wondering how Weta Digital shares huge media files with Universal Studios in LA. Seems like UDT is built into a lot of commercial products.
The WG charter is this one [2]:
Define a new standards track IETF transport protocol based on deployment experience with QUIC. Four focus areas:
* Core transport work: wire format, basic mechanisms
* Security: TLS 1.3 to protect QUIC header and payload
* Application semantic mapping: initial focus on HTTP/2
* Extension to multipath for migration and load sharing
[1]: http://etherpad.tools.ietf.org:9000/p/notes-ietf-96-quic?use...
[2]: https://www.ietf.org/proceedings/96/slides/slides-96-quic-0....
That seems odd. QUIC's crypto is much nicer than any TLS version or draft last time I looked.
I know Google has the most genius geniuses working for them, but it's important to be wary of the risks of this sort of thing. Not that TLS/SSL itself has a fantastic track record, but replacing the TLS handshake with something new and shorter and mixing it with a protocol that can accept incoming packets from multiple source IPs sounds like a recipe for a thousand new security vulnerabilities. If not in Google's code, then in the other implementations. Researchers, take note.
Does QUIC act as a good network citizen? Are they experimenting with different approaches?
One QUIC connection is equivalent to two TCP connections in that regard. So QUIC will only backoff half amount compared to TCP. In the design docs, they mention it's okay since one QUIC connection is equivalent to multiple TCP connections that a browser makes.
What happens when we all move to QUIC or whatever else?
Is congestion collapse still a risk on today's internet? Do we need such aggressive congestion control?
The best solution is for AQM and ECN to be deployed widely, so that congestion can be identified and dealt with before it gets bad enough to require drastic rate decreases. QUIC currently cannot use ECN because those bits of the IP header typically aren't accessible from the APIs for UDP. Modern TCPs operating on networks that keep buffering delays low and signal congestion without dropping packets don't have trouble determining link bandwidth quickly.
Last time I did UDP this was a huge pain to do and required quite a few round-trips to get right. FEC isn't going to save you here as none of your packets are going to make it to the host.
Or do they just fix it at 576 and not try to get any better efficiency from larger packets?
It's fascinating to watch some of the foundations upon which we do our work being shaken up a bit. I just hope they settle into more stable and more secure foundations, not just "better".
TCP's head-of-line blocking problem goes away if packet loss turns out to be correlated — lose a packet belonging to one stream within the connection, and you're going to lose packets belonging to other streams as well, so QUIC doesn't help.
Is packet loss in the real world random or correlated?
I was working on this type of stuff 15 years ago and now might be the time to do it. Bandwidth keeps increasing but latency stays the same, so it makes sense to waste some bandwidth to improve latency.
Also, with quic you actually receive 10% less data, but then saying a packet retransmit would take longer is not convincing to me. It should depend on how many packets are lost (on average) like 1 RTT = 20 UDP packets * 10% thus using quic/FEC on a stable network would actually decrease performance and drive up data plan costs.
Also I don't see why a few packets matter that much to actually introduce a new networking stack with all of its own problems from e.g. increasing complexity. Just opened a news site on desktop, it was over 2 MB in size without the ads. If we should be concerned about percentages, we would surely be cutting down on the JS/CSS bloat first.
If you use UDP, you have to implement much of the TCP stuff yourself. But you can use the experience with web connections to implement it and leave out things that weren't needed.
This is nothing specific to TCP. "Full speed" is a fundamentally unknowable quantity in advance in the general case. It varies with time and endpoints. If you try to start a connection transmitting at the full speed of your first-hop link (the only one you have any chance of knowing the bandwidth of), you just put the congestion control a hop or more away from the box that has the information necessary to do it right.
QUIC can have an advantage in re-using a connection in situations where multiple sequential TCP connections might have been made. Probing for link bandwidth fewer times is not the same as not having to probe for link bandwidth. And HTTP/2 has already addressed the most common case of this without abandoning TCP.
I thought this was bacause of the tsc slow start
For sending an entire file over the network, you don't care which order the packets arrive. If a packet goes missing in the middle, there's no reason to stop transmitting and receiving later packets. Just re-transmit the missing piece from the middle at any point in the future. This is assuming that the entire file is stored on the sender's side.
edit: the protocol design document (linked in this thread) also mentions multiplexing many "connections" using the same sockets in SPDY. With TCP, a lost packet in any of the mux'ed connections will slow down the others.
Using UDP instead of TCP allows increasing bandwidth and decreasing latency. Website bloat is an orthogonal issue and should be addressed but QUIC can mitigate the problems a little.
The overhead of UDP here is pretty much negligible.
For example: https://tools.ietf.org/html/draft-tsvwg-quic-protocol-00
Section 4.3 "A QUIC receiver advertises the absolute byte offset within each stream upto which the receiver is willing to receive data." This is saving the crawler bandwidth by a ton. Limit stuff to 64k and skip all non text data upfront in a very clear cut fashion.
6.2.1.2 prevents hosts spamming you with data after your decided to stop receiving from them.
6.3.2 makes this system fire and forget on a 10m limit and then decide what to do with the host that did or didn't respond with data from the request.
10. Properly download everything from the website (actual priority stuff, central to she protocol, aren't even written, it's a to-do :).
All in all, great protocol to help whoever is running search engines.
For the rest, won't be the default (they seem to be aware of this in this in 11.5)
So trying to guess the future: push quic to Apache/nginx (because 11.5 bypass lots of deployment stuff too), hit websites once and determine who had latest code, cash in on bandwidth.
Not bad for a company start.
Do we need another protocol? Probably not. Will this see light of day? Probably yes since Google's money are pushing it.
I think that's why many good protocols (e.g. SCTP) are rare sights and frequently aren't even considered as an option.
[1] Yes, some idiots just block ICMP completely because they heard it's "secure" and make DHCP or PPP cap MTU at 1200 with "uh, it works just fine" attitude.
IPv6 adoption is a problem, though. I think despite all IANA efforts to push v6, we'll be stuck with IPv4 for long years.
Having not yet read the spec for the QUIC protocol, there must be some amount header that would immediately follow the eight UDP bytes. So, assuming that QUIC takes off and gains broad support, then all that would have to be done is give it a new IP protocol number and redefine what is the transport layer and what is session/application layer.
I know this misconstrues Google's role in all of this somewhat, but it's an interpretation that crossed my mind.
[1] https://www.tra.gov.ae/en/faq.aspx (check out the VOIP section)
[2] http://gulfbusiness.com/snapchat-voice-and-video-calling-blo...
At least one operator allows you to lift the restriction though. With money.
So in addition to proving lower layer solution to things like network congestion they also have to prove their crypto layer? Sounds like an equally large task, if not larger.
And even if all TCP implementors decide to adopt the next task is to make servers and clients adopt the crypto layer.