Beyond TCP: The evolution of Internet transport protocols
slideshare.net
slideshare.net
QUIC uses fundamentally the same basic congestion avoidance algorithm as TCP (QUIC's algorithm is a work in progress AFAIK) so even QUIC is still in the same bloat.
The problem eventually bubbles up the stack and affects most web applications, so that a single user, just using a web application on one machine, can break the Internet for all other users on the same LAN.
Try this demo for yourself:
1. Run "ping google.com" from another computer on your LAN.
2. Upload a 10-20MB file via Gmail or Dropbox from your computer.
3. Watch the ping times on the other computer skyrocket from around 100ms to upwards of 5-10 seconds.
4. Try a Google search from any other computer on your LAN while this is happening.
Web applications which use protocols such as WebSockets have no way to reduce the bufferbloat footprint of their application, other than re-implement their own delay sensitive congestion avoidance algorithm on top. And actually, if you want to build a robust application which does any uploading (or plenty of downloading), this is what you need to do.
For example, to prevent inducing bufferbloat, Apple's software update actually uses a variant of LEDBAT (the delay sensitive congestion avoidance algorithm from BitTorrent's protocol) when downloading software updates.
In any event, I don't think it's going to make any inroads towards fixing bufferbloat for a single user on the same machine, i.e. where multiple applications are creating several seconds of bufferbloat each, the latency sensitive applications (Skype, Google searches, typical web browsing) are still all going to suffer.
I think it's actually not a router issue but an application issue, in the same sense that CPU overusage by one application is an application issue. Applications just need to be better designed to not bloat a user's network.
Hopefully, the next major Apple OS update will include bufferbloat measurements in Activity Monitor, so offending apps can be named and shamed. But even this won't prevent web apps from having massive bufferbloat footprints (for that the browsers will need to share data with Activity Monitor, or highlight this to the user).
After this, I think pressure from users on application developers to reduce bufferbloat footprint and build network efficient apps is the way forward.
Then we will be able to switch to some of the better higher-bandwidth TCP congestion avoidance algorithms without having to settle for algorithms which ignore latency as a congestion signal (packet loss is a poor signal and causes throughput to saw-tooth).
This is one of the many disappointing aspects of QUIC apart from the whole focus on just being a replacement option for HTTP(/2). Which means being constrained by many of the problems that have plagued the web (browser) model for so long.
And in the case of congestion avoidance, they've decided to just follow the TCP model despite many better techniques available in the literature. E.g. the protocol that I'm working on (see my profile) tries to figure out the buffer bloat case by tracking rtt evolution during a session. This sort of technique is not easy to do in the TCP's lock-step ack based model. But it gets easier to do if you replace lock-step acks with periodic updates from the receiver side combined with special ack packets to measure rtt more accurately.
There's an opportunity available today to build a whole new networking stack from the ground up for the new (mostly mobile) use cases. The design space opens up amazingly once you look beyond the web browser as the ultimate client. I'm about to board a very long flight but I'll be happy to engage in further discussion to whoever connects directly.
The end-user computer has a faster link than its internet connection upload speed, typically a gig ethernet whereas a xDSL upload speed is a few megabits/s.
If you transfer data to a random website (upload) from the computer, packets will accumulate inside router/modem tx queue, because this is the slowest link between the two hops. This is where it's important to have an AQM running to reorder/drop packets in that queue.
Other AQMs could solve it, if properly implemented, but fq_codel needs no tweaking.
CORRECTION:
fq_codel is not default in Linux, but is default in some distributions, like Fedora.
There's this presentation at the IETF: https://www.youtube.com/watch?v=Wp0Kr3B64tA
These are not the same slides, but it should tell you all you want to know about Multipath TCP.