Subject: [quicwg/base-drafts] A day in the life (#3225)

From: Martin Thomson <[email-masked]>
Date: Mon, 11 Nov 2019 19:51:33 -0800

...and now we know how many holes it takes to fill the Albert Hall.

This section has existed for a long time as &quot;TBD&quot;.  No longer.  It also
takes the opportunity to explain a little bit about what 0-RTT is for.

Closes #2856.
Closes #2843.
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/3225

-- Commit Summary --

  * A day in the life

-- File Changes --

    M draft-ietf-quic-transport.md (48)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/3225.patch
https://github.com/quicwg/base-drafts/pull/3225.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225

---

From: Marten Seemann <[email-masked]>
Date: Mon, 11 Nov 2019 19:56:05 -0800

marten-seemann commented on this pull request.

I noticed you didn't write anything about Retry. Was that intentional?

> -suggested structure:
-
- - establishment
-   - VN
-   - Retry
-   - Crypto
- - use (include migration)
- - shutdown
-
--->
+A QUIC connection is a stateful interaction between a client and server, the
+primary purpose of which is to support the exchange of data by an application
+protocol.  Streams ({{streams}}) is the primary mechanism by which an
+application protocol exchanges information.
+
+Each connection starts with an handshake phase, during which client and server

s/an/a

> -validation that shows up later, and explain why these two mechanisms are
-required here.
-
-suggested structure:
-
- - establishment
-   - VN
-   - Retry
-   - Crypto
- - use (include migration)
- - shutdown
-
--->
+A QUIC connection is a stateful interaction between a client and server, the
+primary purpose of which is to support the exchange of data by an application
+protocol.  Streams ({{streams}}) is the primary mechanism by which an

s/is/are?

> +handshake phase.  0-RTT allows application messages to be sent by a client
+before receiving any messages from the server.  However, 0-RTT lacks certain key
+security guarantees. In particular, there is no protection against replay
+attacks in 0-RTT; see {{QUIC-TLS}}.  Separately, a server can also send
+application data to a client before it receives the final cryptographic
+handshake messages that allow it to confirm the identity and liveness of the
+client.  These capabilities allow an application protocol to offer the option to
+trade some security guarantees for improved latency.
+
+The use of connection IDs ({{connection-id}}) allows connections to migrate to a
+new network path, both as a direct choice of an endpoint and when forced by a
+change in a middlebox.  {{migration}} describes how a migration can be performed
+securely without adversely affecting privacy.
+
+For connections that are no longer needed or desired, there are several ways for
+a client and server to agree to remove connection state ({{termination}}).

This paragraph feels incomplete. What are those different ways? Are you referring to silent close vs. immediate close?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#pullrequestreview-315282317

---

From: Martin Thomson <[email-masked]>
Date: Mon, 11 Nov 2019 21:02:46 -0800

martinthomson commented on this pull request.

-required here.
-
-suggested structure:
-
- - establishment
-   - VN
-   - Retry
-   - Crypto

I really didn't know which here.  But I think that you are right.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345018357

---

From: Martin Thomson <[email-masked]>
Date: Mon, 11 Nov 2019 21:03:31 -0800

Yeah, I had that in the first cut, but then removed it.  The referenced section has enough information about closing.  It's not super-important to duplicate all that text when it is so succinctly stated later.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345018506

---

From: Martin Thomson <[email-masked]>
Date: Mon, 11 Nov 2019 21:03:36 -0800

> I noticed you didn't write anything about Retry. Was that intentional?

Retry is there, but at one level higher up (`confirms that endpoints are willing to communicate
({{validate-handshake}})`).

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#issuecomment-552735538

---

From: Martin Thomson <[email-masked]>
Date: Mon, 11 Nov 2019 21:13:12 -0800

@martinthomson pushed 1 commit.

50997741a989c1b70b991a73b2290d7417c5b77e  grammer iz had

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225/files/7a1bfb73f425696b0eefbb36d94c5f24bef6fabb..50997741a989c1b70b991a73b2290d7417c5b77e

---

From: MikkelFJ <[email-masked]>
Date: Tue, 12 Nov 2019 05:35:51 -0800

mikkelfj commented on this pull request.

Perhaps also some discussion on termination - silent idle timeout vs connection close, and risk of loss of close packet.

-
-suggested structure:
-
- - establishment
-   - VN
-   - Retry
-   - Crypto
- - use (include migration)
- - shutdown
-
--->
+A QUIC connection is a stateful interaction between a client and server, the
+primary purpose of which is to support the exchange of data by an application
+protocol.  Streams ({{streams}}) are the primary means by which an application
+protocol exchanges information.

That is not necessarily the case with DATAGRAM extension.

-   - Retry
-   - Crypto
- - use (include migration)
- - shutdown
-
--->
+A QUIC connection is a stateful interaction between a client and server, the
+primary purpose of which is to support the exchange of data by an application
+protocol.  Streams ({{streams}}) are the primary means by which an application
+protocol exchanges information.
+
+Each connection starts with a handshake phase, during which client and server
+establish a shared secret using the cryptographic handshake protocol
+{{QUIC-TLS}} and negotiate the application protocol.  The handshake
+({{handshake}}) confirms that endpoints are willing to communicate

```suggestion
({{handshake}}) confirms that both endpoints are willing to communicate
```

> +Each connection starts with a handshake phase, during which client and server
+establish a shared secret using the cryptographic handshake protocol
+{{QUIC-TLS}} and negotiate the application protocol.  The handshake
+({{handshake}}) confirms that endpoints are willing to communicate
+({{validate-handshake}}) and establishes parameters for the connection
+({{transport-parameters}}).
+
+An application protocol can also operate in a limited fashion during the
+handshake phase.  0-RTT allows application messages to be sent by a client
+before receiving any messages from the server.  However, 0-RTT lacks certain key
+security guarantees. In particular, there is no protection against replay
+attacks in 0-RTT; see {{QUIC-TLS}}.  Separately, a server can also send
+application data to a client before it receives the final cryptographic
+handshake messages that allow it to confirm the identity and liveness of the
+client.  These capabilities allow an application protocol to offer the option to
+trade some security guarantees for improved latency.

```suggestion
trade some security guarantees for reduced latency.
```

... or to buffer packets until the handshake is confirmed.

> +({{transport-parameters}}).
+
+An application protocol can also operate in a limited fashion during the

That is a strong claim. "... with as little impact on privacy as practically possible" would be more precise.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#pullrequestreview-315530990

---

From: MikkelFJ <[email-masked]>
Date: Tue, 12 Nov 2019 05:51:25 -0800

This section reads as if 1-RTT could be relaxed while it probably only intends to address 0-RTT.  See also #3224

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345214969

---

From: Ryan Hamilton <[email-masked]>
Date: Tue, 12 Nov 2019 07:55:32 -0800

RyanAtGoogle commented on this pull request.

-
-suggested structure:
-
- - establishment
-   - VN
-   - Retry
-   - Crypto

Heh. True, though since that extension is not part of the transport draft and not discussed in it at all, I think this sentence is quite correct as is.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345289340

---

From: MikkelFJ <[email-masked]>
Date: Tue, 12 Nov 2019 08:27:44 -0800

-Each connection starts with an handshake phase, during which client and server
+Each connection starts with a handshake phase, during which client and server

unless of course your intended audience is primarily from East End

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#pullrequestreview-315667690

---

From: Martin Thomson <[email-masked]>
Date: Tue, 12 Nov 2019 13:15:23 -0800

cee02b8081a97cb76ca41f95023eff22f83f98d0  Mikkel makes this better

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225/files/50997741a989c1b70b991a73b2290d7417c5b77e..cee02b8081a97cb76ca41f95023eff22f83f98d0

---

From: Martin Thomson <[email-masked]>
Date: Tue, 12 Nov 2019 13:16:15 -0800

+

I'm surprised that you aren't also contesting the security claim as well :)  Because that too is in question.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345448545

