Minutes interim-2018-quic-02: Wed 09:00
minutes-interim-2018-quic-02-201806060900-00
| Meeting Minutes | QUIC (quic) WG Snapshot | |
|---|---|---|
| Title | Minutes interim-2018-quic-02: Wed 09:00 | |
| State | Active | |
| Other versions | plain text | |
| Last updated | 2020-02-24 |
minutes-interim-2018-quic-02-201806060900-00
# QUIC Interim Meeting Minutes: June 2018
<!-- START doctoc generated TOC please keep comment here to allow auto update
--> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [Morning 2018-06-06](#morning-2018-06-06)
- [Topic I: Interop Report (Kazuho Oku)](#topic-i-interop-report-kazuho-oku)
- [Topic II: Editors Report (Martin
Thomson)](#topic-ii-editors-report-martin-thomson) - [Topic III: Stream 0
Design Team (Ian Swett)](#topic-iii-stream-0-design-team-ian-swett)
- [Flow Control for Handshake](#flow-control-for-handshake)
- [Empty ACK](#empty-ack)
- [HANDSHAKE_DONE](#handshake_done)
- [Packet # Encryption/Spaces](#packet--encryptionspaces)
- [Handshake Examples (EKR)](#handshake-examples-ekr)
- [Afternoon 2018-06-06](#afternoon-2018-06-06)
- [Topic IV: HTTP (MikeB)](#topic-iv-http-mikeb)
- [Topic V: QPACK (Alan)](#topic-v-qpack-alan)
- [904/1355 New Static Table](#9041355-new-static-table)
- [1343 Static Table Negotiation](#1343-static-table-negotiation)
- [1371 Tracking header blocks for resent
stream](#1371-tracking-header-blocks-for-resent-stream) -
[Interop](#interop)
- [Morning 2018-06-07](#morning-2018-06-07)
- [Topic VI: ECN Proposal (Magnus)](#topic-vi-ecn-proposal-magnus)
- [ECN Ack Frame](#ecn-ack-frame)
- [Capability Check Verification](#capability-check-verification)
- [Continuous Verification](#continuous-verification)
- [Congestion Experienced](#congestion-experienced)
- [Connection Migration](#connection-migration)
- [Issue: ACK Frequency and Recovery
Period](#issue-ack-frequency-and-recovery-period) - [QUIC ACK Frequency
Considerations](#quic-ack-frequency-considerations) - [Receiver Tracking of
Recovery Period](#receiver-tracking-of-recovery-period) - [Blackhole
Mitigation](#blackhole-mitigation) - [Conclusion](#conclusion)
- [Topic VII: mvfst (Subodh)](#topic-vii-mvfst-subodh)
- [Topic VIII: WG Planning](#topic-viii-wg-planning)
- [Topic IX: Load Balancer (MartinD)](#topic-ix-load-balancer-martind)
- [Balance of Time: Issues (MartinT)](#balance-of-time-issues-martint)
- [1342 implicit open page 6](#1342-implicit-open-page-6)
- [58 frame type extensibility (page
8)](#58-frame-type-extensibility-page-8) - [1016 -
initial_max_stream_data](#1016---initial_max_stream_data) - [1296
negotiating packet number protection (slide
12+)](#1296-negotiating-packet-number-protection-slide-12) - [Long Headers
and ICMP](#long-headers-and-icmp)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
## Morning 2018-06-06
*Scribe: Eric Rescorla*
### Topic I: Interop Report (Kazuho Oku)
Interop on 3 versions
* draft-11: ATS is now improved, otherwise same as before
* draft-12: 4 implementations. Problems with PN encryption. Should have
provided test vector * draft-11 + Stream0 DT: Minq and Quicly reached interop
with both 0-RTT and 1-RTT, but no Retry
### Topic II: Editors Report (Martin Thomson)
See [Martin Thomson’s slide
preso](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/editors.pdf)
### Topic III: Stream 0 Design Team (Ian Swett)
[Presentation](https://docs.google.com/presentation/d/176bVI27bRJrfahf8RR89hbZ_owMs54ipxXALNUUsV1c/edit?usp=sharing)
Assorted notes that may not be in slides:
Early versions of this in PicoTLS, Minq, BoringSSL. NSS, OpenSSL will be in
nightly soonish. OpenSSL is probably the furthest behind.
Huitema: Need to tell people not to get clever and merge the ACK structures.
EKR: The current slides actually miss the destination connection ID in the
Retry token to avoid DoS attacks. Will fix slides.
Some questions we don’t seem to have too much clarity on:
Why multiple retries? Cascading retries?
Should you be able to change CID on multiple retries?
Hardie: do the tokens have to be self-contained?
EKR: No, but they have to be unforgeable.
Jana: I just noticed you can only change CID on the first retry? Is that a good
idea
EKR: Not necessarily, but we wouldn’t be able to use the same anti-injection
mechanism.
Recording: Open issue. how many retries should be allowed.
No strong consensus in DT on one Initial type versus >1
*BIO BREAK*
Mark Nottingham: DT output has no special status
There was a request for detail of the handshake. EKR volunteered to do a
presentation about this. Tomorrow?
Ted: Who is going to analyze this? EKR took action item to liaise with academics
Gabriel: We (Microsoft) are in favor of this, though it will be a big change.
Let’s try to minimize big changes going forward.
Consensus call: Does anyone object to going forward.
No objections.
**Consensus: We will go in this direction modulo the open issue Martin raised +
the separable issues.**
Now move on to the separable issues and pick up PN spaces later.
#### Flow Control for Handshake
*Long discussion*
**Consensus: Do nothing in QUIC but punt to TLS WG and let them handle it.**
#### Empty ACK
Kazuho: Can’t we just send a coalesced packet in the lower space.
Proposal: Punt this to v2 and Ian will explain how to use coalesced packets.
Then we can take a look at whether the proposal works.
#### HANDSHAKE_DONE
Conclusion: You should not discard keys earlier than 3RTO after the handshake
is complete unless you have a signal that the other side has the keys. Martin
Duke to write examples of signals.
#### Packet # Encryption/Spaces
*Long discussion*
**Consensus: Continue with separate packet number spaces; there are some
reservations from MT and Christian? It is legal to use a single sending counter
if you want.**
### Handshake Examples (EKR)
[Presentation](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/quic-flow.pdf)
## Afternoon 2018-06-06
*Scribe: Sean Turner*
### Topic IV: HTTP (MikeB)
[Presentation](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/HTTP.pdf)
Principle: HTTP/QUIC is like HTTP/2 except when it is not :)
Dropped flags from HTTP/2 because it’s in the transport layer.
mnot: What about HTTP/2 Extension frames?
Lucas: ALTSVC and ORIGIN frames don't define any flags.
mnot:
[CACHE_DIGEST](https://tools.ietf.org/html/draft-ietf-httpbis-cache-digest-04#section-2)
does, something for the authors to watch out for.
1 byte per frame saving if we go with the proposal.
Conclusion: Define flags inside priority, not in every frame type.
Principle: Application layer shouldn’t need to “grab” a particular stream by ID.
Can’t combine control streams because either side can initiate.
Dmitri: It’s not actually simpler; you’re in limbo until you read the 1st byte.
MT: It made my code simpler.
Robert: 1) Order and in-order are subtle different. This would require that
something be interpreted as in-order. 2) It’s difficult how to drop into the
middle of a session and debug.
McManus: It’s a nice extension point.
Conclusion: There’s some nervousness, but we will continue discussing the type
byte proposal on list. Comments are welcome.
Principle: See 1st principle.
Priority doesn’t work well with QUIC.
4th option (not shown on penultimate slide): restricted form of HTTP/2 priority
to only allow dependency on placeholders. Doesn’t work well for video, others.
Conclusion: This needs to be done in consultation with httpbis, at the least.
Present to them in Montreal.
### Topic V: QPACK (Alan)
[Presentation](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/qpack%20update%2006.18.pdf)
Clarification Questions:
Decoder can limit Encoder’s use of acknowledged header: yes
Why is there a length on the instructions: Some HPACK decoders have issues if
instructions are partially received.
Can we get in a deadlock position with flow control: potentially?
#### 904/1355 New Static Table
1st flight is what it is used for request headers but not much beyond that.
HPACK was 61
How many fit into first byte 16 or 62ish
Highly browser specific!
Where is diminishing returns come into play?
**AI: mnot suggests Hooman get some #s.**
#### 1343 Static Table Negotiation
Nobody has asked for an alternative table.
Transport Parameters - put the ….
Conclusion: QUICv2 for more than one!
#### 1371 Tracking header blocks for resent stream
Conclusion: Option 2 doesn’t fully work. Discuss over beer.
#### Interop
Call Alan if you’re interested in Interop!
## Morning 2018-06-07
*Scribe: Brian Trammell*
### Topic VI: ECN Proposal (Magnus)
[Presentation](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/ECN%20for%20QUIC%20-%20interim-18-06.pdf)
See PR #1372: https://github.com/quicwg/base-drafts/pull/1372
#### ECN Ack Frame
Lars: Do we need an ACK-ECN frame, or can we put ECN in ACK frame? Zeroes back
are also info, and are efficient (varint, three bytes). In majority of cases,
ECN works.
Brian: Two issues here. Path impairments are rare. Stack impairments less rare
but will become more rare. Two frames feels mainly like it’s easy to write, not
a great reason.
Jana: Even if peer doesn’t want ECN, would still have to send extra bytes.
MikeB: no difference between new frame and flags in frame itself
Ian: new frame type might be easier to implement
Lars: If you make ECN look optional in the spec, then people will treat it this
way.
Roberto: A bit sad to me that we are solving ECN for quic. Debugging issues are
linked. Allowing additional debugging information would be nice. ECN doesn’t
belong in the application protocol. Belongs in a layer that the network knows
about and reacts to.
Lars: Aggregating ECN marks and what you do with them is certainly transport.
Roberto: Yo it’s good that we’re solving ECN, we should handle debug too.
Brian: QUICv2.
Brian: Can we solve Lars’ layer 9 problem by renaming: put ECN in the ACK frame
and having a smaller ACK frame (short ack = SHACK or small ack = SMACK.
Jana: ACK-ICN (implicit)) for cases where ECN didn’t work?
Martin: Maybe have a flag that says the ACK frame contains an ECN counter
update.
Lars: No separate frame type
Martin: ACK block count goes back from varint to one byte, high bit means ECN
counters are present.
MikeB: this complicates reliable delivery a bit...
Jana: You don’t want ECN changed, you want ECN information present.
Christian: We spent some time to prevent optimistic ACKs, does ECN reintroduce
this?
Jana: Fundamental issue with ECN: endpoint can mark to get better treatment and
ignore. Let’s not litigate ECN here, but that’s a reason a peer might decide
not to participate.
#### Capability Check Verification
Lars: Is there any benefit to turning it off when not capable?
Magnus: yes, otherwise you’re not playing fairly. Network will prefer the ECN
traffic, but not actually get the payoff of a ECN-behaving client.
#### Continuous Verification
Magnus: packet duplication makes this hard, you can get slop in the counters,
list discussion on this ongoing.
#### Congestion Experienced
Magnus: Classical ECN behavior, but we can do experiments. Text points to 8311.
#### Connection Migration
Magnus: new paths start with capability check, if already working then continue
in continuous verification.
Brian: Is there a linkability problem here?
Magnus: No, always ECT on path probing.
Christian: Is it possible to set CE in order to ensure it makes it to the end
of the path?
Magnus: Hard. Stack might allow ECT but not CE.
Magnus: Probe not yet fully spec’d out, blackhole mitigation is impossible. As
currently laid out, mark probes too.
Brian: The bit of information that leaks here is that the endpoint doesn’t
support userspace ECT, which is not much.
#### Issue: ACK Frequency and Recovery Period
Ian: Any time a packet is newly missing, an ACK is sent immediately. It might
make sense to treat a CE counter increase the same, this fixes the ACK
frequency. Let’s split off the details of ACK frequency optimizations for this
mechanism from this PR.
Magnus: This is a very simple rule…
Jana: Spec says this
Magnus: PR doesn’t yet.
Ian: Treating CE marks as much as possible like newly missing packets is a good
idea.
Jana: With a loss, you want to send a few immediate acks, with CE one should be
enough.
Magnus (AI): will update this PR to say this
Kazuho: Issue here: as you transmit more packets, cumulative counters get
bigger, more overhead, higher ack frequency means this hurts us more. Alternate
design (bitmaps against inflight map) would work better...
Jana: Hard to compress. ACK loss.
Kazuho: Can only carry bitmap for newly acked packets
Jana: need some more redundancy to account for ack loss, but this seems better
than current scheme.
Magnus: Being explicit about which was marked doesn’t give you much from a CC
standpoint. Cumulative counters get bigger, yes, other encodings might fix that
(such as truncating and reporting low bits). I want to get to a baseline, then
talk about the details.
#### QUIC ACK Frequency Considerations
Magnus: this NOT ECN, came up during design process...
Kazuho: why RTT/4?
Magnus: maintains recovery period for ECN is the starting point.
Kazuho: Could be 2 or 8?
Ian: GQUIC changed to always using RTT/4, totally independent of Magnus’ work,
did not check RTT/2, RTT/8. In practice fairly similar, /4 had identical app
performance, fewer ACKs. Coupled with ack per ten, but this works well because
we use BBR. We chose minRTT, not sRTT, so would need to rerun experiments. Did
not recommend lower bound, need to do that. Would set it based on expected
timer granularity. In userspace on most systems 1-2ms is expected.
Christian: Using minRTT instead of sRTT is better, because it does not have the
feedback loop.
Patrick: We also used RTT/4, but move to ACKing every packet on out of order.
Jana: Reno and Cubic have bandwidth limits related to ACK frequency, must
compensate for that. Whatever we do here, we should have recommendations on how
many packets can be
Magnus:
ekr: Document should describe an algorithm that will work well, not necessarily
optimal, okay if quasi-normative, but I would be very sad if as an implementor
I had to figure out RTT/4 myself.
Subodh: We also choose 4, with a floor and a ceiling on RTT freq.
Martin + Brian: Let’s just write down minRTT/4
Subodh + Patrick: we’re SRTT/4
#### Receiver Tracking of Recovery Period
Magnus: this is not a good idea.
Issue: Packet Duplication
Magnus: Duplication causes ECN counters to increment higher than packet count.
Packet replay without racing could drive congestion window down.
Jana: This could be a legitimate mark as well
Brian: Pick an arbitrary deduplication approach and move on?
Magnus: you need basic duplication suppression at the receiver side. This is a
hole in the QUIC spec.
Martin: The protocol just continues to work with dups now.
Ian: We do reject dups, turns out to be easy. Packet number outside ACK block
is just ignored. Window of out-of-orderness you are willing to accept should be
in line here.
Martin: Very simple deduplication approach, just keep track of next expected
packet, have an arbitrary length bit vector for earlier packets. Ian’s is based
on plan-to-ACK.
ekr: IKE and DTLS have to do this as well. You could just point to those. I
don’t want the spec to dictate an algorithm, but we could point to examples.
Martin: takes AI to fix this. Need to be careful about stateless resets...
Roberto: For the mic: I think this is a case where the correct behavior isn't
actually obvious. Seems like we should warn implementers that duplication can
happen. Look out for it.
#### Blackhole Mitigation
How many packets to send with ECT on handshake before falling back to non ECT?
Martin: One is a good number.
Roberto: If we want people to implement this stuff, don’t add complexity for
exceedingly marginal benefit. why not just say that if the path doesn’t support
ECN it doesn’t support QUIC?
Kazuho: Assuming we do path migration, this is a MUST.
#### Conclusion
Unanimity that we should add ECN, just working on the details.
Roberto: If we believe ECN has positive benefit, then it is reasonable to tie
the use of QUIC to the non-blackholing of ECN on the path. This is simple, and
advances the proper thing.
ekr: what is the standards content of this?
Roberto: I’m speaking specifically about blackholing. If it is blackholed, then
you don’t get QUIC.
Jana: As a QUIC stack you still need to be able to set the bits in IP header,
and read them.
Lars: Your stack might blackhole you
Roberto: Normal fallback to TCP on ECN blackhole. We will not attempt to
recover.
ekr: Is this something implementors do, or something the standard requires?
Brian: Let’s call the fallback a MAY.
### Topic VII: mvfst (Subodh)
[Presentation](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/mvfst.pdf)
Issue: setting the right idle timeout is hard, and idle timeout is
underspecified. Ping interval can be longer than idle timeout.
Suggestion: ping idle-timeout/2 to keep the connection alive, but this is an
issue on mobile (don’t want to waste battery). Whether to keep alive is an
application prerogative.
Jana: Misalignment. Transport should be responsible for idle timeouts and NAT
rebinding, but application needs to be involved now.
MikeB: Refcount. Take a ref when the application is waiting for the server and
the transport should ping stuff. Release the ref. Refcount zero: let the
connection idle TO.
Action: Subodh to file an issue.
Jana: Tooling will be important. Need to do better than TCPdump and Wireshark
Lars: Plug for EPIQ (Lars, put a link here please): workshop on QUIC research.
Tooling in scope.
### Topic VIII: WG Planning
Mark: Hopefully by Montreal we can start announcing that we’re getting close to
done, and that any remaining implementers should come to the table.
Mark: We’re planning an interim at NetApp in New York City the week of 17
September 2018. Two days of interop and two days of meeting. It looks like
we’re not going to be done by Bangkok, so we’re starting to plan an interim the
third or fourth week of January 2019 in Asia or Europe, people with facilities
please talk to us.
Mark: Target for next interop at Montreal hackathon? Will we be able to
MartinD: How many stacks do PNE?
Lars: 3 or 4, exposed some other bug.
Jana: Drafts can come out in the next couple of weeks, but no Stream 0
MikeB: Do we want to do two separate interops? e.g. HTTP -12, or -13 over
Transport -11, then Transport -12 or -13. Or do we want -13 with PR [missing],
then -14 with Stream0?
ekr: I think we can have stream0 implementations before Montreal. We have six
weeks. Not interested in interoping -12.
Lars: Let’s add some sort of migration for the remote interop between Montreal
and New York.
Mark: Who’s driving the details of the next interop? ekr.
Lars: Someone needs to be the hackathon person for Montreal, I won’t be there:
ekr.
When do the Stream 0 changes come in?
ekr: will drop a PR next Wednesday
ST: deadline for IETF is 2 July
Patrick: start implementing to a branch if we can’t submit a draft.
Lars: Also between Montreal and New York we should test ECN
Brian: Need standard test equipment/firewall/vm to mark CE
Ian: would also like to work on HTTP -13/-14 on transpo -11 in Montreal. If I
know now that others will do that I can get people on airplanes.
Gabriel: can also do that, need to prioritize the app now too.
(on QPACK vs HQ)
MartinD: QPACK has fewer dependencies on the transport than HB
MikeB: so, QPACK in Montreal and HQ for New York.
### Topic IX: Load Balancer (MartinD)
[Presentation](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/quic-load-balancers.pdf)
Seeking feedback on whether group is interested in problem statement and high
level technical feedback on design proposed
Design choice: this could be dtls based - udp 443 is the key thing
Fundamentally the proposal is how a set of balanced servers communicate with LB
wrt connection ids that can be routed back to those servers (i.e. a side
control channel). Focus on diversely owned servers and lb
Subodh, igor, and martin d discussed algorithms for assigning cids
Discussion of whether this should be upleveled to something like REST or
another management protocol suite that shall not be named.
Mike b: you may want a model where lb informs the servers of their assigned cids
Discussion of whether the logical consumers of this are represented in the
quicwg rather than hosting operators, etc..
### Balance of Time: Issues (MartinT)
[Presentation](https://github.com/quicwg/wg-materials/blob/master/interim-18-06/misc-issues.pdf)
Stateless reset oracles (page 2 + 3):
Mt highlights man on the side copying the reset
Ian: sending to a different IP/cluster also does not work
Mt: this has interactions with group arrangements that mix anycast and unicast
addresss (preferred address - Christian too)
Subodh, jana, kazuho all have suggestions on scope of keys. Text needed
Proof of receipt “simple fix” text will be coordinated by MT.
#### 1342 implicit open page 6
Do we or don’t we have implicit opens (currently?) -
General feeling is these aren’t very different - but we need to be clear
Marten suggests that protocols that come from tcp (such as spdy) require
ordering and thus no implicit open
Kazuho prefers yes implicit open - more clear about state of stream that hasn’t
appeared on wire
Subodh - senders (recommend) that streams are opened in order. Lets be
consistent. Rst stream implicitly opens (and then resets) streams.
Jana suggests modeling implicit stream as an explicit stream with len 0, marten
counters with concerns about reordering on receiver
Ekr: fewer funky behaviors the better - unidirectional streams serve the use
case for implicit (he’s a no)
Gabriel / Nick: likes implicit and symmetry on both sides in face of loss
Mnot: can you not live with any of the options: 1 hum
Who prefers implicit open: lots, who prefers explicit open: a little
Strong preference declared by chairs for implicit open
#### 58 frame type extensibility (page 8)
Mnot asks who has strong opinions on outcome; ~8 hands raised
Kazuho wants only one way to extend quic functionality
Mt: right now transport params are the only mechanism. The question is adding
frame types
Ekr: pushes back on all extensions should have access to a one octet encoding.
2 octets easily fit in a first come first served registry. Options 4 and 5
means frame types are asymmetric between peers
Subodh: does everything need to be negotiated? Mt says the frames don’t have
standard length delims, so yes.. Option 1 might address but ruled out in MEL
Brian - can we bind extensions to quic version? Mt: in MEL we said we wanted a
more fine grained mechanism
Mnot as individual - accuses the wg of overdesigning.
Viktor: regrets his own PR on the topic. We should copy tls extension mechanism
as its proven to work well. EKR: we could do so literally as we’re using TLS
Martin d: notes extensions from client in the clear, and there is finite
INITIAL space.. MT says plenty pre-post-quantum, already out post-post-quantum
Ian: also concerned about unilateral negotiation and redundancy
Mnot: idea here is give MT as editor feedback and him make a choice (which we
will then debate again?)
Mt: leaning towards varint and registry(?)
Jana: this is a standard model - negotiate extension (top level feature) and N
frame types fall out from that. Lots of yepping from the peanut gallery working
group
Momentum builds..
Note that transport params that declare you support a feature have optional
values for configuring the feature.
#### 1016 - initial_max_stream_data
Jana likes flexibility and likes default of 0.
Kazuho - patrick - jana - we should do it
Nobody voices unhappiness with that direction
#### 1296 negotiating packet number protection (slide 12+)
Kazuho: this exposes linkability of path migration - should we disable
migration if pne was disabled?
Ian: thinks this most be bilateral; but prefers transport param over new
version #. Also says pne is separable
Jana: doesn’t like tp. Separate version seems reasonable even with different
vendors as long as you stay in the DC environment
Roberto: benefit if you do want linkabiity for debugging, its also a bet
against quic being successful wrt hardware acceleration. Use a different version
Brian: seems to be vn is about package of base behavior and also a wire image.
This is a wire image feature therefore this is VN not TP
Ekr: we’re already extensible so that someone else can do this later via
‘specification required’
Igor: seems like a viable option that the wg should tackle - big audience
Kazuho: don’t delay quicwg docs, make it a separate draft
Gabriel: separate draft is possible. There seems to be more than one entity
interested. PNE is premature; without studying crypto offload.
Mt: sounds like people would be open to reading a draft
Jana: not having pne means that packet 0 we still need to encrypt the long
header
Brian: are we just trying to be hands off something we do like
Lars: there are actually a lot of details for a wg to work through
Ekr: I don’t want to figure out the security properties of quic with this axis
Mike b: tell proponents we’d be happy to review the document but unclear if we
would be willing to adopt
Mnot - we need a list consensus call this is a prediscussion for the list -
leaning towards a separate document not necessarily in the wg
#### Long Headers and ICMP
IGOR PROPOSES ALLOWING LONG HEADERS WHENEVER TO HELP ICMP
Kazuho: just prepend the short packet with a longheader corrupt sentinel
Subodh: unreachable is interesting as well as pmtud
Roberto: this isn’t congestion controlled - so use sparingly
Igor to send pr regarding pmtu and this approach