Category: Conferences

LiteSpeed conference reports from industry meetings and events that LiteSpeed has attended or will attend. CloudFest, QUIC Working Group, cPanel Conference, WHD.Global, Hostingcon, and more!

  • Notes From the Road: IETF 110

    Notes From the Road: IETF 110

    IETF 110 Recap

    Due to the pandemic, IETF 110 was held online. It was the third IETF conference in a row to use the virtual format.

    Because the QUIC and HTTP/3 specifications are well on their way to becoming standards, there has not been as much working group activity around these drafts as during previous IETF meetings. Only one QUIC Working Group session was held, and no HTTPbis WG meetings. On the other hand, the new MASQUE working group discussed ways of using QUIC for their novel proxying protocols.

    What follows is my take on the discussions that took place during the sessions I attended. It is not an exhaustive list.

    QUIC

    The QUIC WG meeting — just one in this IETF — was held on Wednesday, March 11. (See minutes).

    Working Group Updates

    Lars Eggert (NetApp), the outgoing Working Group chair, updated the Working Group on the status of the Internet Drafts. The QUIC transport, TLS, recovery, and invariants drafts are expected to become RFCs in a matter of weeks. The HTTP/3 and QPACK drafts, on the other hand, have to wait a while longer, as they have some dependencies on the HTTPbis Working Group.

    As usual, the IETF was preceded by the Hackathon:

    Only two or three implementations participated in the interop effort this time around. There are two likely causes:

    1. There were no substantial changes to the transport and HTTP/3 protocols since the last interop event. Thus, there was no impetus for many people to test their stacks again.
    2. Marten Seemann’s Interop Runner has gained a lot of traction in the past few months. Some people do not bother with the manual interop anymore.

    Christian Huitema highlighted the performance testing part of the Hackathon, in which Nick Banks (Microsoft) and his team ran upload and download speed tests of the few participating implementations. (Each had to implement a protocol designed by Nick specifically for the purpose.)

    IETF 110 Interop
    Part of performance test results

    Christian noted that there has been significant improvement since last year in UDP performance in both Windows and Linux operating systems. This is an encouraging sign for QUIC, as QUIC performance has long been a sore spot for the implementers (LiteSpeed included). This also means that QUIC is being taken seriously.

    Ops Drafts

    Brian Trammell (Google) discussed the status of the Operations Drafts. These documents discuss various aspects of the way QUIC is to be used and managed on the Internet. Because QUIC uses UDP, there are expected to be some growing pains.
    For example, RFC 4787 recommends the UDP NAT rebinding timeout to be at least 2 minutes, but that is not followed universally. In the wild, a UDP connection can expect to be subject to NAT rebinding after just 30 seconds of inactivity.

    In general, the working group consensus is that the Ops Drafts could still use some cooking.

    DATAGRAM Extension

    The DATAGRAM extension is used to carry data that does not have to be retransmitted. This unreliable channel is used by the HTTP/3 DATAGRAM frames (see discussion in MASQUE). Tommy Pauly (Apple) led the discussion (see slides). (Both QUIC, the transport protocol, and HTTP/3, the application protocol, have DATAGRAM frames. They are not the same; the former is used to carry the latter, but a different application protocol could use the transport DATAGRAM frames, too.)

    The zombie issue of the flow ID absence (or presence) in the DATAGRAM frame refuses to die. It was discussed, at some length, again, after it was discussed a few meetings ago and following a day after similar discussion (with the same cast of characters) of the HTTP/3 DATAGRAM frame. In the end, it was decided to keep the flow ID out of the QUIC DATAGRAM.

    Several other issues were attended to during the discussion. This extension is on schedule to be finalized this July.

    Version Negotiation Extension

    The story of version negotiation in QUIC is covered well in the first slide of David Schinazi’s (Google) presentation. Version negotiation was removed two years ago from the Transport Draft because the Working Group could not agree on the design and wanted to make the 2019 deadline (haha!). Instead, as it usually happens, the WG empaneled a design team of David and EKR (Eric Rescorla) to propose something that works.

    Their proposal is intricate and somewhat complicated. Participant after participant took turns to state as much. In the end, Matt Joras (Facebook), one of the co-chairs, closed the discussion with the mandate to the design team — and the working group — to propose simpler designs. (Watson Ladd submitted one idea hours later to the mailing list.)

    Load Balancing Extension

    While everyone agrees that being able to load-balance QUIC servers is a great idea, almost no one has actually done the work. Martin Duke (F5), the co-author and now-long-time champion of the load balancing extension, has been begging, cajoling, imploring, and nudging the Working Group participants to please implement something so that the extension gains some practical experience. “Without implementations,” said Martin, “this draft is at a standstill as there is no way to make progress.”

    Ben Schwartz (Google) took issue with the plaintext version of the load balancer protocol: “Doesn’t it break the QUIC security promises?” Martin countered that he sees the plaintext protocol as just one end of the security spectrum continuum. A couple more people voiced their concern regarding the security implications. It is likely that this part of the load balancing specification would have to come out.

    Plenary

    The Plenary is an IETF-wide meeting in which most of the business of IETF the group is discussed. The assorted committees, bodies, and boards brief IETF as their members rotate in and out, gratitude is expressed, sponsors are acknowledged, and future work is discussed.

    The highlight of this meeting for me was Magnus Westerlund’s (Ericsson) address “Evolving and Applying QUIC.” The purpose of the address was to make the whole IETF community aware that QUIC has arrived and it is now time to begin thinking about how to use it. Magnus sounded optimistic as he noted how many companies, large and small, use QUIC already.

    Another exciting part was an address by Vint Cerf, who encouraged the IETF to continue to do good work.

    MASQUE

    IETF 110 MASQUE WG

    The MASQUE Working Group meeting was held on Tuesday, March 9 (see minutes). This is a relatively new working group at the IETF dedicated to “secure proxy protocols and mechanisms based on QUIC.” The meeting was chaired by Eric Kinnear (Apple) and Chris Wood.

    HTTP/3 DATAGRAM Extension

    During the first hour, Lucas Pardue (Cloudflare) and David Schinazi (Google) presented their Using QUIC Datagrams with HTTP/3 Internet Draft (also see slides). The proposed HTTP/3 datagram frames are meant to be carried inside the QUIC datagram frames (which themselves are an extension to the QUIC protocol). Their payload would be UDP or IP packets in some form to facilitate proxying connections of appropriate types.

    The discussion covered mainly these three design topics:

    1. Premise: all flows have an identifier
    2. Premise: use a new HTTP/3 setting to negotiate the use of flows IDs
    3. Decision: associate flows with streams

    Flow IDs are meant to demultiplex datagrams from different application components. Whose job is it to do the demultiplexing: the application protocol or the application? Some noted that the flow ID was removed from the transport protocol extension, where it originally lived. The eventual agreement was to let the flow IDs stay.

    One proposal would negotiate the use of flow IDs using the H3_DATAGRAM setting. This was quickly shut down as making this more complicated than necessary. Another concern with having this HTTP/3 setting in the first place is that it serves as an advertisement: “Hey, I am a proxy!” This would make such a proxy easy to identify and censor.

    Associating flows with streams would make it unnecessary to maintain a separate flow ID namespace. The cons and pros were discussed. In the end, flexibility won out and it was decided (via a MeetEcho poll) to keep flow IDs separate from streams.

    Proxying

    The reason for the MASQUE WG, at least at this stage, is the proxying applications made possible by the QUIC and HTTP/3 protocols. David Schinazi and Dallas McCall presented their Connect UDP and IP Proxying proposals. The former is akin to the HTTP CONNECT, but using UDP instead of TCP. The latter is a protocol to ferry IP packets over HTTP/3. Both are in the early stages of development.

    Some interesting discussion was had regarding the potential benefit (and feasibility) of hiding the Connect UDP functionality from a casual Internet scan. In other words, an HTTP/3 server may be offering a way to proxy UDP connections for clients “in the know.”

    The aspect of the IP Proxying proposal that garnered most attention was whether it is better to carry IP packets with the header or just the payload. This discussion will continue on the mailing list.

    Conclusion

    It’s been some time coming, but the QUIC and HTTP/3 standards — barring some extraordinary turn of events — are going to become RFCs this year!

    At LiteSpeed Technologies, we have been honored to have participated in this process, making the Internet better for everybody. We shipped our pioneering implementation to customers; we championed the use of Google QUIC and, later, HTTP/3; and we contributed to the specifications themselves: main transport, HTTP/3, and QPACK header compression as well as several extensions.

    We will continue to improve our HTTP/3 stack and pick up new extensions and features that are most useful to our customers. Thank you to those who accompanied us on our journey from a small creek to what is now a river about to enter the ocean.

  • Notes from the Road: IETF 109 Recap

    Notes from the Road: IETF 109 Recap

    Notes from the Road: IETF 109 Recap

    I don’t want to appear hemispheric. – Lars Eggert (taking back his claim that April of next year it will be “spring.”)

    I participated in IETF 109 on November 16 – 20, 2020. For the full list of meeting materials and notes, see the agenda. What follows are my observations and some interesting tidbits.

    ICT

    No, ICT is not a name of an IETF working group. ICT stands for Indochina Time, so named after the Indochinese Peninsula where this timezone is observed. This is also the timezone used to schedule IETF 109 virtual meetings. (For obvious reasons, IETF 109 is completely virtual.) If I lived in Kyzyl, this would be convenient, but because I live in NJ, I had to stay up until the wee hours of the morning to attend some of the meetings.

    IPPM

    IPPM Working Group deals with IP Performance Measurements. Ian Swett (Google) and Tommy Pauly (Apple) chaired the meeting during which several Internet Drafts were discussed. Of particular interest to me was Explicit Flow Measurements Techniques, an Internet Draft of which I am a co-author. This proposal came out of two competing proposals to utilize two non-encrypted bits in QUIC packet headers to measure and troubleshoot losses in the network. The QUIC WG asked the warring parties to compromise and make a unified draft. It is this hybrid draft that Cociglio Mauro (Telecom Italia) presented to the group.

    The Chairs liked the presentation and indicated that the draft may find a home in IPPM. I look forward to continuing to contribute to this effort.

    Second-Class Citizens No More

    In some of my previous reports of IETF conferences which I attended remotely, I complained that the remote participants are treated as second-class citizens. No more! Wondrously, as soon as everyone had to attend remotely, sound improved (OK, this is probably due to not having to share a microphone per room full of people randomly opening Snickers bars), the discussions began to be better managed, and it was always clear who was speaking. Is the digital future finally here?!

    TCPM

    TCPM stands for TCP Maintenance. This Working Group’s meeting lasted two hours, during which several items were discussed:

    Cubic

    Lars Eggert began updating the Cubic RFC (RFC 8312). As usual, an update to an existing RFC bears the monicker “bis,” and so this work is called RFC 8312 bis. (A second update to a specification is called “tre.” I don’t know what comes next.) Several participants expressed an interest in this, as the RFC differs from the Cubic paper.

    TCP

    Wesley Eddy discussed the ongoing work on RFC 793 bis. Yes, they are really working to update the 40-year-old TCP specification.

    Delayed ACKs

    The TCP Ack Rate Request (TARR) option was presented by Carles Gomez of Universitat Politècnica de Catalunya. This is similar to the Delayed ACKs extension in QUIC, but for TCP. I have been working on adding the support for Delayed ACKs to lsquic, and so a lot of the ideas covered were familiar to me.

    TCPLS

    Olivier Bonaventure presented TCPLS — a fusion of TCP and TLS protocols. The idea is to leverage TLS protection and record framing protocol to exchange TCP control data (such as TCP options) and payload in a TLS stream. This integration will allow TCP to match some of the QUIC’s performance advantages. Olivier et al.’s recent research paper positions TCPLS as TCP’s answer to the challenge posed by QUIC:

    History tells us that TCP has evolved with competing transport protocols. QUIC is today’s competitor,but there is still plenty of room to improve TCP.

    TCPLS belongs to a new family of experimental protocols. Olivier Bonaventure and a few other scholars at the University of Louvain organized into a group to research how to make Internet protocols programmable. In Pluginized QUIC (PQUIC), an endpoint delivers custom QUIC protocol functionality to its peer as eBPF bytecode! In the proof-of-concept example, FEC, or forward erasure correction, is enabled as a plugin. It’s quite innovative way to look at extending the QUIC protocol and I hope to find time to play with PQUIC soon.

    TLS

    The TLS Working Group discussed the fact that, as it turned out, MAC calculation in DTLS is not injective due to an ambiguous boundary between CID and plaintext. Other topics included issue lists for the ESNI and ECH (Encrypted SNI and Encrypted ClientHello, respectively) drafts.

    Implementation Draft

    Sean Turner, one of the WG chairs, advocated borrowing QUIC WG’s idea of having “Implementation Drafts” to facilitate interoperability work and experimentation. The response was generally positive. I expect the TLS WG GitHub account to begin sporting a new Wiki page soon.

    Gross and Sad

    The word of the day during the TLS WG meeting was “gross.” Someone typed in in the Meetecho chat, someone else repeated it at the mic (“if this design weren’t so gross”), and yet a third person used it within five minutes again.

    I had observed this effect a few conferences ago, where in a QUIC WG meeting everyone started to use the word “sad.” Quoth Mike Bishop: “this feature of the protocol makes me sad.” After Mike, everyone began feeling sad for the next half hour or so.

    This word mirroring effect is probably due to some group dynamic, and it likely even has a name. (If you know the name of this effect, please leave a comment below!)

    Finally, it is remarkable how emotionally charged our technical discussions can become. You can tell that IETF is a volunteer effort.

    Meetecho Good

    Meetecho conferencing software was good. It contained all the necessary features:

    • Ability to share screen easily
    • Voting mechanism
    • Queuing mechanism
    • Detachable chat window
    • List of participants with clear indicators of who is speaking and who is in the queue
    • Working group materials list
    IETF 109 Recap
    Voting in Meetecho TLS WG meeting

    QUIC

    The QUIC meeting lasted two hours. I do not cover every topic below. Full minutes are here.

    WGLC

    MAAG? (More Acronyms Are Good?) WGLC stands for Working Group Last Call. This is when Internet Drafts undergo a final review in the working group before being handed off on their way to become RFCs. This is the stage the QUIC and HTTP/3 drafts are at now.

    Agenda Bash

    A few hours before the meeting was to commence, I emailed the WG proposing that we move the multipath QUIC discussion to the end of the meeting, because it was bound to break out of its timebox. Requesting changes to the agenda is called “agenda bashing” in IETF argot. This was my first agenda bash — and it was successful.

    Load Balancers

    Martin Duke talked about his QUIC load balancers draft. He has done a lot of work on the document and he implemented a load balancer and some related software, which his employer (F5) allowed him to open-source. It is available on GitHub. Martin asked the WG for feedback and participation. If there were only a server that implemented this protocol with which Martin’s load balancer could interop!

    Version Aliasing

    The QUIC version aliasing Internet Draft also bears Martin’s name. This is a rather involved mechanism to prevent ossification by having servers and clients share information to make QUIC handshake packets inscrutable on subsequent connections. David Schinazi and Eric Kinnear (representing Google and Apple, respectively) expressed support for this draft. This likely means continued development of this draft along with the QUIC version negotiation draft, on which version aliasing depends.

    QLOG

    Robin Marx asked the WG for further direction on QLOG development. He has been toiling for years on the QLOG drafts and the QLOG visualization software, qviz. Now it is time for others to pick up the slack. Many members of the WG expressed their admiration for Robin’s work and testified to its usefulness. Matt Joras (Facebook) and others stated that QLOG has become the defacto logging standard. The emerging consensus is either to adopt Robin’s drafts in this working group or to create a new working group, just for QLOG and related technologies. Discussion is bound to continue on the mailing list.

    Multipath

    The multipath QUIC discussion proceeded at a high level. Among the questions considered were:

    • What do we mean when we say “multipath?”
    • Should multipath be in a base or parallel version of QUIC?
    • What happened to “experiment and get back to the WG?”
    • Should we favor using the QUIC extension mechanism?
    • Do we have the bandwidth to work on this now?
    • Do we need multiple versions of multipath?

    Scribing

    Robin Marx and I volunteered to be scribes for this meeting. After my initial experience scribing unofficially for the IPPM WG, I was confident that I could do the whole two hours of the QUIC WG meeting. I was lucky to share the load with Robin, who turned out to be an efficient and discerning scribe!

    And in the Darkness Bind Them

    After the QUIC meeting (at which point it was after 2 AM), I joined in the IETF gather.town hangout. gather.town was used during the last IETF as well, but this was the first time I tried it.

    Screenshot of a virtual hallway meeting. Here is the author (pictured at bottom right) chatting with Jana Iyengar (Fastly), Marten Seemann, Robin Marx, Marcus Westerlund , Lars Eggert (NetApp), and Nick Banks (Microsoft).

    This VR setup made our chat surprisingly like a hallway conversation in a real-life IETF conference, something that remote participants had always missed out on. Until now. Because everyone was remote, we were all at the same accessibility level and we could all meet and chat, almost like in real life.

    SAAG

    SAAG is a Working Group for general security-related discussion. The chairs gave an overview of the current work of interest in other Working Groups at the beginning of the meeting.

    A Man in the Rough

    Who’s the man in the rough? I do not know, either. He manifested as part of a more nuanced man-in-the-middle taxonomy proposed by Christinan Huitema. Earlier discussion on the group’s mailing list dealt with the fact that the current “man-in-the-middle” terminology is imprecise. Christian and some others offered their versions. For example, in Christian’s view, the man in the rough is joined by the man in the middle and the man on the side. (Perhaps after a few too many drinks.) A competing alternative dubs them a malicious messenger; an oppressive observer; and a chaos creator. (This sounds quite alarming!)

    Some people rebelled and said that one does not have to invent terminology, it is enough to pick up a book and see what terminology is used in academia and just use that.

    History of PKI

    Ryan Sleevi presented the history of PKI, going back more than 30 years! His presentation made me realize even more the complexity of PKI. It is important to be aware of previous successes and failures so that we can make better choices going forward.

    INTAREA

    Internet Area Working Group is for general discussion of Internet-related topics that might not fit elsewhere.

    QUIC Tunneling

    Maxime Piraux (of Université catholique de Louvain and the author of the most excellent QUIC Tracker) presented three drafts dealing with tunneling over QUIC. His presentation encountered immediate opposition from several members of the working group. “Why is this being presented in this working group?” asked David Schinazi; “this work should be done in MASQUE.” “It is exactly like CONNECT, but worse,” stabbed Tommy Pauly. Éric Vyncke, the Area Director, had to intervene and justify his and the Chairs’ decision to have these documents presented in this working group. It looks like this work, if it is to continue, will continue in the MASQUE Working Group.

    ICCRG

    Jana Iyengar chairs this working group and he chaired the meeting as well.

    LEDBAT

    First presentation of ICCRG was on LEDBAT, which sounds like something that would make a good LART. In fact, it stands for Low Extra Delay Background Transport and is specified in RFC 6817. Praveen Balasubramaniam (Microsoft) updated the group on the latest developments in this research area: rLEDBAT and LEDBAT++, which improve on the original design.

    CC Census

    The Great Internet TCP Congestion Control Census was presented by Ayush Mishra, a second-year PhD student. BBR: first congestion control which does not back up when there is congestion. Measure 20,000 most popular websites on the Internet — study done in 2019. This is not a trivial task. For example: how do you identify congestion control using short downloads of HTML pages?

    IETF 109 Recap
    Each congestion controller has a shape – slide from Ayush’s presentation

    Praveen asked about BBRv2 — but BBRv2 does not have a consistent shape and is difficult to identify. More graphs, including BBRv2 are available in the paper.

    BBRv2 Update

    Neal Cardwell (Google), one of the principal BBR developers, gave updates on the progress of BBRv2 work at Google. They are continuing to develop BBR and related CCs and are inviting researchers to participate in the discussion and experimentation. Neal dedicated a lot of time talking about BBR.Swift, which is a variant of BBRv2 designed for data centers.

    IETF 109 Recap
    Slide from Neal’s presentation

    Actively working on BBRv2, experimentation continues, stay tuned!

    CC Unfairness

    Szilveszter Nádas (Ericsson) talked about congestion control unfairness. Is BBRv2 fair to Cubic? It depends on AQM — CSAQM does a good job keeping BBRv2 and Cubic flows sharing connections fairly. That is to say, it keeps BBRv2 from stomping all over Cubic.

    While Szilveszter was speaking, a lively discussion about fairness ensued in the Meetecho chat. Why should a CC be fair to a legacy CC that requires a large queue and causes delays? – asked Christian Huitema. On the other hand, someone else argued, what about those who can’t just pick up and upgrade?

    Conclusion

    Attending an IETF conference is a great way to learn about a topic, realize just how many things you still do not know about, and to interact with leading experts. So what if I survived on three hours of sleep a night for the past few days? It was worth it!

  • Notes from the Road: QUIC Interim Zurich

    Notes from the Road: QUIC Interim Zurich

    Notes From the Road: QUIC Working Group Interim Zurich

    Push this button to melt this protocol!
    – Brian Trammell, 2/5/2020

    The QUIC Working Group Interim meeting in Zurich took place on February 5 and 6 (Wednesday and Thursday). This is the second article in the two-article series – the first described the Interop that ran earlier in that week. My recap is not exhaustive; see the official minutes for the full list of the agenda items.

    Interop Status

    At the beginning of Wednesday’s session, Lars Eggert (one of the co-chairs; NetApp) updated the Working Group on the results of the Interop.  In short: we’re still playing catch-up with the changes in the draft; getting the transfer performance batch (the “T” letter) is tricky; and very few implementations support the ECN feature.  (lsquic does support ECN, which is an optional part of the protocol.)

    Varinting the Transport Parameters

    The discussion began with one of the more contentious issues (#3294): converting the way transport parameters are encoded.  In the current draft (25), they look odd because they do not use variable length integers; almost everything else in the transport draft uses varints.  The purist point of view, which David Schinazi (Google) advocated, is that we should make the draft more uniform and use variable integers throughout.  The opposing view (and my initial position) is that this is a cosmetic change and it is too late in the process to make cosmetic changes.

    The argument then moved on whether the limitation of 64K possible transport parameters imposed by the current encoding is important.  More experienced members of the WG stated that this is indeed the case. A smaller set of codepoints leads to registrars being very protective of the unallocated values. A practically infinitely large (262 – 1) set of codepoints would make these concerns moot.

    Having considered these, I switched my preference from “no” to “neutral,” even though this, in effect, becomes wasted work.  In addition, we would have to support both encoding types when doing both ID-25 and ID-26 drafts.

    In the end, the consensus was to make this change, and so we are again changing something significant in the draft.  To lessen the impact of this change, the editors promised to release ID-26 promptly, so that we have time to implement it before the Vancouver Interop in late March.

    Two related issues were briefly touched upon.  First, should there be a requirement to detect duplicate transport parameters?  Second, should the transport parameters be required to be sorted? Certainly, duplicate detection is trivial when parameters are sorted.  Nevertheless, both these proposals were shot down. Martin Thomson (Mozilla) pointed out that the lack of ordering requirements for TLS extensions turned out to be integral for making possible backwards compatibility with TLS 1.2.

    CID Retirement Timeout

    Gorry Fairhurst expressed his concern with the lack of clarity regarding the wait time before a connection ID must be retired in issue 3215. The discussion revolved around just how long an endpoint could wait after receiving a NEW_CONNECTION_ID frame before issuing a RETIRE_CONNECTION_ID in response. If this time is too short, the tarrying endpoint risks receiving a stateless reset when it tries to use the connection ID that was supposed to be retired. Igor Lubashev (Akamai) and a few others pointed out that forgetting a stateless reset token and sending the RETIRE_CONNECTION_ID frame for the corresponding CID do not have to happen at the same time. That is to say, the risk of an aborted connection due to a stateless reset is minimal.

    As this discussion wore on without resolution, Lars preempted it. He asked for a self-organized lunch group to come to a consensus during lunch (naturally). At lunch, it was resolved to close this issue with no action (that is, no design change) and potentially a new editorial issue to clean up existing text.

    Padding Outside QUIC Packet

    Issue 3333 asks whether UDP datagram padding should be counted toward the server’s amplification limit. To prevent amplification attack, a QUIC server is not to send more than three times the number of bytes it received on the connection until the client address is verified. The current version (25) of the Transport Draft recommends padding Initial QUIC packets using PADDING frames. On the other hand, it does not proscribe padding the UDP datagrams that carry QUIC packets with garbage. At least one client implementation pads Initial packets in this manner.

    One view is that what matters are bytes received from the client. Since garbage bytes that follow an Initial packet in a UDP datagram are bytes, those bytes should count. The opposing view, advocated by Christian Huitema and others, is that QUIC is a cryptographic protocol, which means that the only way to attribute bytes to a connection is by using QUIC packets.

    In the end, the first view had more support. The next version of the draft will count garbage trailing bytes toward the server amplification limit.

    Recommend ECN Strongly

    Mirja Külhewind, one of the co-authors of the QUIC Operability Drafts, advocated for recommending ECN more strongly in issue 3373, for she deemed the current text to be too cautious. Agreeing with her were Brian Trammell (Google), David Schinazi (Google), and Lars Eggert. Eric Kinnear (Apple) reported that Apple turned on ECN for TCP three years ago and it hasn’t caused outages. Matt Joras (Facebook) and Roberto Peon (Facebook) were more cautious: “recommending ECN without deployment experience seems strange.”

    After a rather prolonged back-and-forth, the consensus was that the current text in the draft is encouraging enough and that Appendix B describing a sample ECN support detection algorithm will stay until we have something better to recommend. Mirja will work on minor editorial text improvements.

    There Be Extension Dragons

    What happens when two QUIC extensions are not compatible? For example, they might modify an existing frame, such as the ACK frame, in conflicting ways. This is the subject of issue 3332.

    QUIC Working Group Interim Meeting Zurich
    Roger Liberating Angelica (fragment) by Félix Vallotton at Kunsthaus Zürich

    Some proposed disallowing modifying existing frames. Igor Lubashev offered an algorithm for extending frames in an unambiguous manner. Others pointed out that extensions may be incompatible in a variety of ways, of which frame formatting is only one.

    In the end, it was decided to let the problem resolve itself naturally – in chronological order as extensions get proposed — add a comment to the draft that there be dragons here. Dragons indeed.

    DCID for Handshake Retransmission

    Should the server be allowed to issue new connection IDs before the handshake is complete? This is the subject of issue 3348, raised by Marten Seemann. Why would a client change its Destination CID at that time? Brian pointed out that there is no reason for the client to do it. Yet, the discussion went on. Martin Thomson said that coupling handshake state machine with CID state machine complicates things, and so it is uncomfortable to forbid changing CIDs until 1-RTT packets. Eventually Lars stopped the back-and-forth, directing people most interested in this problem to come up with something during lunch.

    The lunch consensus – I take it, people tend to be more agreeable when their bellies are full – was to allow the client to change DCID at any time. In other words, if a server does not want the client to do this, it should not issue new CIDs too early. An editorial clarification or two may follow.

    ACK Generation Recommendation

    Jana Iyengar (Fastly) opened issue 3304 before he and Ian Swett (Google) co-authored the Delayed Acks extension. (I think their collaboration was the result of the conversation in this GitHub thread). Jana pointed out that the current recommendation – produce one ACK for every two ACK-eliciting packets – results in too many ACK frames in the normal case. “Too many” here means that the large number of ACK packets sent and received affects throughput negatively. (This was likely one of the reasons for the poor nginx/quiche performance uncovered in our November benchmark tests.)

    Several implementations already do not follow this recommendation. Is providing a recommendation in the draft and expecting people to ignore it the best we can do? The tricky part, of course, is making a specific recommendation that works well most of the time. The several schemes discussed in the GitHub issue all suffer from some form of degradation under some circumstances or when interacting with a particular type of congestion controller.

    Not having come up with anything conclusive, we resolved to close this issue with no action. The current recommendation is good enough, at least for now. In addition, we have the Delayed Acks extension that we could use to experiment.

    Issuing New CIDs in 0-RTT Packets

    In issue 3423, Marten posed another corner-case riddle. Because the client does not have to remember the maximum number of active connection IDs the server supports, it risks overrunning this limit by issuing new connection IDs in its 0-RTT packet.

    Corner cases are the bane of our Working Group. Discussing them takes up valuable time, time that would be better spent discussing more practical matters. This corner case took up about 1.5 hours – almost as much as all the Thursday’s discussions of the QUIC extension drafts combined!

    The scope of the discussion is documented well in the minutes. None of us could put forth a plausible scenario for using NEW_CONNECTION_ID frames in 0-RTT packets. The voices of reason who advocated banning these frames in 0-RTT packets outright (mine and Christian Huitema’s) almost prevailed at one point, only to see our ten-votes-to-three advantage go down to one-vote-to-ten shortage. (Christian was remote and so his vote naturally was not counted.) Martin Duke (F5), who was running the vote counting, offered me a chance to “die on this hill,” which is an IETF expression for a last-ditch effort to object, akin to Demi Moore’s character’s strenuous objection in the movie The Few Good Men. Dying is a bit too dramatic for me, so I quipped, “I refuse to die!” to the clapping of three dozen pairs of hands. Thus was it decided that the client would just have to remember the server’s active_connection_id_limit setting.

    Changing ACK Frequency

    Jana’s and Ian’s presentation was about the extension they authored to reduce the number of ACKs generated.  I described their proposal in my previous post.

    They explored the problem area, highlighting the tension between having too many ACKs reducing throughput because of the need to generate and process them and having so few ACKs as to cause retransmissions that also reduce throughput.

    The Working Group was mildly enthusiastic about the possibilities this extension could offer. There is plenty of room for optimization, but there are also some hidden stones. Martin Duke asked whether the parameters communicated via the new ACK_FREQUENCY frame were advisory or mandatory. The answer is clearly advisory, as the sender of the ACK has its own limits or preferences that would trump those of its peer.

    Most of us agreed that this work is important, and that experimentation should continue.

    Multipath QUIC

    Quentin De Coninck (Université catholique de Louvain) talked about multi-path QUIC. He introduced the concept of a QUIC uniflow, which is one half of the today’s QUIC path. Using uniflows, one can model MPQUIC effectively.

    Quentin shared his implementation experience. A basic multi-path support in quickly weighed in at about 350 lines of code; a full-fledged implementation based on picoquic was 2500 lines of code – still a very reasonable number.

    The Working Group peppered Quentin with questions. How does path prioritization affect the scheduler? Is it necessary to change QUIC and HTTP/3 APIs to make this useful? Does this work need its own Working Group?

    The biggest chill was put on the proposal by Jana’s observation that there is no application that could use this capability. That is, lest it be completely transparent to the application. (This seems like a chicken-and-egg argument to me. An application utilizing multi-path capabilities cannot be created until those capabilities exist; and multi-path capabilities cannot be developed until there is an application that can use them.) We need a Research Group, said Jana, not a Working Group.

    Packet Loss Signaling

    Igor presented our packet loss signaling proposal.  (I say “our” because I recently became a co-editor of the draft along with Igor and Alexandre Ferrieux (Orange Labs)).  I touched upon the proposal in the previous post. The WG expressed several concerns. Matt pointed out that this proposal is unlike others because it modifies the packet headers and it could become a “de facto” extension that everyone is expected to implement. This change would burn both the reserved bits: what if QUICv2 needed more bits in the first byte? Does this change preclude other extensions from using these bits?

    The real answer is that this functionality should have been part of the core protocol to begin with. These bits provide real value to network operators; without them, troubleshooting of QUIC network flows is much more difficult. Another extension (that doesn’t yet exist) that would want to use the reserved bits in a similar fashion can use the L bit for its square wave, thus differentiating itself. Further than that, obviously the space is limited, and no amount of ingenuity will be able to squeeze many extensions into two bits.

    Other questions resembled those posed at the trial of Joan of Arc. Like the Virgin (although likely possessing less divine guidance), Igor parried admirably:

    Marten: Loss detection and recovery in our spec is only advisory.

    Igor: When you decide the packet is lost, you increment the counter.

    Marten: This is an implementation decision.

    Igor: Yes, when you decide it’s lost you increment the counter.

    Marten: So, the network needs to know your algorithm.

    Igor: No, the assumption is that if the sender thinks it’s lost, then it’s lost.

    The extension was deemed important enough. To quote Igor, “we need this to make the Internet better.” Mark Nottingham (co-chair of the working group; Fastly) directed us to participate in the experimental QUIC DISPATCH meeting at IETF 107 in Vancouver in March of this year.

    The Last Lunch

    The Interim wrapped up early: around half past one on Thursday.  About half of us headed for free lunch at Google cafeteria, which was just down the corridor.

    The food is fancy at Google Zurich. The “small plates” concept is in fashion there as well, so I got myself two plates. And a sandwich.

    I sat across from Junho Choi (Cloudflare), with whom we talked shop: QUIC performance and how it is affected by ACK rate, quirks of Rust and C++ programming, and QUIC deployment issues.  Later we were joined by Lucas Pardue (Cloudflare), the newly minted QUIC WG co-chair.  We discussed the events of the past few days and assessed the results of the Interim.

    As usual, it was great to share implementation experience with like-minded people. I look forward to comparing notes with them again.

    The Chagall Windows

    I stepped out from the Google building into a fresh and sunny winter afternoon.  After several gloomy, rainy days everyone was visibly in a better mood. I hurried to the Fraumünster Church while the sun was still reasonably high.

    QUIC Working Group Interim Meeting Zurich
    Chagall windows: “Jacob,” “Christ,” “Zion”

    Marc Chagall created these three (and three more, for a total of six) beautiful stained-glass windows for the Fraumünster Church in Zurich.  These were installed in 1970, when he was 83. He started doing this type of art late in life. Fame had come to Chagall earlier for his paintings, about ten of which are on display in the Zurich art museum (Kunsthaus).

    The church itself is a reincarnation of previous churches, which have existed on this spot for the last 1200 years.  The crypt reveals parts of the original church’s foundation. What were the names of the workers who cut and laid those stones? – I wondered – Were they happy or sad? Did they know that what they had wrought would be still around after so much time?

    Like the builders of the newer church, we base the workings of a new protocol on an old foundation. Like Chagall’s, our conception of what could be must be fitted into a canvas of a predetermined size. If we be granted only a fraction of those craftsmen’s and artist’s inspiration and perseverance, then our project – QUIC — will surely be successful.

  • Notes from the Road: QUIC Interop Zurich

    Notes from the Road: QUIC Interop Zurich

    QUIC Interop Zurich, Notes from the Road

    The QUIC Interop event precedes the QUIC Interim. The Interop is meant to find bugs in different implementations — and in the specifications themselves! This year, these two events take place in Zurich, Switzerland, where Google is graciously hosting us.

    Enter the Dragon

    QUIC Interop Zurich, Kasernenstrasse 97
    Kasernenstrasse 97

    On Monday, February 3rd, I arrived at Kasernenstrasse 97 at 9 o’clock in the morning. The Zurich Google office is located in Sihlpost — a massive building on the left bank of the river Sihl. Being so massive, the building possesses two entrances, about 200 feet apart, and two addresses: Kasernenstrasse 97 and Kasernenstrasse 95. The former is the regular Google employee entrance; the latter is where the Google reception is located.

    Visitors like me are to use the reception entrance where they are given a temporary guest badge. This I learned later. On that morning, having ignored the sign imploring the visitors to use the other entrance (“95? That must be on the next block!”), I tailgated my way to the fourth floor. There, having run into yet another badged entrance, I waited. Thankfully, a few seconds later, a Google employee emerged. I told her in my best German that I am here for the QUIC conference. “Oh! You should have used the other entrance. That’s OK, I will lead you to the reception.” Like the magical Sesame, gates fell open before us and, in as few as 30 seconds, I was at the reception. Thank you, my kind nameless guide!

    Boys are Back in Town

    I was one of the first people in the room. There, Brian Trammell, our host, greeted me and I met Stanislav Slusny (Akamai). Later, many familiar faces filled the room: Eric Kinnear (Apple) and his crew; Lars Eggert (NetApp); Lucas Pardue, the new QUIC Working Group co-chair, and Alessandro Ghedini (Cloudflare); Martin Duke (F5); David Schinazi and Ted Hardie (Google); Jana Iyengar (Fastly); Martin Thomson and Eric Rescorla (aka EKR) of Mozilla; and others. It was like the good old times again! We picked up where we left off: each running his QUIC client against the others’ servers.

    The “Handshake Done” Bug

    Christian Huitema, who attended the Interop remotely, and I had been debugging performance issues in lsquic/picoquic (Christian’s implementation) interactions for a few days. On Monday, I fetched the latest version of picoquic and saw the performance much improved. On the other hand, I also observed that some connections would fail during the handshake. After some digging and arguments, I had to admit that I was in the wrong and that lsquic server sent the “handshake done” confirmation too soon when TLS session was being resumed. I have a tentative bug fix that will be included in the next release of lsquic.

    Later it turned out that F5 and Cloudflare QUIC implementations have also been afflicted with the same bug, which made me feel slightly less silly. This is the great value of interops: we are bound to find bugs in implementations of newly added protocol features (of which the HANDSHAKE_DONE frame is one).

    Bug 2: Garbage Padding

    Another new feature of the QUIC protocol is allowing UDP frames carrying Initial packets to be padded with garbage. An implementation is supposed to discard this padding. This was not happening in lsquic, which is what Andy Grover (Mozilla) discovered using the neqo client. I was able to fix this lsquic issue quickly and Andy successfully tested that it works. Thanks for a nice corner case, Andy!

    GSO vs XDP

    What’s better: GSO or XDP? This was one of the questions that Igor Lubashev (Akamai), Matt Joras (Facebook), Stanislav Slusny, and I discussed. (That is to say, I mostly listened.) This was one of those spontaneous moments that one can experience only when attending a QUIC meeting in person, not remotely. I can’t wait to apply these shared bits of wisdom in lsquic.

    Delayed ACKs

    Jana Iyengar and Ian Swett (Google), erstwhile coworkers and two of the principal movers of QUIC, teamed up to propose a protocol extension to control acknowledgement delay and other ACK generation parameters dynamically. This has the potential to reduce CPU overhead significantly by sending and processing fewer ACK packets. Getting this right is tricky, however. lsquic, picoquic, and quiche have experimental support for this feature and we played with it, looking for performance gains (or losses). lsquic’s mechanism for ACK control using this extension is quite bare-bones and improves CPU utilization in some cases, while in other cases it may cause significant throughput degradation. More work is required here.

    Loss Bits

    The loss bits extension (by Igor Lubashev, Alexandre Ferrieux (Orange), and your humble author) is meant to help operators troubleshoot network problems. In particular, inclusion of the loss bits into QUIC packets allows one to determine whether packet loss occurs upstream or downstream of a probe. To date, this extension has proved to be very controversial. The spin bit debates were epic — and they were over just a single bit. Now, we want to add two more bits — Q and L bits — to the unencrypted part of the QUIC packet header!

    At LiteSpeed, we believe in being good citizens. This includes allowing network operators to do their job. From the practical side, availability of network tools should improve the chances that QUIC gets adopted. For these reasons, we had supported the spin bit when it was proposed. We now also support the loss bits extension.

    Besides lsquic, one other implementation supports the loss bits extension — Christian Huitema’s picoquic. We had already achieved interoperability prior to this week’s event. On Tuesday, Igor and I ran several tests against picoquic and lsquic servers while introducing packet loss. These tests are ongoing.

    And the Winner Is…

    Just kidding — there is no winner! The Interop is a collaboration between many organizations, large and small, and individual developers. We proved once again that the protocol works. We found bugs. lsquic benefitted from this exercise and, in turn, helped others uncover bugs in their implementations.

    The Interim meeting is tomorrow. This is the year that we ship the final spec. Let’s get it done!

    QUIC Interop Zurich, Results
    P.S. lsquic server has most purple squares!

     

  • HTTP/3: State of Play

    HTTP/3: State of Play

    Current Status of HTTP/3

    It’s good to be the King! – Mel Brooks

    The October HTTP/3 Interop has come and gone. What follows is a short recap, a look at the current status of HTTP/3, and where we will go from here.

    Introduction

    The IETF QUIC Working Group held a virtual interoperability event on October 1 and 2. These events have been held regularly for the past year and a half. This interop was virtual, meaning we were collaborating online across the time zones.

    During an interop, the various server and client QUIC and HTTP/3 implementations try to talk to each other and exercise different pieces of functionality. The interops serve as a sanity check and allow us to find bugs in our code and, more importantly, in the specifications themselves.

    The Matrix

    To keep track of different features, an interop matrix is recorded in an online spreadsheet.

    Current Status of HTTP/3 Matrix
    14th Implementation Draft Interop Matrix

    Each feature is assigned a letter and categorized into Core, Optional, Performance, and HTTP/3.

    Current Status of HTTP/3 Matrix Cell
    The “aioquic client / lsquic server” cell from the matrix above

    For example, the above means that aioquic client was able to connect to LiteSpeed server and

    • perform version negotiation (V);
    • complete handshake (H);
    • transfer data (D);
    • close connection successfully (C);
    • use TLS session ticket to resume a connection (R);
    • send request in zero-rtt data and receive response (Z);
    • respond to a stateless retry (S);
    • migrate a connection to server’s preferred address (M);
    • survive a NAT port rebinding (B);
    • update TLS keys (U);
    • spin latency bits (P);
    • transfer a 10MB resource reasonably fast (T);
    • fetch an HTTP/3 resource (3);
    • utilize QPACK dynamic tables (d); and
    • receive a push request (p).

    One can see the complete list of categories and features here.

    Two more features not listed here are

    • explicit congestion notification (E) (which our server supports); and
    • structured logging support (L), which was a last-minute addition to the list of features.

    The way the letters are colored is a bit obscure, but the general rule is that more features get you a hotter color. LiteSpeed supports all but one feature (including all HTTP/3 features) and the client in this case was able to hit all but one of them. At the time of this writing, our server implementation was the only one to have earned the imperial purple. It’s good to be the king!

    Participation

    The number of participating implementations has decreased from the previous interop. Notable absentees are Quant (implementation by Lars Eggert (NetApp), the co-chair of the QUIC Working Group), quic-go (a Go implementation by Marten Seemann), and Apple. The latter only make an endpoint available in face-to-face meetings, running on someone’s laptop.

    A couple of implementations are still dragging their feet on HTTP/3 support.

    I had productive interop sessions with Cloudflare, F5, Facebook, and Microsoft, among others. We found a few bugs and clarified a couple of points in the specification.

    Throughput

    This metric is the only member of the Performance Features category. It is roughly defined as “being able to download a 10MB resource over QUIC that is at most 10% slower than the same resource downloaded using HTTP/2.”

    The problem with this definition is that most people have different servers for HTTP/2 and QUIC. This may cause highly disparate download times between the two protocols. At times, some hoodoo was used to get the coveted “T” letter. As one participant — not your humble author — muttered to himself, “I need to cripple TCP…”

    Take these results with a grain of salt

    ECN

    Only three implementations support Explicit Congestion Notifications: F5, LiteSpeed, and Quant. As Quant did not participate this time around, there is only one “E” letter in the whole matrix: LiteSpeed client and F5 server. The reverse test failed, as something dropped ECN markings on path.

    The future of ECN as a feature of QUIC is uncertain.

    Bugs Found

    With help from Alessandro Ghedini (Cloudflare), Nick Banks (Microsoft), and others, I found and fixed a couple of minor (standard compliance) bugs in our implementation. Look for them in the next release of the LiteSpeed QUIC and HTTP/3 Library.

    To return the favor, our server broke Tatsuhiro Tsujikawa’s HTTP/3 client (nghttp3) via its “unidirectional stream torture mode,” which is turned on by default for the interop purposes. Our client found a bug in the way Google server interprets transport parameters.

    Clients

    Finally, there is HTTP/3 browser support! Two weeks ago, Chrome Canary began to support HTTP/3 when provided a couple of special flags. This is wonderful, as we now can test HTTP/3 using real websites with a real browser. LiteSpeed Web Server and ADC have supported HTTP/3 since July 2019 and OpenLiteSpeed — since September. Now our customers and users can try HTTP/3 for themselves.

    As of October 4, Microsoft Edge Canary supports HTTP/3 as well.

    The venerable curl command-line tool and library added HTTP/3 support in August.

    Firefox is planning to add HTTP/3 support by the end of the year.

    These are good signs.

    Servers

    We have been shipping HTTP/3-enabled products for months. We are happy there are now real browsers to pollinate our servers, so to speak.

    Cloudflare announced QUIC availability last week to much ado. Indeed, using our http3check.net tool, one can see that they do support HTTP/3. Welcome to the party.

    LiteSpeed and Cloudflare are the only two known vendors running HTTP/3 in production.

    Future

    The next QUIC Interim Meeting is in two weeks. There are a few design items on the menu, but nothing earth-shattering. I can see the light at the end of the tunnel; HTTP/3 is inching closer to being released.

    In the meantime, our LiteSpeed QUIC Team will continue to improve our software, participate in the HTTP/3 standardization process, and think of new ways to deliver value for our customers.

  • Notes from the Road: QUIC Interim London

    Notes from the Road: QUIC Interim London

    Notes from the Road: QUIC Working Group London Interim Meeting

    “PLEASE TAKE NO ACTION!”
    – PSA on Cloudflare’s intercom during a fire drill, 5/23/2019, London QUIC Interim Meeting

    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.

    Interop Results

    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’s old!) Internet-Draft 20 QUIC transport and about half of them do HTTP/3.

    Our own implementation, lsquic, 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.

    Alan Frindell (Facebook), our old friend and editor of the QPACK draft, found a bug in our QPACK library, ls-qpack. 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 – but the code did not. On the bright side, the bug was easy to fix.

    Connection ID Grows

    The Interim Meeting commenced on Wednesday with discussion of Connection ID length.

    Over a year ago in Melbourne, 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 QUIC Load Balancer specification and ran into a limitation: 18 bytes is just not enough for a multi-tier load balancing solution.

    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.

    [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 – 15] is mapped to 0, [4 – 18].

    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 lsquic 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.

    HTTP Priorities

    HTTP/3 has inherited HTTP/2 priority scheme – 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.

    Patrick Meenan (Cloudflare) and others have been researching how well – or, rather, how poorly – web browsers and web servers utilize HTTP/2 priorities. The answer is: overall, priorities are not leveraged effectively. In large part, this is due to problems in the HTTP/2 priority design.

    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 prioritization spectrum:

    QUIC Working Group London Interim Meeting: Ian Swett's Prioritization Spectrum
    Slide from Ian’s Presentation

    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.

    Version Aliasing

    Version aliasing is an attempt to prevent version ossification. QUIC handshake packets expose QUIC version information. In order to prevent middleboxes from allowing (say) QUIC v1, but dropping other versions, it has been proposed 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.

    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.

    Next Steps

    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 – this means doing a lot of work, and a lot of work takes time.

  • Notes from the Road: IETF 104 – QUIC Takes

    Notes from the Road: IETF 104 – QUIC Takes

    Notes from the Road 10: IETF 104 Prague - QUIC Takes

    “I apologize for being Martin Thomson.” – Martin Thomson, DoH WG Meeting, IETF 104, 3/26/2019

    IETF 104 has come and gone. Held in Prague last week, the conference had plenty of interesting meetings. I wanted to follow the progress of the QUIC, TLS, HTTPbis, and DoH Working Groups. I attended the meetings remotely despite the inconvenient time difference.

    Where are the browsers?

    It takes two to tango. While there are many server implementations at various stages of development (for example, did you know that www.litespeedtech.com can be fetched using ID-18 version of the IETF QUIC?), there are no browsers that use IETF QUIC protocol. David Schinazi (Google) reported that Chromium only supports the QUIC handshake for now, while Eric Kinnear (Apple) said that Safari has a functional IETF QUIC branch.

    Discarding Old Keys

    As QUIC uses TLS 1.3, it must somehow support key updates. There have been several proposals how to do this. Martin Thomson (Mozilla) summarized them in his presentation to the Working Group (see slides). The august body, predictably, failed to reach consensus and thus compelled the chairs to empanel YADT (Yet Another Design Team) headed by David.

    Network Tools

    A trifecta of presentations on QUIC tooling engendered much enthusiasm among the TSVAREA meeting attendees. The presentations were

    • Logging, Tooling and Debugging for Modern Network Protocols. Robin Marx (Hasselt University) has been researching how and what information to log in order to be able to generate informative pictorial representations of various connection events. Robin proposed to create a new, structured log format (tentatively named qlog), which, when used by both endpoints, will facilitate debugging or troubleshooting network issues. The collection of use cases he has compiled is impressive. The audience even proposed creating a dedicated qlog Working Group to log everything – and it just may happen. Stay tuned for updates.
    • QUIC tracing. Victor Vasiliev (Google) has been working on logging and tracing network events since he was an intern at Google (while still an intern, he was the one who spotted a symptom of the Linux Cubic quiescence bug). Victor’s tooling focuses on connection performance and also relies on rich data logging.
    • QUIC Logging: The In-Network View. Jari Arkko’s (Ericsson) presentation described spindump – a tool to observe and display characteristics of a QUIC connection using the QUIC spin bit. The spin bit is a controversial property of the QUIC short packet header and it was the subject of much contentious debate. (LiteSpeed position from the start was to support the inclusion of the spin bit into the QUIC protocol. We implemented spin bit support a few weeks ago and deployed it on our test endpoints as well as www.litespeedtech.com).
    IETF 104 QUIC Takes
    Part of a slide from Robin’s presentation.

     

    Mind the Gap

    The QUIC WG Interim meeting scheduled at the end of May in London may become the last our WG holds. As usual, the official IETF WG business will be preceded by two days of interop, which will target the (yet unpublished) 20th revision of the IETF QUIC Draft.

    The QUIC WG chairs, Lars Eggert and Mark Nottingham, instructed the editors to plan for submitting the drafts to the IESG in July. In the next sentence, they qualified that date as “aspirational…”

    Stay tuned!

  • Notes From the Road: IETF 103 Short Takes

    Notes From the Road: IETF 103 Short Takes

    Notes from the Road: IETF 103 Litespeed and Facebook Complete First HTTP/3 Inter-Operability Test

    Last week, IETF 103 was held in Bangkok. Those lucky enough to attend in person had fun eating durians, attending the Diwali celebration at a famous local temple, or getting patted down by a few sullen Thai law enforcement officers. Since I was attending remotely, I had to content myself with eating tomato soup with sardines at 3 o’clock in the morning… and not getting harassed by the Thai police.

    IETF 103: The Number Three
    The new HTTP/3 logo from Mike Bishop’s HTTP/QUIC presentation. Just kidding, this won’t be the logo! …I think.

    HTTP/3

    The unwieldy “HTTP over QUIC” (or HQ for short) is now known as HTTP/3 (or H3). This big change was sudden to many and set the Internet abuzz. Undoubtedly, this step will be considered controversial. And yet, the name change was approved by both QUIC and HTTPbis Working Groups. (See relevant minutes: 1, 2.) Concurrently, it was decided that the HTTPbis WG will take on maintenance of HTTP/3 and QPACK documents after they are published as RFCs.

    LiteSpeed first with functional HTTP/3 server

    During the QUIC Interop Hackathon that accompanied IETF 103, LiteSpeed Technologies became the first entity to operate a functional HTTP/3 server. On the night of November 6th, a Facebook HTTP/3 client made several successful GET and POST requests to the LiteSpeed HTTP/3 server. After some fixes to the Facebook server, we were able to return the favor on the afternoon of November 8th when the LiteSpeed client fetched resources from the Facebook server.

    Draft 17 is the last major change

    Or so we’ve been told by Martin Thomson and other QUIC luminaries. Here is a (likely incomplete) list of changes which will make the new version incompatible with the previous version:

    IETF 103 Handshake Retry
    A slide from Martin Thomson’s First Octet presentation.

    Farewell to Q043 and earlier

    The octet zero change means that servers will not be able to support older versions of Google QUIC — Q043 and earlier — and IETF QUIC at the same time. Ian Swett informed us that Google plans to deploy IETF QUIC Draft-17 at scale at which point they, too, will have to drop support for pre-Q044 QUIC.

    The spin bit is in

    IETF 103: Spin Bit
    A diagram from Marcus Ihlar’s Spin Bit presentation

    The QUIC Working Group voted to include the spin bit into the specification. Having been the subject of a rather contentious debate at IETF 101 in London, the spin bit is an optional protocol feature.

    Chrome’s and Firefox’s stated intent of not implementing the spin bit makes its value questionable. On the other hand, Microsoft, LiteSpeed Technologies, and F5 pledged to support it in both their server and client products and Apple plans to implement it on the client.

    Is there life after QUIC?

    At the end of the second (and last) QUIC session, we discussed the road ahead. The plan it to freeze the 17th version of the draft family and get many implementations going. The finish line has been moved again, this time to July 2019.

    Shall we disband after QUIC is released? There has been talk of rechartering the Working Group to take on new challenges, such as multipath and partial reliability.

    Given the rate of protocol changes that are still being worked on, that point still seems pretty far off to me. Now, it’s time to roll up the sleeves and finish our server implementation. Until next time!

  • Notes from the Road: QUIC Interim NYC

    Notes from the Road: QUIC Interim NYC

    Notes From the Road: QUIC Interim NYC Recap

    Last week, I attended the QUIC Working Group Interim meeting in New York City. Our group is one of many at the IETF. We are working on standardizing the IETF QUIC protocol. The QUIC protocol that is currently used on the Internet is called Google QUIC. It started as a Google experiment between the Chrome browser and some of the Google services a few years ago. We added support for Google QUIC to the LiteSpeed Web Server and ADC products in 2017. At around the same time, Google handed off the protocol to IETF for standardization. This way, everyone can implement QUIC and reap the benefits of a more performant web. I’ve blogged about previous meetings.

    This meeting lasted four days: Monday and Tuesday were dedicated to the Interop Hackathon, while Wednesday and Thursday we worked on the QUIC drafts (agenda; minutes). What follows is a recap of the proceedings as well as some observations.

    I have been looking forward to this Interim. It was to be the second QUIC Interim Meeting that I attended in person. Unlike the first meeting in Seattle, this one would be a cinch to attend: jump on a train and I am there!

    On the morning of Monday, September 17th, I joined thousands of other commuters making their daily trip to the city. Young and old, white and black, skinny and well-rounded: all were on their way to earn their living. In this strange zone, where one is surrounded by people, but yet all alone, my mind wandered as I looked out the train window at houses, roads, stacks of railroad ties, puddles, junkyards, flags, trucks, bridges, baseball fields, and an occasional tent of a homeless person. Two hours door-to-door.

    Lars Eggert’s employer, NetApp, was the host of the meeting. Each day at 9:30 am, we assembled in a comfortable conference room on the 19th floor of 285 Madison Ave.

    QUIC Interim NYC Recap: Madison and 41st Street from the 19th floor QUIC Interim NYC Recap: Madison and 41st Street from the 19th floor
    View from the 19th floor (Madison and 41st Street)

    The Interop Hackathon

    The Interoperability Hackathon — or the Interop — is an opportunity for the different implementers of QUIC to meet face-to-face and to find and fix bugs quickly. This time, there were two interop events at once: the QUIC transport interop and the QPACK interop. I participated in the second one.

    QPACK is the HTTP header compression protocol. Like most of our software, the LiteSpeed QPACK library is open-source. There are a few other open-source as well as closed-source implementations. The way to test for compatibility is to encode a list of headers using one QPACK implementation, decode the result using another QPACK implementation, and check whether the result matches the original input.

    QUIC Interim NYC Recap: A snapshot of the QPACK Interop Matrix
    A snapshot of the QPACK Interop Matrix

    By the end of the second day, the participants — Alan Frindell (Facebook), Martin Thomson (Mozilla), Mike Bishop (Akamai), Roma Kane (F5), Masakazu Kitajo (Apache Traffic Server), and yours truly — found and fixed dozens of bugs.

    Spin Bit Experiments

    On Wednesday, the official part of the QUIC Interim commenced with three spin bit experiments presentations. If you remember, the latency spin bit is meant to aid network operators — in other words, so oft-maligned “middleboxes” — to debug issues with QUIC connections. Because QUIC uses UDP and encrypts almost everything in its packets, the observer lacks most of the information that is present in a TCP connection.

    Alexandre Ferrieux of Orange was first with his Spin bit and beyond @ Orange. He hit rough terrain early, as several people, including the chairs, interrupted him. The Working Group consensus, they said, is only to expose the spin bit. Alexandre’s experiments included additional square sequence and end-to-end bits to provide information on upstream loss and downstream loss, respectively. Thus, he did not have a chance to present all the reasons why one would want those three bits of information in each packet. Nevertheless, the reasons are listed in his presentation and well worth a read.

    Next was Marcus Ilhar of Ericsson. His presentation was subtitled Testing the Robustness of the 1-bit Signal. He modified quic-go to add the spin bit and wrote a middlebox simulator that both introduced reordering and loss and measured the spin bit. The conclusion is that the spin bit is indeed useful for measuring the RTT of a connection.

    Brian Trammell’s (ETH Zürich) presentation was Intraflow Performance Diagnostics.

    QUIC Interim NYC Recap: A portion of a slide from Brian Trammell’s presentation
    A portion of a slide from Brian Trammell’s presentation

    As he was waiting to board his plane, so went Brian’s story, he wondered why uploading images from his laptop to his home computer was so slow. He broke out tcptrace and analyzed the information it presented. The main insight is that one does not have to have information about congestion window to debug network problems: the RTT information is enough. The RTT information would be provided by the spin bit.

    Gutenberg Bible

    I craved soul food more than the earthly sustenance and so I visited the Morgan Library & Museum during lunch. Among other rare items, its Treasures from the Vault exhibition featured a real Gutenberg Bible.

    QUIC Interim NYC Recap: Gutenberg Bible at the Morgan Library & Museum
    Gutenberg Bible at the Morgan Library & Museum

    Only 180 copies (120 on paper and 60 on vellum) were printed in 1455. Of those, just 49 are extant, 3 of them at the Morgan Library. The paper copy on display is a large, beautifully typeset and bound, tome.

    Speed Dating

    Martin Thomson’s selection of GitHub issues was subjected by what was called “Speed Dating.” Each of the issues was given three minutes for discussion by the group. Simplification of PNE (packet number encryption) was picked up by EKR (Eric Rescorla) to research, while most of the other issues were closed with no action.

    Interop Results

    Christian Huitema (Microsoft) and Alan Frindell updated the participants with the results of the interop. Among notable developments, Christian highlighted that there were two successful connection migrations and that Martin Thomson and Kazuho Oku (Fastly) are close to having interoperable HTTP stacks. Alan summarized the QPACK Interop and informed the group that Google, too, has a QPACK implementation close to shipping.

    Wrapping QPACK Absolute Index

    Alan led the discussion around my proposal to wrap the QPACK absolute index in order to improve compression. His presentation implied that the compression gains are not that significant, which I had to contradict.

    This is because, I said, HTTP is not just for the web. Long lived connections or connections with high volume of requests (or both) may show significant degradation in compression performance. I ran a simulation of a scenario wherein server reply contains three headers — never-changing :status and content-type, and cookie that changes every ten requests. 10,000 responses have 0.13 compression ratio when absolute index wraps versus 0.15 when it does not (14% worse compression ratio). 100,000 responses is 0.13 compression ratio versus 0.16 for 19% deterioration. So the difference is not insignificant at all.

    The room had to concur. Alan presented us with three options:

    1. Do nothing;
    2. Wrap the encoded value of the absolute index; or
    3. Change the definition of the absolute index.

    (3) is the largest change, one that I originally proposed. There was no clear consensus in the room, with a bunch of people, including Martin Thomson, saying that we should do nothing. On the other hand, Brian Trammell and others argued in favor of wrapping. This change, said Brian, reflects the spirit of QPACK. We had to go to hums. The first hum would be whether to do nothing (1) or do something — (2) or (3). If the first hum resulted in doing something, then we’d hum to select (2) or (3).

    The first hum was close, with one of the chairs, Mark Nottingham (Fastly), having to interpret it. His interpretation was that we should do something. It was decided that instead of humming, Alan, who is the editor of the QPACK draft, would select between (2) and (3) himself. The humble man was not particularly happy with the task assigned to him, but resigned himself to carrying the burden.

    Designer Quadrupeds


    Camel: Where a man belongs.

    They say that the camel is a horse designed by a committee. The Working Group has a pattern of delegating a group of people to work on a component of the protocol and then subjecting their findings to on-the-spot (read: shallow) analysis. This is like the inverse of bikeshedding, where the body is eager to argue about, and change, the design of a nuclear power plant. This happened in Melbourne to the Compression Design Team, where weeks of work were discarded in twenty minutes and we ended up with the suboptimal solution that is QPACK. The index-wrapping proposal was close to suffering the same fate at the hands of the people who hummed for option (1). I understand the desire to complete the work more quickly, but we should not settle for shabby work!

    Connection ID Management

    Mike Bishop presented the output of the Connection ID Design Team. Because I participated in this design team, many of the issues raised by the working group sounded familiar to me; the design team had been over them several times.

    Header Bits

    Martin Thomson talked about the bits in the first byte of the QUIC packet. It would be nice to be able to multiplex QUIC and DTLS, for example.

    QUIC Trace Tool

    Victor Vasiliev (Google) described the quic-trace tool developed by Google. A QUIC peer can make a recording of a QUIC connection in a special format. quic-trace creates a visualization of the connection using this recording. The visualization can be used to analyze connection performance.

    Wayne Thiebaud

    Wayne Thiebaud is an American painter. During Thursday’s thankfully long — 90 minutes! — lunch, I again rushed off to the Morgan Library & Museum to view an exhibition of some of his works. While mostly known for his paintings of everyday objects such as cakes and gumball machines, I liked his charcoal drawings the most.

    QUIC Interim NYC Recap: Three Roads, 1983
    Three Roads, 1983

    Flow Control Deadlocks

    As part of my work on the Compression Design Team, I discovered a deadlock condition in QCRAM in January of this year. QPACK solves the problem by cautioning the implementers to write to encoder and data streams in specific order. This was part of Mike Bishop’s Flow Control Gotchas presentation. It was interesting to observe that one could also deadlock with just one stream, for example, if a non-streamable frame is preceded by its length and the application does not read the frame until all of it is available.

    I asked for an example of a non-streamable frame. Mike replied that the header block is one such example, to which I nodded. Later, however, I changed my mind: it is not possible to write the header block as a stream, because it must be followed by length, but it is possible to read the header block in streaming mode. This is exactly what our QPACK library does. I will bring this up on the mailing list next week.

    Upcoming Meetings

    The last bit of business was to plan the next meetings. After a bit of haggling, we agreed that the pre-Bangkok (IETF 103) Interop target will be based on Internet Draft 15 (this Interop was targeting ID-14). The January Interim meeting is likely to be held in Tokyo.

    The Road Ahead

    QPACK is almost done. My suggestion that the encoder stream framing be removed was accepted and made it into the current QPACK draft. The wrapping of the absolute index just squeaked through this week, and this is the last non-editorial change that I foresee.

    On the other side of the spectrum, the QUIC transport draft is still rather shaky. Version negotiation, first header bytes, and packet number encryption are all liable to change. I think there is virtually no chance that we make the November deadline.

    The good news is that there is definitely progress. If only we can stop ourselves from changing the transport every few months, we will be in good shape.

  • Notes From the Road: WordCampNYC

    Notes From the Road: WordCampNYC

    WordCampNYC 2018 - Essential Steps to a Superior PageSpeed Score

    Our team attended WordCamp NYC this past Saturday. Eric Leu gave a well-attended talk entitled “Essential Steps to a Superior PageSpeed Score.” We’ve embedded the slides from that talk below. Or, you can see it directly at SlideShare.

    Our team enjoyed spending time with the WordPress community this weekend. We look forward to doing it again soon.

    WordCampNYC 2018 - Essential Steps to a Superior PageSpeed Score

    Here at LiteSpeed, we are passionate about accelerating the Internet. If you attended the talk, and are curious about the free LiteSpeed Cache plugin for WordPress, visit our website to learn more about it! We hope that you learned something from this presentation. Please feel free to comment with any questions you may have! Or join our Slack community to connect with us and with other LiteSpeed enthusiasts.