{"id":10564,"date":"2019-05-29T10:58:27","date_gmt":"2019-05-29T14:58:27","guid":{"rendered":"https:\/\/blog.litespeedtech.com\/?p=10564"},"modified":"2019-05-29T10:58:27","modified_gmt":"2019-05-29T14:58:27","slug":"notes-from-the-road-quic-interim-london","status":"publish","type":"post","link":"https:\/\/lswp.store\/index.php\/2019\/05\/29\/notes-from-the-road-quic-interim-london\/","title":{"rendered":"Notes from the Road: QUIC Interim London"},"content":{"rendered":"<p><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR-11.jpg\" alt=\"Notes from the Road: QUIC Working Group London Interim Meeting\" width=\"1000\" height=\"500\" class=\"aligncenter size-full wp-image-10566\" srcset=\"https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR-11.jpg 1000w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR-11-300x150.jpg 300w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR-11-768x384.jpg 768w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR-11-600x300.jpg 600w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<blockquote><p>\u201cPLEASE TAKE NO ACTION!\u201d <br \/>\u2013 PSA on Cloudflare\u2019s intercom during a fire drill, 5\/23\/2019, London QUIC Interim Meeting<\/p><\/blockquote>\n<p>The QUIC Working Group met for its regular Interim Meeting last week.  This time, it was hosted by Cloudflare at its headquarters in London.  Once more, the author attended the meeting remotely.<\/p>\n<h2>Interop Results<\/h2>\n<p>As usual, a two-day interoperability hackathon preceded the interim meeting proper.  The Interop was held Monday and Tuesday.  The number of QUIC implementations has grown to about two dozen.  There are now QUIC implementations in C, C++, Erlang, Go, Java, Objective-C, Python, Rust, and TypeScript.  Most of them already implement the month-old (that\u2019s old!) Internet-Draft 20 QUIC transport and about half of them do HTTP\/3.<\/p>\n<p>Our own implementation, <a href=\"https:\/\/github.com\/litespeedtech\/lsquic-client\">lsquic<\/a>, successfully fetched a resource using HTTP\/3 from ten servers; eight HTTP\/3 clients succeeded fetching a resource from our server implementation.  Two implementations already support server push.  This is on our to-do list.<\/p>\n<p>Alan Frindell (Facebook), our old friend and editor of the QPACK draft, found a bug in our QPACK library, <a href=\"https:\/\/github.com\/litespeedtech\/ls-qpack\">ls-qpack<\/a>.  A drawback of having an early implementation is that one becomes subject to an unusual category of bugs: specification changes.  In this case, one of the default QPACK settings changed from 4096 to 0 \u2013 but the code did not.  On the bright side, the bug was <a href=\"https:\/\/github.com\/litespeedtech\/ls-qpack\/commit\/b43d0c9b602e682cb352b389d1c1952a1239cde4#diff-83b4417d3fb92c5c12c73669d9e6c435L555\">easy to fix<\/a>.<\/p>\n<h2>Connection ID Grows<\/h2>\n<p>The Interim Meeting commenced on Wednesday with discussion of Connection ID length.<\/p>\n<p>Over a <a href=\"https:\/\/lswp.store\/2018\/02\/05\/ietf-quic-working-group-january-interim-meeting-highlights\/\">year ago in Melbourne<\/a>, the proposal to grow the CID from 8 bytes was first floated.  Since then, the CID transformed from fixed to variable length and grew to a maximum of 18 bytes.  Martin Duke (F5) has been working on <a href=\"https:\/\/github.com\/martinduke\/draft-duke-quic-load-balancers\">QUIC Load Balancer specification<\/a> and ran into a limitation: 18 bytes <a href=\"https:\/\/github.com\/quicwg\/base-drafts\/issues\/2736\">is just not enough<\/a> for a multi-tier load balancing solution.<\/p>\n<p>The proposal is to increase the maximum Connection ID size from 18 to 48 bytes.  This change will have a significant effect on the wire format, as four bits no longer suffice to encode 49 (0 through 48) values.<\/p>\n<blockquote><p>\n    [SIDEBAR] An acute reader has noticed that four bits are not enough to represent 19 (0 through 18) values, either.  The way it currently works is that the set [0 \u2013 15] is mapped to 0, [4 \u2013 18].\n<\/p><\/blockquote>\n<p>An impact to our implementation will be unfortunate.  We represent CID as a struct: four-byte integer to represent the CID length and 18-byte buffer to hold the ID.  Together with padding, this structure weighs in at 24 bytes.  Given that <em>lsquic<\/em> uses 8-byte CIDs, the overhead is 200%.  The forecast CID growth will increase this overhead to 550%.   To take this arithmetical exercise a bit further: each IETF QUIC connection averages eight source CIDs and eight destinations CIDs.  This means that there will be (52-8)*16=704 bytes of overhead per connection.<\/p>\n<h2>HTTP Priorities<\/h2>\n<p>HTTP\/3 has inherited HTTP\/2 priority scheme \u2013 adjusted for the specifics of the QUIC transport.  Exclusive dependencies are gone, and placeholders are used in place of zombie requests to keep priority trees stable.<\/p>\n<p>Patrick Meenan (Cloudflare) and others have been researching how well \u2013 or, rather, how poorly \u2013 web browsers and web servers utilize HTTP\/2 priorities.  The answer is: overall, <a href=\"https:\/\/github.com\/andydavies\/http2-prioritization-issues\">priorities are not leveraged effectively<\/a>.  In large part, this is due to problems in the HTTP\/2 priority design.<\/p>\n<p>Patrick Meenan, Robin Marx (Hasselt University), and Ian Swett (Google) have each made competing proposals, while many others made various suggestions to them, creating what Ian called a <a href=\"https:\/\/github.com\/quicwg\/wg-materials\/blob\/master\/interim-19-05\/priorities.pdf\">prioritization spectrum<\/a>:<\/p>\n<figure id=\"attachment_10568\" aria-describedby=\"caption-attachment-10568\" style=\"width: 1600px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" src=\"https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a.png\" alt=\"QUIC Working Group London Interim Meeting: Ian Swett&#039;s Prioritization Spectrum\" width=\"1600\" height=\"787\" class=\"size-full wp-image-10568\" srcset=\"https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a.png 1600w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a-300x148.png 300w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a-1024x504.png 1024w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a-768x378.png 768w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a-1536x756.png 1536w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a-1320x649.png 1320w, https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR11a-600x295.png 600w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><figcaption id=\"caption-attachment-10568\" class=\"wp-caption-text\">Slide from Ian\u2019s Presentation<\/figcaption><\/figure>\n<p>The Working Group agreed that further work is needed on this in order to have an effective prioritization that will actually be used.  It is possible that prioritization will be done as an extension: that way, it can be changed should a better design appear.  Stay tuned.<\/p>\n<h2>Version Aliasing<\/h2>\n<p>Version aliasing is an attempt to prevent <em>version ossification<\/em>.  QUIC handshake packets expose QUIC version information.  In order to prevent middleboxes from allowing (say) QUIC v1, but dropping other versions, it <a href=\"https:\/\/github.com\/quicwg\/base-drafts\/pull\/2573\">has been proposed<\/a> that a server may offer the client a selection of version aliases.  The server agrees to recognize these aliases for a fixed period of time as equivalent of some other version.  The client, then, can use one of these aliases in a subsequent connection attempt.<\/p>\n<p>While the proposal is short, the implementation of this mechanism is sure to have some underwater stones.  We hummed in favor of addressing the version ossification problem in v1 and so either this proposal, its variation, or something else entirely will likely make its way into the final QUIC transport draft.<\/p>\n<h2>Next Steps<\/h2>\n<p>IETF 105 takes place in Montreal at the end of July.  Before that time, there may be another virtual (that is, not face-to-face) interop event, depending on when the next version of the QUIC Internet-Drafts drops.  The biggest question mark in my mind is the HTTP priorities.  We want to get it right \u2013 this means doing a lot of work, and a lot of work takes time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The QUIC Working Group met for its regular Interim Meeting last week. LiteSpeed attended the meeting remotely.<\/p>\n","protected":false},"author":1,"featured_media":10566,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[18],"tags":[143,201,238,240],"class_list":["post-10564","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-conferences","tag-ietf","tag-notes-from-the-road","tag-quic","tag-quic-working-group"],"jetpack_featured_media_url":"https:\/\/lswp.store\/wp-content\/uploads\/2019\/05\/NFTR-11.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/posts\/10564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/comments?post=10564"}],"version-history":[{"count":0,"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/posts\/10564\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/media\/10566"}],"wp:attachment":[{"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/media?parent=10564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/categories?post=10564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lswp.store\/index.php\/wp-json\/wp\/v2\/tags?post=10564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}