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
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
100 changes: 53 additions & 47 deletions draft-ietf-quic-transport.md
Expand Up @@ -1455,16 +1455,16 @@ 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
Copy link
Contributor

Choose a reason for hiding this comment

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

continues

marked packets then continous verification is applied. This is detect any cases
marked packets then continous verification is applied. This is to detect any cases
when ECN field is bleached, that is, 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
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggestion: "For each received ACK_ECN frame, the total number of newly acknowledged packets can be compared to the total increase in ECN counters. If the increase in ECN counters is larger, then an ECN failure has occurred and ECN should be disabled."

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, except that larger needs to be less in this case.

updated by adding those outstanding packets that was acknowledged 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.
of the ECN counters. If ACKed packets are larger than the sum, then 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}
Expand Down Expand Up @@ -1835,59 +1835,65 @@ There are two unique cases:

1. ECN capability was verified

2. ECN capability had previously failed
2. ECN capability was disabled

Case 1 can have two outcomes, either that ECN capability will continue, or that
ECN capability is turned off. Case 2 means that ECN capability can be enabled
after a connection even though it was disabled at the initial connection
setup. The two cases are described more in detail below.
after a connection migration even though it was disabled earlier. The two cases
are described more in detail below.


#### Case 1, ECN capability was verified

IP packets continue to be transmitted with the applicable ECT code point. One
possible issue is that ECN does not work along the new path, either because of
ECN bleaching in the network or because of OS network stack issues. This error
case will manifest itself in that the ECT and CE counters do not increase as
much as they should. The sender detects this and consequently ECT marking is
stopped and Not-ECT is used instead. The endpoint performing the check must
store from which packet number the connection migration happened. This to
ensure that packets after the connection migration occured are included in the
ACK_ECN frame, and thus the new path is also measured rather than only the
old. The paths cabability can be verified when at least one packet sent after
connection migration has been acked.
IP packets continue to be transmitted with the applicable ECT code
point. One possible issue is that ECN does not work along the new path,
either because of ECN bleaching in the network or because of OS network
stack issues. This error case will manifest itself in that the ECT and
CE counters do not increase as much as they should, or not at all. The
sender detects this and consequently ECT marking is stopped and Not-ECT
is used instead. The endpoint performing the check must store from which
packet number the connection migration happened. This to ensure that
packets after the connection migration occured are included in the
ACK_ECN frame, and thus the new path is also measured rather than only
the old. The paths cabability can be verified when at least one packet
sent after connection migration has been acked.


#### Case 2, ECN capability had previously failed

The applicable ECT codepoint is set in the IP packets sent on the new path
during and after the path migration, and then the ECN capability check as
defined in {{ecn-capability-check}} is performed. However, some special
considerations are needed due to the in mid connection check. The packet number
for the first packet sent after the connection migration occured is stored. For
the latest received ACK_ECN the ECT(0), ECT(1) and ECN-CE counters (ECN
counters) need to be stored for later comparision. If no ACK_ECN has ever been
received, then the all of the ECN counters are assumed to be zero. The ECN
counters may be non-zero if the connection had a ECN capable path for a period
that then was migrated or stopped working.

If an ACK_ECN is received after a connection migration, but it contains
acknowledgements for packets prior to the migration, then the stored ECN
counters are updated with the values in the received ACK_ECN, also the value of
the Largest Acknowledged, and a list of outstanding packet prior in sequence
number to Largest Acknowledged are stored, but no further back then connection
migration. If an ACK_ECN acknowleging only packets sent after connection
migration is received, then then comparision is performed. First the number of
ACKed packets are computed, by calculating how many packets with sequence number
larger than Largest Acknowledged have been acknowledged, to that is added the
number of packets of the outstanding that also have been acknolwedged. If the
value of ACKed packets are non-zero, then the changes of the ECN counters
between the stored and newely received are compared. If the sum of changes
across the ECT(0), ECT(1) and ECN-CE are equal or larger than the number of
ACKed packets, then ECN is confirmed to work. If an ACK frame is received, which
acknowledge a non-zero number of packets that have a PN higher than the point of
migration, it is concluded that ECN is not functional on the new path, and the
ECT marking of any sent packets are stopped, and the packets will be marked as
Non-ECT (00).
The applicable ECT codepoint is set in the IP packets sent on the new
path during and after the path migration, and then the ECN capability
check as defined in {{ecn-capability-check}} is performed. However, some
special considerations are needed due to the in mid connection check.
The packet number for the first packet sent after the connection
migration occured is stored. For the latest received ACK_ECN the ECT(0),
ECT(1) and ECN-CE counters (ECN counters) need to be stored for later
comparision. If no ACK_ECN has ever been received, then the all of the
ECN counters are assumed to be zero. The ECN counters may be non-zero if
the connection had a ECN capable path for a period that then was
migrated or stopped working.


If an ACK_ECN is received after a connection migration, but it contains
acknowledgements for packets prior to the migration, then the stored ECN
counters are updated with the values in the received ACK_ECN, also the
value of the Largest Acknowledged, and a list of outstanding packet
prior in sequence number to Largest Acknowledged are stored, but no
further back then connection migration. If an ACK_ECN acknowleging only
packets sent after connection migration is received, then then
comparision is performed. First the number of ACKed packets are
computed, by calculating how many packets with sequence number larger
than Largest Acknowledged have been acknowledged, to that is added the
number of packets of the outstanding that also have been acknolwedged.
If the value of ACKed packets are non-zero, then the changes of the ECN
counters between the stored and newely received are compared. If the sum
of changes across the ECT(0), ECT(1) and ECN-CE are equal or larger than
the number of ACKed packets, then ECN is confirmed to work. If an ACK
frame is received, which acknowledge a non-zero number of packets that
have a PN higher than the point of migration, it is concluded that ECN
is not functional on the new path, and the ECT marking of any sent
packets are stopped, and the packets will be marked as Non-ECT (00).



### Loss Detection and Congestion Control {#migration-cc}
Expand Down