---

From: MikkelFJ <[email-masked]>
Date: Tue, 12 Nov 2019 13:33:55 -0800

+

We all know that security is an illusion :)

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345456645

---

From: MikkelFJ <[email-masked]>
Date: Tue, 12 Nov 2019 13:35:16 -0800

@MikeBishop Cockney  an 'andshake

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345457221

---

From: ianswett <[email-masked]>
Date: Tue, 12 Nov 2019 13:43:56 -0800

ianswett approved this pull request.

+trade some security guarantees for reduced latency.

I'm not sure this suggestion is better, but it reads a bit more easily to me.

```suggestion
a client and server to terminate a connection ({{termination}}).
```

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#pullrequestreview-315864656

---

From: Martin Thomson <[email-masked]>
Date: Tue, 12 Nov 2019 13:45:29 -0800

5866e9649332db619d09e31eaa764936ea0d8ac6  termination clause

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225/files/cee02b8081a97cb76ca41f95023eff22f83f98d0..5866e9649332db619d09e31eaa764936ea0d8ac6

---

From: Mike Bishop <[email-masked]>
Date: Tue, 12 Nov 2019 15:17:27 -0800

MikeBishop approved this pull request.

-
-suggested structure:
-
- - establishment
-   - VN
-   - Retry
-   - Crypto

Streams are the primary means.  Extensions might define additional ones.

+({{handshake}}) confirms that both endpoints are willing to communicate

```suggestion
security guarantees.  In particular, there is no protection against replay
```

+

{{migration}} describes potential mitigations for the security and privacy implications of migration.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#pullrequestreview-315801388

---

From: Lucas Pardue <[email-masked]>
Date: Tue, 12 Nov 2019 16:02:12 -0800

LPardue commented on this pull request.

> +For connections that are no longer needed or desired, there are several ways for
+a client and server to terminate a connection ({{termination}}).

The PR talks about birth, marriage, divorce and death. 

Perhaps it is pertinent to have a paragraph the mentions the connection's role in the steady-state between some of these things. In fact, mentioning that it is mainly the application mapping's responsibility to define the specifics might help.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#pullrequestreview-315925805

---

From: Martin Thomson <[email-masked]>
Date: Tue, 12 Nov 2019 18:29:13 -0800

192990e0903bad56516e5750fadc18004a10aea2  Paraphrase Mike's suggestion

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225/files/5866e9649332db619d09e31eaa764936ea0d8ac6..192990e0903bad56516e5750fadc18004a10aea2

---

From: Martin Thomson <[email-masked]>
Date: Fri, 15 Nov 2019 17:04:31 -0800

Do you have a suggestion?  I hit that briefly in the first paragraph with the "this is for sending stuff by application protocols", but I realize that might not be satisfactory.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#discussion_r345543183

---

From: Andy Grover <[email-masked]>
Date: Tue, 19 Nov 2019 18:22:32 -0800

So we have little diagrams for send and receive stream states. Any chance this section could include a state diagram and transitions for the overall connection state?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3225#issuecomment-555805366