rfc9768v9.txt   rfc9768.txt 
skipping to change at line 156 skipping to change at line 156
1. Introduction 1. Introduction
Explicit Congestion Notification (ECN) [RFC3168] is a mechanism by Explicit Congestion Notification (ECN) [RFC3168] is a mechanism by
which network nodes can mark IP packets instead of dropping them to which network nodes can mark IP packets instead of dropping them to
indicate incipient congestion to the endpoints. Receivers with an indicate incipient congestion to the endpoints. Receivers with an
ECN-capable transport protocol feed back this information to the ECN-capable transport protocol feed back this information to the
sender. In RFC 3168, ECN was specified for TCP in such a way that sender. In RFC 3168, ECN was specified for TCP in such a way that
only one feedback signal could be transmitted per Round-Trip Time only one feedback signal could be transmitted per Round-Trip Time
(RTT). This is sufficient for congestion control schemes like Reno (RTT). This is sufficient for congestion control schemes like Reno
[RFC6582] and CUBIC [RFC9438], as those schemes reduce their [RFC5681] and CUBIC [RFC9438], as those schemes reduce their
congestion window by a fixed factor if congestion occurs within an congestion window by a fixed factor if congestion occurs within an
RTT independent of the number of received congestion markings. More RTT independent of the number of received congestion markings. More
recently defined mechanisms like Congestion Exposure (ConEx recently defined mechanisms like Congestion Exposure (ConEx
[RFC7713]), DCTCP [RFC8257], and L4S [RFC9330] need to know when more [RFC7713]), DCTCP [RFC8257], and L4S [RFC9330] need to know when more
than one marking is received in one RTT, which is information that than one marking is received in one RTT, which is information that
cannot be provided by the feedback scheme as specified in [RFC3168]. cannot be provided by the feedback scheme as specified in [RFC3168].
This document specifies an update to the ECN feedback scheme of RFC This document specifies an update to the ECN feedback scheme of RFC
3168 that provides more accurate information and could be used by 3168 that provides more accurate information and could be used by
these and potentially other future TCP extensions, while still also these and potentially other future TCP extensions, while still also
supporting the pre-existing TCP congestion controllers that use just supporting the pre-existing TCP congestion controllers that use just
skipping to change at line 1199 skipping to change at line 1199
Both parts of each of these conditions are equally important. For Both parts of each of these conditions are equally important. For
instance, even if AccECN negotiation has been successful, the ACE instance, even if AccECN negotiation has been successful, the ACE
field is not defined on any segments with SYN=1 (e.g., a field is not defined on any segments with SYN=1 (e.g., a
retransmission of an unacknowledged SYN/ACK, or when both ends send retransmission of an unacknowledged SYN/ACK, or when both ends send
SYN/ACKs after AccECN support has been successfully negotiated during SYN/ACKs after AccECN support has been successfully negotiated during
a simultaneous open). a simultaneous open).
3.2.2.1. ACE Field on the ACK of the SYN/ACK 3.2.2.1. ACE Field on the ACK of the SYN/ACK
A TCP Client (A) in AccECN mode MUST feed back which of the 4 If the TCP Client (A) in AccECN mode uses a pure ACK with no SACK
possible values of the IP-ECN field was on the SYN/ACK when writing blocks to acknowledge the SYN/ACK, it MUST use the binary encoding in
the ACE field of a pure ACK with no SACK blocks by using the binary Table 3 when writing the ACE field (which is the same as the encoding
encoding in Table 3 (which is the same as that used on the SYN/ACK in used on the SYN/ACK in Table 2). This feeds back which of the 4
Table 2). This shall be called the "handshake encoding" of the ACE possible values of the IP-ECN field was on the SYN/ACK. This shall
field, and it is the only exception to the rule that the ACE field be called the "handshake encoding" of the ACE field, and it is the
carries the 3 least significant bits of the r.cep counter on packets only exception to the rule that the ACE field carries the 3 least
with SYN=0. significant bits of the r.cep counter on packets with SYN=0.
Normally, a TCP Client acknowledges a SYN/ACK with an ACK that Normally, a TCP Client acknowledges a SYN/ACK with an ACK that
satisfies the above conditions anyway (SYN=0, no data, no SACK satisfies the above conditions anyway (SYN=0, no data, no SACK
blocks). If an AccECN TCP Client intends to acknowledge the SYN/ACK blocks). If an AccECN TCP Client intends to acknowledge the SYN/ACK
with a packet that does not satisfy these conditions (e.g., it has with a packet that does not satisfy these conditions (e.g., it has
data to include on the ACK), it SHOULD first send a pure ACK that data to include on the ACK), it SHOULD first send a pure ACK that
does satisfy these conditions (see Section 5.2), so that it can feed does satisfy these conditions (see Section 5.2), so that it can feed
back which of the four values of the IP-ECN field arrived on the SYN/ back which of the four values of the IP-ECN field arrived on the SYN/
ACK. A valid exception to this "SHOULD" would be where the ACK. A valid exception to this "SHOULD" would be where the
implementation will only be used in an environment where mangling of implementation will only be used in an environment where mangling of
skipping to change at line 2052 skipping to change at line 2052
* the Data Receiver SHOULD include a counter that has continued * the Data Receiver SHOULD include a counter that has continued
to increment on the next scheduled ACK following a change- to increment on the next scheduled ACK following a change-
triggered AccECN TCP Option; triggered AccECN TCP Option;
* while the same counter continues to increment, it SHOULD * while the same counter continues to increment, it SHOULD
include the counter every n ACKs as consistently as possible, include the counter every n ACKs as consistently as possible,
where n can be chosen by the implementer; where n can be chosen by the implementer;
* it SHOULD always include an AccECN Option if the r.ceb counter * it SHOULD always include an AccECN Option if the r.ceb counter
is incrementing and it MAY include an AccECN Option if r.ec0b is incrementing and it MAY include an AccECN Option if r.e0b or
or r.ec1b is incrementing; r.e1b is incrementing;
* it SHOULD include each counter at least once for every 2^22 * it SHOULD include each counter at least once for every 2^22
bytes incremented to prevent overflow during continual bytes incremented to prevent overflow during continual
repetition. repetition.
The above rules complement those in Section 3.2.2.5, which determine The above rules complement those in Section 3.2.2.5, which determine
when to generate an ACK irrespective of whether an AccECN TCP Option when to generate an ACK irrespective of whether an AccECN TCP Option
is to be included. is to be included.
The recommended scheme is intended as a simple way to ensure that all The recommended scheme is intended as a simple way to ensure that all
skipping to change at line 2079 skipping to change at line 2079
As an example of the recommended scheme, if ECT(0) is the only As an example of the recommended scheme, if ECT(0) is the only
codepoint that has ever arrived in the IP-ECN field, the Data codepoint that has ever arrived in the IP-ECN field, the Data
Receiver will feed back an AccECN0 TCP Option with only the EE0B Receiver will feed back an AccECN0 TCP Option with only the EE0B
field on every packet that acknowledges new data. However, as soon field on every packet that acknowledges new data. However, as soon
as even one CE-marked packet arrives, on every packet that as even one CE-marked packet arrives, on every packet that
acknowledges new data it will start to include an option with two acknowledges new data it will start to include an option with two
fields, EE0B and ECEB. As a second example, if the first packet to fields, EE0B and ECEB. As a second example, if the first packet to
arrive happens to be CE marked, the Data Receiver will have to arrive happens to be CE marked, the Data Receiver will have to
arbitrarily choose whether to precede the ECEB field with an EE0B arbitrarily choose whether to precede the ECEB field with an EE0B
field or an EE1B field. If it chooses, say, EEB0 but it turns out field or an EE1B field. If it chooses, say, EE0B but it turns out
never to receive ECT(0), it can start sending EE1B and ECEB instead never to receive ECT(0), it can start sending EE1B and ECEB instead
-- it does not have to include the EE0B field if the r.e0b counter -- it does not have to include the EE0B field if the r.e0b counter
never changed during the connection. never changed during the connection.
With the recommended scheme, if the data sending direction switches With the recommended scheme, if the data sending direction switches
during a connection, there can be cases where the AccECN TCP Option during a connection, there can be cases where the AccECN TCP Option
that is meant to feed back the counter values at the end of a volley that is meant to feed back the counter values at the end of a volley
in one direction never reaches the other peer due to packet loss. in one direction never reaches the other peer due to packet loss.
ACE feedback ought to be sufficient to fill this gap, given accurate ACE feedback ought to be sufficient to fill this gap, given accurate
feedback becomes moot after data transmission has paused. feedback becomes moot after data transmission has paused.
skipping to change at line 2733 skipping to change at line 2733
[RFC5690] Floyd, S., Arcia, A., Ros, D., and J. Iyengar, "Adding [RFC5690] Floyd, S., Arcia, A., Ros, D., and J. Iyengar, "Adding
Acknowledgement Congestion Control to TCP", RFC 5690, Acknowledgement Congestion Control to TCP", RFC 5690,
DOI 10.17487/RFC5690, February 2010, DOI 10.17487/RFC5690, February 2010,
<https://www.rfc-editor.org/info/rfc5690>. <https://www.rfc-editor.org/info/rfc5690>.
[RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP
Authentication Option", RFC 5925, DOI 10.17487/RFC5925, Authentication Option", RFC 5925, DOI 10.17487/RFC5925,
June 2010, <https://www.rfc-editor.org/info/rfc5925>. June 2010, <https://www.rfc-editor.org/info/rfc5925>.
[RFC6582] Henderson, T., Floyd, S., Gurtov, A., and Y. Nishida, "The
NewReno Modification to TCP's Fast Recovery Algorithm",
RFC 6582, DOI 10.17487/RFC6582, April 2012,
<https://www.rfc-editor.org/info/rfc6582>.
[RFC6679] Westerlund, M., Johansson, I., Perkins, C., O'Hanlon, P., [RFC6679] Westerlund, M., Johansson, I., Perkins, C., O'Hanlon, P.,
and K. Carlberg, "Explicit Congestion Notification (ECN) and K. Carlberg, "Explicit Congestion Notification (ECN)
for RTP over UDP", RFC 6679, DOI 10.17487/RFC6679, August for RTP over UDP", RFC 6679, DOI 10.17487/RFC6679, August
2012, <https://www.rfc-editor.org/info/rfc6679>. 2012, <https://www.rfc-editor.org/info/rfc6679>.
[RFC6994] Touch, J., "Shared Use of Experimental TCP Options", [RFC6994] Touch, J., "Shared Use of Experimental TCP Options",
RFC 6994, DOI 10.17487/RFC6994, August 2013, RFC 6994, DOI 10.17487/RFC6994, August 2013,
<https://www.rfc-editor.org/info/rfc6994>. <https://www.rfc-editor.org/info/rfc6994>.
[RFC7141] Briscoe, B. and J. Manner, "Byte and Packet Congestion [RFC7141] Briscoe, B. and J. Manner, "Byte and Packet Congestion
 End of changes. 5 change blocks. 
17 lines changed or deleted 12 lines changed or added

This html diff was produced by rfcdiff 1.48.