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

Proposal for adding ECN support to QUIC. #1372

Merged
merged 43 commits into from Jun 27, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
961d5d9
According to text in wiki. Some MD fixes to get right formating.
gloinul May 18, 2018
b50fe18
Modified proposed text to integrate better and take care of issues ar…
gloinul May 18, 2018
57278fe
Fixed a typo on anchor creation
gloinul May 21, 2018
44a70f8
According to text in wiki. Some MD fixes to get right formating.
gloinul May 18, 2018
afd15f2
Modified proposed text to integrate better and take care of issues ar…
gloinul May 18, 2018
da68127
Fixed a typo on anchor creation
gloinul May 21, 2018
a9755ce
Merge branch 'ecn' of https://github.com/gloinul/base-drafts into ecn
gloinul May 22, 2018
3a95c40
Clarified that ACK or ACK_ECN can be used for acknowledgment in hands…
gloinul May 22, 2018
12b1054
Added ECN intro paragraph. Various editorial improvements of ECN text.
gloinul May 22, 2018
bfe80d5
Fixed bullet list, Added parenthis around section refs.
gloinul May 22, 2018
88f76dc
Fixed indentation and formating
gloinul May 22, 2018
f14134f
Spelling fixed
gloinul May 22, 2018
71c2794
Rewrote the ECN check algorithm for connection migration to be robust.
gloinul May 24, 2018
2ff5ac9
Removed trailing spaces.
gloinul May 24, 2018
19d3b53
Fixed trailing spaces in recovery.
gloinul May 24, 2018
f71e933
Rewraped text in both recovery and transport. Added a new sub-section…
gloinul May 24, 2018
fc94546
Added textual description of ECN-CE indicating congestion events.
gloinul May 28, 2018
66505a3
Editorial fixes
martinthomson May 29, 2018
d525046
Merge pull request #1 from quicwg/ecn
gloinul May 29, 2018
28ef4c1
Editing some formulations. Rewraping more text
gloinul May 29, 2018
6dd9237
Fixed trailing spaces and remaining line length issues, I hope.
gloinul May 30, 2018
0bb5bad
Reflowing now saved
gloinul May 30, 2018
0f94847
Merge branch 'master' of https://github.com/quicwg/base-drafts into ecn
gloinul Jun 4, 2018
0e7d43b
Merge branch 'master' of https://github.com/quicwg/base-drafts into ecn
gloinul Jun 7, 2018
822aded
Changed so that additional ECN-CE marks are sent in immediate ACKs to…
gloinul Jun 7, 2018
345f593
Fixed lint issues
gloinul Jun 7, 2018
e60cc8f
Adding security consideration around ECN into transport.
gloinul Jun 8, 2018
fdf9df7
Reverting some rewrapping that are not necessary to reduce clutter.
gloinul Jun 12, 2018
ec97fd8
Addressing issues raised by Ian Sweet on 180611. Editorial improvemen…
gloinul Jun 12, 2018
bf30190
Clarifying that both cases are capability checks. Correcting a number…
gloinul Jun 12, 2018
60468a7
Fixed a too too much
gloinul Jun 12, 2018
f577c8e
Addressing Martin Thomson's comments. Several editorial changes. The …
gloinul Jun 13, 2018
2d76935
Added paragraph on dealing with persistent loss of acknowledgement of…
gloinul Jun 13, 2018
4af108c
Fixing typo in new paragraph.
gloinul Jun 13, 2018
55fa3d6
Merge branch 'master' of https://github.com/quicwg/base-drafts into ecn
gloinul Jun 18, 2018
e06a2a0
Added requirement on ECN marking suppression for packet duplicates.
gloinul Jun 18, 2018
1636ebc
Clarifying that idefinite state are not requeired in duplication dete…
gloinul Jun 19, 2018
139f1ee
Martin Thomson's editorial suggestions. Restructured pseudo code sect…
gloinul Jun 19, 2018
dbfe4d8
partial editorial fixes
janaiyengar Jun 20, 2018
73bf8cb
Merge pull request #2 from janaiyengar/ecn
gloinul Jun 20, 2018
be91e8f
Moved the ECN block in the ACK prior to the ACK blocks themselves. Re…
gloinul Jun 21, 2018
f8d3d5c
Merge branch 'ecn' of https://github.com/gloinul/base-drafts into ecn
gloinul Jun 21, 2018
cf312f9
Merged ECN counters into single ACK frame section and move them befor…
gloinul Jun 25, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 6 additions & 4 deletions draft-ietf-quic-recovery.md
Expand Up @@ -1047,18 +1047,20 @@ acked_packet from sent_packets.

### On Packets Marked

Invoked by an increment in the number of CE marked packets, as indicated by a newly received ACK_ECN frame. The variable ack_ce_counter is used to check if packets are recently CE marked.
Invoked by an increment in the number of CE marked packets, as
indicated by a newly received ACK_ECN frame. The variable ack_ce_counter
is used to check if packets are recently CE marked.

~~~
OnPacketsMarked(ce_counter):
if (end_of_recovery < largest_acked_packet && ce_counter > ack_ce_counter):
if (end_of_recovery < largest_acked_packet && ce_counter > ack_ce_cntr):
// Start a new congestion epoch
end_of_recovery = largest_sent_packet
congestion_window *= kMarkReductionFactor
congestion_window = max(congestion_window, kMinimumWindow)
ssthresh = congestion_window
// update ack_ce_counter
ack_ce_counter = ce_counter
// update ack_ce_cntr
ack_ce_cntr = ce_counter
~~~


