Tag: notes from the road

Join LiteSpeed virtually as we travel to industry conferences, meetings and conventions. Before we go, we’ll let you know how to meet up with us at each special event, and then once we’ve returned, we’ll share the highlights of our trip. We may even share a photo album or two.

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

  • Notes From the Road: IETF 101 Part 2

    Notes From the Road: IETF 101 Part 2

    Notes From the Road: IETF 101

    I attended the IETF 101 Conference in London a couple of weeks ago. Read about Sunday through Tuesday in Part One.

    Wednesday 3/21/18

    First Session – TLS 1.3

    The second meeting of the TLS working group covered position of CIDs in DTLS 1.3, DNSSEC chain extension, and others.

    Alessandro Ghedini (Cloudflare) presented his proposal to compress certificate chains using Brotli. Up to 30% savings could be achieved. This optimization is particularly germane to QUIC, as it reduces the reflection attack risk.

    Christian Huitema (Microsoft) talked about encrypted SNI. This is an early proposal and will require a security analysis.

    Lunch – Africa Initiative

    Instead of lunch, I attended the IETF Africa Initiative session organized by Kevin Chege. The initiative aims to increase involvement in the IETF by participants from Africa. Nesredien Suleiman, a professor from at the University of Addis Ababa, presented the results of his own efforts in Kenya. This was followed by a discussion with several insightful comments offered by several African attendees — a professor from the University of Ilorin (Nigeria), an advisor to the Minister of Education of Mozambique, and others. The role of government in effecting positive change was discussed, with Kenya being an example of this working.

    Third Session – ACME

    The topics discussed at the Automated Certificate Management Environment WG meeting were somewhat obscure to me. ACME is the protocol behind LetsEncrypt — a push to convert all HTTP servers to use TLS. This effort shows no signs of slowing down.

    Fourth Session – IETF Plenary

    The plenary session began at 5:15 pm and lasted almost four hours. The auditorium was large enough to hold 500-600 people, but not all seats were taken. The various boards, committees, and chairs of the IETF of associated organizations took turns taking the stage. Awards were presented and speeches were made. Practical matters were also discussed: budget; diversity; technical leadership; cost of registration and visas for people from developing nations. In a memorable exchange, Kyle Rose chastised the IAOC for the lack of cookies (yes, the edible kind) at the conference. Quoth Kyle: “I was reduced to buying cookies with cash!”

    I realized what a diverse, yet, at the same time, close-knit community of people IETF really is. It is quite astonishing how this self-organized, self-appointed, and mostly unpaid body of techies is dictating — most of the time successfully — the rules of the Internet game to the world.

    Thursday 3/22/18

    First Session – QUIC: The Spin Bit Debate

    ECN – Explicit Congestion Notification

    First, the working group reviewed some outstanding items of the ECN proposal. It was decided that the ECN will make it into the main draft around June of this year.

    Latency Spin Bit

    Brian Trammell presented the latency spin bit. This produced two hours of rather heated debate as many people were unwilling to give up even one bit for the spin bit, afraid of information leakage. Network operators — Orange, Verizon, AT&T — insisted that the spin bit would be very useful, especially with the looming packet number encryption. At one point, the microphone queue was over twenty people long.

    IETF 101: Microphone queue
    The who-is-who of the QUIC WG waiting to express their opinions

    Spencer Dawkins had to intervene a few times to get the working group focussed again. At the end, it was hummed that Brian’s version of the spin bit was wanted, albeit in a separate draft. Three bits for the spin bit are to be reserved in the current draft and, when and if the spin bit draft is deemed finished, the reference to it will be made.

    Second Session – DOH

    DOH stands for DNS over HTTP. The DOH Internet Draft lists several reasons when DNS over HTTP may be preferable.

    D. K. Gillmor (DKG) presented his Opportunistic DNS idea. It is possible for a web server to push DNS records (of the content type specified in the DOH protocol) if it thinks that the client might need them!

    IETF 101: Would you accept a DNS record from this guy?
    One of the slides from DKG’s presentation

    This may allow the client to skip sending DNS requests needed to render the page, thereby loading it faster. Some interest was shown in the room, in particular by Patrick McManus and Mark Nottingham. The latter noted that something like this had already been discussed in the httpbis WG.

    Third Session – Transport Area WG

    The most interesting (to me) presentation in this session was the Packetization Layer Path MTU Discovery for Datagram Transports. This is because it has applicability to QUIC. In fact, the draft describes how the algorithm it proposes can be used in QUIC.

    During Gorry Fairhurst’s presentation, Spencer Dawkins queried Lars Eggert whether QUIC does any sort of path MTU discovery. Lars replied that this is currently not in scope, because he does not have a good feeling of how complicated this is. Gorry said that it would be nice if someone from the QUIC WG reviewed this. David Black (one of the TSVWG chairs) said that he would like QUIC to be upwards compatible with this.

    Friday 3/23/18

    First Session – Internet Congestion Control

    BBR @ Google

    Nick Cardwell updated the group on the ongoing BRR work at Google.

    PCC: Performance-oriented Congestion Control

    Michael Schapira stole the show with his presentation. I thought it was the best presentation — both in content and in style — of the whole IETF 101. The video recording is also available — it is well worth watching.

    The PCC approach is both novel and logical at the same time. The main idea of PCC is that a packet loss does not necessarily mean congestion — the assumption that underlies all TCP flavors. There are four main causes of packet loss:

    1. Current flow is the cause of the congestion. The current flow should back off.
    2. Shallow buffer is overflown. The current flow should back off a little.
    3. Some other flow is the cause of the congestion. That other flow should back off.
    4. Loss is random. No action should be taken.

    Note that TCP treats all four events the same, whereas only (1) should cause the sender substantially to reduce its CWND.

    PCC uses game theory to calculate a utility function value. Experiments are run continuously to see how reducing or increasing CWND affects the utility value. Based on the experiment results, the CWND may be adjusted.

    The approach PCC takes is totally unlike TCP — I don’t even think it can be called TCP. On the other hand, PCC can be deployed now, as only the sender logic is modified. Otherwise, it is compatible with TCP.

    Conclusion

    I would be lying if I said that I understood everything I had heard in all of the presentations. Each working group is highly specialized and it requires a significant amount of involvement to understand, let alone comment on, the particulates. I felt satisfied if I grasped the gist of the discussion — which was most of the time.

    The IETF is alive, well, and growing. The Task Force’s work scope is tremendous: from fixing 37-year-old bugs in TCP specification to theorizing about the evolution of the networks; from intra-datacenter protocol improvements to providing satellite Internet access to the developing world. And anyone can get involved!

    When it comes to QUIC, there are still many unfinished pieces. If our Working Group is to make the November 2018 deadline, we should stop trying to boil the ocean. Baby steps: let’s start with the Great Lakes.

  • Notes From the Road: IETF 101 Part 1

    Notes From the Road: IETF 101 Part 1

    Notes From the Road: IETF 101

    I attended the IETF 101 Conference in London a couple of weeks ago. This was my first time attending this conference. What follows are some of my recollections of people, talks, and events.

    Sunday 3/18/2018

    My trip to the IETF 101 began with being stuck at the Frankfurt Airport due to an unseasonable snow.

    IETF 101: Plane on the Tarmac
    My plane, just sitting there. And sitting some more.

    I landed at the Heathrow Airport several hours later than planned and arrived at the venue a bit after 5 pm instead of 11 am. This resulted in me missing all the newbie-oriented meetings that I had been hoping to attend. I was able to catch most of the reception, which had free beer (plus) but little actual food (minus).

    I listened to the Hot RFC lightning talks instead. There were seventeen short (hence “lightning”) talks squeezed into one and a half hours. Between QUIC over Satellite by John Border and Web Packaging by Jeffrey Yasskin, there was something for everyone.

    Monday 3/19/2018

    Breakfast

    I met Alan Frindell (whom I befriended last year at the Seattle Interim) for breakfast at a nearby cafe. After a thought-provoking QUIC discussion, I headed off to the first session of the day. At the IETF Conference, there are six to eight sessions happening in parallel during each time slot, and so one has to choose which meeting to attend.

    First Session – TCP Maint

    I sat in at the TCP Maintenance and Minor Extensions Working Group (WG) meeting. There were several presentations, a couple of which stood out to me.

    It turns out, RFC 793 (that’s the TCP specification itself from 1981) contains three bugs that have been known about for decades. Fernando Gont recommended that RFC 793 be updated with the fixes, while Lars Eggert, whom I heretofore have known only as the chair of the QUIC WG, proposed that an erratum be added to RFC 793 instead.

    Praveen Balasubramanian, another QUIC participant, presented TCP Fast Open (TFO) deployment data as collected by Microsoft. TFO works well in some regions much better than in other regions. For example, TFO worked for only 1.5% of devices in China is compared with 21% success rate overall. See Praveen’s presentation for details.

    Second Session – QUIC

    The first afternoon session was QUIC. After an update from the editors, we got to the much-anticipated meat of today’s debate — the hand grenade that is QUIC over DTLS that Eric Rescorla (EKR) tossed into our midst just several days ago.

    In his slides, EKR enumerated the several issues with the Stream 0 approach. The root cause of the problems, according to EKR, is that TLS depends on QUIC, which in turn depends on TLS. One way to address this is to introduce special frames for crypto streams and crypto ACKs (CREAMs and CRACKs!). A cleaner solution is to use DTLS. The downside of using QUIC/DTLS is that it would require significant changes to QUIC, and even some changes to DTLS.

    The discussion was framed using the following questions:

    • What is the right architecture for QUIC?
    • How do we evaluate the alternatives?

    The working group split into two camps: Pro-DTLS Switch, headed by EKR and his fellow Mozillians; and Anti-DTLS Switch, headed by Ian Swett (Google), who at that time joined EKR on the stage. The back-and-forth revolved around two topics: the technical advantages (or disadvantages) of switching to DTLS and the fact that this is quite late in the process to make drastic changes to QUIC. At one point, Spencer Dawkins (Transport Area Director) interrupted the debate to remind the participants that using TLS 1.3 is in the QUIC WG Charter. Eventually, the Anti-DTLS Switch prevailed, as it became obvious that the November 2018 deadline for QUIC would have to slip. As a consolation prize, the chairs promised to appoint a design team potentially to figure out the new architecture.

    Martin Thomson (Mozilla) presented his proposal to use two variable-length connection IDs instead of one fixed-length connection ID. This was the result of the work of the design team empaneled at the January Interim meeting. From the current Editor’s Draft:

    The long header contains two connection IDs: the Destination Connection ID is chosen by the recipient of the packet and is used to provide consistent routing; the Source Connection ID is used to set the Destination Connection ID used by the peer.

    The session wrapped up with two lightning talks: QUIC in the Wild and PLPMTUD. (PL stands for Packetization Layer).

    Third Session – Internet Area WG

    Among the several presentations, IP Fragmentation Considered Fragile stood out. In it, Ron Bónica highlighted the problems associated with IP fragmentation and proposes a set of common practices for application developers and network operators. To sum it up: avoid IP fragmentation! For details, see the Internet Draft.

    Fourth Session – TLS

    The last session was the shortest — one hour — but it was the most contentious of all. Under consideration was the TLS Vizability, a proposal to allow a key manager for TLS that would be able to get access to the plaintext exchanged between two endpoints. While first being presented as a solution for data centers, it was eventually acknowledged that state actors may have a good use case for this as well — to snoop. There were several rather heated exchanges that left both Russ Housley (one of the authors) and the WG Chairs a bit exasperated.

    Stephen Farrell, the opponent of the proposal, put it this way: “What makes you think it is in the charter of the Working Group to break TLS like this?!”

    Even after a plea from the area director, the hum to adopt this draft was inconclusive; if anything, the “Nos” had it. Since the consensus was not reached, any future versions of this draft would have to go through the area director before being put forth before the WG again.

    Multicast QUIC Demo

    I was able to meet Lucas Pardue at 7 pm at the Hackdemo Happy Hour. Lucas works for BBC Research & Development; his team works on video-related technologies. Multicast QUIC is a technique to transmit video and audio streams to multiple clients using less network resources (fewer streams).

    Newcomers’ Dinner

    This dinner was conveniently located at a burger joint across the street. I met Jeffrey Yasskin (Google) and Yoav Weiss (Akamai). I talked with Jeffrey about his proposal for web packages, while Yoav shared his expertise in HTTP caching and structured headers. Grizzled veteran programmers and graduate students, we all had a great time saying hello to each other, unashamed of our newbiness.

    Tuesday 3/20/2018

    First Session – Measurement and Analysis for Protocols

    The morning time slot contained several excellent presentations, among them:

    • Update on TLS SNI and IPv6 client adoption;
    • First look at QUIC in the wild; and
    • HTTP server push adoption.

    Of particular interest to me was A First Look at QUIC in the Wild. The authors — Oliver Hohlfeld and Jan Rüth of RWTH Aachen University — gather QUIC server support and traffic data and publish it along with some really nice interactive graphs. The eponymous paper has more details.

    Second Session – Path Aware Networking

    Being a research group, panrg’s work has no immediate applications. Rather, the presentations were mostly an exploration of how things might evolve. Spencer Dawkins’ presentation concentrated on what not to do. Because there have been many ideas that turned out to be bad, why not learn from our own mistakes?

    The Path Aware Networking Proposed Research Group has voted to become a full-status research group at the end of its session.

    Third Session – HTTPbis

    A lot is happening in the HTTP space and there are several interesting proposals, among them

    • Secondary certificates;
    • Expect-CT header;
    • Header common structure (aka structured headers);
    • Variants header;
    • Cache digests for H2; and
    • Client hints.

    To see which of these proposals have been adopted by the working group, see the httpbis data tracker.

    Secondary Certificates

    Secondary certificates is a mechanism whereby a single HTTPS connection can be shared between several origins.

    Expect-CT header

    CT stands for Certificate Transparency. The Internet Draft describes two use cases for this experimental header. In short, the idea is to make the client detect incorrect certificate configuration on subsequent connections.

    Header Common Structure

    This draft specify a way to define and use HTTP header fields. This seems to be another cache-related improvement: Mark Nottingham (Fastly) is one of its authors and Yoav Weiss (Akamai) advocated strongly for a scheme just like this one during our Newcomers’ Dinner discussion. Yoav’s concern is compression: splitting the headers into smaller pieces should improve compression performance.

    Variants header

    The Variants and Variant-Key headers are an alternative way to communicate a secondary key for an HTTP resource. The draft was hummed to be adopted by the working group.

    Cache Digests

    The draft’s abstract has it best:

    This specification defines a HTTP/2 frame type to allow clients to inform the server of their cache’s contents. Servers can then use this to inform their choices of what to push to clients.

    The web server should take client hints into account before pushing promises to client.

    Client Hints

    The client hints are a finer-grained way for a client to specify its preferences — an alternative to the User-Agent header.

    London Web Performance Meetup

    After the HTTP session wrapped up at 18:15, I caught the Tube to the London Web Performance meetup. The panel consisted of Mark Nottingham (Fastly), Hooman Beheshti (Fastly), Martin Thomson (Mozilla), Jana Iyengar (Fastly), Ian Swett (Google), Mike Bishop (Akamai), and Subodh Iyengar (Facebook).

    There were about 20 attendees — among them Lucas Pardue (BBC Research and Development), Yoav Weiss (Akamai), and Barry Pollard (the author of an upcoming book on HTTP/2 (Manning)). The others were web developers for whom, I thought, the panel discussion regarding the various transport-level tradeoffs was a bit over their head. After the discussion, there was beer and pizza, during which I chatted with a few people about QUIC and LiteSpeed. Kazuho Oku gave a lightning talk about client early hints (RFC 8297).

    Read about Wednesday through Friday in Part Two.

  • NFtR: QUIC Working Group Day Three

    NFtR: QUIC Working Group Day Three

    Thursday, October 5th. Seattle, WA.

    This morning, I arrived at 351 Elliott Ave around 8:40 am, which was about 20 minutes too early. I plopped down in the lobby and chatted a bit with someone whom I took for a manager of some sort. He was in charge of a large model of the new F5 Networks building. The base of the model had some chips in it that needed to be repaired and two repairmen came to take care of it. The actual building is currently under construction and should be ready by 2019. Boasting 44 floors and standing 660 ft. tall, the new F5 Networks tower is a bona fide skyscraper! F5 is growing and Seattle is growing with it.

    The meeting began at 9:33. After a few short preliminaries (note well, etc), Mark Nottingham (Fastly) — the working group’s co-chair — announced that Jeff Pinner (Lyft) and Roberto Peon (Facebook) have been nominated to lead a closed design team to come up with a QUIC API document.

    Then Lars Eggert (NetApp) — the other co-chair — departed from his usual MO to deliver a warning to the participants:

    There are fifty people in this room and half of you haven’t said a thing in two days! This is not good. The committee keeps on arranging venues that can accommodate this many people, relying on people like Martin [Duke (F5 Networks)] to have their companies host us.

    It is hard not to agree with Lars, even though he sounded a bit apologetic in the end: Is there a good case for mute participants? Since they do not participate, are they even participants? Perhaps they participate during breaks? But those aren’t an official part of the conference. Are they?

    It turns out, the breaks are a crucial part of moving the standardization process forward. People use the breaks at conferences like this one to discuss things face-to-face and to mingle. In our case, however, the discussions during breaks were officially sanctioned by the chairs for people to hash out their technical issues. There are two problems with this:

    1. The working group’s discussion is supposed to be recorded. There are three official ways to discuss the IETF QUIC drafts:
      1. Mailing list;
      2. GitHub artifacts — issues, PRs, etc; and
      3. Conferences/meetings

      The first two are easy: the medium is the record. The meetings have a scribe who is to write everything down. These are not empty words: yesterday’s meeting was stalled while we waited for someone to volunteer to be the scribe.

      Yet these rules are suspended for discussions during breaks: the discussions are not recorded.

    2. The remote participants cannot participate. Already second-class citizens, they have no ability to take part in discussions during the breaks: Even if the microphone stays on, there are so many groups of people talking, that it is just a din to those listening online.

    On the other hand, these break-based discussions are quite productive. I do not know what, or whether, we are to do anything about this; I am just stating the facts.

    Mark Nottingham then noted that there is a different dynamic when there are twenty people in the room versus fifty people:

    This is not to say that fifty is bad, but you got to participate… In addition, I must note that this group is not very diverse, especially with regards to gender. I would love to see that change.

    Speaking of representation: today, when the sign-in sheet was being passed around, I had the presence of mind to glance over the preceding entries. There were names of several companies that I had not heard mentioned at the meeting. Below I publish the list of attending companies and organizations that I have collected:

    • F5 Networks
    • ACLU
    • Adobe
    • Akamai
    • Apple
    • AT&T
    • BBC
    • Cloudflare
    • Deutsche Telekom
    • Facebook
    • Fastly
    • Google
    • Huawei
    • LiteSpeed Technologies
    • Lyft
    • Microsoft
    • Mozilla
    • NetApp
    • Symantec
    • Twitter
    • Verizon

    Around 9:45 am, Ian Swett (Google) began his ACKs and Recovery presentation. The first slide had five QUIC ACK Principles which Ian introduced as something that we can all agree upon. Predictably, disagreement instantly ensued. After some dispute regarding the ACK Principles, we got to the meat of the ACK discussion. Ian recounted how some ACK (mis)behaviors only manifest themselves when the network experiences “ridiculously” high packet loss — ca. 30%.

    With regard to the ACK frame structure, it was decided to remove the timestamps section from the ACK until we understand better how we want to aid the congestion control. In addition, deciding which congestion control a connection is to employ should be part of connection negotiation. A separate working group is to make a proposal regarding the use of timestamps and ECN for congestion control.

    Martin Duke raised an issue with the term “timestamp,” since it is not the common definition of “timestamp.” As for the ACK delay time format, Jeff had the following comment to offer (here I am, unfortunately, paraphrasing — the original wording was better):

    The biggest problem with the float format is that it claims to be something that it isn’t, the spec is wrong.

    This elicited a couple of boos (I am assuming from the authors of the format).

    Around 11:20, Mike Bishop (Microsoft) discussed the pros and cons of QPACK, of which he is the author, and QCRAM proposed by Buck Krasic (Google). The discussion went on for some time, as both QPACK and QCRAM have some features that are desirable and others that are not — it is just that these sets are flipped in each: like the yin and yang. Jeff, always quick with a simile, posited that what we wanted was a unicorn of a compression mechanism. I asked Buck whether it is valuable to base the new algorithm on HPACK, for the latter is so simple, it can just be thrown out and a new one can be written. Buck replied that that was a secondary consideration: the primary reason for basing QCRAM on HPACK is to keep all the decision making in the encoder, which is one of the desirable features, and here the consensus was near unanimous. (There were many more questions and observations offered by the members — I am only listing mine because I am partial.)

    Have you ever hummed? What, do you mean like a tune? – you may ask. No, “hum” as in going “HUMMMM…” Sort of like singing a mantra, but instead of OHMMM… you go HUMMM… You haven’t? I have! This is how (apparently!) IETF working groups vote for a motion. When Mike Bishop posed the first question to be hummed, I was so surprised that I missed the gist of the question completely. However, the second humming (hummer? humster? hummedura?) was stated, approximately, as follows: “Hum if you are in favor of saying that it’s OK to abandon any and all HPACK compatibility or design principles when coming up with the new HTTP/QUIC header compression mechanism.” I hummed ‘yes!’ I am a hamster! Hear me HUM! This hum was judged to be in the affirmative.

    During the last break of the day, I talked with Alan Frindell (Facebook) about compression. He had made several insightful comments during the preceding discussion and the opportunity to pick his brain was too good to pass up. Turns out, they have been running modified HPACK code (part of proxygen) in production that supports QCRAM and QPACK! It’s hard to be better prepared than that!

    Alan described Roberto’s two-stream framing proposal to me. I replied that yes, it is good, but we are digging into the transport! As long as we are digging into the transport, we could do the same with one stream: specify a byte sequence to be message separators and parse the messages out. Then you do not have to put them into the same packet. Further, I went on, the fact that QPACK uses extra streams is generally considered a strike against it. This is because we do not want to run out of streams. But why are there limitations to begin with? Why is the number of streams limited? (This is related to issue #796.) Had we an unlimited number of streams, the question of special framing for messages would not exist! Of course, lifting those restrictions would dig even deeper into QUIC…

    Buck discussed the benefits of reduced HoL blocking as measured in Google’s A/B testing early this summer. Reducing head-of-line blocking is definitely something to strive for.

    The meeting wrapped up at 3 pm and I caught Bus #24 to downtown. It was my plan all along to visit the Seattle Art Museum before going to the airport: SAM is open until 9 pm on Thursdays. Walking among works of art, I managed to forget QUIC for a little while. Centuries of civilization were speaking to me.

    I only began to reflect upon the events of the past three days while definitely not enjoying the unappetizing dinner served at an airport restaurant. (It seems at the SeaTac airport they threw off all pretense: “Give us your money! Now, eat this nondescript mystery meat with some lettuce on it!”) The broiled crypto-chicken could not spoil my mood: I was happy.

    The cast of characters in the wonderful play that is the QUIC standardization process is no longer just a bunch of email addresses and GitHub handles for me: I met Eric Rescorla, I argued with Buck Krasic, I shook Martin Thomson’s hand, I exchanged stories of QUIC’s deployment pitfalls with Jana Iyengar, I picked Alan Frindell’s brain. Now I know these (and other!) guys and, what’s more, I like them.

    I gained valuable insight listening to the participants. Observations by Jeff Pinner, Martin Thomson (Mozilla), Roberto Peon, Alan Frindell, and Ian Swett offered me a new perspective on things. It is in human nature to cooperate (the very QUIC standardization process is a good example of this): people will share painfully learned lessons, ideas, problems, solutions — for free! One only has to listen. What a great deal!