Open Bug 1158011 (QUIC) Opened 5 years ago Updated 1 day ago

[meta] QUIC support

Categories

(Core :: Networking, enhancement, P3)

enhancement

Tracking

()

People

(Reporter: mt, Unassigned, NeedInfo)

References

(Depends on 30 open bugs, )

Details

(Keywords: feature, meta, parity-chrome, Whiteboard: [necko-backlog])

User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0
Build ID: 20150415140819

Steps to reproduce:

The official website of QUIC: https://www.chromium.org/quic
The source code of QUIC: https://chromium.googlesource.com/chromium/src/net/+/master/quic/
Severity: normal → enhancement
OS: Unspecified → All
Hardware: Unspecified → All
Summary: QUIC(Quick UDP Internet Connections) supporting → QUIC (Quick UDP Internet Connections) supporting
Version: unspecified → 37 Branch
Component: Networking: HTTP → Networking
Summary: QUIC (Quick UDP Internet Connections) supporting → QUIC (Quick UDP Internet Connections) support
Version: 37 Branch → 1.0 Branch
Informational RFC Draft:
https://tools.ietf.org/html/draft-tsvwg-quic-protocol
Status: UNCONFIRMED → NEW
Ever confirmed: true
Whiteboard: [parity-Chrome]
Version: 1.0 Branch → Trunk
Alias: QUIC
Patrick, what's the opinion of the networking team on that?
Flags: needinfo?(mcmanus)
To anyone that read any QUIC docs a long while ago: they've made drastic improvements to completeness and readability. For a long while the documentation did not look like something that was practical to try to implement from.
(In reply to [:fabrice] Fabrice Desré from comment #2)
> Patrick, what's the opinion of the networking team on that?

userspace based transport is an incredibly important area of interest. Personally, its probably my top interest right now and its strategically important for Mozilla as part of Internet evolution.

It allows us to deploy what are effectively L4 upgrades in an era when OS stack updates to TCP are becoming a an ossified bottleneck to things like transport security, effective network utilization, and fault tolerance.

quic deserves credit for pushing forward the state of the art, and has shown good results with the specific case of streaming media on a well distributed CDN. We eagerly look forward to working with goog and engaging with other interested parties to develop an open standard in this space that is suitable for a broad range of use cases and operators.

Informational drops of evolving packet formats are welcome contributions on the road to this goal, but they don't reach the bar on their own.
Flags: needinfo?(mcmanus)
May the following library help?
https://github.com/devsisters/libquic
YouTube serves video to Chrome over QUIC. A contact at YouTube says, "QUIC has worked out pretty well for Chrome. Improved things across the board for Chrome and Android."
Keywords: feature
Whiteboard: [parity-Chrome] → [parity-Chrome][necko-backlog]
No longer blocks: Quantum
If this is implemented, we should ensure that it's accessible to WebExtensions webRequest APIs.

https://blog.brave.com/quic-in-the-wild-for-google-ad-advantage/

"AdBlock Plus, uBlock Origin, and other extensions cannot block QUIC requests. Recommended best practice is to disable QUIC from the chrome://flags/ URL."
re comment 8 - the protocol should not be a problem for any sensible content API. Just make sure they are defined in terms of content and scheme and not protocol. There is nothing about quic that would make it harder to implement for than than say http/2 (which also does not have its own scheme - they both use https://). If the webextension gets defined in terms of TCP or something then that would be a problem - but I cannot see a reason to do that.
Regarding that specific blog post in comment 8, there was a huge twitter thread about it:

https://twitter.com/bcrypt/status/856886044066590721

It seems maybe the confusion is due to QUIC pre-connects being allowed even if the actual requests are blocked by webRequest:

https://bugs.chromium.org/p/chromium/issues/detail?id=715140#c11

Also, chrome has some special whitelisting of google domains that bypass webRequest that muddies the waters:

https://bugs.chromium.org/p/chromium/issues/detail?id=715184
specifically protocol-independent pre-connects are not impacted by webRequest (which seems right to me fwiw). Its not a QUIC issue - same would apply to other transports.

And the whitelist thing certainly sounds undesirable, but again that's a chrome implementation issue independent of transport (i.e. turning off quic doesn't make the whitelisted requests visible to the ad blockets.)

it seems possible that the nascent state of quic tooling made it harder for the bloggers to correctly diagnose the bytes they were seeing. Time and standards will fix that problem.
Bulk change to priority: https://bugzilla.mozilla.org/show_bug.cgi?id=1399258
Priority: -- → P1
Bulk change to priority: https://bugzilla.mozilla.org/show_bug.cgi?id=1399258
Priority: P1 → P3
Mass bug change to replace various 'parity' whiteboard flags with the new canonical keywords. (See bug 1443764 comment 13.)
Keywords: parity-chrome
Whiteboard: [parity-Chrome][necko-backlog] → [necko-backlog]
Dirkjan Ochtman (already CCed on this bug) mentioned on Twitter today that he published the first version of his Rust crate (quinn) that implements QUIC: https://crates.io/crates/quinn

We probably couldn't ship it as-is because it uses ring / rustls, but it's possible it could be modified to swap those implementations to use NSS by way of wrapper crates in Firefox.
I actually emailed Dragana (the current Networking module owner) about this recently, it appears she would prefer to stick to the mozquic implementation that Patrick and she have been working on, on the premise that it will be hard to integrate the Rust code into the Gecko environment (she mentioned NSPR).

We'd be happy to bring up some traits to abstract over TLS implementations -- although in the end, I think that Gecko adopting rustls would be a much more interesting long-term strategy than doing NSS bindings. Isn't this exactly the kind of thing Rust is better at?
> I think that Gecko adopting rustls would be a much more interesting long-term strategy than doing NSS bindings

Changing TLS provider from NSS to something else is a much bigger question than "just" quic (and I wouldn't be surprised if there's already a bug filed about that with a very long comment section), but it also seems totally unlikely (and wrong) that a quic implementation for Firefox would use a different TLS 1.3 provider than the rest of necko/gecko.
Daniel: I agree that these are largely orthogonal issues, which is why I mentioned that we'd be happy to abstract over TLS implementations in our QUIC implementation if that will help unblock this strategy.

(BTW, searching Bugzilla for rustls results in Zarro Boogs for now.)
Regardless of where we start for QUIC support, our basic policy here is that Firefox should use a consistent TLS 1.3 implementation, which, at least for now, means NSS.

I considered modifying this to "HTTP/3 support" given that is the only current use case, but I realized that there are a few differences between HTTP/2 and HTTP/3 other than QUIC. (Some of which is just bypassing HTTP/2 flow control routines to calls into quic.) Should that be a separate bug, or just roll it up into this one since it's all part of the same push?

I believe HTTP/3 support should be a separate bug, depending on this one.

Webcompat Priority: --- → ?
Keywords: meta
Summary: QUIC (Quick UDP Internet Connections) support → [meta] QUIC (Quick UDP Internet Connections) support

Couldn't help myself.

Summary: [meta] QUIC (Quick UDP Internet Connections) support → [meta] QUIC support
Depends on: 1581637
Depends on: 1582660
Depends on: 1582659
Depends on: 1582663
Depends on: 1582664

Excuse me, sorry for the intrusion.

"Initial support was added in Chrome 29 and Opera 16, and in LiteSpeed servers. Chrome support expanded this month, but the bigger news is Cloudflare making the protocol generally available for its customers."

Link:
https://www.zdnet.com/article/cloudflare-google-chrome-and-firefox-add-http3-support/

Thanks...

Excuse me, sorry for the intrusion(again).

There is this project in GO:
https://github.com/lucas-clemente/quic-go

Thanks!

Depends on: 1587353
Depends on: 1587712
Depends on: 1587739
Depends on: 1595269
Depends on: 1595271
Depends on: 1595337
Depends on: 1595449
Depends on: 1597072
Depends on: 1601070
Depends on: 1605099
Depends on: 1605090
Depends on: 1605105

INFO: currently that is a problem with QUIC/HTTP3 because some functionality in neqo has changed and necko has not adapted to it. I am working a solution. The problem can be experience that http3 connection will never be closed and will enter a busy wait state.

Depends on: 1608786
Depends on: 1605109
Depends on: 1608967
Depends on: 1609051
Depends on: 1608774
Depends on: 1614711
Depends on: 1616009
Depends on: 1616238
Depends on: 1616239
Depends on: 1616340
Depends on: 1616398
Depends on: 1616005
Depends on: 1617142
Depends on: 1618804
Depends on: 1498663
Depends on: 1618849
Depends on: 1619764
Depends on: 1619211
Depends on: 1619793
Depends on: 1619813
Depends on: 1618158
Depends on: 1620574
Depends on: 1605751
Depends on: 1622232
Depends on: 1622233
Depends on: 1622237
Depends on: 1622861
Depends on: 1622845
Depends on: 1622901
Depends on: 1623312
Depends on: 1616323
Depends on: 1623755
Depends on: 1623501
Depends on: 1624090
Depends on: 1624105
Depends on: 1624800
Depends on: 1625198
Depends on: 1625284
Depends on: 1625841
Depends on: 1625886
Depends on: 1626359
Depends on: 1603240
Depends on: 1626799
Depends on: 1627910
Depends on: 1628459
Depends on: 1628460
Depends on: 1628461
Depends on: 1628886
Depends on: 1629057
Depends on: 1629090
Depends on: 1635355
Depends on: 1635502
Depends on: 1634020
Depends on: 1640148
Depends on: 1643165
Depends on: 1644374
Depends on: 1644377
Depends on: 1644532
Depends on: 1645471
Depends on: 1646023
Depends on: 1646024
Depends on: 1646025
Depends on: 1646318
Depends on: 1648266
Depends on: 1596576
No longer depends on: 1596576
Depends on: 1648532
Depends on: 1648556
Depends on: 1648558
Depends on: 1649495

blog.cloudflare.com/how-to-test-http-3-and-quic-with-firefox-nightly/
when you enable network.http.http3.enabled to true >slows down Internet connect and request stopped

Flags: needinfo?(mt)
Depends on: 1650358
Depends on: 1650363
Depends on: 1650366
Depends on: 1650388
Depends on: 1646961
Depends on: 1650992
Depends on: 1651489
Depends on: 1651565
Depends on: 1651541
Depends on: 1651814
Depends on: 1652104
Depends on: 1652573
Depends on: 1653178
Depends on: 1653179
Depends on: 1653180
Depends on: 1653043
Depends on: 1654401
Depends on: 1654507
Depends on: 1655356
Depends on: 1655125
Depends on: 1655782
Depends on: 1655843
Depends on: 1656522
Depends on: 1656870

(In reply to artymka1 from comment #27)

blog.cloudflare.com/how-to-test-http-3-and-quic-with-firefox-nightly/
when you enable network.http.http3.enabled to true >slows down Internet connect and request stopped

¡Hola!

I'm sorry to learn that enabling HTTP/3 on your Nightly has negatively impacted performance.

Could you please elaborate on what exactly do you mean by "slows down Internet connect and request stopped"?

Could you please share URL(s) of where the slow down is observed and how exactly it manifests?

¡Gracias!
Alex

Flags: needinfo?(artymka1)

¡Hola Dragana!

Thanks so much for all of your work on HTTP/3 on Firefox!

Lazy Saturday so I was again testing the servers listed at https://bagder.github.io/HTTP3-test/ on today's Nightly...

Some work but I noticed that all of these fail with the initial request showing "Blocked" on the "Transferred" column on the 1st request in the "Network" tab of the Developer Tools:

https://quic.tech:8433/
https://pgjones.dev:4433/
https://f5quic.com:4433/
https://nghttp2.org:4433/

These fail with the initial request showing "0 B" on the "Transferred" column on the 1st request in the "Network" tab of the Developer Tools:
https://test.privateoctopus.com:4433/
https://fb.mvfst.net:4433/

The rest of test servers seem to work.

Are these known bugs? If not, are these worth filing?

¡Gracias!
Alex

Depends on: 1658362
You need to log in before you can comment on or make changes to this bug.