Expand Down
80 changes: 51 additions & 29 deletions draft-ietf-quic-transport.md
Expand Up @@ -1047,20 +1047,21 @@ negotiation, which is the same no matter which reserved version was sent.
A server MAY therefore send different reserved version numbers in the Version
Negotiation Packet and in its transport parameters.

A client MAY send a packet using a reserved version number. This can be used to
solicit a list of supported versions from a server.
A client MAY send a packet using a reserved version number. This can be
used to solicit a list of supported versions from a server.


## Cryptographic and Transport Handshake {#handshake}

QUIC relies on a combined cryptographic and transport handshake to minimize
connection establishment latency. QUIC allocates stream 0 for the cryptographic
handshake. Version 0x00000001 of QUIC uses TLS 1.3 as described in
{{QUIC-TLS}}; a different QUIC version number could indicate that a different
cryptographic handshake protocol is in use.
QUIC relies on a combined cryptographic and transport handshake to
minimize connection establishment latency. QUIC allocates stream 0 for
the cryptographic handshake. Version 0x00000001 of QUIC uses TLS 1.3 as
described in {{QUIC-TLS}}; a different QUIC version number could
indicate that a different cryptographic handshake protocol is in use.

QUIC provides this stream with reliable, ordered delivery of data. In return,
the cryptographic handshake provides QUIC with:

QUIC provides this stream with reliable, ordered delivery of data. In
return, the cryptographic handshake provides QUIC with:

* authenticated key exchange, where

Expand All @@ -1070,45 +1071,48 @@ the cryptographic handshake provides QUIC with:

* every connection produces distinct and unrelated keys,

* keying material is usable for packet protection for both 0-RTT and 1-RTT
packets, and
* keying material is usable for packet protection for both 0-RTT
and 1-RTT packets, and

* 1-RTT keys have forward secrecy

* authenticated values for the transport parameters of the peer (see
{{transport-parameters}})

* authenticated confirmation of version negotiation (see {{version-validation}})
* authenticated confirmation of version negotiation
(see {{version-validation}})

* authenticated negotiation of an application protocol (TLS uses ALPN
{{?RFC7301}} for this purpose)

* for the server, the ability to carry data that provides assurance that the
client can receive packets that are addressed with the transport address that
is claimed by the client (see {{address-validation}})
* for the server, the ability to carry data that provides assurance that
the client can receive packets that are addressed with the transport
address that is claimed by the client (see {{address-validation}})

The initial cryptographic handshake message MUST be sent in a single
packet. Any second attempt that is triggered by address validation MUST
also be sent within a single packet. This avoids having to reassemble a
message from multiple packets. Reassembling messages requires that a
server maintain state prior to establishing a connection, exposing the
server to a denial of service risk.

The initial cryptographic handshake message MUST be sent in a single packet.
Any second attempt that is triggered by address validation MUST also be sent
within a single packet. This avoids having to reassemble a message from
multiple packets. Reassembling messages requires that a server maintain state
prior to establishing a connection, exposing the server to a denial of service
risk.

The first client packet of the cryptographic handshake protocol MUST fit within
a 1232 octet QUIC packet payload. This includes overheads that reduce the space
available to the cryptographic handshake protocol.
The first client packet of the cryptographic handshake protocol MUST fit
within a 1232 octet QUIC packet payload. This includes overheads that
reduce the space available to the cryptographic handshake protocol.

Details of how TLS is integrated with QUIC is provided in more detail in
{{QUIC-TLS}}.


## Transport Parameters

During connection establishment, both endpoints make authenticated declarations
of their transport parameters. These declarations are made unilaterally by each
endpoint. Endpoints are required to comply with the restrictions implied by
these parameters; the description of each parameter includes rules for its
handling.
During connection establishment, both endpoints make authenticated
declarations of their transport parameters. These declarations are made
unilaterally by each endpoint. Endpoints are required to comply with the
restrictions implied by these parameters; the description of each
parameter includes rules for its handling.

Copy link
Member

Choose a reason for hiding this comment

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

Please keep to one blank line between paragraphs.


The format of the transport parameters is the TransportParameters struct from
{{figure-transport-parameters}}. This is described using the presentation
Expand Down Expand Up @@ -1410,6 +1414,24 @@ If an ACK frame (not the ACK_ECN frame) is used to acknowledge reception of pack

It is expected that QUIC discards duplicate packets early, however if that is not the case **[ED note, have not seen any clear statement in the drafts]**, then it should be verified that the number of ECT marked packets are equal to or larger that the amount of ECT marked packets that have been transmitted.

### Continous Verification of ECN {#ecn-continous-verification}

If the ECN capabiity check was successful and the endpoint continus to
send ECT marked packets then continous verification is applied. This is
detect any cases when ECN field is bleached, i.e. zeroed out by a network
node, likely as the result of a routing changes since the ECN capability
check.

For each ACK_ECN frame that is received the total number of ACKed
packets are updated by adding those outstanding packets that was
acknolwedged by this ACK_ECN frame. Then the total number of ACKed
packets are compared with the sum of the ECN counters. If ACKed packets
are larger than the sum some ECN failure has occured and ECN should be
disabled. ECN is also disabled in case an ACK frame is received
acknowleging any ECT sent packet.



## Proof of Source Address Ownership {#address-validation}

Transport protocols commonly spend a round trip checking that a client owns the
Expand Down