Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move day-in-the-life to intro #3858

Merged
merged 5 commits into from Jul 16, 2020
Merged

Move day-in-the-life to intro #3858

merged 5 commits into from Jul 16, 2020

Conversation

martinthomson
Copy link
Member

This does a little shuffling to move some of the context-setting up. It
then adds some more meat to the introductory section.

Closes #3763.

This does a little shuffling to move some of the context-setting up.  It
then adds some more meat to the introductory section.

Closes #3763.
@martinthomson martinthomson added editorial An issue that does not affect the design of the protocol; does not require consensus. -transport labels Jul 8, 2020
The QUIC handshake combines negotiation of cryptographic and transport
parameters. The handshake is structured to permit the exchange of application
data as soon as possible. This includes an option for clients to send data
immediately (0-RTT) as possible, which might require prior communication to
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
immediately (0-RTT) as possible, which might require prior communication to
immediately (0-RTT), which might require prior communication to


Frames are used in QUIC to communicate between endpoints. Multiple frames are
assembled into packets. QUIC authenticates all packets and encrypts as much as
is practical to avoid incurring a dependency on middleboxes. QUIC packets are
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't the dependency the other way around; we're trying to avoid middleboxes becoming dependent on any visible features of QUIC.

Copy link
Contributor

@ianswett ianswett left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some suggestions, but LG.

and server. The primary purpose of a connection is to support the exchange of
data by an application protocol.

Streams ({{streams}}) are the primary means by which an application protocol
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Saying 'primary' seems odd given there's no other option in v1.

You could say "Streams are the only means by which an application protocol exchange information in this version of QUIC."

Comment on lines 134 to 135
unidirectional streams allow a single endpoint to send. Endpoints can create
streams without prior negotiation. A credit-based scheme is used to limit
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd drop this sentence, since one could consider the stream limit TPs 'negotiation'.

Suggested change
unidirectional streams allow a single endpoint to send. Endpoints can create
streams without prior negotiation. A credit-based scheme is used to limit
unidirectional streams allow a single endpoint to send. A credit-based scheme is used to limit

Comment on lines 147 to 148
Frames are used in QUIC to communicate between endpoints. Multiple frames are
assembled into packets. QUIC authenticates all packets and encrypts as much as
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Frames are used in QUIC to communicate between endpoints. Multiple frames are
assembled into packets. QUIC authenticates all packets and encrypts as much as
Frames are used in QUIC to communicate between endpoints. One or more frames can
be sent in a single QUIC packet. QUIC authenticates all packets and encrypts as much as

and server. The primary purpose of a connection is to support the exchange of
data by an application protocol.

Streams ({{streams}}) are the primary means by which an application protocol
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Streams is the only reference in this section, so I'd be inclined to drop it given it's referenced in "Life of a QUIC connection"?

Copy link
Contributor

@janaiyengar janaiyengar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A high-order idea: Merge the Overview and Structure sections. Basically, I think we could use your descriptions of the three major pieces (Streams, Connections, Packets/Frames) at the right points in the text under Document Structure, and just move all of it into Overview. WDYT?

@@ -979,6 +1022,34 @@ described in {{migration}}. Finally, a connection may be terminated by either
endpoint, as described in {{termination}}.


## Life of a QUIC Connection {#connection-lifecycle}

Each connection starts with a handshake phase, during which client and server
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Each connection starts with a handshake phase, during which client and server
Each connection starts with a handshake phase, during which the two endpoints

Comment on lines 1025 to 1026
## Life of a QUIC Connection {#connection-lifecycle}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the text in this subsection can replace the text above in the Connections section header. The first sentence above is broken (there's no version negotiation), and the rest of them are covered below. So basically, delete all text from lines 1016 - 1026.

Comment on lines 1034 to 1042
An application protocol can also operate in a limited fashion during the
handshake phase. 0-RTT allows application data to be sent by a client before
receiving any response 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 reduced latency.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
An application protocol can also operate in a limited fashion during the
handshake phase. 0-RTT allows application data to be sent by a client before
receiving any response 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 reduced latency.
An application protocol can use the connection during the handshake
phase, albeit to a limited extent. 0-RTT allows application data to be
sent by a client before receiving a response from the server. However,
there is no protection against replay attacks in 0-RTT; see {{QUIC-TLS}}.
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 of trading some security guarantees for
reduced latency.

Comment on lines 128 to 129
and server. The primary purpose of a connection is to support the exchange of
data by an application protocol.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
and server. The primary purpose of a connection is to support the exchange of
data by an application protocol.
and server. The primary purpose of a connection is to support the structured
exchange of data by an application protocol.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not so sure about this myself, but suggesting... the idea is to surface the use of QUIC streams.

Comment on lines 133 to 135
bidirectional streams allow both endpoints to send data; unidirectional streams
allow a single endpoint to send. A credit-based scheme is used to limit stream
creation and to bound the amount of data that can be sent.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
bidirectional streams allow both endpoints to send data; unidirectional streams
allow a single endpoint to send. A credit-based scheme is used to limit stream
creation and to bound the amount of data that can be sent.
bidirectional streams, that allow both endpoints to send data; and
unidirectional streams, that allow a single endpoint to send. A credit-based
scheme is used to limit stream creation and to bound the amount of data that
can be sent.

Comment on lines 127 to 129
QUIC establishes a connection, which is a stateful interaction between a client
and server. The primary purpose of a connection is to support the exchange of
data by an application protocol.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would propose this be moved to after the para on streams

Comment on lines +137 to +140
The QUIC handshake combines negotiation of cryptographic and transport
parameters. The handshake is structured to permit the exchange of application
data as soon as possible. This includes an option for clients to send data
immediately (0-RTT), which might require prior communication to enable.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With the leading para on QUIC connections from lines 127-129 moved here, maybe combine this with that para and start with "QUIC connections are established using a handshake that combines..."

Comment on lines 151 to 153
{{fig-hs}} shows a simplied handshake and the exchange of packets and frames
that are used to advance the handshake. Exchange of application data during the
handshake is enabled where possible, shown with a '*'.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems a bit out of place. It would be more useful if it included data exchange and connection termination. Otherwise, I would suggest removing it entirely (this para and the text below as well).

@martinthomson
Copy link
Member Author

Thanks for the review Jana. I've taken most of this, with small tweaks only.

Two things I didn't take:

  1. Interleaving explanation with references to sections sounded appealing, but it turns out to be both harder to read as the links break up the flow, and harder to scan for links (the structure section serves as an abbreviated and accessible ToC).

  2. I didn't move the connection piece below streams as I think that - at this level - talking about the connection is important context.

I've moved the picture to the #handshake section, which didn't have that simple diagram (just some more complex ones), and I think benefits from it.

Copy link
Contributor

@janaiyengar janaiyengar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working through this!

@janaiyengar janaiyengar merged commit 8a9ebea into master Jul 16, 2020
@janaiyengar janaiyengar deleted the move-life-of branch July 16, 2020 04:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport editorial An issue that does not affect the design of the protocol; does not require consensus.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Editorial] Lots of forward references
4 participants