rfc9331.original.xml | rfc9331.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
<!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
<!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
<!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
]> | ]> | |||
<!-- This template is for creating an Internet Draft using xml2rfc, | ||||
which is available here: http://xml.resource.org. --> | ||||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<!-- used by XSLT processors --> | ||||
<!-- For a complete list and description of processing instructions (PIs), | ||||
please see http://xml.resource.org/authoring/README.html. --> | ||||
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ||||
might want to use. | ||||
(Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
<?rfc strict="yes" ?> | ||||
<!-- give errors regarding ID-nits and DTD validation --> | ||||
<!-- control the table of contents (ToC) --> | ||||
<?rfc toc="yes"?> | ||||
<!-- generate a ToC --> | ||||
<?rfc tocdepth="4"?> | ||||
<!-- the number of levels of subsections in ToC. default: 3 --> | ||||
<!-- control references --> | ||||
<?rfc symrefs="yes"?> | ||||
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
<?rfc sortrefs="yes" ?> | ||||
<!-- sort the reference entries alphabetically --> | ||||
<!-- control vertical white space | ||||
(using these PIs as follows is recommended by the RFC Editor) --> | ||||
<?rfc compact="yes" ?> | ||||
<!-- do not start each main section on a new page --> | ||||
<?rfc subcompact="no" ?> | ||||
<!-- keep one blank line between list items --> | ||||
<!-- end of list of popular I-D processing instructions --> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="exp" docName="draft-ie | ||||
tf-tsvwg-ecn-l4s-id-29" ipr="trust200902" obsoletes="" updates="" submissionType | ||||
="IETF" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="tr | ||||
ue" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 3.14.1 --> | ||||
<!-- category values: std, bcp, info, exp, and historic | ||||
ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902 | ||||
, | ||||
or pre5378Trust200902 | ||||
you can add the attributes updates="NNNN" and obsoletes="NNNN" | ||||
they will automatically be output with "(if approved)" --> | ||||
<!-- ***** FRONT MATTER ***** --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category=" exp" consensus="true" docName="draft-ietf-tsvwg-ecn-l4s-id-29" number="9331" ipr ="trust200902" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth= "4" symRefs="true" sortRefs="true" version="3"> | |||
<front> | <front> | |||
<!-- The abbreviated title is used in the page header - it is only necessary | <title abbrev="ECN Protocol for L4S"> | |||
if the | The Explicit Congestion Notification (ECN) Protocol for | |||
full title is longer than 39 characters --> | Low Latency, Low Loss, and Scalable Throughput (L4S)</title> | |||
<seriesInfo name="RFC" value="9331"/> | ||||
<title abbrev="L4S ECN Protocol for V Low Queuing Delay">Explicit | ||||
Congestion Notification (ECN) Protocol for Very Low Queuing Delay | ||||
(L4S)</title> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-ecn-l4s-id-29"/> | ||||
<author fullname="Koen De Schepper" initials="K." surname="De Schepper"> | <author fullname="Koen De Schepper" initials="K." surname="De Schepper"> | |||
<organization>Nokia Bell Labs</organization> | <organization>Nokia Bell Labs</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street/> | <street/> | |||
<city>Antwerp</city> | <city>Antwerp</city> | |||
<country>Belgium</country> | <country>Belgium</country> | |||
</postal> | </postal> | |||
<email>koen.de_schepper@nokia.com</email> | <email>koen.de_schepper@nokia.com</email> | |||
<uri>https://www.bell-labs.com/about/researcher-profiles/koende_schepper /</uri> | <uri>https://www.bell-labs.com/about/researcher-profiles/koende_schepper /</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Bob Briscoe" initials="B." role="editor" surname="Briscoe" > | <author fullname="Bob Briscoe" initials="B." surname="Briscoe" role="editor" > | |||
<organization>Independent</organization> | <organization>Independent</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street/> | <street/> | |||
<country>UK</country> | <country>United Kingdom</country> | |||
</postal> | </postal> | |||
<email>ietf@bobbriscoe.net</email> | <email>ietf@bobbriscoe.net</email> | |||
<uri>https://bobbriscoe.net/</uri> | <uri>https://bobbriscoe.net/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<!-- | <date year="2023" month="January" /> | |||
<author fullname="Olga Bondarenko" initials="O." surname="Bondarenko"> | <area>tsv</area> | |||
<organization>Simula Research Lab</organization> | <workgroup>tsvwg</workgroup> | |||
<keyword>Performance</keyword> | ||||
<address> | <keyword>Queuing Delay</keyword> | |||
<postal> | <keyword>One Way Delay</keyword> | |||
<street/> | <keyword>Round-Trip Time</keyword> | |||
<keyword>RTT</keyword> | ||||
<city>Lysaker</city> | <keyword>Jitter</keyword> | |||
<keyword>Congestion Control</keyword> | ||||
<country>Norway</country> | <keyword>Congestion Avoidance</keyword> | |||
</postal> | <keyword>Quality of Service</keyword> | |||
<keyword>QoS</keyword> | ||||
<email>olgabnd@gmail.com</email> | <keyword>Quality of Experience</keyword> | |||
<keyword>QoE</keyword> | ||||
<uri>https://www.simula.no/people/olgabo</uri> | <keyword>Active Queue Management</keyword> | |||
</address> | <keyword>AQM</keyword> | |||
</author> | <keyword>Explicit Congestion Notification</keyword> | |||
<keyword>ECN</keyword> | ||||
<!-- | <keyword>Burstiness</keyword> | |||
<author fullname="Ing-jyh Tsang" initials="I." surname="Tsang"> | ||||
<organization>Nokia Bell Labs</organization> | ||||
<address> | ||||
<postal> | ||||
<street/> | ||||
<city>Antwerp</city> | ||||
<country>Belgium</country> | ||||
</postal> | ||||
<email>ing-jyh.tsang@nokia.com</email> | ||||
</address> | ||||
</author> | ||||
<date year=""/> | ||||
<area>Transport</area> | ||||
<workgroup>Transport Services (tsv)</workgroup> | ||||
<keyword>Internet-Draft</keyword> | ||||
<keyword>I-D</keyword> | ||||
<abstract> | <abstract> | |||
<t>This specification defines the protocol to be used for a new network | <t>This specification defines the protocol to be used for a new network | |||
service called low latency, low loss and scalable throughput (L4S). L4S | service called Low Latency, Low Loss, and Scalable throughput (L4S). L4S | |||
uses an Explicit Congestion Notification (ECN) scheme at the IP layer | uses an Explicit Congestion Notification (ECN) scheme at the IP layer | |||
that is similar to the original (or 'Classic') ECN approach, except as | that is similar to the original (or 'Classic') ECN approach, except as | |||
specified within. L4S uses 'scalable' congestion control, which induces | specified within. L4S uses 'Scalable' congestion control, which induces | |||
much more frequent control signals from the network and it responds to | much more frequent control signals from the network, and it responds to | |||
them with much more fine-grained adjustments, so that very low | them with much more fine-grained adjustments so that very low | |||
(typically sub-millisecond on average) and consistently low queuing | (typically sub-millisecond on average) and consistently low queuing | |||
delay becomes possible for L4S traffic without compromising link | delay becomes possible for L4S traffic without compromising link | |||
utilization. Thus even capacity-seeking (TCP-like) traffic can have high | utilization. Thus, even capacity-seeking (TCP-like) traffic can have high | |||
bandwidth and very low delay at the same time, even during periods of | bandwidth and very low delay at the same time, even during periods of | |||
high traffic load.</t> | high traffic load.</t> | |||
<t>The L4S identifier defined in this document distinguishes L4S from | <t>The L4S identifier defined in this document distinguishes L4S from | |||
'Classic' (e.g. TCP-Reno-friendly) traffic. Then, network | 'Classic' (e.g., TCP-Reno-friendly) traffic. Then, network | |||
bottlenecks can be incrementally modified to distinguish and isolate | bottlenecks can be incrementally modified to distinguish and isolate | |||
existing traffic that still follows the Classic behaviour, to prevent it | existing traffic that still follows the Classic behaviour, to prevent it | |||
degrading the low queuing delay and low loss of L4S traffic. This | from degrading the low queuing delay and low loss of L4S traffic. This | |||
experimental track specification defines the rules that L4S transports | Experimental specification defines the rules that L4S transports | |||
and network elements need to follow, with the intention that L4S flows | and network elements need to follow, with the intention that L4S flows | |||
neither harm each other's performance nor that of Classic traffic. It | neither harm each other's performance nor that of Classic traffic. It | |||
also suggests open questions to be investigated during experimentation. | also suggests open questions to be investigated during experimentation. | |||
Examples of new active queue management (AQM) marking algorithms and | Examples of new Active Queue Management (AQM) marking algorithms and | |||
examples of new transports (whether TCP-like or real-time) are specified | new transports (whether TCP-like or real time) are specified | |||
separately.</t> | separately.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="l4sid_intro" numbered="true" toc="default"> | <section anchor="l4sid_intro" numbered="true" toc="default"> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t>This experimental track specification defines the protocol to be used | <t>This Experimental specification defines the protocol to be used | |||
for a new network service called low latency, low loss and scalable | for a new network service called Low Latency, Low Loss, and Scalable | |||
throughput (L4S). L4S uses an Explicit Congestion Notification (ECN) | throughput (L4S). L4S uses an Explicit Congestion Notification (ECN) | |||
scheme at the IP layer with the same set of codepoint transitions as the | scheme at the IP layer with the same set of codepoint transitions as the | |||
original (or 'Classic') Explicit Congestion Notification (ECN <xref target ="RFC3168" format="default"/>). RFC 3168 required an ECN mark to be equivalent | original (or 'Classic') ECN <xref target="RFC3168" format="default"/>. <xr ef target="RFC3168"/> requires an ECN mark to be equivalent | |||
to a drop, both when applied in the network and when responded to by a | to a drop, both when applied in the network and when responded to by a | |||
transport. Unlike Classic ECN marking: i) the network applies L4S | transport. Unlike Classic ECN marking, i) the network applies L4S | |||
marking more immediately and more frequently than drop; and ii) the | marking more immediately and more frequently than drop and ii) the | |||
transport response to each mark is reduced and smoothed relative to that | transport response to each mark is reduced and smoothed relative to that | |||
for drop. The two changes counterbalance each other so that the | for drop. The two changes counterbalance each other so that the | |||
throughput of an L4S flow will be roughly the same as a comparable | throughput of an L4S flow will be roughly the same as a comparable | |||
non-L4S flow under the same conditions. Nonetheless, the much more | non-L4S flow under the same conditions. Nonetheless, the much more | |||
frequent ECN control signals and the finer responses to these signals | frequent ECN control signals and the finer responses to these signals | |||
result in very low queuing delay without compromising link utilization, | result in very low queuing delay without compromising link utilization, | |||
and this low delay can be maintained during high load. For instance, | and this low delay can be maintained during high load. For instance, | |||
queuing delay under heavy and highly varying load with the example | queuing delay under heavy and highly varying load with the example | |||
DCTCP/DualQ solution described below on a DSL or Ethernet link is | DCTCP/DualQ solution described below on a DSL or Ethernet link is | |||
sub-millisecond on average and roughly 1 to 2 milliseconds at the 99th | sub-millisecond on average and roughly 1 to 2 milliseconds at the 99th | |||
percentile without losing link utilization <xref target="DualPI2Linux" for | percentile without losing link utilization <xref target="L4Seval22" format | |||
mat="default"/>, <xref target="DCttH19" format="default"/>. Note that the queuin | ="default"/> <xref target="DualPI2Linux" format="default"/>. | |||
g | Note that the queuing | |||
delay while waiting to acquire a shared medium such as wireless has to | delay while waiting to acquire a shared medium such as wireless has to | |||
be added to the above. It is a different issue that needs to be | be added to the above. It is a different issue that needs to be | |||
addressed, but separately (see section 6.3 of the L4S | addressed, but separately (see Section <xref target="RFC9330" section="6.3 | |||
architecture <xref target="I-D.ietf-tsvwg-l4s-arch" format="default"/>).</ | " | |||
t> | sectionFormat="bare"/> of the L4S | |||
<t>L4S relies on 'scalable' congestion controls for these delay | architecture <xref target="RFC9330" format="default"/>).</t> | |||
<t>L4S relies on 'Scalable' congestion controls for these delay | ||||
properties and for preserving low delay as flow rate scales, hence the | properties and for preserving low delay as flow rate scales, hence the | |||
name. The congestion control used in Data Center TCP (DCTCP) is an | name. The congestion control used in Data Center TCP (DCTCP) is an | |||
example of a scalable congestion control, but DCTCP is applicable solely | example of a Scalable congestion control, but DCTCP is applicable solely | |||
to controlled environments like data centres <xref target="RFC8257" format | to controlled environments like data centres <xref target="RFC8257" format | |||
="default"/>, because it is too aggressive to co-exist with | ="default"/>, because it is too aggressive to coexist with | |||
existing TCP-Reno-friendly traffic. The DualQ Coupled AQM, which is | existing TCP-Reno-friendly traffic. Dual-Queue Coupled AQM, which is | |||
defined in a complementary experimental specification <xref target="I-D.ie | defined in a complementary Experimental specification <xref target="RFC933 | |||
tf-tsvwg-aqm-dualq-coupled" format="default"/>, is an AQM framework that | 2" format="default"/>, is an AQM framework that | |||
enables scalable congestion controls derived from DCTCP to co-exist with | enables Scalable congestion controls derived from DCTCP to coexist with | |||
existing traffic, each getting roughly the same flow rate when they | existing traffic, each getting roughly the same flow rate when they | |||
compete under similar conditions. Note that a scalable congestion | compete under similar conditions. Note that a Scalable congestion | |||
control is still not safe to deploy on the Internet unless it satisfies | control is still not safe to deploy on the Internet unless it satisfies | |||
the requirements listed in <xref target="l4sid_transport_req" format="defa ult"/>.</t> | the requirements listed in <xref target="l4sid_transport_req" format="defa ult"/>.</t> | |||
<t>L4S is not only for elastic (TCP-like) traffic - there are scalable | ||||
congestion controls for real-time media, such as the L4S variant <xref tar | <t>L4S is not only for elastic (TCP-like) traffic -- there are Scalable | |||
get="SCReAM-L4S" format="default"/> of the SCReAM <xref target="RFC8298" format= | congestion controls for real-time media, such as the L4S variant <xref tar | |||
"default"/> | get="SCReAM-L4S" format="default"/> of the SCReAM <xref target="RFC8298" format= | |||
real-time media congestion avoidance technique (RMCAT). The factor that | "default"/> RTP Media Congestion Avoidance Techniques (RMCAT). The factor that | |||
distinguishes L4S from Classic traffic is its behaviour in response to | distinguishes L4S from Classic traffic is its behaviour in response to | |||
congestion. The transport wire protocol, e.g. TCP, QUIC, SCTP, | congestion. | |||
DCCP, RTP/RTCP, is orthogonal (and therefore not suitable for | The transport wire protocol, e.g., TCP, QUIC, the Stream Control Transmiss | |||
ion Protocol (SCTP), | ||||
the Datagram Congestion Control Protocol (DCCP), or RTP/RTCP, is orthogona | ||||
l (and therefore not suitable for | ||||
distinguishing L4S from Classic packets).</t> | distinguishing L4S from Classic packets).</t> | |||
<t>The L4S identifier defined in this document is the key piece that | <t>The L4S identifier defined in this document is the key piece that | |||
distinguishes L4S from 'Classic' (e.g. Reno-friendly) traffic. | distinguishes L4S from 'Classic' (e.g., Reno-friendly) traffic. | |||
Then, network bottlenecks can be incrementally modified to distinguish | Then, network bottlenecks can be incrementally modified to distinguish | |||
and isolate existing Classic traffic from L4S traffic, to prevent the | and isolate existing Classic traffic from L4S traffic, to prevent the | |||
former from degrading the very low queuing delay and loss of the new | former from degrading the very low queuing delay and loss of the new | |||
scalable transports, without harming Classic performance at these | Scalable transports, without harming Classic performance at these | |||
bottlenecks. Although both sender and network deployment are required | bottlenecks. Although both sender and network deployment are required | |||
before any benefit, initial implementations of the separate parts of the | before any benefit, initial implementations of the separate parts of the | |||
system have been motivated by the potential performance benefits.</t> | system have been motivated by the potential performance benefits.</t> | |||
<section anchor="l4sid_problem" numbered="true" toc="default"> | <section anchor="l4sid_problem" numbered="true" toc="default"> | |||
<name>Latency, Loss and Scaling Problems</name> | <name>Latency, Loss, and Scaling Problems</name> | |||
<t>Latency is becoming the critical performance factor for many | <t>Latency is becoming the critical performance factor for many | |||
(most?) Internet applications, e.g. interactive web, web | (perhaps most) Internet applications, e.g., interactive web, web | |||
services, voice, conversational video, interactive video, interactive | services, voice, conversational video, interactive video, interactive | |||
remote presence, instant messaging, online gaming, remote desktop, | remote presence, instant messaging, online gaming, remote desktop, | |||
cloud-based applications & services, and remote control of | cloud-based applications & services, and remote control of | |||
machinery and industrial processes. In many parts of the world, | machinery and industrial processes. In many parts of the world, | |||
further increases in access network bit rate offer diminishing returns | further increases in access network bitrate offer diminishing returns | |||
<xref target="Dukkipati06" format="default"/>, whereas latency is still a multi-faceted | <xref target="Dukkipati06" format="default"/>, whereas latency is still a multi-faceted | |||
problem. As a result, much has been done to reduce propagation time by | problem. As a result, much has been done to reduce propagation time by | |||
placing caches or servers closer to users. However, queuing remains a | placing caches or servers closer to users. However, queuing remains a | |||
major, albeit intermittent, component of latency.</t> | major, albeit intermittent, component of latency.</t> | |||
<t>The Diffserv architecture provides Expedited Forwarding <xref target= "RFC3246" format="default"/>, so that low latency traffic can jump the queue of | <t>The Diffserv architecture provides Expedited Forwarding (EF) <xref ta rget="RFC3246" format="default"/> so that low-latency traffic can jump the queue of | |||
other traffic. If growth in latency-sensitive applications continues, | other traffic. If growth in latency-sensitive applications continues, | |||
periods with solely latency-sensitive traffic will become increasingly | periods with solely latency-sensitive traffic will become increasingly | |||
common on links where traffic aggregation is low. During these | common on links where traffic aggregation is low. During these | |||
periods, if all the traffic were marked for the same treatment, | periods, if all the traffic were marked for the same treatment, | |||
Diffserv would make no difference. The links with low aggregation also | Diffserv would make no difference. The links with low aggregation also | |||
tend to become the path bottleneck under load, for instance, the | tend to become the path bottleneck under load, for instance, the | |||
access links dedicated to individual sites (homes, small enterprises | access links dedicated to individual sites (homes, small enterprises, | |||
or mobile devices). So, instead of differentiation, it becomes | or mobile devices). So, instead of differentiation, it becomes | |||
imperative to remove the underlying causes of any unnecessary | imperative to remove the underlying causes of any unnecessary | |||
delay.</t> | delay.</t> | |||
<t>The Bufferbloat project has shown that excessively-large buffering | <t>The Bufferbloat project has shown that excessively large buffering | |||
('bufferbloat') has been introducing significantly more delay than the | ('bufferbloat') has been introducing significantly more delay than the | |||
underlying propagation time <xref target="Bufferbloat" format="default"/ >. These delays | underlying propagation time <xref target="Bufferbloat" format="default"/ >. These delays | |||
appear only intermittently -- only when a capacity-seeking | appear only intermittently -- only when a capacity-seeking | |||
(e.g. TCP) flow is long enough for the queue to fill the buffer, | (e.g., TCP) flow is long enough for the queue to fill the buffer, | |||
causing every packet in other flows sharing the buffer to have to work | causing every packet in other flows sharing the buffer to have to work | |||
its way through the queue.</t> | its way through the queue.</t> | |||
<t>Active queue management (AQM) was originally developed to solve | ||||
<t>AQM was originally developed to solve | ||||
this problem (and others). Unlike Diffserv, which gives low latency to | this problem (and others). Unlike Diffserv, which gives low latency to | |||
some traffic at the expense of others, AQM controls latency for <em>all< /em> traffic in a class. In general, AQM methods | some traffic at the expense of others, AQM controls latency for <em>all< /em> traffic in a class. In general, AQM methods | |||
introduce an increasing level of discard from the buffer, the longer | introduce an increasing level of discard from the buffer, the longer | |||
the queue persists above a shallow threshold. This gives sufficient | the queue persists above a shallow threshold. | |||
signals to capacity-seeking (aka. greedy) flows to keep the | This gives sufficient | |||
buffer empty for its intended purpose: absorbing bursts. However, | signals to capacity-seeking (a.k.a. greedy) flows to keep the | |||
RED <xref target="RFC2309" format="default"/> and other algorithms from | buffer empty for its intended purpose: absorbing bursts. | |||
the 1990s | However, Random Early Detection (RED) and other algorithms from the 1990s | |||
were sensitive to their configuration and hard to set correctly. So, | were sensitive to their configuration and hard to set correctly <xref ta | |||
rget="RFC7567" format="default"/>. So | ||||
this form of AQM was not widely deployed.</t> | this form of AQM was not widely deployed.</t> | |||
<t>More recent state-of-the-art AQM methods, such | <t>More recent state-of-the-art AQM methods, such | |||
as FQ-CoDel <xref target="RFC8290" format="default"/>, PIE <xref target= "RFC8033" format="default"/> or Adaptive RED <xref target="ARED01" format="defau lt"/>, are | as Flow Queue CoDel <xref target="RFC8290" format="default"/>, Proportio nal Integral controller Enhanced (PIE) <xref target="RFC8033" format="default"/> , or Adaptive RED <xref target="ARED01" format="default"/>, are | |||
easier to configure, because they define the queuing threshold in time | easier to configure, because they define the queuing threshold in time | |||
not bytes, so configuration is invariant whatever the link rate. | not bytes, so configuration is invariant whatever the link rate. | |||
However, the sawtoothing window of a Classic congestion control | However, the sawtoothing window of a Classic congestion control | |||
creates a dilemma for the operator: i) either configure a shallow AQM | creates a dilemma for the operator: either i) configure a shallow AQM | |||
operating point, so the tips of the sawteeth cause minimal queue | operating point so the tips of the sawteeth cause minimal queue | |||
delay, but the troughs underutilize the link; or ii) configure the | delay, but then the troughs underutilize the link, or ii) configure the | |||
operating point deeper into the buffer, so the troughs utilize the | operating point deeper into the buffer so the troughs utilize the | |||
link better, but then the tips cause more delay variation. Even with a | link better, but then the tips cause more delay variation. Even with a | |||
perfectly tuned AQM, the additional queuing delay at the tips of the | perfectly tuned AQM, the additional queuing delay at the tips of the | |||
sawteeth will be of the same order as the underlying base round trip | sawteeth will be of the same order as the underlying base round-trip | |||
time (RTT), thereby roughly doubling the total round-trip time.</t> | time (RTT), thereby roughly doubling the total RTT.</t> | |||
<t>If a sender's own behaviour is introducing queuing delay variation, | <t>If a sender's own behaviour is introducing queuing delay variation, | |||
no AQM in the network can 'un-vary' the delay without significantly | no AQM in the network can 'un-vary' the delay without significantly | |||
compromising link utilization. Even flow-queuing (e.g. <xref target="RFC 8290" format="default"/>), which isolates one flow from another, cannot | compromising link utilization. Even flow queuing (e.g., <xref target="RF C8290" format="default"/>), which isolates one flow from another, cannot | |||
isolate a flow from the delay variations it inflicts on itself. | isolate a flow from the delay variations it inflicts on itself. | |||
Therefore, those applications that need to seek out high bandwidth but | Therefore, those applications that need to seek out high bandwidth but | |||
also need low latency will have to migrate to scalable congestion | also need low latency will have to migrate to Scalable congestion | |||
control, which uses much smaller sawtooth variations.</t> | control, which uses much smaller sawtooth variations.</t> | |||
<t>Altering host behaviour is not enough on its own though. Even if | <t>Altering host behaviour is not enough on its own though. Even if | |||
hosts adopt low latency scalable congestion controls, they need to be | hosts adopt low-latency Scalable congestion controls, they need to be | |||
isolated from the large queue variations induced by existing Classic | isolated from the large queue variations induced by existing Classic | |||
congestion controls. L4S AQMs provide that latency isolation in the | congestion controls. L4S AQMs provide that latency isolation in the | |||
network and the L4S identifier enables the AQMs to distinguish the two | network, and the L4S identifier enables the AQMs to distinguish the two | |||
types of packet that need to be isolated: L4S and Classic. L4S | types of packets that need to be isolated: L4S and Classic. L4S | |||
isolation can be achieved with a queue per flow (e.g. <xref target="RFC8 | isolation can be achieved with a queue per flow (e.g., <xref target="RFC | |||
290" format="default"/>) but a DualQ <xref target="I-D.ietf-tsvwg-aqm-dualq-coup | 8290" format="default"/>), but a DualQ <xref target="RFC9332" format="default"/> | |||
led" format="default"/> is sufficient, and | is sufficient and | |||
actually gives better tail latency <xref target="DCttH19" format="defaul | actually gives better tail latency <xref target="DCttH19" format="defaul | |||
t"/>. Both | t"/>. Both | |||
approaches are addressed in this document.</t> | approaches are addressed in this document.</t> | |||
<t>The DualQ solution was developed to make very low latency available | <t>The DualQ solution was developed to make very low latency available | |||
without requiring per-flow queues at every bottleneck. This was useful | without requiring per-flow queues at every bottleneck. This was useful | |||
because per-flow-queuing (FQ) has well-known downsides - not least the | because per-flow queuing (FQ) has well-known downsides -- not least the | |||
need to inspect transport layer headers in the network, which makes it | need to inspect transport-layer headers in the network, which makes it | |||
incompatible with privacy approaches such as IPSec VPN tunnels, and | incompatible with privacy approaches such as IPsec Virtual Private Netwo | |||
incompatible with link layer queue management, where transport layer | rk (VPN) tunnels and | |||
headers can be hidden, e.g. 5G.</t> | incompatible with link-layer queue management, where transport-layer | |||
headers can be hidden, e.g., 5G.</t> | ||||
<t>Latency is not the only concern addressed by L4S. It was known when | <t>Latency is not the only concern addressed by L4S. It was known when | |||
TCP congestion avoidance was first developed that it would not scale | TCP congestion avoidance was first developed that it would not scale | |||
to high bandwidth-delay products (footnote 6 of Jacobson and | to high bandwidth-delay products (see footnote 6 of Jacobson and | |||
Karels <xref target="TCP-CA" format="default"/>). Given regular broadban | Karels <xref target="TCP-CA" format="default"/>). | |||
d | Given that Reno congestion control is already beyond its scaling range a | |||
bit-rates over WAN distances are already <xref target="RFC3649" format=" | t | |||
default"/> | regular broadband bitrates over WAN distances <xref target="RFC3649" for | |||
beyond the scaling range of Reno congestion control, 'less unscalable' | mat="default"/>, 'less unscalable' | |||
Cubic <xref target="RFC8312" format="default"/> and Compound <xref targe | CUBIC <xref target="RFC8312" format="default"/> and Compound <xref targe | |||
t="I-D.sridharan-tcpm-ctcp" format="default"/> variants of TCP have been | t="I-D.sridharan-tcpm-ctcp" format="default"/> variants of TCP have been | |||
successfully deployed. However, these are now approaching their | successfully deployed. However, these are now approaching their | |||
scaling limits. Unfortunately, fully scalable congestion controls such | scaling limits. Unfortunately, fully Scalable congestion controls such | |||
as DCTCP <xref target="RFC8257" format="default"/> outcompete Classic EC | as DCTCP <xref target="RFC8257" format="default"/> outcompete Classic EC | |||
N | N | |||
congestion controls sharing the same queue, which is why they have | congestion controls sharing the same queue, which is why they have | |||
been confined to private data centres or research testbeds.</t> | been confined to private data centres or research testbeds.</t> | |||
<t>It turns out that these scalable congestion control algorithms that | <t>It turns out that these Scalable congestion control algorithms that | |||
solve the latency problem can also solve the scalability problem of | solve the latency problem can also solve the scalability problem of | |||
Classic congestion controls. The finer sawteeth in the congestion | Classic congestion controls. The finer sawteeth in the congestion | |||
window have low amplitude, so they cause very little queuing delay | window (cwnd) have low amplitude, so they cause very little queuing dela | |||
variation and the average time to recover from one congestion signal | y | |||
variation, and the average time to recover from one congestion signal | ||||
to the next (the average duration of each sawtooth) remains invariant, | to the next (the average duration of each sawtooth) remains invariant, | |||
which maintains constant tight control as flow-rate scales. A | which maintains constant tight control as flow rate scales. A | |||
background paper <xref target="DCttH19" format="default"/> gives the ful | background paper <xref target="L4Seval22" format="default"/> gives the f | |||
l | ull | |||
explanation of why the design solves both the latency and the scaling | explanation of why the design solves both the latency and the scaling | |||
problems, both in plain English and in more precise mathematical form. | problems, both in plain English and in more precise mathematical form. | |||
The explanation is summarized without the mathematics in Section 4 of | The explanation is summarized without the mathematics in Section <xref t | |||
the L4S architecture <xref target="I-D.ietf-tsvwg-l4s-arch" format="defa | arget="RFC9330" section="4" | |||
ult"/>.</t> | sectionFormat="bare"/> of | |||
the L4S architecture <xref target="RFC9330" format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="l4sid_Terminology" numbered="true" toc="default"> | <section anchor="l4sid_Terminology" numbered="true" toc="default"> | |||
<name>Terminology</name> | <name>Terminology</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" form | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
at="default"/> when, and only | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
when, they appear in all capitals, as shown here.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
<t>[Note to the RFC Editor (to be removed before publication as an | be interpreted as | |||
RFC): The L4S architecture <xref target="I-D.ietf-tsvwg-l4s-arch" format | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
="default"/> repeats the following definitions, | when, and only when, they appear in all capitals, as shown here. | |||
which should be identical, except in the architecture Classic CC and | </t> | |||
Scalable CC are condensed because they refer to a section later in the | ||||
architecture.]</t> | ||||
<dl newline="false" spacing="normal"> | <dl newline="false" spacing="normal"> | |||
<dt>Classic Congestion Control:</dt> | <dt>Classic Congestion Control:</dt> | |||
<dd>A congestion control | <dd>A congestion control | |||
behaviour that can co-exist with standard Reno <xref target="RFC5681 | behaviour that can coexist with standard Reno <xref target="RFC5681" | |||
" format="default"/> without causing significantly negative impact | format="default"/> without causing significantly negative impact | |||
on its flow rate <xref target="RFC5033" format="default"/>. With Cla | on its flow rate <xref target="RFC5033" format="default"/>. With Cla | |||
ssic | ssic | |||
congestion controls, such as Reno or Cubic, because flow rate has | congestion controls, such as Reno or CUBIC, because flow rate has | |||
scaled since TCP congestion control was first designed in 1988, it | scaled since TCP congestion control was first designed in 1988, it | |||
now takes hundreds of round trips (and growing) to recover after a | now takes hundreds of round trips (and growing) to recover after a | |||
congestion signal (whether a loss or an ECN mark) as shown in the | congestion signal (whether a loss or an ECN mark) as shown in the | |||
examples in section 5.1 of the L4S architecture <xref target="I-D.ie | examples in Section <xref target="RFC9330" section="5.1" | |||
tf-tsvwg-l4s-arch" format="default"/> and in <xref target="RFC3649" format="defa | sectionFormat="bare"/> of the L4S architecture <xref target="RFC9330" format="de | |||
ult"/>. Therefore, control of queuing and utilization | fault"/> and in <xref target="RFC3649" format="default"/>. Therefore, control of | |||
becomes very slack, and the slightest disturbances (e.g. from | queuing and utilization | |||
becomes very slack, and the slightest disturbances (e.g., from | ||||
new flows starting) prevent a high rate from being attained.</dd> | new flows starting) prevent a high rate from being attained.</dd> | |||
<dt>Scalable Congestion Control:</dt> | <dt>Scalable Congestion Control:</dt> | |||
<dd>A congestion control | <dd>A congestion control | |||
where the average time from one congestion signal to the next (the | where the average time from one congestion signal to the next (the | |||
recovery time) remains invariant as the flow rate scales, all | recovery time) remains invariant as flow rate scales, all | |||
other factors being equal. This maintains the same degree of | other factors being equal. This maintains the same degree of | |||
control over queueing and utilization whatever the flow rate, as | control over queuing and utilization whatever the flow rate, as | |||
well as ensuring that high throughput is robust to disturbances. | well as ensuring that high throughput is robust to disturbances. | |||
For instance, DCTCP averages 2 congestion signals per round-trip | For instance, DCTCP averages 2 congestion signals per round trip, | |||
whatever the flow rate, as do other recently developed scalable | whatever the flow rate, as do other recently developed Scalable | |||
congestion controls, e.g. Relentless TCP <xref target="I-D.mathis-ic | congestion controls, e.g., Relentless TCP <xref target="I-D.mathis-i | |||
crg-relentless-tcp" format="default"/>, TCP Prague <xref target="I-D.briscoe-icc | ccrg-relentless-tcp" format="default"/>, Prague for TCP and QUIC <xref target="I | |||
rg-prague-congestion-control" format="default"/>, <xref target="PragueLinux" for | -D.briscoe-iccrg-prague-congestion-control" format="default"/> <xref target="Pra | |||
mat="default"/>, BBRv2 <xref target="BBRv2" format="default"/>, <xref target="I- | gueLinux" format="default"/>, the L4S ECN | |||
D.cardwell-iccrg-bbr-congestion-control" format="default"/> and the L4S | part of Bottleneck Bandwidth and Round-trip propagation time | |||
variant of SCREAM for real-time media <xref target="SCReAM-L4S" form | (BBRv2) <xref target="BBRv2" format="default"/> <xref target="I-D.cardwell-ic | |||
at="default"/>, <xref target="RFC8298" format="default"/>. See <xref target="l4s | crg-bbr-congestion-control" format="default"/>, and the L4S | |||
id_congestion_response" format="default"/> for more explanation.</dd> | variant of SCReAM for real-time media <xref target="SCReAM-L4S" form | |||
<dt>Classic service:</dt> | at="default"/> <xref target="RFC8298" format="default"/>. See <xref target="l4si | |||
d_congestion_response" format="default"/> for more explanation.</dd> | ||||
<dt>Classic Service:</dt> | ||||
<dd>The Classic service is intended for | <dd>The Classic service is intended for | |||
all the congestion control behaviours that co-exist with | all the congestion control behaviours | |||
Reno <xref target="RFC5681" format="default"/> (e.g. Reno itself, | that coexist with Reno <xref target="RFC5681" format="default"/> (e.g | |||
Cubic <xref target="RFC8312" format="default"/>, Compound <xref targ | ., Reno itself, | |||
et="I-D.sridharan-tcpm-ctcp" format="default"/>, TFRC <xref target="RFC5348" for | CUBIC <xref target="RFC8312" format="default"/>, Compound <xref targ | |||
mat="default"/>). The term 'Classic queue' means a queue | et="I-D.sridharan-tcpm-ctcp" format="default"/>, and TFRC <xref target="RFC5348" | |||
format="default"/>). The term 'Classic queue' means a queue | ||||
providing the Classic service.</dd> | providing the Classic service.</dd> | |||
<dt>Low-Latency, Low-Loss Scalable throughput (L4S) service:</dt> | <dt>Low Latency, Low Loss, and Scalable throughput (L4S) service:</dt> | |||
<dd> | <dd> | |||
<t>The | <t>The | |||
'L4S' service is intended for traffic from scalable congestion | 'L4S' service is intended for traffic from Scalable congestion | |||
control algorithms, such as the Prague congestion control <xref targ et="I-D.briscoe-iccrg-prague-congestion-control" format="default"/>, which was | control algorithms, such as the Prague congestion control <xref targ et="I-D.briscoe-iccrg-prague-congestion-control" format="default"/>, which was | |||
derived from DCTCP <xref target="RFC8257" format="default"/>. The L4 | derived from DCTCP <xref target="RFC8257" format="default"/>. | |||
S service | The L4S service | |||
is for more general traffic than just Prague -- it allows the | is for more general traffic than just Prague -- it allows the | |||
set of congestion controls with similar scaling properties to | set of congestion controls with similar scaling properties to | |||
Prague to evolve, such as the examples listed above (Relentless, | Prague to evolve, such as the examples listed above (Relentless, | |||
SCReAM, etc.). The term 'L4S queue' means a queue providing the | SCReAM, etc.). The term 'L4S queue' means a queue providing the | |||
L4S service.</t> | L4S service.</t> | |||
<t>The terms Classic or L4S can | <t>The terms Classic or L4S can | |||
also qualify other nouns, such as 'queue', 'codepoint', | also qualify other nouns, such as 'queue', 'codepoint', | |||
'identifier', 'classification', 'packet', 'flow'. For example: an | 'identifier', 'classification', 'packet', and 'flow'. For example, a n | |||
L4S packet means a packet with an L4S identifier sent from an L4S | L4S packet means a packet with an L4S identifier sent from an L4S | |||
congestion control.</t> | congestion control.</t> | |||
<t>Both Classic and L4S | <t>Both Classic and L4S | |||
services can cope with a proportion of unresponsive or | services can cope with a proportion of unresponsive or | |||
less-responsive traffic as well, but in the L4S case its rate has | less-responsive traffic as well but, in the L4S case, its rate has | |||
to be smooth enough or low enough not to build a queue | to be smooth enough or low enough to not build a queue | |||
(e.g. DNS, VoIP, game sync datagrams, etc.).</t> | (e.g., DNS, Voice over IP (VoIP), game sync datagrams, etc.).</t> | |||
</dd> | </dd> | |||
<dt>Reno-friendly:</dt> | <dt>Reno-friendly:</dt> | |||
<dd>The subset of Classic traffic that is | <dd>The subset of Classic traffic that is | |||
friendly to the standard Reno congestion control defined for TCP | friendly to the standard Reno congestion control defined for TCP | |||
in <xref target="RFC5681" format="default"/>. The TFRC spec <xref ta rget="RFC5348" format="default"/> indirectly implies that 'friendly' is defined | in <xref target="RFC5681" format="default"/>. The TFRC spec <xref ta rget="RFC5348" format="default"/> indirectly implies that 'friendly' is defined | |||
as "generally within a factor of two of the sending rate of a TCP | as "generally within a factor of two of the sending rate of a TCP | |||
flow under the same conditions". Reno-friendly is used here in | flow under the same conditions". Reno-friendly is used here in | |||
place of 'TCP-friendly', given the latter has become imprecise, | place of 'TCP-friendly', given the latter has become imprecise, | |||
because the TCP protocol is now used with so many different | because the TCP protocol is now used with so many different | |||
congestion control behaviours, and Reno can be used in non-TCP | congestion control behaviours, and Reno is used in non-TCP | |||
transports such as QUIC <xref target="RFC9000" format="default"/>.</ | transports, such as QUIC <xref target="RFC9000" format="default"/>.< | |||
dd> | /dd> | |||
<dt>Classic ECN:</dt> | <dt>Classic ECN:</dt> | |||
<dd>The original Explicit Congestion | <dd><t>The original Explicit Congestion Notification (ECN) protocol <x | |||
Notification (ECN) protocol <xref target="RFC3168" format="default"/ | ref target="RFC3168" format="default"/> that | |||
>, which | requires ECN signals to be treated as equivalent to drops, both when | |||
requires ECN signals to be treated the same as drops, both when | generated in the network and when responded to by the sender.</t> | |||
generated in the network and when responded to by the sender. For | ||||
L4S, the names used for the four codepoints of the 2-bit IP-ECN | <t>For L4S, the names used for the | |||
field are unchanged from those defined in <xref target="RFC3168" for | four codepoints of the 2-bit IP-ECN field are unchanged from those | |||
mat="default"/>: Not ECT, ECT(0), ECT(1) and CE, where ECT | defined in the ECN spec <xref target="RFC3168" format="default"/>, i. | |||
stands for ECN-Capable Transport and CE stands for Congestion | e., Not-ECT, | |||
Experienced. A packet marked with the CE codepoint is termed | ECT(0), ECT(1), and CE, where ECT stands for ECN-Capable | |||
'ECN-marked' or sometimes just 'marked' where the context makes | Transport and CE stands for Congestion Experienced. A packet | |||
ECN obvious.</dd> | marked with the CE codepoint is termed 'ECN-marked' or sometimes | |||
just 'marked' where the context makes ECN obvious.</t></dd> | ||||
<dt>Site:</dt> | <dt>Site:</dt> | |||
<dd>A home, mobile device, small enterprise or | <dd>A home, mobile device, small enterprise, or | |||
campus, where the network bottleneck is typically the access link | campus where the network bottleneck is typically the access link | |||
to the site. Not all network arrangements fit this model but it is | to the site. Not all network arrangements fit this model, but it is | |||
a useful, widely applicable generalization.</dd> | a useful, widely applicable generalization.</dd> | |||
</dl> | </dl> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Scope</name> | <name>Scope</name> | |||
<t>The new L4S identifier defined in this specification is applicable | <t>The new L4S identifier defined in this specification is applicable | |||
for IPv4 and IPv6 packets (as for Classic ECN <xref target="RFC3168" for mat="default"/>). It is applicable for the unicast, multicast and | for IPv4 and IPv6 packets (as is Classic ECN <xref target="RFC3168" form at="default"/>). It is applicable for the unicast, multicast, and | |||
anycast forwarding modes.</t> | anycast forwarding modes.</t> | |||
<t>The L4S identifier is an orthogonal packet classification to the | <t>The L4S identifier is an orthogonal packet classification to the | |||
Differentiated Services Code Point (DSCP) <xref target="RFC2474" format= "default"/>. <xref target="l4sid_other_IDs" format="default"/> explains what | Differentiated Services Code Point (DSCP) <xref target="RFC2474" format= "default"/>. <xref target="l4sid_other_IDs" format="default"/> explains what | |||
this means in practice.</t> | this means in practice.</t> | |||
<t>This document is intended for experimental status, so it does not | <t>This document is Experimental, so it does not | |||
update any standards track RFCs. Therefore, it depends on <xref target=" | update any Standards Track RFCs. Therefore, it depends on <xref target=" | |||
RFC8311" format="default"/>, which is a standards track specification | RFC8311" format="default"/>, which is a Standards Track specification | |||
that:</t> | that:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>updates the ECN proposed standard <xref target="RFC3168" format="d | <li>updates the ECN Proposed Standard <xref target="RFC3168" format="d | |||
efault"/> | efault"/> | |||
to allow experimental track RFCs to relax the requirement that an | to allow Experimental RFCs to relax the requirement that an | |||
ECN mark must be equivalent to a drop (when the network applies | ECN mark must be equivalent to a drop (when the network applies | |||
markings and/or when the sender responds to them). For instance, | markings and/or when the sender responds to them). | |||
in the ABE experiment <xref target="RFC8511" format="default"/> this | For instance, | |||
permits a | in the Alternative Backoff with ECN (ABE) experiment <xref target="R | |||
FC8511" format="default"/>, this relaxation permits a | ||||
sender to respond less to ECN marks than to drops;</li> | sender to respond less to ECN marks than to drops;</li> | |||
<li>changes the status of the experimental ECN nonce <xref target="RFC 3540" format="default"/> to historic;</li> | <li>changes the status of the Experimental ECN nonce spec <xref target ="RFC3540" format="default"/> to Historic; and</li> | |||
<li> | <li> | |||
<t>makes consequent updates to the following additional proposed | <t>makes consequent updates to the following additional Proposed | |||
standard RFCs to reflect the above two bullets:</t> | Standard RFCs to reflect the above two bullets:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>ECN for RTP <xref target="RFC6679" format="default"/>;</li> | <li>ECN for RTP <xref target="RFC6679" format="default"/> and </li > | |||
<li>the congestion control specifications of various DCCP | <li>the congestion control specifications of various DCCP | |||
congestion control identifier (CCID) profiles <xref target="RFC4 341" format="default"/>, <xref target="RFC4342" format="default"/>, <xref target ="RFC5622" format="default"/>.</li> | Congestion Control Identifier (CCID) profiles <xref target="RFC4 341" format="default"/> <xref target="RFC4342" format="default"/> <xref target=" RFC5622" format="default"/>.</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
</ul> | </ul> | |||
<t>This document is about identifiers that are used for interoperation | <t>This document is about identifiers that are used for interoperation | |||
between hosts and networks. So the audience is broad, covering | between hosts and networks. So the audience is broad, covering | |||
developers of host transports and network AQMs, as well as covering | developers of host transports and network AQMs, as well as covering | |||
how operators might wish to combine various identifiers, which would | how operators might wish to combine various identifiers, which would | |||
require flexibility from equipment developers.</t> | require flexibility from equipment developers.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_identification" numbered="true" toc="default"> | <section anchor="l4sid_identification" numbered="true" toc="default"> | |||
<name>L4S Packet Identification: Document Roadmap</name> | <name>L4S Packet Identification: Document Roadmap</name> | |||
<t>The L4S treatment is an experimental track alternative packet marking | <t>The L4S ECN marking treatment is an experimental alternative | |||
treatment to the Classic ECN treatment in <xref target="RFC3168" format="d | to the Classic ECN treatment in <xref target="RFC3168" format="default"/>, | |||
efault"/>, | ||||
which has been updated by <xref target="RFC8311" format="default"/> to all ow experiments | which has been updated by <xref target="RFC8311" format="default"/> to all ow experiments | |||
such as the one defined in the present specification. <xref target="RFC477 4" format="default"/> discusses some of the issues and evaluation criteria | such as the one defined in the present specification. <xref target="RFC477 4" format="default"/> discusses some of the issues and evaluation criteria | |||
when defining alternative ECN semantics, which are further discussed in | when defining alternative ECN semantics, which are further discussed in | |||
<xref target="l4sid_congestion_response_rfcs" format="default"/>.</t> | <xref target="l4sid_congestion_response_rfcs" format="default"/>.</t> | |||
<t>The L4S architecture <xref target="I-D.ietf-tsvwg-l4s-arch" format="def ault"/> | <t>The L4S architecture <xref target="RFC9330" format="default"/> | |||
describes the three main components of L4S: the sending host behaviour, | describes the three main components of L4S: the sending host behaviour, | |||
the marking behaviour in the network and the L4S ECN protocol that | the marking behaviour in the network, and the L4S ECN protocol that | |||
identifies L4S packets as they flow between the two.</t> | identifies L4S packets as they flow between the two.</t> | |||
<t>The next section of the present document (<xref target="l4sid_reqs" for | ||||
mat="default"/>) records the requirements that informed the choice | <t><xref target="l4sid_reqs" format="default"/> of this document records t | |||
of L4S identifier. Then subsequent sections specify the L4S ECN | he requirements that informed the choice | |||
of L4S identifier. Then, subsequent sections specify the L4S ECN | ||||
protocol, which i) identifies packets that have been sent from hosts | protocol, which i) identifies packets that have been sent from hosts | |||
that are expected to comply with a broad type of sending behaviour; and | that are expected to comply with a broad type of sending behaviour and | |||
ii) identifies the marking treatment that network nodes are expected to | ii) identifies the marking treatment that network nodes are expected to | |||
apply to L4S packets.</t> | apply to L4S packets.</t> | |||
<t>For a packet to receive L4S treatment as it is forwarded, the sender | <t>For a packet to receive L4S treatment as it is forwarded, the sender | |||
sets the ECN field in the IP header to the ECT(1) codepoint. See <xref tar get="l4sid_transport_req" format="default"/> for full transport layer behaviour | sets the ECN field in the IP header to the ECT(1) codepoint. See <xref tar get="l4sid_transport_req" format="default"/> for full transport-layer behaviour | |||
requirements, including feedback and congestion response.</t> | requirements, including feedback and congestion response.</t> | |||
<t>A network node that implements the L4S service always classifies | <t>A network node that implements the L4S service always classifies | |||
arriving ECT(1) packets for L4S treatment and by default classifies CE | arriving ECT(1) packets for L4S treatment and by default classifies CE | |||
packets for L4S treatment unless the heuristics described in <xref target= "l4sid_identification_transport_aware" format="default"/> are employed. See <xre f target="l4sid_network_req" format="default"/> for full network element behavio ur | packets for L4S treatment unless the heuristics described in <xref target= "l4sid_identification_transport_aware" format="default"/> are employed. See <xre f target="l4sid_network_req" format="default"/> for full network element behavio ur | |||
requirements, including classification, ECN-marking and interaction of | requirements, including classification, ECN marking, and interaction of | |||
the L4S identifier with other identifiers and per-hop behaviours.</t> | the L4S identifier with other identifiers and per-hop behaviours.</t> | |||
<t>L4S ECN works with ECN tunnelling and encapsulation behaviour as is, | <t>L4S ECN works with ECN tunnelling and encapsulation behaviour as is, | |||
except there is one known case where careful attention to configuration | except there is one known case where careful attention to configuration | |||
is required, which is detailed in <xref target="l4sid_encaps" format="defa ult"/>.</t> | is required, which is detailed in <xref target="l4sid_encaps" format="defa ult"/>.</t> | |||
<t>L4S ECN is currently on the experimental track. So <xref target="l4sid_ expts" format="default"/> collects together the general questions and | <t>This specification of L4S ECN currently has Experimental status. So <xr ef target="l4sid_expts" format="default"/> collects the general questions and | |||
issues that remain open for investigation during L4S experimentation. | issues that remain open for investigation during L4S experimentation. | |||
Open issues or questions specific to particular components are called | Open issues or questions specific to particular components are called | |||
out in the specifications of each component part, such as the DualQ | out in the specifications of each component part, such as the DualQ | |||
<xref target="I-D.ietf-tsvwg-aqm-dualq-coupled" format="default"/>.</t> | <xref target="RFC9332" format="default"/>.</t> | |||
<t>The IANA assignment of the L4S identifier is specified in <xref target= "l4sid_IANA" format="default"/>. And <xref target="l4sid_Security_Considerations " format="default"/> covers security considerations | <t>The IANA assignment of the L4S identifier is specified in <xref target= "l4sid_IANA" format="default"/>. And <xref target="l4sid_Security_Considerations " format="default"/> covers security considerations | |||
specific to the L4S identifier. System security aspects, such as | specific to the L4S identifier. System security aspects, such as | |||
policing and privacy, are covered in the L4S architecture <xref target="I- D.ietf-tsvwg-l4s-arch" format="default"/>.</t> | policing and privacy, are covered in the L4S architecture <xref target="RF C9330" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_reqs" numbered="true" toc="default"> | <section anchor="l4sid_reqs" numbered="true" toc="default"> | |||
<name>Choice of L4S Packet Identifier: Requirements</name> | <name>Choice of L4S Packet Identifier: Requirements</name> | |||
<t>This subsection briefly records the process that led to the chosen | <t>This subsection briefly records the process that led to the chosen | |||
L4S identifier.</t> | L4S identifier.</t> | |||
<t>The identifier for packets using the Low Latency, Low Loss, Scalable | <t>The identifier for packets using the L4S service needs to meet the foll | |||
throughput (L4S) service needs to meet the following requirements:</t> | owing requirements:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>it SHOULD survive end-to-end between source and destination | <li>it <bcp14>SHOULD</bcp14> survive end to end between source and desti | |||
end-points: across the boundary between host and network, between | nation | |||
endpoints: across the boundary between host and network, between | ||||
interconnected networks, and through middleboxes;</li> | interconnected networks, and through middleboxes;</li> | |||
<li>it SHOULD be visible at the IP layer;</li> | <li>it <bcp14>SHOULD</bcp14> be visible at the IP layer;</li> | |||
<li>it SHOULD be common to IPv4 and IPv6 and transport-agnostic;</li> | <li>it <bcp14>SHOULD</bcp14> be common to IPv4 and IPv6 and be transport | |||
<li>it SHOULD be incrementally deployable;</li> | -agnostic;</li> | |||
<li>it SHOULD enable an AQM to classify packets encapsulated by outer | <li>it <bcp14>SHOULD</bcp14> be incrementally deployable;</li> | |||
<li>it <bcp14>SHOULD</bcp14> enable an AQM to classify packets encapsula | ||||
ted by outer | ||||
IP or lower-layer headers;</li> | IP or lower-layer headers;</li> | |||
<li>it SHOULD consume minimal extra codepoints;</li> | <li>it <bcp14>SHOULD</bcp14> consume minimal extra codepoints; and</li> | |||
<li>it SHOULD be consistent on all the packets of a transport layer | <li>it <bcp14>SHOULD</bcp14> be consistent on all the packets of a trans | |||
port-layer | ||||
flow, so that some packets of a flow are not served by a different | flow, so that some packets of a flow are not served by a different | |||
queue to others.</li> | queue to others.</li> | |||
</ul> | </ul> | |||
<t>Whether the identifier would be recoverable if the experiment failed | <t>Whether the identifier would be recoverable if the experiment failed | |||
is a factor that could be taken into account. However, this has not been | is a factor that could be taken into account. However, this has not been | |||
made a requirement, because that would favour schemes that would be | made a requirement, because that would favour schemes that would be | |||
easier to fail, rather than those more likely to succeed.</t> | easier to fail rather than more likely to succeed.</t> | |||
<t>It is recognized that any choice of identifier is unlikely to satisfy | <t>It is recognized that any choice of identifier is unlikely to satisfy | |||
all these requirements, particularly given the limited space left in the | all these requirements, particularly given the limited space left in the | |||
IP header. Therefore, a compromise will always be necessary, which is | IP header. Therefore, a compromise will always be necessary, which is | |||
why all the above requirements are expressed with the word 'SHOULD' not | why all the above requirements are expressed with the word "<bcp14>SHOULD< | |||
'MUST'.</t> | /bcp14>" not | |||
"<bcp14>MUST</bcp14>".</t> | ||||
<t>After extensive assessment of alternative schemes, "ECT(1) and CE | <t>After extensive assessment of alternative schemes, "ECT(1) and CE | |||
codepoints" was chosen as the best compromise. Therefore, this scheme is | codepoints" was chosen as the best compromise. Therefore, this scheme is | |||
defined in detail in the following sections, while <xref target="l4sid_ECT 1_CE" format="default"/> records its pros and cons against the above | defined in detail in the following sections, while <xref target="l4sid_ECT 1_CE" format="default"/> records its pros and cons against the above | |||
requirements.</t> | requirements.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_transport_req" numbered="true" toc="default"> | <section anchor="l4sid_transport_req" numbered="true" toc="default"> | |||
<name>Transport Layer Behaviour (the 'Prague Requirements')</name> | <name>Transport-Layer Behaviour (the 'Prague L4S Requirements')</name> | |||
<t>This section defines L4S behaviour at the transport layer, also known | <t>This section defines L4S behaviour at the transport layer, also known | |||
as the Prague L4S Requirements (see <xref target="l4sps_tcp-prague-reqs" f ormat="default"/> for the origin of the name).</t> | as the 'Prague L4S Requirements' (see <xref target="l4sps_tcp-prague-reqs" format="default"/> for the origin of the name).</t> | |||
<section anchor="l4sid_codepoint" numbered="true" toc="default"> | <section anchor="l4sid_codepoint" numbered="true" toc="default"> | |||
<name>Codepoint Setting</name> | <name>Codepoint Setting</name> | |||
<t>A sender that wishes a packet to receive L4S treatment as it is | <t>A sender that wishes a packet to receive L4S treatment as it is | |||
forwarded, MUST set the ECN field in the IP header (v4 or v6) to the | forwarded <bcp14>MUST</bcp14> set the ECN field in the IP header (v4 or v6) to the | |||
ECT(1) codepoint.</t> | ECT(1) codepoint.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_feedback" numbered="true" toc="default"> | <section anchor="l4sid_feedback" numbered="true" toc="default"> | |||
<name>Prerequisite Transport Feedback</name> | <name>Prerequisite Transport Feedback</name> | |||
<t>For a transport protocol to provide scalable congestion control | <t>For a transport protocol to provide Scalable congestion control | |||
(<xref target="l4sid_congestion_response" format="default"/>) it MUST pr | (<xref target="l4sid_congestion_response" format="default"/>), it <bcp14 | |||
ovide feedback | >MUST</bcp14> provide feedback | |||
of the extent of CE marking on the forward path. When ECN was added to | of the extent of CE marking on the forward path. When ECN was added to | |||
TCP <xref target="RFC3168" format="default"/>, the feedback method repor ted no | TCP <xref target="RFC3168" format="default"/>, the feedback method repor ted no | |||
more than one CE mark per round trip. Some transport protocols derived | more than one CE mark per round trip. Some transport protocols derived | |||
from TCP mimic this behaviour while others report the accurate extent | from TCP mimic this behaviour while others report the accurate extent | |||
of ECN marking. This means that some transport protocols will need to | of ECN marking. This means that some transport protocols will need to | |||
be updated as a prerequisite for scalable congestion control. The | be updated as a prerequisite for Scalable congestion control. The | |||
position for a few well-known transport protocols is given below.</t> | position for a few well-known transport protocols is given below.</t> | |||
<dl newline="false" spacing="normal"> | <dl newline="false" spacing="normal"> | |||
<dt>TCP:</dt> | <dt>TCP:</dt> | |||
<dd>Support for the accurate ECN feedback | <dd>Support for the accurate ECN feedback | |||
requirements <xref target="RFC7560" format="default"/> (such as that | requirements <xref target="RFC7560" format="default"/> (such as that | |||
provided | provided | |||
by AccECN <xref target="I-D.ietf-tcpm-accurate-ecn" format="default" | by AccECN <xref target="I-D.ietf-tcpm-accurate-ecn" format="default" | |||
/>) by | />) by | |||
both ends is a prerequisite for scalable congestion control in | both ends is a prerequisite for Scalable congestion control in | |||
TCP. Therefore, the presence of ECT(1) in the IP headers even in | TCP. Therefore, the presence of ECT(1) in the IP headers even in | |||
one direction of a TCP connection will imply that both ends | one direction of a TCP connection will imply that both ends | |||
support accurate ECN feedback. However, the converse does not | support accurate ECN feedback. However, the converse does not | |||
apply. So even if both ends support AccECN, either of the two ends | apply. | |||
can choose not to use a scalable congestion control, whatever the | So even if both ends support AccECN, either of the two ends | |||
other end's choice.</dd> | can choose not to use a Scalable congestion control, whatever the | |||
<dt>SCTP:</dt> | other end's choice is.</dd> | |||
<dt>SCTP:</dt> | ||||
<dd>A suitable ECN feedback mechanism for SCTP | <dd>A suitable ECN feedback mechanism for SCTP | |||
could add a chunk to report the number of received CE marks (as | could add a chunk to report the number of received CE marks (as | |||
described in a long-expired draft <xref target="I-D.stewart-tsvwg-sc | described in a long-expired document <xref target="I-D.stewart-tsvwg | |||
tpecn" format="default"/> or as sketched out in | -sctpecn" format="default"/> or as sketched out in | |||
Appendix A of the now obsolete second standards track | Appendix <xref target="RFC4960" section="A" sectionFormat="bare"/> o | |||
specification of SCTP <xref target="RFC4960" format="default"/>).</d | f the now-obsolete second Standards Track | |||
d> | specification of SCTP <xref target="RFC4960" format="default"/>).</d | |||
d> | ||||
<dt>RTP over UDP:</dt> | <dt>RTP over UDP:</dt> | |||
<dd>A prerequisite for scalable congestion | <dd>A prerequisite for Scalable congestion | |||
control is for both (all) ends of one media-level hop to signal | control is for both (all) ends of one media-level hop to signal | |||
ECN support <xref target="RFC6679" format="default"/> and use the ne w generic | ECN support <xref target="RFC6679" format="default"/> and use the ne w generic | |||
RTCP feedback format of <xref target="RFC8888" format="default"/>. T he presence of | RTCP feedback format of <xref target="RFC8888" format="default"/>. T he presence of | |||
ECT(1) implies that both (all) ends of that media-level hop | ECT(1) implies that both (all) ends of that media-level hop | |||
support ECN. However, the converse does not apply. So each end of | support ECN. However, the converse does not apply. So each end of | |||
a media-level hop can independently choose not to use a scalable | a media-level hop can independently choose not to use a Scalable | |||
congestion control, even if both ends support ECN.</dd> | congestion control, even if both ends support ECN.</dd> | |||
<dt>QUIC:</dt> | <dt>QUIC:</dt> | |||
<dd>Support for sufficiently fine-grained ECN | <dd>Support for sufficiently fine-grained ECN | |||
feedback is provided by the v1 IETF QUIC transport <xref target="RFC 9000" format="default"/>.</dd> | feedback is provided by IETF QUIC transport v1 <xref target="RFC9000 " format="default"/>.</dd> | |||
<dt>DCCP:</dt> | <dt>DCCP:</dt> | |||
<dd>The ACK vector in DCCP <xref target="RFC4340" format="default"/> i | <dd>The Acknowledgement (ACK) vector in DCCP <xref target="RFC4340" fo | |||
s already sufficient to report the extent of | rmat="default"/> is already sufficient to report the extent of | |||
CE marking as needed by a scalable congestion control.</dd> | CE marking as needed by a Scalable congestion control.</dd> | |||
</dl> | </dl> | |||
</section> | </section> | |||
<section anchor="l4sid_congestion_response" numbered="true" toc="default"> | <section anchor="l4sid_congestion_response" numbered="true" toc="default"> | |||
<name>Prerequisite Congestion Response</name> | <name>Prerequisite Congestion Response</name> | |||
<t>As a condition for a host to send packets with the L4S identifier | <t>As a condition for a host to send packets with the L4S identifier | |||
(ECT(1)), it SHOULD implement a congestion control behaviour that | (ECT(1)), it <bcp14>SHOULD</bcp14> implement a congestion control behavi our that | |||
ensures that, in steady state, the average duration between induced | ensures that, in steady state, the average duration between induced | |||
ECN marks does not increase as flow rate scales up, all other factors | ECN marks does not increase as flow rate scales up, all other factors | |||
being equal. This is termed a scalable congestion control. This | being equal. This is termed a Scalable congestion control. This | |||
invariant duration ensures that, as flow rate scales, the average | invariant duration ensures that, as flow rate scales, the average | |||
period with no feedback information about capacity does not become | period with no feedback information about capacity does not become | |||
excessive. It also ensures that queue variations remain small, without | excessive. It also ensures that queue variations remain small, without | |||
having to sacrifice utilization.</t> | having to sacrifice utilization.</t> | |||
<t>With a congestion control that sawtooths to probe capacity, this | <t>With a congestion control that sawtooths to probe capacity, this | |||
duration is called the recovery time, because each time the sawtooth | duration is called the recovery time, because each time the sawtooth | |||
yields, on average it takes this time to recover to its previous high | yields, on average it takes this time to recover to its previous high | |||
point. A scalable congestion control does not have to sawtooth, but it | point. A Scalable congestion control does not have to sawtooth, but it | |||
has to coexist with scalable congestion controls that do.</t> | has to coexist with Scalable congestion controls that do.</t> | |||
<t>For instance, for DCTCP <xref target="RFC8257" format="default"/>, TC | <t>For instance, for DCTCP <xref target="RFC8257" format="default"/>, TC | |||
P Prague | P Prague | |||
<xref target="I-D.briscoe-iccrg-prague-congestion-control" format="defau | <xref target="I-D.briscoe-iccrg-prague-congestion-control" format="defau | |||
lt"/>, <xref target="PragueLinux" format="default"/> and the L4S variant of SCRe | lt"/> <xref target="PragueLinux" format="default"/>, and the L4S variant of SCRe | |||
AM <xref target="SCReAM-L4S" format="default"/>, <xref target="RFC8298" format=" | AM <xref target="SCReAM-L4S" format="default"/> <xref target="RFC8298" format="d | |||
default"/>, the average recovery | efault"/>, the average recovery | |||
time is always half a round trip (or half a reference round trip), | time is always half a round trip (or half a reference round trip), | |||
whatever the flow rate.</t> | whatever the flow rate.</t> | |||
<t>As with all transport behaviours, a detailed specification | <t>As with all transport behaviours, a detailed specification | |||
(probably an experimental RFC) is expected for each congestion | (probably an Experimental RFC) is expected for each congestion | |||
control, following the guidelines for specifying new congestion | control, following the guidelines for specifying new congestion | |||
control algorithms in <xref target="RFC5033" format="default"/>. In addi | control algorithms in <xref target="RFC5033" format="default"/>. In addi | |||
tion, it | tion, it | |||
is expected to document these L4S-specific matters, specifically the | is expected that these L4S-specific matters will be documented, specific | |||
timescale over which the proportionality is averaged, and control of | ally the | |||
timescale over which the proportionality is averaged and the control of | ||||
burstiness. The recovery time requirement above is worded as a | burstiness. The recovery time requirement above is worded as a | |||
'SHOULD' rather than a 'MUST' to allow reasonable flexibility for such | "<bcp14>SHOULD</bcp14>" rather than a "<bcp14>MUST</bcp14>" to allow rea sonable flexibility for such | |||
implementations.</t> | implementations.</t> | |||
<t>The condition 'all other factors being equal', allows the recovery | <t>The condition 'all other factors being equal' allows the recovery | |||
time to be different for different round trip times, as long as it | time to be different for different round-trip times, as long as it | |||
does not increase with flow rate for any particular RTT.</t> | does not increase with flow rate for any particular RTT.</t> | |||
<t>Saying that the recovery time remains roughly invariant is | <t>Saying that the recovery time remains roughly invariant is | |||
equivalent to saying that the number of ECN CE marks per round trip | equivalent to saying that the number of ECN CE marks per round trip | |||
remains invariant as flow rate scales, all other factors being equal. | remains invariant as flow rate scales, all other factors being equal. | |||
For instance, an average recovery time of half of 1 RTT is equivalent | For instance, an average recovery time of half of 1 RTT is equivalent | |||
to 2 ECN marks per round trip. For those familiar with steady-state | to 2 ECN marks per round trip. For those familiar with steady-state | |||
congestion response functions, it is also equivalent to say that the | congestion response functions, it is also equivalent to say that the | |||
congestion window is inversely proportional to the proportion of bytes | congestion window is inversely proportional to the proportion of bytes | |||
in packets marked with the CE codepoint (see section 2 of <xref target=" | in packets marked with the CE codepoint (see Section 2 of <xref target=" | |||
PI2" format="default"/>).</t> | PI2" format="default"/>).</t> | |||
<!--For example, the timescale over which this rough proportionality app | ||||
lies will depend on the type of application, ranging | ||||
from per packet adjustment through smooth adjustment of encoding over perhaps te | ||||
ns of seconds. Low bit-rate flows might | ||||
even respond at the timescale of self-admission control solely at the start of e | ||||
ach flow. As with any congestion control, | ||||
the sender SHOULD also avoid excessive bursts, but this is particularly importan | ||||
t with the L4S service.--> | ||||
<t>In order to coexist safely with other Internet traffic, a scalable | <t>In order to coexist safely with other Internet traffic, a Scalable | |||
congestion control is not allowed to tag its packets with the ECT(1) | congestion control is not allowed to tag its packets with the ECT(1) | |||
codepoint unless it complies with the following numbered requirements | codepoint unless it complies with the following numbered requirements | |||
and recommendations:</t> | and recommendations:</t> | |||
<ol spacing="normal" type="1"><li>A scalable congestion control MUST be | ||||
capable of being replaced | <ol spacing="normal" type="1"><li anchor="l4sid_Prague_req-replaceable"> | |||
A Scalable congestion control <bcp14>MUST</bcp14> be capable of being replaced | ||||
by a Classic congestion control (by application and/or by | by a Classic congestion control (by application and/or by | |||
administrative control). If a Classic congestion control is | administrative control). If a Classic congestion control is | |||
activated, it will not tag its packets with the ECT(1) codepoint | activated, it will not tag its packets with the ECT(1) codepoint | |||
(see <xref target="l4sid_sec_replaceable" format="default"/> for rat ionale).</li> | (see <xref target="l4sid_sec_replaceable" format="default"/> for rat ionale).</li> | |||
<li>As well as responding to ECN markings, a scalable congestion | ||||
control MUST react to packet loss in a way that will coexist | <li anchor="l4sid_Prague_req-loss-response">As well as responding to E | |||
safely with Classic congestion controls such as standard | CN markings, a Scalable congestion | |||
Reno <xref target="RFC5681" format="default"/>, as required by <xref | control <bcp14>MUST</bcp14> react to packet loss in a way that will | |||
target="RFC5033" format="default"/> (see <xref target="l4sid_sec_fallback_on_lo | coexist | |||
ss" format="default"/> for rationale).</li> | safely with Classic congestion controls | |||
<li> | such as standard Reno <xref target="RFC5681" format="default"/>, as r | |||
<t>In uncontrolled environments, monitoring MUST be implemented to | equired by <xref target="RFC5033" format="default"/> (see <xref target="l4sid_se | |||
c_fallback_on_loss" format="default"/> for rationale).</li> | ||||
<li anchor="l4sid_Prague_req-classic-ecn-response"> | ||||
<t>In uncontrolled environments, monitoring <bcp14>MUST</bcp14> be i | ||||
mplemented to | ||||
support detection of problems with an ECN-capable AQM at the path | support detection of problems with an ECN-capable AQM at the path | |||
bottleneck that appears not to support L4S and might be in a | bottleneck that appears not to support L4S and that might be in a | |||
shared queue. Such monitoring SHOULD be applied to live traffic | shared queue. Such monitoring <bcp14>SHOULD</bcp14> be applied to li | |||
ve traffic | ||||
that is using Scalable congestion control. Alternatively, | that is using Scalable congestion control. Alternatively, | |||
monitoring need not be applied to live traffic, if monitoring with | monitoring need not be applied to live traffic, if monitoring with | |||
test traffic has been arranged to cover the paths that live | test traffic has been arranged to cover the paths that live | |||
traffic takes through uncontrolled environments. </t> | traffic takes through uncontrolled environments. </t> | |||
<t>A function to detect the above problems with an | <t>A function to detect the above problems with an | |||
ECN-capable AQM MUST also be implemented and used. The detection | ECN-capable AQM <bcp14>MUST</bcp14> also be implemented and used. Th | |||
function SHOULD be capable of making the congestion control adapt | e detection | |||
its ECN-marking response in real-time to coexist safely with | function <bcp14>SHOULD</bcp14> be capable of making the congestion c | |||
Classic congestion controls such as standard Reno <xref target="RFC5 | ontrol adapt | |||
681" format="default"/>, as required by <xref target="RFC5033" format="default"/ | its ECN-marking response in real time to coexist safely with | |||
>. This | Classic congestion controls such as standard Reno <xref target="RFC5 | |||
681" format="default"/>, as required by <xref target="RFC5033" format="default"/ | ||||
>. This | ||||
could be complemented by more detailed offline detection of | could be complemented by more detailed offline detection of | |||
potential problems. If only offline detection is used and | potential problems. If only offline detection is used and | |||
potential problems with such an AQM are detected on certain paths, | potential problems with such an AQM are detected on certain paths, | |||
the scalable congestion control MUST be replaced by a Classic | the Scalable congestion control <bcp14>MUST</bcp14> be replaced by a Classic | |||
congestion control, at least for the problem paths. </t> | congestion control, at least for the problem paths. </t> | |||
<t>See <xref target="l4sid_congestion_response_rfcs" format="default | <t>See <xref target="l4sid_congestion_response_rfcs" format="default | |||
"/>, <xref target="l4sid_sec_fallback_on_classic_CE" format="default"/> and the | "/>, <xref target="l4sid_sec_fallback_on_classic_CE" format="default"/>, and the | |||
L4S | L4S | |||
operational guidance <xref target="I-D.ietf-tsvwg-l4sops" format="de | operational guidance <xref target="I-D.ietf-tsvwg-l4sops" format="de | |||
fault"/> | fault"/> | |||
for rationale and explanation.</t> | for rationale and explanation.</t> | |||
<t>Note that a | ||||
scalable congestion control is not expected to change to setting | <t indent="3">Note that a | |||
Scalable congestion control is not expected to change to setting | ||||
ECT(0) while it transiently adapts to coexist with Classic | ECT(0) while it transiently adapts to coexist with Classic | |||
congestion controls, whereas a replacement congestion control that | congestion controls, whereas a replacement congestion control that | |||
solely behaves in the Classic way will set ECT(0).</t> | solely behaves in the Classic way will set ECT(0).</t> | |||
</li> | </li> | |||
<li>In the range between the minimum likely RTT and typical RTTs | <li anchor="l4sid_Prague_req-rtt-independence">In the range between th | |||
expected in the intended deployment scenario, a scalable | e minimum likely RTT and typical RTTs | |||
congestion control MUST converge towards a rate that is as | expected in the intended deployment scenario, a Scalable | |||
congestion control <bcp14>MUST</bcp14> converge towards a rate that | ||||
is as | ||||
independent of RTT as is possible without compromising stability | independent of RTT as is possible without compromising stability | |||
or utilization (see <xref target="l4sid_sec_RTT_dependence" format=" default"/> for | or utilization (see <xref target="l4sid_sec_RTT_dependence" format=" default"/> for | |||
rationale).</li> | rationale).</li> | |||
<li>A scalable congestion control SHOULD remain responsive to | <li anchor="l4sid_Prague_req-fractional-window">A Scalable congestion control <bcp14>SHOULD</bcp14> remain responsive to | |||
congestion when typical RTTs over the public Internet are | congestion when typical RTTs over the public Internet are | |||
significantly smaller because they are no longer inflated by | significantly smaller because they are no longer inflated by | |||
queuing delay. It would be preferable for the minimum window of a | queuing delay. It would be preferable for the minimum window of a | |||
scalable congestion control to be lower than 1 segment rather than | Scalable congestion control to be lower than 1 segment rather than | |||
use the timeout approach described for TCP in S.6.1.2 of the ECN | use the timeout approach described for TCP in | |||
spec <xref target="RFC3168" format="default"/> (or an equivalent for | <xref target="RFC3168" sectionFormat="of" section="6.1.2">the ECN sp | |||
other | ec</xref> (or an equivalent for other | |||
transports). However, a lower minimum is not set as a formal | transports). However, a lower minimum is not set as a formal | |||
requirement for L4S experiments (see <xref target="l4sid_sec_min_cwn d" format="default"/> for rationale).</li> | requirement for L4S experiments (see <xref target="l4sid_sec_min_cwn d" format="default"/> for rationale).</li> | |||
<li>A scalable congestion control's loss detection SHOULD be | <li anchor="l4sid_Prague_req-reordering">A Scalable congestion control 's loss detection <bcp14>SHOULD</bcp14> be | |||
resilient to reordering over an adaptive time interval that scales | resilient to reordering over an adaptive time interval that scales | |||
with throughput and adapts to reordering (as in RACK <xref target="R | with throughput and adapts to reordering (as in Recent ACK (RACK) <x | |||
FC8985" format="default"/>), as opposed to counting only in fixed units of | ref target="RFC8985" format="default"/>), as opposed to counting only in fixed u | |||
packets (as in the 3 DupACK rule of New Reno <xref target="RFC5681" | nits of | |||
format="default"/> and <xref target="RFC6675" format="default"/>, which is not | packets (as in the 3 Duplicate ACK (DupACK) rule of NewReno <xref ta | |||
rget="RFC5681" format="default"/> <xref target="RFC6675" format="default"/>, whi | ||||
ch is not | ||||
scalable). As data rates increase (e.g., due to new and/or | scalable). As data rates increase (e.g., due to new and/or | |||
improved technology), congestion controls that detect loss by | improved technology), congestion controls that detect loss by | |||
counting in units of packets become more likely to incorrectly | counting in units of packets become more likely to incorrectly | |||
treat reordering events as congestion-caused loss events (see | treat reordering events as congestion-caused loss events (see | |||
<xref target="l4sid_sec_reordering_tolerance" format="default"/> for further | <xref target="l4sid_sec_reordering_tolerance" format="default"/> for further | |||
rationale). This requirement does not apply to congestion controls | rationale). This requirement does not apply to congestion controls | |||
that are solely used in controlled environments where the network | that are solely used in controlled environments where the network | |||
introduces hardly any reordering.</li> | introduces hardly any reordering.</li> | |||
<li>A scalable congestion control is expected to limit the queue | <li anchor="l4sid_Prague_req-burstiness">A Scalable congestion control is expected to limit the queue | |||
caused by bursts of packets. It would not seem necessary to set | caused by bursts of packets. It would not seem necessary to set | |||
the limit any lower than 10% of the minimum RTT expected in a | the limit any lower than 10% of the minimum RTT expected in a | |||
typical deployment (e.g. additional queuing of roughly 250 us | typical deployment (e.g., additional queuing of roughly 250 us | |||
for the public Internet). This would be converted to a number of | for the public Internet). This would be converted to a number of | |||
packets by multiplying by the current average packet rate. Then, | packets by multiplying by the current average packet rate. Then, | |||
the queue caused by each burst at the bottleneck link would not | the queue caused by each burst at the bottleneck link would not | |||
exceed 250us (under the worst-case assumption that the flow is | exceed 250 us (under the worst-case assumption that the flow is | |||
filling the capacity). No normative requirement to limit bursts is | filling the capacity). No normative requirement to limit bursts is | |||
given here and, until there is more industry experience from the | given here, and until there is more industry experience from the | |||
L4S experiment, it is not even known whether one is needed - it | L4S experiment, it is not even known whether one is needed -- it | |||
seems to be in an L4S sender's self-interest to limit bursts.</li> | seems to be in an L4S sender's self-interest to limit bursts.</li> | |||
</ol> | </ol> | |||
<t>Each sender in a session can use a scalable congestion control | <t>Each sender in a session can use a Scalable congestion control | |||
independently of the congestion control used by the receiver(s) when | independently of the congestion control used by the receiver(s) when | |||
they send data. Therefore, there might be ECT(1) packets in one | they send data. Therefore, there might be ECT(1) packets in one | |||
direction and ECT(0) or Not-ECT in the other.</t> | direction and ECT(0) or Not-ECT in the other.</t> | |||
<t>Later (<xref target="l4sid_inclusion_dualq" format="default"/>) this document | <t>Later, this document | |||
discusses the conditions for mixing other "'Safe' Unresponsive | discusses the conditions for mixing other "'Safe' Unresponsive | |||
Traffic" (e.g. DNS, LDAP, NTP, voice, game sync packets) with L4S | Traffic" (e.g., DNS, Lightweight Directory Access Protocol (LDAP), NTP, | |||
traffic. To be clear, although such traffic can share the same queue | voice, and game sync packets) with L4S | |||
traffic; see <xref target="l4sid_inclusion_dualq" format="default"/>. To | ||||
be clear, although such traffic can share the same queue | ||||
as L4S traffic, it is not appropriate for the sender to tag it as | as L4S traffic, it is not appropriate for the sender to tag it as | |||
ECT(1), except in the (unlikely) case that it satisfies the above | ECT(1), except in the (unlikely) case that it satisfies the above | |||
conditions.</t> | conditions.</t> | |||
<section anchor="l4sid_congestion_response_rfcs" numbered="true" toc="de fault"> | <section anchor="l4sid_congestion_response_rfcs" numbered="true" toc="de fault"> | |||
<name>Guidance on Congestion Response in the RFC Series</name> | <name>Guidance on Congestion Response in the RFC Series</name> | |||
<t>RFC 3168 requires the congestion responses to a CE-marked | <t><xref target="RFC3168"/> requires the congestion responses to a CE- | |||
packet and a dropped packet to be the same. RFC 8311 is a | marked | |||
standards-track update to RFC 3168 intended to enable | packet and a dropped packet to be the same. <xref target="RFC8311"/> i | |||
s a | ||||
Standards Track update to <xref target="RFC3168"/> that is intended to | ||||
enable | ||||
experimentation with ECN, including the L4S experiment. | experimentation with ECN, including the L4S experiment. | |||
RFC 8311 allows an experimental congestion control's response | <xref target="RFC8311"/> allows an experimental congestion control's r esponse | |||
to a CE-marked packet to differ from the response to a dropped | to a CE-marked packet to differ from the response to a dropped | |||
packet, provided that the differences are documented in an | packet, provided that the differences are documented in an | |||
experimental RFC, such as the present document.</t> | Experimental RFC, such as the present document.</t> | |||
<t>BCP 124 <xref target="RFC4774" format="default"/> gives guidance to | <t>BCP 124 <xref target="RFC4774" format="default"/> gives guidance | |||
protocol designers, when specifying alternative semantics for the | to protocol designers, when specifying alternative semantics for the | |||
ECN field. RFC 8311 explained that it did not need to update | IP-ECN field. <xref target="RFC8311"/> explained that it did not need | |||
the best current practice in BCP 124 in order to relax the | to update the | |||
'equivalence with drop' requirement because, although BCP 124 | best current practice in BCP 124 in order to relax the 'equivalence | |||
quotes the same requirement from RFC 3168, the BCP does not | with drop' requirement because, although BCP 124 quotes the same | |||
impose requirements based on it. BCP 124 describes three | requirement from <xref target="RFC3168"/>, the BCP does not impose req | |||
options for incremental deployment, with Option 3 (in Section 4.3 of | uirements | |||
BCP 124) best matching the L4S case. Option 3's requirement for | based on it. | |||
end-nodes is that they respond to CE marks "in a way that is | ||||
friendly to flows using IETF-conformant congestion control." This | BCP 124 <xref target="RFC4774" format="default"/> describes three optio | |||
echoes other general congestion control requirements in the RFC | ns for incremental | |||
series, for example <xref target="RFC5033" format="default"/>, which s | deployment, with Option 3 (in <xref target="RFC4774" section="4.3" | |||
ays | sectionFormat="of">BCP 124</xref>) best matching the L4S | |||
"...congestion controllers that have a significantly negative impact | case. Option 3's requirement for end-nodes is that they respond to | |||
on traffic using standard congestion control may be suspect", or | CE marks "in a way that is friendly to flows using IETF-conformant | |||
<xref target="RFC8085" format="default"/> concerning UDP congestion co | congestion control." This echoes other general congestion control | |||
ntrol says | requirements in the RFC Series, for example, <xref target="RFC5033" | |||
format="default"/> states that "...congestion controllers that have | ||||
a significantly negative impact on traffic using standard congestion | ||||
control may be suspect" and <xref target="RFC8085" | ||||
format="default"/>, which concerns UDP congestion control, states that | ||||
"Bulk-transfer applications that choose not to implement TFRC or | "Bulk-transfer applications that choose not to implement TFRC or | |||
TCP-like windowing SHOULD implement a congestion control scheme that | TCP-like windowing <bcp14>SHOULD</bcp14> implement a congestion | |||
results in bandwidth (capacity) use that competes fairly with TCP | control scheme that results in bandwidth (capacity) use that | |||
within an order of magnitude."</t> | competes fairly with TCP within an order of magnitude."</t> | |||
<t>The third normative bullet in <xref target="l4sid_congestion_respon | ||||
se" format="default"/> above (which concerns L4S | <t>The normative Item <xref target="l4sid_Prague_req-classic-ecn-respo | |||
nse" format="counter"/> in <xref target="l4sid_congestion_response" format="defa | ||||
ult"/> above (which concerns L4S | ||||
response to congestion from a Classic ECN AQM) aims to ensure that | response to congestion from a Classic ECN AQM) aims to ensure that | |||
these 'coexistence' requirements are satisfied, but it makes some | these 'coexistence' requirements are satisfied, but it makes some | |||
compromises. This subsection highlights and justifies those | compromises. This subsection highlights and justifies those | |||
compromises and <xref target="l4sid_sec_fallback_on_classic_CE" format | compromises, and <xref target="l4sid_sec_fallback_on_classic_CE" forma | |||
="default"/> | t="default"/> | |||
and the L4S operational guidance <xref target="I-D.ietf-tsvwg-l4sops" | and the L4S operational guidance <xref target="I-D.ietf-tsvwg-l4sops" | |||
format="default"/> give detailed analysis, examples | format="default"/> give detailed analysis, examples, | |||
and references (the normative text in that bullet takes precedence | and references (the normative text in that bullet takes precedence | |||
if any informative elaboration leads to ambiguity). The approach is | if any informative elaboration leads to ambiguity). The approach is | |||
based on an assessment of the risk of harm, which is a combination | based on an assessment of the risk of harm, which is a combination | |||
of the prevalence of the conditions necessary for harm to occur, and | of the prevalence of the conditions necessary for harm to occur, and | |||
the potential severity of the harm if they do. </t> | the potential severity of the harm if they do. </t> | |||
<dl newline="false" spacing="normal"> | <dl newline="false" spacing="normal"> | |||
<dt>Prevalence:</dt> | <dt>Prevalence:</dt> | |||
<dd> | <dd> | |||
<t>There are three cases:</t> | <t>There are three cases:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Drop Tail: Coexistence between L4S and Classic flows is | <li>Drop Tail: Coexistence between L4S and Classic flows is | |||
not in doubt where the bottleneck does not support any form | not in doubt where the bottleneck does not support any form | |||
of ECN, which has remained by far the most prevalent case | of ECN, which has remained by far the most prevalent case | |||
since the ECN RFC was published in 2001.</li> | since the ECN spec <xref target="RFC3168" format="default"/> w as published in 2001.</li> | |||
<li>L4S: Coexistence is not in doubt if the bottleneck | <li>L4S: Coexistence is not in doubt if the bottleneck | |||
supports L4S.</li> | supports L4S.</li> | |||
<li> | <li> | |||
<t>Classic ECN <xref target="RFC3168" format="default"/>: The | <t>Classic ECN: The | |||
compromises centre around cases where the bottleneck | compromises centre around cases where the bottleneck | |||
supports Classic ECN but not L4S. But it depends on which | supports Classic ECN <xref target="RFC3168" format="default"/> | |||
sub-case:</t> | but not L4S. | |||
But it depends on which sub-case:</t> | ||||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Shared Queue with Classic ECN: At the time of | <li>Shared Queue with Classic ECN: At the time of | |||
writing, the members of the Transport Working group are | writing, the members of the Transport Working Group are | |||
not aware of any current deployments of single-queue | not aware of any current deployments of single-queue | |||
Classic ECN bottlenecks in the Internet. Nonetheless, at | Classic ECN bottlenecks in the Internet. Nonetheless, at | |||
the scale of the Internet, rarity need not imply small | the scale of the Internet, rarity need not imply small | |||
numbers, nor that there will be rarity in the | numbers nor that there will be rarity in the | |||
future.</li> | future.</li> | |||
<li> | <li> | |||
<t>Per-Flow-queues with Classic ECN: Most AQMs with | <t>Per-Flow Queues with Classic ECN: Most AQMs with | |||
per-flow-queuing (FQ) deployed from 2012 onwards had | per-flow queuing deployed from 2012 onwards had | |||
Classic ECN enabled by default, specifically | Classic ECN enabled by default, specifically | |||
FQ-CoDel <xref target="RFC8290" format="default"/> and | FQ-CoDel <xref target="RFC8290" format="default"/> and | |||
COBALT <xref target="COBALT" format="default"/>. But the c | COBALT <xref target="COBALT" format="default"/>. But the c | |||
ompromises | ompromises | |||
only apply to the second of two further sub-cases:</t> | only apply to the second of two further sub-cases:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>With per-flow-queuing, co-existence between | <li>With per-flow queuing, coexistence between | |||
Classic and L4S flows is not normally a problem, | Classic and L4S flows is not normally a problem, | |||
because different flows are not meant to be in the | because different flows are not meant to be in the | |||
same queue (BCP 124 <xref target="RFC4774" format="def | same queue (BCP 124 <xref target="RFC4774" format="def | |||
ault"/> did not foresee the introduction | ault"/> did not foresee the introduction | |||
of per-flow-queuing, which appeared as a potential | of per-flow queuing, which appeared as a potential | |||
isolation technique some eight years after the BCP | isolation technique some eight years after the BCP | |||
was published).</li> | was published).</li> | |||
<li>However, the isolation between L4S and Classic | <li>However, the isolation between L4S and Classic | |||
flows is not perfect in cases where the hashes of | flows is not perfect in cases where the hashes of | |||
flow IDs collide or where multiple flows within a | flow identifiers (IDs) collide or where multiple flows | |||
layer-3 VPN are encapsulated within one flow ID.</li> | within a | |||
Layer 3 VPN are encapsulated within one flow ID.</li> | ||||
</ul> | </ul> | |||
</li> | </li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
</ul> | </ul> | |||
<t>To summarize, the coexistence problem is confined to | <t>To summarize, the coexistence problem is confined to | |||
cases of imperfect flow isolation in an FQ, or in potential | cases of imperfect flow isolation in an FQ or in potential | |||
cases where a Classic ECN AQM has been deployed in a shared | cases where a Classic ECN AQM has been deployed in a shared | |||
queue (see the L4S operational guidance <xref target="I-D.ietf-tsv wg-l4sops" format="default"/> for further details including | queue (see the L4S operational guidance <xref target="I-D.ietf-tsv wg-l4sops" format="default"/> for further details including | |||
recent surveys attempting to quantify prevalence). Further, if | recent surveys attempting to quantify prevalence). Further, if | |||
one of these cases does occur, the coexistence problem does not | one of these cases does occur, the coexistence problem does not | |||
arise unless sources of Classic and L4S flows are simultaneously | arise unless sources of Classic and L4S flows are simultaneously | |||
sharing the same bottleneck queue (e.g. different | sharing the same bottleneck queue (e.g., different | |||
applications in the same household) and flows of each type have | applications in the same household), and flows of each type have | |||
to be large enough to coincide for long enough for any | to be large enough to coincide for long enough for any | |||
throughput imbalance to have developed. Therefore, how often the | throughput imbalance to have developed. Therefore, how often the | |||
coexistence problem arises in practice is listed in <xref target=" l4sid_expts" format="default"/> as an open question that L4S experiments | coexistence problem arises in practice is listed in <xref target=" l4sid_expts" format="default"/> as an open question that L4S experiments | |||
will need to answer.</t> | will need to answer.</t> | |||
</dd> | </dd> | |||
<dt>Severity:</dt> | <dt>Severity:</dt> | |||
<dd>Where long-running L4S and Classic flows | <dd>Where long-running L4S and Classic flows | |||
coincide in a shared queue, testing of one L4S congestion | coincide in a shared queue, testing of one L4S congestion | |||
control (TCP Prague) has found that the imbalance in average | control (TCP Prague) has found that the imbalance in average | |||
throughput between an L4S and a Classic flow can reach 25:1 in | throughput between an L4S and a Classic flow can reach 25:1 in | |||
favour of L4S in the worst case <xref target="ecn-fallback" format ="default"/>. However, when capacity is most scarce, | favour of L4S in the worst case <xref target="ecn-fallback" format ="default"/>. However, when capacity is most scarce, | |||
the Classic flow gets a higher proportion of the link, for | the Classic flow gets a higher proportion of the link, for | |||
instance over a 4 Mb/s link the throughput ratio is below ~10:1 | instance, over a 4 Mb/s link the throughput ratio is below ~10:1 | |||
over paths with a base RTT below 100 ms, and falls below ~5:1 | over paths with a base RTT below 100 ms, and it falls below ~5:1 | |||
for base RTTs below 20ms.</dd> | for base RTTs below 20 ms.</dd> | |||
</dl> | </dl> | |||
<t>These throughput ratios can clearly fall well outside current RFC | <t>These throughput ratios can clearly fall well outside current RFC | |||
guidance on coexistence. However, the tendency towards leaving a | guidance on coexistence. However, the tendency towards leaving a | |||
greater share for Classic flows at lower link rate and the very | greater share for Classic flows at lower link rate and the very | |||
limited prevalence of the conditions necessary for harm to occur led | limited prevalence of the conditions necessary for harm to occur led | |||
to the possibility of allowing the RFC requirements to be | to the possibility of allowing the RFC requirements to be | |||
compromised, albeit briefly:</t> | compromised, albeit briefly:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>The recommended approach is still to detect and adapt to a | <li>The recommended approach is still to detect and adapt to a | |||
Classic ECN AQM in real-time, which is fully consistent with all | Classic ECN AQM in real time, which is fully consistent with all | |||
the RFCs on coexistence. In other words, the "SHOULD"s in the | the RFCs on coexistence. In other words, the "<bcp14>SHOULD</bcp14 | |||
third bullet of <xref target="l4sid_congestion_response" format="d | >"s in | |||
efault"/> above | Item <xref target="l4sid_Prague_req-classic-ecn-response" format=" | |||
expect the sender to implement something similar to the proof of | counter"/> of <xref target="l4sid_congestion_response" format="default"/> above | |||
concept code that detects the presence of a Classic ECN AQM and | expect the sender to implement something similar to the proof-of-c | |||
oncept | ||||
code that detects the presence of a Classic ECN AQM and | ||||
falls back to a Classic congestion response within a few round | falls back to a Classic congestion response within a few round | |||
trips <xref target="ecn-fallback" format="default"/>. However, alt hough this | trips <xref target="ecn-fallback" format="default"/>. However, alt hough this | |||
code reliably detects a Classic ECN AQM, the current code can | code reliably detects a Classic ECN AQM, the current code can | |||
also wrongly categorize an L4S AQM as Classic, most often in | also wrongly categorize an L4S AQM as Classic, most often in | |||
cases when link rate is low or RTT is high. Although this is the | cases when link rate is low or RTT is high. Although this is the | |||
safe way round, and although implementers are expected to be | safe way round, and although implementers are expected to be | |||
able to improve on this proof of concept, concerns have been | able to improve on this proof of concept, concerns have been | |||
raised that implementers might lose faith in such detection and | raised that implementers might lose faith in such detection and | |||
disable it.</li> | disable it.</li> | |||
<li>Therefore the third bullet in <xref target="l4sid_congestion_res | <li>Item <xref target="l4sid_Prague_req-classic-ecn-response" format | |||
ponse" format="default"/> above allows a compromise | ="counter"/> in <xref target="l4sid_congestion_response" format="default"/> abov | |||
where coexistence could diverge from the requirements in the RFC | e therefore allows a compromise | |||
Series briefly, but mandatory monitoring is required, in order | where coexistence could briefly diverge from the requirements in t | |||
he RFC | ||||
Series, but mandatory monitoring is required in order | ||||
to detect such cases and trigger remedial action. This approach | to detect such cases and trigger remedial action. This approach | |||
tolerates a brief divergence from the RFCs given the likely low | tolerates a brief divergence from the RFCs given the likely low | |||
prevalence and given harm here means a flow progresses more | prevalence and given harm here means a flow progresses more | |||
slowly than otherwise, but it does progress. The L4S operational | slowly than it would otherwise, but it does progress. The L4S oper | |||
guidance <xref target="I-D.ietf-tsvwg-l4sops" format="default"/> o | ational | |||
utlines a | guidance <xref target="I-D.ietf-tsvwg-l4sops" format="default"/> o | |||
range of example remedial actions that include alterations | utlines a | |||
either to the sender or to the network. However, the final | range of example remedial actions that include alterations to | |||
normative requirement in the third bullet of <xref target="l4sid_c | either the sender or the network. However, the final | |||
ongestion_response" format="default"/> above places ultimate | normative requirement in Item <xref target="l4sid_Prague_req-class | |||
ic-ecn-response" format="counter"/> of <xref target="l4sid_congestion_response" | ||||
format="default"/> above places ultimate | ||||
responsibility for remedial action on the sender. If coexistence | responsibility for remedial action on the sender. If coexistence | |||
problems with a Classic ECN AQM are detected (implying they have | problems with a Classic ECN AQM are detected (implying they have | |||
not been resolved by the network), it says the sender "MUST" | not been resolved by the network), it states that the sender "<bcp | |||
revert to a Classic congestion control."</li> | 14>MUST</bcp14>" | |||
revert to a Classic congestion control.</li> | ||||
</ul> | </ul> | |||
<t><xref target="I-D.ietf-tsvwg-l4sops" format="default"/> also gives example | <t><xref target="I-D.ietf-tsvwg-l4sops" format="default"/> also gives example | |||
ways in which L4S congestion controls can be rolled out initially in | ways in which L4S congestion controls can be rolled out initially in | |||
lower risk scenarios.</t> | lower-risk scenarios.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Filtering or Smoothing of ECN Feedback</name> | <name>Filtering or Smoothing of ECN Feedback</name> | |||
<t><xref target="l4sid_Semantics" format="default"/> below specifies tha t an L4S AQM is | <t><xref target="l4sid_Semantics" format="default"/> below specifies tha t an L4S AQM is | |||
expected to signal L4S ECN immediately, to avoid introducing delay due | expected to signal L4S ECN immediately, to avoid introducing delay due | |||
to filtering or smoothing. This contrasts with a Classic AQM, which | to filtering or smoothing. This contrasts with a Classic AQM, which | |||
filters out variations in the queue before signalling ECN marking or | filters out variations in the queue before signalling ECN marking or | |||
drop. In the L4S architecture <xref target="I-D.ietf-tsvwg-l4s-arch" for mat="default"/>, responsibility for smoothing out | drop. In the L4S architecture <xref target="RFC9330" format="default"/>, responsibility for smoothing out | |||
these variations shifts to the sender's congestion control.</t> | these variations shifts to the sender's congestion control.</t> | |||
<t>This shift of responsibility has the advantage that each sender can | <t>This shift of responsibility has the advantage that each sender can | |||
smooth variations over a timescale proportionate to its own RTT. | smooth variations over a timescale proportionate to its own RTT. | |||
Whereas, in the Classic approach, the network doesn't know the RTTs of | Whereas, in the Classic approach, the network doesn't know the RTTs of | |||
any of the flows, so it has to smooth out variations for a worst-case | any of the flows, so it has to smooth out variations for a worst-case | |||
RTT to ensure stability. For all the typical flows with shorter RTT | RTT to ensure stability. For all the typical flows with shorter RTTs | |||
than the worst-case, this makes congestion control unnecessarily | than the worst-case, this makes congestion control unnecessarily | |||
sluggish.</t> | sluggish.</t> | |||
<t>This also gives an L4S sender the choice not to smooth, depending | <t>This also gives an L4S sender the choice not to smooth, depending | |||
on its context (start-up, congestion avoidance, etc.). Therefore, this | on its context (start-up, congestion avoidance, etc.). Therefore, this | |||
document places no requirement on an L4S congestion control to smooth | document places no requirement on an L4S congestion control to smooth | |||
out variations in any particular way. Implementers are encouraged to | out variations in any particular way. Implementers are encouraged to | |||
openly publish the approach they take to smoothing, and the results | openly publish the approach they take to smoothing as well as results | |||
and experience they gain during the L4S experiment.</t> | and experience they gain during the L4S experiment.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_network_req" numbered="true" toc="default"> | <section anchor="l4sid_network_req" numbered="true" toc="default"> | |||
<name>Network Node Behaviour</name> | <name>Network Node Behaviour</name> | |||
<t/> | ||||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Classification and Re-Marking Behaviour</name> | <name>Classification and Re-Marking Behaviour</name> | |||
<t>A network node that implements the L4S service:</t> | <t>A network node that implements the L4S service:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>MUST classify arriving ECT(1) packets for L4S treatment, unless | <li><bcp14>MUST</bcp14> classify arriving ECT(1) packets for L4S treat | |||
overridden by another classifier (e.g., see <xref target="l4sid_excl | ment, unless | |||
usion_dualq" format="default"/>);</li> | overridden by another classifier (e.g., see <xref target="l4sid_excl | |||
usion_dualq" format="default"/>).</li> | ||||
<li> | <li> | |||
<t>MUST classify arriving CE packets for L4S treatment as well, | <t><bcp14>MUST</bcp14> classify arriving CE packets for L4S treatmen t as well, | |||
unless overridden by another classifier or unless the exception | unless overridden by another classifier or unless the exception | |||
referred to next applies;</t> | referred to next applies.</t> | |||
<t>CE packets might | <t>CE packets might | |||
have originated as ECT(1) or ECT(0), but the above rule to | have originated as ECT(1) or ECT(0), but the above rule to | |||
classify them as if they originated as ECT(1) is the safe choice | classify them as if they originated as ECT(1) is the safe choice | |||
(see <xref target="l4sid_ECT1_CE" format="default"/> for rationale). The exception | (see <xref target="l4sid_ECT1_CE" format="default"/> for rationale). The exception | |||
is where some flow-aware in-network mechanism happens to be | is where some flow-aware in-network mechanism happens to be | |||
available for distinguishing CE packets that originated as ECT(0), | available for distinguishing CE packets that originated as ECT(0), | |||
as described in <xref target="l4sid_identification_transport_aware" format="default"/>, but there is no | as described in <xref target="l4sid_identification_transport_aware" format="default"/>, but there is no | |||
implication that such a mechanism is necessary.</t> | implication that such a mechanism is necessary.</t> | |||
</li> | </li> | |||
</ul> | </ul> | |||
<t>An L4S AQM treatment follows similar codepoint transition rules to | <t>An L4S AQM treatment follows similar codepoint transition rules to | |||
those in RFC 3168. Specifically, the ECT(1) codepoint MUST NOT be | those in <xref target="RFC3168"/>. Specifically, the ECT(1) codepoint <b | |||
changed to any other codepoint than CE, and CE MUST NOT be changed to | cp14>MUST NOT</bcp14> be | |||
any other codepoint. An ECT(1) packet is classified as ECN-capable | changed to any codepoint other than CE, and CE <bcp14>MUST NOT</bcp14> b | |||
and, if congestion increases, an L4S AQM algorithm will increasingly | e changed to | |||
mark the ECN field as CE, otherwise forwarding packets unchanged as | any other codepoint. An ECT(1) packet is classified as 'ECN-capable', | |||
and if congestion increases, an L4S AQM algorithm will increasingly | ||||
mark the IP-ECN field as CE, otherwise forwarding packets unchanged as | ||||
ECT(1). Necessary conditions for an L4S marking treatment are defined | ECT(1). Necessary conditions for an L4S marking treatment are defined | |||
in <xref target="l4sid_Semantics" format="default"/>.</t> | in <xref target="l4sid_Semantics" format="default"/>.</t> | |||
<t>Under persistent overload an L4S marking treatment MUST begin | <t>Under persistent overload, an L4S marking treatment | |||
applying drop to L4S traffic until the overload episode has subsided, | <bcp14>MUST</bcp14> begin applying drop to L4S traffic until the | |||
as recommended for all AQM methods in <xref target="RFC7567" format="def | overload episode has subsided, as recommended for all AQM methods in | |||
ault"/> | <xref target="RFC7567" sectionFormat="of" section="4.2.1"/>, which | |||
(Section 4.2.1), which follows the similar advice in RFC 3168 | follows the similar advice in <xref target="RFC3168" | |||
(Section 7). During overload, it MUST apply the same drop probability | sectionFormat="of" section="7"/>. During overload, it | |||
to L4S traffic as it would to Classic traffic.</t> | <bcp14>MUST</bcp14> apply the same drop probability to L4S traffic as | |||
it would to Classic traffic.</t> | ||||
<t>Where an L4S AQM is transport-aware, this requirement could be | <t>Where an L4S AQM is transport-aware, this requirement could be | |||
satisfied by using drop in only the most overloaded individual | satisfied by using drop in only the most overloaded individual | |||
per-flow AQMs. In a DualQ with flow-aware queue protection | per-flow AQMs. In a DualQ with flow-aware queue protection | |||
(e.g. <xref target="I-D.briscoe-docsis-q-protection" format="default"/>) , this | (e.g., <xref target="I-D.briscoe-docsis-q-protection" format="default"/> ), this | |||
could be achieved by redirecting packets in those flows contributing | could be achieved by redirecting packets in those flows contributing | |||
most to the overload out of the L4S queue so that they are subjected | most to the overload out of the L4S queue so that they are subjected | |||
to drop in the Classic queue.</t> | to drop in the Classic queue.</t> | |||
<!--KDS:Do we | ||||
want to propose this? In the paper I proposed to limit the probabilities | ||||
to a max value, and to use delay to control overload (until tail drop). | ||||
BB: I've allowed what you do and made it sound compatible with RFC3168 | ||||
<t>For backward compatibility in uncontrolled environments, a network | <t>For backward compatibility in uncontrolled environments, a network | |||
node that implements the L4S treatment MUST also implement an AQM | node that implements the L4S treatment <bcp14>MUST</bcp14> also implemen t an AQM | |||
treatment for the Classic service as defined in <xref target="l4sid_Term inology" format="default"/>. This Classic AQM treatment need not mark | treatment for the Classic service as defined in <xref target="l4sid_Term inology" format="default"/>. This Classic AQM treatment need not mark | |||
ECT(0) packets, but if it does, see <xref target="l4sid_Semantics" forma t="default"/> | ECT(0) packets, but if it does, see <xref target="l4sid_Semantics" forma t="default"/> | |||
for the strengths of the markings relative to drop. It MUST classify | for the strengths of the markings relative to drop. It <bcp14>MUST</bcp1 4> classify | |||
arriving ECT(0) and Not-ECT packets for treatment by this Classic AQM | arriving ECT(0) and Not-ECT packets for treatment by this Classic AQM | |||
(for the DualQ Coupled AQM, see the extensive discussion on | (for the DualQ Coupled AQM; see the extensive discussion on | |||
classification in Sections 2.3 and 2.5.1.1 of <xref target="I-D.ietf-tsv | classification in Sections <xref target="RFC9332" section="2.3" | |||
wg-aqm-dualq-coupled" format="default"/>).</t> | sectionFormat="bare"/> and <xref target="RFC9332" section="2.5.1.1" | |||
<t>In case unforeseen problems arise with the L4S experiment, it MUST | sectionFormat="bare"/> of <xref target="RFC9332" format="default"/>).</t> | |||
<t>In case unforeseen problems arise with the L4S experiment, it <bcp14> | ||||
MUST</bcp14> | ||||
be possible to configure an L4S implementation to disable the L4S | be possible to configure an L4S implementation to disable the L4S | |||
treatment. Once disabled, all packets of all ECN codepoints will | treatment. | |||
receive Classic treatment and ECT(1) packets MUST be treated as if | Once disabled, ECT(1) packets <bcp14>MUST</bcp14> be treated as if | |||
they were Not-ECT.</t> | they were Not-ECT.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_Semantics" numbered="true" toc="default"> | <section anchor="l4sid_Semantics" numbered="true" toc="default"> | |||
<name>The Strength of L4S CE Marking Relative to Drop</name> | <name>The Strength of L4S CE Marking Relative to Drop</name> | |||
<t>The relative strengths of L4S CE and drop are irrelevant where AQMs | <t>The relative strengths of L4S CE and drop are irrelevant where AQMs | |||
are implemented in separate queues per-application-flow, which are | are implemented in separate queues per application-flow, which are | |||
then explicitly scheduled (e.g. with an FQ scheduler as in | then explicitly scheduled (e.g., with an FQ scheduler as in | |||
FQ-CoDel <xref target="RFC8290" format="default"/>). Nonetheless, the re | FQ-CoDel <xref target="RFC8290" format="default"/>). Nonetheless, the re | |||
lationship | lationship | |||
between them needs to be defined for the coupling between L4S and | between them needs to be defined for the coupling between L4S and | |||
Classic congestion signals in a DualQ Coupled AQM <xref target="I-D.ietf -tsvwg-aqm-dualq-coupled" format="default"/>, as below.</t> | Classic congestion signals in a DualQ Coupled AQM <xref target="RFC9332" format="default"/>, as indicated below.</t> | |||
<t>Unless an AQM node schedules application flows explicitly, the | <t>Unless an AQM node schedules application flows explicitly, the | |||
likelihood that the AQM drops a Not-ECT Classic packet (p_C) MUST be | likelihood that the AQM drops a Not-ECT Classic packet (p_C) <bcp14>MUST </bcp14> be | |||
roughly proportional to the square of the likelihood that it would | roughly proportional to the square of the likelihood that it would | |||
have marked it if it had been an L4S packet (p_L). That is</t> | have marked it if it had been an L4S packet (p_L). That is:</t> | |||
<ul empty="true" spacing="normal"> | ||||
<li>p_C ~= (p_L / k)^2</li> | <t indent="3">p_C ~= (p_L / k)<sup>2</sup></t> | |||
</ul> | ||||
<t>The constant of proportionality (k) does not have to be | <t>The constant of proportionality (k) does not have to be | |||
standardized for interoperability, but a value of 2 is RECOMMENDED. | standardized for interoperability, but a value of 2 is <bcp14>RECOMMENDE D</bcp14>. | |||
The term 'likelihood' is used above to allow for marking and dropping | The term 'likelihood' is used above to allow for marking and dropping | |||
to be either probabilistic or deterministic.</t> | to be either probabilistic or deterministic.</t> | |||
<t>This formula ensures that Scalable and Classic flows will converge | <t>This formula ensures that Scalable and Classic flows will converge | |||
to roughly equal congestion windows, for the worst case of Reno | to roughly equal congestion windows, for the worst case of Reno | |||
congestion control. This is because the congestion windows of Scalable | congestion control. This is because the congestion windows of Scalable | |||
and Classic congestion controls are inversely proportional to p_L and | and Classic congestion controls are inversely proportional to p_L and | |||
sqrt(p_C) respectively. So squaring p_C in the above formula | sqrt(p_C), respectively. So squaring p_C in the above formula | |||
counterbalances the square root that characterizes Reno-friendly | counterbalances the square root that characterizes Reno-friendly | |||
flows.</t> | flows.</t> | |||
<t>Note that, contrary to RFC 3168, an AQM implementing the L4S | <aside><t>Note that, contrary to <xref target="RFC3168" format="default" />, an AQM implementing the L4S | |||
and Classic treatments does not mark an ECT(1) packet under the same | and Classic treatments does not mark an ECT(1) packet under the same | |||
conditions that it would have dropped a Not-ECT packet, as allowed by | conditions that it would have dropped a Not-ECT packet, as allowed by | |||
<xref target="RFC8311" format="default"/>, which updates RFC 3168. Howev | <xref target="RFC8311" format="default"/>, which updates <xref target="R | |||
er, if it | FC3168" format="default"/>. | |||
marks ECT(0) packets, it does so under the same conditions that it | However, if it | |||
would have dropped a Not-ECT packet <xref target="RFC3168" format="defau | marks ECT(0) packets, it does so under the same conditions that it would | |||
lt"/>.<!--KDS: replace "a Not-ECT packet" | have dropped a | |||
by "a packet", as any drop should be classic, and also ECT(0),(1) or CE | Not-ECT packet <xref target="RFC3168" format="default"/>. | |||
packets can be dropped | ||||
BB: But that's not the intended meaning. Yes, a packet with any ECN field can be | </t></aside> | |||
dropped, but this rule is just about | <t>Also, in the L4S architecture <xref target="RFC9330" format="default" | |||
what /would/ have been done /if/ the ECN field had been one specific value (Not- | />, the sender, not the network, is | |||
ECT). | responsible for smoothing out variations in the queue. So an L4S AQM | |||
</t> | <bcp14>MUST</bcp14> signal congestion as soon as possible. Then, an L4S | |||
<t>Also, In the L4S architecture <xref target="I-D.ietf-tsvwg-l4s-arch" | sender | |||
format="default"/>, the sender, not the network, is | ||||
responsible for smoothing out variations in the queue. So, an L4S AQM | ||||
MUST signal congestion as soon as possible. Then, an L4S sender | ||||
generally interprets CE marking as an unsmoothed signal.</t> | generally interprets CE marking as an unsmoothed signal.</t> | |||
<t>This requirement does not prevent an L4S AQM from mixing in | <t>This requirement does not prevent an L4S AQM from mixing in | |||
additional congestion signals that are smoothed, such as the signals | additional congestion signals that are smoothed, such as the signals | |||
from a Classic smoothed AQM that are coupled with unsmoothed L4S | from a Classic smoothed AQM that are coupled with unsmoothed L4S | |||
signals in the coupled DualQ <xref target="I-D.ietf-tsvwg-aqm-dualq-coup | signals in the coupled DualQ <xref target="RFC9332" format="default"/>, | |||
led" format="default"/>. But only as long as the | but only as long as the | |||
onset of congestion can be signalled immediately, and can be | onset of congestion can be signalled immediately and can be | |||
interpreted by the sender as if it has been signalled immediately, | interpreted by the sender as if it has been signalled immediately, | |||
which is important for interoperability</t> | which is important for interoperability</t> | |||
</section> | </section> | |||
<section anchor="l4sid_identification_transport_aware" numbered="true" toc ="default"> | <section anchor="l4sid_identification_transport_aware" numbered="true" toc ="default"> | |||
<name>Exception for L4S Packet Identification by Network Nodes with Tran sport-Layer Awareness</name> | <name>Exception for L4S Packet Identification by Network Nodes with Tran sport-Layer Awareness</name> | |||
<!--This section doesn't fit very well here. It would be better as an Ap | ||||
pendix, then it would need the following introductory | ||||
para: | ||||
Section 2.3 recognizes that CE packets might have originally been L4S or Classic | ||||
. It argues that this ambiguity is not | ||||
serious, and therefore, for simplicity, it recommends that a packet classifer in | ||||
the network "SHOULD" classify all CE | ||||
packets as L4S. Even though it is probably unnecessary to resolve the ambiguity, | ||||
the following text provides a way to do | ||||
so using per-flow processing in the network. Per-flow processing has other detri | ||||
mental side-effects, so this text is | ||||
controversial, but worth recording, particularly for those cases where per-flow | ||||
processing is already being used for | ||||
other purposes.--> | ||||
<t>To implement L4S packet classification, a network node does not | <t>To implement L4S packet classification, a network node does not | |||
need to identify transport-layer flows. Nonetheless, if an L4S network | need to identify transport-layer flows. Nonetheless, if an L4S network | |||
node classifies packets by their transport-layer flow ID and their ECN | node classifies packets by their transport-layer flow ID and their ECN | |||
field, and if all the ECT packets in a flow have been ECT(0), the node | field, and if all the ECT packets in a flow have been ECT(0), the node | |||
MAY classify any CE packets in the same flow as if they were Classic | <bcp14>MAY</bcp14> classify any CE packets in the same flow as if they w | |||
ECT(0) packets. In all other cases, a network node MUST classify all | ere Classic | |||
ECT(0) packets. In all other cases, a network node <bcp14>MUST</bcp14> c | ||||
lassify all | ||||
CE packets as if they were ECT(1) packets. Examples of such other | CE packets as if they were ECT(1) packets. Examples of such other | |||
cases are: i) if no ECT packets have yet been identified in a flow; | cases are: i) if no ECT packets have yet been identified in a flow; | |||
ii) if it is not desirable for a network node to identify | ii) if it is not desirable for a network node to identify | |||
transport-layer flows; or iii) if some ECT packets in a flow have been | transport-layer flows; or iii) if some ECT packets in a flow have been | |||
ECT(1) (this advice will need to be verified as part of L4S | ECT(1) (this advice will need to be verified as part of L4S | |||
experiments).</t> | experiments).</t> | |||
</section> | </section> | |||
<section anchor="l4sid_other_IDs" numbered="true" toc="default"> | <section anchor="l4sid_other_IDs" numbered="true" toc="default"> | |||
<name>Interaction of the L4S Identifier with other Identifiers</name> | <name>Interaction of the L4S Identifier with Other Identifiers</name> | |||
<t>The examples in this section concern how additional identifiers | <t>The examples in this section concern how additional identifiers | |||
might complement the L4S identifier to classify packets between | might complement the L4S identifier to classify packets between | |||
class-based queues. Firstly <xref target="l4sid_iother_IDs_dualq" format | class-based queues. Firstly, <xref target="l4sid_iother_IDs_dualq" forma | |||
="default"/> | t="default"/> | |||
considers two queues, L4S and Classic, as in the Coupled DualQ | considers two queues, L4S and Classic, as in the DualQ Coupled | |||
AQM <xref target="I-D.ietf-tsvwg-aqm-dualq-coupled" format="default"/>, | AQM <xref target="RFC9332" format="default"/>, either | |||
either | ||||
alone (<xref target="l4sid_inclusion_dualq" format="default"/>) or withi n a larger | alone (<xref target="l4sid_inclusion_dualq" format="default"/>) or withi n a larger | |||
queuing hierarchy (<xref target="l4sid_exclusion_dualq" format="default" />). Then <xref target="l4sid_iother_IDs_fq" format="default"/> considers scheme s that might combine | queuing hierarchy (<xref target="l4sid_exclusion_dualq" format="default" />). Then, <xref target="l4sid_iother_IDs_fq" format="default"/> considers schem es that might combine | |||
per-flow 5-tuples with other identifiers.</t> | per-flow 5-tuples with other identifiers.</t> | |||
<section anchor="l4sid_iother_IDs_dualq" numbered="true" toc="default"> | <section anchor="l4sid_iother_IDs_dualq" numbered="true" toc="default"> | |||
<name>DualQ Examples of Other Identifiers Complementing L4S Identifier s</name> | <name>DualQ Examples of Other Identifiers Complementing L4S Identifier s</name> | |||
<t/> | ||||
<section anchor="l4sid_inclusion_dualq" numbered="true" toc="default"> | <section anchor="l4sid_inclusion_dualq" numbered="true" toc="default"> | |||
<name>Inclusion of Additional Traffic with L4S</name> | <name>Inclusion of Additional Traffic with L4S</name> | |||
<t>In a typical case for the public Internet a network element | <t>In a typical case for the public Internet, a network element | |||
that implements L4S in a shared queue might want to classify some | that implements L4S in a shared queue might want to classify some | |||
low-rate but unresponsive traffic (e.g. DNS, LDAP, NTP, | low-rate but unresponsive traffic (e.g., DNS, LDAP, NTP, | |||
voice, game sync packets) into the low latency queue to mix with | voice, and game sync packets) into the low-latency queue to mix with | |||
L4S traffic. In this case it would not be appropriate to call the | L4S traffic. In this case, it would not be appropriate to call the | |||
queue an L4S queue, because it is shared by L4S and non-L4S | queue an L4S queue, because it is shared by L4S and non-L4S | |||
traffic. Instead, it will be called the low latency or L queue. | traffic. Instead, it will be called the low-latency or L queue. | |||
The L queue then offers two different treatments:</t> | The L queue then offers two different treatments:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>The L4S treatment, which is a combination of the L4S AQM | <li>the L4S treatment, which is a combination of the L4S AQM | |||
treatment and a priority scheduling treatment;</li> | treatment and a priority scheduling treatment, and</li> | |||
<li>The low latency treatment, which is solely the priority | <li>the low-latency treatment, which is solely the priority | |||
scheduling treatment, without ECN-marking by the AQM.</li> | scheduling treatment, without ECN marking by the AQM.</li> | |||
</ul> | </ul> | |||
<t>To identify packets for just the scheduling treatment, it would | <t>To identify packets for just the scheduling treatment, it would | |||
be inappropriate to use the L4S ECT(1) identifier, because such | be inappropriate to use the L4S ECT(1) identifier, because such | |||
traffic is unresponsive to ECN marking. Examples of relevant | traffic is unresponsive to ECN marking. Examples of relevant | |||
non-ECN identifiers are:</t> | non-ECN identifiers are:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>address ranges of specific applications or hosts configured | <li>address ranges of specific applications or hosts configured | |||
to be, or known to be, safe, e.g. hard-coded IoT devices | to be, or known to be, safe, e.g., hard-coded Internet of Things | |||
sending low intensity traffic;</li> | (IoT) devices | |||
sending low-intensity traffic;</li> | ||||
<li>certain low data-volume applications or protocols | <li>certain low data-volume applications or protocols | |||
(e.g. ARP, DNS);</li> | (e.g., ARP and DNS); and</li> | |||
<li>specific Diffserv codepoints that indicate traffic with | <li>specific Diffserv codepoints that indicate traffic with | |||
limited burstiness such as the EF (Expedited | limited burstiness such as the EF <xref target="RFC3246" format= | |||
Forwarding <xref target="RFC3246" format="default"/>), | "default"/>, | |||
Voice-Admit <xref target="RFC5865" format="default"/> or propose | VOICE-ADMIT <xref target="RFC5865" format="default"/>, or propos | |||
d NQB | ed | |||
(Non-Queue-Building <xref target="I-D.ietf-tsvwg-nqb" format="de | Non-Queue-Building (NQB) <xref target="I-D.ietf-tsvwg-nqb" forma | |||
fault"/>) | t="default"/> | |||
service classes or equivalent local-use DSCPs (see <xref target= | service classes or equivalent Local-use DSCPs (see <xref target= | |||
"I-D.briscoe-tsvwg-l4s-diffserv" format="default"/>).</li> | "I-D.briscoe-tsvwg-l4s-diffserv" format="default"/>).</li> | |||
</ul> | </ul> | |||
<t>To be clear, classifying into the L queue based on application | <t>To be clear, classifying into the L queue based on application-la | |||
layer identification (e.g. DNS) is an example of a local | yer | |||
identification (e.g., DNS) is an example of a local | ||||
optimization, not a recommendation. Applications will not be able | optimization, not a recommendation. Applications will not be able | |||
to rely on such unsolicited optimization. A more reliable approach | to rely on such unsolicited optimization. A more reliable approach | |||
would be for the sender to set an appropriate IP layer identifier, | would be for the sender to set an appropriate IP-layer identifier, | |||
such as one of the above Diffserv codepoints.</t> | such as one of the above Diffserv codepoints.</t> | |||
<t>In summary, a network element that implements L4S in a shared | <t>In summary, a network element that implements L4S in a shared | |||
queue MAY classify additional types of packets into the L queue | queue <bcp14>MAY</bcp14> classify additional types of packets into t | |||
based on identifiers other than the ECN field, but the types | he L queue | |||
SHOULD be 'safe' to mix with L4S traffic, where 'safe' is | based on identifiers other than the IP-ECN field, but the types | |||
<bcp14>SHOULD</bcp14> be 'safe' to mix with L4S traffic, where 'safe | ||||
' is | ||||
explained in <xref target="l4sid_safe_unresponsive" format="default" />.</t> | explained in <xref target="l4sid_safe_unresponsive" format="default" />.</t> | |||
<t>A packet that carries one of these non-ECN identifiers to | <t>A packet that carries one of these non-ECN identifiers to | |||
classify it into the L queue would not be subject to the L4S ECN | classify it into the L queue would not be subject to the L4S ECN-mar | |||
marking treatment, unless it also carried an ECT(1) or CE | king | |||
codepoint. The specification of an L4S AQM MUST define the | treatment, unless it also carried an ECT(1) or CE | |||
codepoint. | ||||
The specification of an L4S AQM <bcp14>MUST</bcp14> define the | ||||
behaviour for packets with unexpected combinations of codepoints, | behaviour for packets with unexpected combinations of codepoints, | |||
e.g. a non-ECN-based classifier for the L queue, but ECT(0) | e.g., a non-ECN-based classifier for the L queue but with ECT(0) | |||
in the ECN field (for examples see section 2.5.1.1 of the DualQ | in the IP-ECN field (for examples with appropriate behaviours, see S | |||
spec <xref target="I-D.ietf-tsvwg-aqm-dualq-coupled" format="default | ection <xref target="RFC9332" section="2.5.1.1" | |||
"/>).</t> | sectionFormat="bare"/> of the DualQ | |||
spec <xref target="RFC9332" format="default"/>).</t> | ||||
<t>For clarity, non-ECN identifiers, such as the examples itemized | <t>For clarity, non-ECN identifiers, such as the examples itemized | |||
above, might be used by some network operators who believe they | above, might be used by some network operators who believe they | |||
identify non-L4S traffic that would be safe to mix with L4S | identify non-L4S traffic that would be safe to mix with L4S | |||
traffic. They are not alternative ways for a host to indicate that | traffic. They are not alternative ways for a host to indicate that | |||
it is sending L4S packets. Only the ECT(1) ECN codepoint indicates | it is sending L4S packets. | |||
Only the ECT(1) ECN codepoint indicates | ||||
to a network element that a host is sending L4S packets (and CE | to a network element that a host is sending L4S packets (and CE | |||
indicates that it could have originated as ECT(1)). Specifically | indicates that it could have originated as ECT(1)). Specifically, | |||
ECT(1) indicates that the host claims its behaviour satisfies the | ECT(1) indicates that the host claims its behaviour satisfies the | |||
prerequisite transport requirements in <xref target="l4sid_transport _req" format="default"/>.</t> | prerequisite transport requirements in <xref target="l4sid_transport _req" format="default"/>.</t> | |||
<t>In order to include non-L4S packets in the L queue, a network | ||||
node MUST NOT alter Not-ECT or ECT(0) in the IP-ECN field to an | <t>In order to include non-L4S packets in the L queue, a network | |||
node <bcp14>MUST NOT</bcp14> change Not-ECT or ECT(0) in the IP-ECN | ||||
field into an | ||||
L4S identifier. This ensures that these codepoints survive for any | L4S identifier. This ensures that these codepoints survive for any | |||
potential use later on the network path. If a non-compliant or | potential use later on the network path. If a non-compliant or | |||
malicious network node did swap ECT(0) to ECT(1), the packet could | malicious network node did swap ECT(0) to ECT(1), the packet could | |||
subsequently be ECN-marked by a downstream L4S AQM, but the sender | subsequently be ECN-marked by a downstream L4S AQM, but the sender | |||
would respond to congestion indications thinking it had sent a | would respond to congestion indications thinking it had sent a | |||
Classic packet. This could result in the flow yielding excessively | Classic packet. This could result in the flow yielding excessively | |||
to other L4S flows sharing the downstream bottleneck.</t> | to other L4S flows sharing the downstream bottleneck.</t> | |||
<section anchor="l4sid_safe_unresponsive" numbered="true" toc="defau lt"> | <section anchor="l4sid_safe_unresponsive" numbered="true" toc="defau lt"> | |||
<name>'Safe' Unresponsive Traffic</name> | <name>'Safe' Unresponsive Traffic</name> | |||
<t>The above section requires unresponsive traffic to be 'safe' | <t>The above section requires unresponsive traffic to be 'safe' | |||
to mix with L4S traffic. Ideally this means that the sender | to mix with L4S traffic. Ideally, this means that the sender | |||
never sends any sequence of packets at a rate that exceeds the | never sends any sequence of packets at a rate that exceeds the | |||
available capacity of the bottleneck link. However, typically an | available capacity of the bottleneck link. However, typically an | |||
unresponsive transport does not even know the bottleneck | unresponsive transport does not even know the bottleneck | |||
capacity of the path, let alone its available capacity. | capacity of the path, let alone its available capacity. | |||
Nonetheless, an application can be considered safe enough if it | Nonetheless, an application can be considered safe enough if it | |||
paces packets out (not necessarily completely regularly) such | paces packets out (not necessarily with absolute regularity) such | |||
that its maximum instantaneous rate from packet to packet stays | that its maximum instantaneous rate from packet to packet stays | |||
well below a typical broadband access rate.</t> | well below a typical broadband access rate.</t> | |||
<t>This is a vague but useful definition, because many low | <t>This is a vague but useful definition, because many low-latency | |||
latency applications of interest, such as DNS, voice, game sync | applications of interest, such as DNS, voice, game sync | |||
packets, RPC, ACKs, keep-alives, could match this | packets, RPC, ACKs, and keep-alives, could match this | |||
description.</t> | description.</t> | |||
<t>Low rate streams such as voice and game sync packets, might | <t>Low-rate streams, such as voice and game sync packets, might | |||
not use continuously adapting ECN-based congestion control, but | not use continuously adapting ECN-based congestion control, but | |||
they ought to at least use a 'circuit-breaker' style of | they ought to at least use a 'circuit-breaker' style of | |||
congestion response <xref target="RFC8083" format="default"/>. If the volume | congestion response <xref target="RFC8083" format="default"/>. If the volume | |||
of traffic from unresponsive applications is high enough to | of traffic from unresponsive applications is high enough to | |||
overload the link, this will at least protect the capacity | overload the link, this will at least protect the capacity | |||
available to responsive applications. However, queuing delay in | available to responsive applications. However, queuing delay in | |||
the L queue will probably rise to that controlled by the Classic | the L queue would probably then rise to the typically higher level | |||
(drop-based) AQM. If a network operator considers that such | targeted by | |||
a Classic (drop-based) AQM. If a network operator considers that s | ||||
uch | ||||
self-restraint is not enough, it might want to police the L | self-restraint is not enough, it might want to police the L | |||
queue (see Section 8.2 of the L4S architecture <xref target="I-D.i | queue (see Section <xref target="RFC9330" section="8.2" | |||
etf-tsvwg-l4s-arch" format="default"/>).</t> | sectionFormat="bare"/> of the L4S architecture <xref target="RFC9330" format="de | |||
fault"/>).</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_exclusion_dualq" numbered="true" toc="default"> | <section anchor="l4sid_exclusion_dualq" numbered="true" toc="default"> | |||
<name>Exclusion of Traffic From L4S Treatment</name> | <name>Exclusion of Traffic from L4S Treatment</name> | |||
<t>To extend the above example, an operator might want to exclude | <t>To extend the above example, an operator might want to exclude | |||
some traffic from the L4S treatment for a policy reason, | some traffic from the L4S treatment for a policy reason, | |||
e.g. security (traffic from malicious sources) or commercial | e.g., security (traffic from malicious sources) or commercial | |||
(e.g. initially the operator may wish to confine the benefits | (e.g., the operator may wish to initially confine the benefits | |||
of L4S to business customers).</t> | of L4S to business customers).</t> | |||
<t>In this exclusion case, the classifier MUST classify on the | ||||
relevant locally-used identifiers (e.g. source addresses) | <t>In this exclusion case, the classifier <bcp14>MUST</bcp14> classi | |||
fy on the | ||||
relevant locally used identifiers (e.g., source addresses) | ||||
before classifying the non-matching traffic on the end-to-end L4S | before classifying the non-matching traffic on the end-to-end L4S | |||
ECN identifier.</t> | ECN identifier.</t> | |||
<t>A network node MUST NOT alter the end-to-end L4S ECN identifier | <t>A network node <bcp14>MUST NOT</bcp14> alter the end-to-end L4S E CN identifier | |||
from L4S to Classic, because an operator decision to exclude | from L4S to Classic, because an operator decision to exclude | |||
certain traffic from L4S treatment is local-only. The end-to-end | certain traffic from L4S treatment is local-only. The end-to-end | |||
L4S identifier then survives for other operators to use, or | L4S identifier then survives for other operators to use, or | |||
indeed, they can apply their own policy, independently based on | indeed, they can apply their own policy, independently based on | |||
their own choice of locally-used identifiers. This approach also | their own choice of locally used identifiers. This approach also | |||
allows any operator to remove its locally-applied exclusions in | allows any operator to remove its locally applied exclusions in | |||
future, e.g. if it wishes to widen the benefit of the L4S | future, e.g., if it wishes to widen the benefit of the L4S | |||
treatment to all its customers. If a non-compliant or malicious | treatment to all its customers. If a non-compliant or malicious | |||
network node did swap ECT(1) to ECT(0), the packet could | network node did swap ECT(1) to ECT(0), the packet could | |||
subsequently be ECN-marked by a downstream Classic ECN AQM. L4S | subsequently be ECN-marked by a downstream Classic ECN AQM. L4S | |||
senders are required to detect and handle such treatment (<xref targ et="l4sid_congestion_response" format="default"/> item 3), but that does not | senders are required to detect and handle such treatment (see Item < xref target="l4sid_Prague_req-classic-ecn-response" format="counter"/> in <xref target="l4sid_congestion_response" format="default"/>), but that does not | |||
make this swap OK, because such detection is not known to be | make this swap OK, because such detection is not known to be | |||
perfect or immediate.</t> | perfect or immediate.</t> | |||
<t>A network node that supports L4S but excludes certain packets | <t>A network node that supports L4S but excludes certain packets | |||
carrying the L4S identifier from L4S treatment MUST still apply | carrying the L4S identifier from L4S treatment <bcp14>MUST</bcp14> s till apply | |||
marking or dropping that is compatible with an L4S congestion | marking or dropping that is compatible with an L4S congestion | |||
response. For instance, it could either drop such packets with the | response. | |||
same likelihood as Classic packets or it could ECN-mark them with | For instance, it could either drop such packets with the | |||
a likelihood appropriate to L4S traffic (e.g. the coupled | same likelihood as Classic packets or ECN-mark them with | |||
probability in a DualQ coupled AQM) but aiming for the Classic | a likelihood appropriate to L4S traffic (e.g., the coupled | |||
delay target. It MUST NOT ECN-mark such packets with a Classic | probability in a DualQ Coupled AQM) but aiming for the Classic | |||
delay target. It <bcp14>MUST NOT</bcp14> ECN-mark such packets with | ||||
a Classic | ||||
marking probability, which could confuse the sender.</t> | marking probability, which could confuse the sender.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Generalized Combination of L4S and Other Identifiers</name> | <name>Generalized Combination of L4S and Other Identifiers</name> | |||
<t>L4S concerns low latency, which it can provide for all traffic | <t>L4S concerns low latency, which it can provide for all traffic | |||
without differentiation and without <em>necessarily</em> | without differentiation and without <em>necessarily</em> | |||
affecting bandwidth allocation. Diffserv provides for | affecting bandwidth allocation. Diffserv provides for | |||
differentiation of both bandwidth and low latency, but its control | differentiation of both bandwidth and low latency, but its control | |||
of latency depends on its control of bandwidth. The two can be | of latency depends on its control of bandwidth. | |||
L4S and Diffserv can be | ||||
combined if a network operator wants to control bandwidth | combined if a network operator wants to control bandwidth | |||
allocation but it also wants to provide low latency - for any | allocation but also wants to provide low latency, i.e., for any | |||
amount of traffic within one of these allocations of bandwidth | amount of traffic within one of these allocations of bandwidth | |||
(rather than only providing low latency by limiting bandwidth) | (rather than only providing low latency by limiting bandwidth) | |||
<xref target="I-D.briscoe-tsvwg-l4s-diffserv" format="default"/>.</t > | <xref target="I-D.briscoe-tsvwg-l4s-diffserv" format="default"/>.</t > | |||
<t>The DualQ examples so far have been framed in the context of | <t>The DualQ examples so far have been framed in the context of | |||
providing the default Best Efforts Per-Hop Behaviour (PHB) using | providing the default Best Effort Per-Hop Behaviour (PHB) using | |||
two queues - a Low Latency (L) queue and a Classic (C) Queue. This | two queues -- a low-latency (L) queue and a Classic (C) queue. This | |||
single DualQ structure is expected to be the most common and | single DualQ structure is expected to be the most common and | |||
useful arrangement. But, more generally, an operator might choose | useful arrangement. But, more generally, an operator might choose | |||
to control bandwidth allocation through a hierarchy of Diffserv | to control bandwidth allocation through a hierarchy of Diffserv | |||
PHBs at a node, and to offer one (or more) of these PHBs using a | PHBs at a node and to offer one (or more) of these PHBs using a | |||
pair of queues for a low latency and a Classic variant of the | pair of queues for a low latency and a Classic variant of the | |||
PHB.</t> | PHB.</t> | |||
<t>In the first case, if we assume that a network element provides | <t>In the first case, if we assume that a network element provides | |||
no PHBs except the DualQ, if a packet carries ECT(1) or CE, the | no PHBs except the DualQ, if a packet carries ECT(1) or CE, the | |||
network element would classify it for the L4S treatment | network element would classify it for the L4S treatment | |||
irrespective of its DSCP. And, if a packet carried (say) the EF | irrespective of its DSCP. And, if a packet carried (for example) the EF | |||
DSCP, the network element could classify it into the L queue | DSCP, the network element could classify it into the L queue | |||
irrespective of its ECN codepoint. However, where the DualQ is in | irrespective of its ECN codepoint. However, where the DualQ is in | |||
a hierarchy of other PHBs, the classifier would classify some | a hierarchy of other PHBs, the classifier would classify some | |||
traffic into other PHBs based on DSCP before classifying between | traffic into other PHBs based on DSCP before classifying between | |||
the low latency and Classic queues (based on ECT(1), CE and | the low-latency and Classic queues (based on ECT(1), CE, and | |||
perhaps also the EF DSCP or other identifiers as in the above | perhaps also the EF DSCP or other identifiers as in the above | |||
example). <xref target="I-D.briscoe-tsvwg-l4s-diffserv" format="defa ult"/> gives a | example). <xref target="I-D.briscoe-tsvwg-l4s-diffserv" format="defa ult"/> gives a | |||
number of examples of such arrangements to address various | number of examples of such arrangements to address various | |||
requirements.</t> | requirements.</t> | |||
<t><xref target="I-D.briscoe-tsvwg-l4s-diffserv" format="default"/> describes how | <t><xref target="I-D.briscoe-tsvwg-l4s-diffserv" format="default"/> describes how | |||
an operator might use L4S to offer low latency as well as using | an operator might use L4S to offer low latency as well as | |||
Diffserv for bandwidth differentiation. It identifies two main | Diffserv for bandwidth differentiation. It identifies two main | |||
types of approach, which can be combined: the operator might split | types of approach, which can be combined: the operator might split | |||
certain Diffserv PHBs between L4S and a corresponding Classic | certain Diffserv PHBs between L4S and a corresponding Classic | |||
service. Or it might split the L4S and/or the Classic service into | service. Or it might split the L4S and/or the Classic service into | |||
multiple Diffserv PHBs. In either of these cases, a packet would | multiple Diffserv PHBs. In either of these cases, a packet would | |||
have to be classified on its Diffserv and ECN codepoints.</t> | have to be classified on its Diffserv and ECN codepoints.</t> | |||
<t>In summary, there are numerous ways in which the L4S ECN | <t>In summary, there are numerous ways in which the L4S ECN | |||
identifier (ECT(1) and CE) could be combined with other | identifier (ECT(1) and CE) could be combined with other | |||
identifiers to achieve particular objectives. The following | identifiers to achieve particular objectives. The following | |||
categorization articulates those that are valid, but it is not | categorization articulates those that are valid, but it is not | |||
necessarily exhaustive. Those tagged 'Recommended-standard-use' | necessarily exhaustive. Those tagged as 'Recommended-standard-use' | |||
could be set by the sending host or a network. Those tagged | could be set by the sending host or a network. Those tagged | |||
'Local-use' would only be set by a network:</t> | as 'Local-use' would only be set by a network:</t> | |||
<ol spacing="normal" type="1"><li> | <ol spacing="normal" type="1"><li> | |||
<t>Identifiers Complementing the L4S Identifier</t> | <t>Identifiers Complementing the L4S Identifier</t> | |||
<ol spacing="normal" type="a"><li> | <ol spacing="normal" type="a"><li> | |||
<t>Including More Traffic in the L Queue</t> | <t>Including More Traffic in the L Queue</t> | |||
<t>(Could use Recommended-standard-use or | <t>(could use Recommended-standard-use or | |||
Local-use identifiers)</t> | Local-use identifiers)</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>Excluding Certain Traffic from the L Queue</t> | <t>Excluding Certain Traffic from the L Queue</t> | |||
<t>(Local-use only)</t> | <t>(Local-use only)</t> | |||
</li> | </li> | |||
</ol> | </ol> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>Identifiers to place L4S classification in a PHB | <t>Identifiers to Place L4S Classification in a PHB | |||
Hierarchy</t> | Hierarchy</t> | |||
<t>(Could use | <t>(could use | |||
Recommended-standard-use or Local-use identifiers)</t> | Recommended-standard-use or Local-use identifiers)</t> | |||
<ol spacing="normal" type="a"><li>PHBs Before L4S ECN Classifica | <ol spacing="normal" type="A"><li>PHBs before L4S ECN Classifica | |||
tion</li> | tion</li> | |||
<li>PHBs After L4S ECN Classification</li> | <li>PHBs after L4S ECN Classification</li> | |||
</ol> | </ol> | |||
</li> | </li> | |||
</ol> | </ol> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_iother_IDs_fq" numbered="true" toc="default"> | <section anchor="l4sid_iother_IDs_fq" numbered="true" toc="default"> | |||
<name>Per-Flow Queuing Examples of Other Identifiers Complementing L4S | <name>Per-flow Queuing Examples of Other Identifiers Complementing L4S | |||
Identifiers</name> | Identifiers</name> | |||
<t>At a node with per-flow queueing (e.g. FQ-CoDel <xref target="RFC82 | <t>At a node with per-flow queuing (e.g., FQ-CoDel <xref target="RFC82 | |||
90" format="default"/>), the L4S identifier could complement the Layer-4 | 90" format="default"/>), the L4S identifier could complement the transport-layer | |||
flow ID as a further level of flow granularity (i.e. Not-ECT | flow ID as a further level of flow granularity (i.e., Not-ECT | |||
and ECT(0) queued separately from ECT(1) and CE packets). "Risk of | and ECT(0) queued separately from ECT(1) and CE packets). | |||
reordering Classic CE packets" in <xref target="l4sid_ECT1_CE" format= | In <xref target="l4sid_ECT1_CE" format="default"/>, the "Risk of | |||
"default"/> | reordering Classic CE packets within a flow" discusses the resulting | |||
discusses the resulting ambiguity if packets originally marked | ambiguity if packets originally set to | |||
ECT(0) are marked CE by an upstream AQM before they arrive at a node | ECT(0) are marked CE by an upstream AQM before they arrive at a node | |||
that classifies CE as L4S. It argues that the risk of reordering is | that classifies CE as L4S. It argues that the risk of reordering is | |||
vanishingly small and the consequence of such a low level of | vanishingly small, and the consequence of such a low level of | |||
reordering is minimal.</t> | reordering is minimal.</t> | |||
<t>Alternatively, it could be assumed that it is not in a flow's own | <t>Alternatively, it could be assumed that it is not in a flow's own | |||
interest to mix Classic and L4S identifiers. Then the AQM could use | interest to mix Classic and L4S identifiers. Then, the AQM could use | |||
the ECN field to switch itself between a Classic and an L4S AQM | the IP-ECN field to switch itself between a Classic and an L4S AQM | |||
behaviour within one per-flow queue. For instance, for ECN-capable | behaviour within one per-flow queue. For instance, for ECN-capable | |||
packets, the AQM might consist of a simple marking threshold and an | packets, the AQM might consist of a simple marking threshold, and an | |||
L4S ECN identifier might simply select a shallower threshold than a | L4S ECN identifier might simply select a shallower threshold than a | |||
Classic ECN identifier would.</t> | Classic ECN identifier would.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_bursts_links" numbered="true" toc="default"> | <section anchor="l4sid_bursts_links" numbered="true" toc="default"> | |||
<name>Limiting Packet Bursts from Links</name> | <name>Limiting Packet Bursts from Links</name> | |||
<t>As well as senders needing to limit packet bursts (<xref target="l4si d_congestion_response" format="default"/>), links need to limit the degree | <t>As well as senders needing to limit packet bursts (<xref target="l4si d_congestion_response" format="default"/>), links need to limit the degree | |||
of burstiness they introduce. In both cases (senders and links) this | of burstiness they introduce. In both cases (senders and links), this | |||
is a tradeoff, because batch-handling of packets is done for good | is a trade-off, because batch-handling of packets is done for good | |||
reason, e.g. processing efficiency or to make efficient use of | reason, e.g., for processing efficiency or to make efficient use of | |||
medium acquisition delay. Some take the attitude that there is no | medium acquisition delay. Some take the attitude that there is no | |||
point reducing burst delay at the sender below that introduced by | point reducing burst delay at the sender below that introduced by | |||
links (or vice versa). However, delay reduction proceeds by cutting | links (or vice versa). However, delay reduction proceeds by cutting | |||
down 'the longest pole in the tent', which turns the spotlight on the | down 'the longest pole in the tent', which turns the spotlight on the | |||
next longest, and so on.</t> | next longest, and so on.</t> | |||
<t>This document does not set any quantified requirements for links to | <t>This document does not set any quantified requirements for links to | |||
limit burst delay, primarily because link technologies are outside the | limit burst delay, primarily because link technologies are outside the | |||
remit of L4S specifications. Nonetheless, the following two | remit of L4S specifications. Nonetheless, the following two | |||
subsections outline opportunities for addressing bursty links in the | subsections outline opportunities for addressing bursty links in the | |||
process of L4S implementation and deployment.</t> | process of L4S implementation and deployment.</t> | |||
<section anchor="l4sid_bursts_links_l4s" numbered="true" toc="default"> | <section anchor="l4sid_bursts_links_l4s" numbered="true" toc="default"> | |||
<name>Limiting Packet Bursts from Links Fed by an L4S AQM</name> | <name>Limiting Packet Bursts from Links Fed by an L4S AQM</name> | |||
<t>It would not make sense to implement an L4S AQM that feeds into a | <t>It would not make sense to implement an L4S AQM that feeds into a | |||
particular link technology without also reviewing opportunities to | particular link technology without also reviewing opportunities to | |||
reduce any form of burst delay introduced by that link technology. | reduce any form of burst delay introduced by that link technology. | |||
This would at least limit the bursts that the link would otherwise | This would at least limit the bursts that the link would otherwise | |||
introduce into the onward traffic, which would cause jumpy feedback | introduce into the onward traffic, which would cause jumpy feedback | |||
to the sender as well as potential extra queuing delay downstream. | to the sender as well as potential extra queuing delay downstream. | |||
This document does not presume to even give guidance on an | This document does not presume to even give guidance on an | |||
appropriate target for such burst delay until there is more industry | appropriate target for such burst delay until there is more industry | |||
experience of L4S. However, as suggested in <xref target="l4sid_conges tion_response" format="default"/> it would not seem necessary to | experience of L4S. However, as suggested in <xref target="l4sid_conges tion_response" format="default"/>, it would not seem necessary to | |||
limit bursts lower than roughly 10% of the minimum base RTT expected | limit bursts lower than roughly 10% of the minimum base RTT expected | |||
in the typical deployment scenario (e.g. 250 us burst duration | in the typical deployment scenario (e.g., 250 us burst duration | |||
for links within the public Internet).</t> | for links within the public Internet).</t> | |||
</section> | </section> | |||
<section anchor="l4sid_bursts_links_l4s_upstream" numbered="true" toc="d efault"> | <section anchor="l4sid_bursts_links_l4s_upstream" numbered="true" toc="d efault"> | |||
<name>Limiting Packet Bursts from Links Upstream of an L4S AQM</name> | <name>Limiting Packet Bursts from Links Upstream of an L4S AQM</name> | |||
<t>The initial scope of the L4S experiment is to deploy L4S AQMs at | <t>The initial scope of the L4S experiment is to deploy L4S AQMs at | |||
bottlenecks and L4S congestion controls at senders. This is expected | bottlenecks and L4S congestion controls at senders. This is expected | |||
to highlight interactions with the most bursty upstream links and | to highlight interactions with the most bursty upstream links and | |||
lead operators to tune down the burstiness of those links in their | lead operators to tune down the burstiness of those links in their | |||
network that are configurable, or failing that, to have to | networks that are configurable or, failing that, to have to | |||
compromise on the delay target of some L4S AQMs. It might also | compromise on the delay target of some L4S AQMs. It might also | |||
require specific redesign work relevant to the most problematic link | require specific redesign work relevant to the most problematic link | |||
types. Such knock-on effects of initial L4S deployment would all be | types. Such knock-on effects of initial L4S deployment would all be a | |||
part of the learning from the L4S experiment.</t> | part of the learning from the L4S experiment.</t> | |||
<t>The details of such link changes are beyond the scope of the | <t>The details of such link changes are beyond the scope of the | |||
present document. Nonetheless, where L4S technology is being | present document. | |||
Nonetheless, where L4S technology is being | ||||
implemented on an outgoing interface of a device, it would make | implemented on an outgoing interface of a device, it would make | |||
sense to consider opportunities for reducing bursts arriving at | sense to consider opportunities for reducing bursts arriving at | |||
other incoming interface(s). For instance, where an L4S AQM is | other incoming interfaces. For instance, where an L4S AQM is | |||
implemented to feed into the upstream WAN interface of a home | implemented to feed into the upstream WAN interface of a home | |||
gateway, there would be opportunities to alter the Wi-Fi profiles | gateway, there would be opportunities to alter the Wi-Fi profiles | |||
sent out of any Wi-Fi interfaces from the same device, in order to | sent out of any Wi-Fi interfaces from the same device, in order to | |||
mitigate incoming bursts of aggregated Wi-Fi frames from other Wi-Fi | mitigate incoming bursts of aggregated Wi-Fi frames from other Wi-Fi | |||
stations.</t> | stations.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_encaps" numbered="true" toc="default"> | <section anchor="l4sid_encaps" numbered="true" toc="default"> | |||
<name>Behaviour of Tunnels and Encapsulations</name> | <name>Behaviour of Tunnels and Encapsulations</name> | |||
<section anchor="l4sid_encaps_no_change" numbered="true" toc="default"> | <section anchor="l4sid_encaps_no_change" numbered="true" toc="default"> | |||
<name>No Change to ECN Tunnels and Encapsulations in General</name> | <name>No Change to ECN Tunnels and Encapsulations in General</name> | |||
<t>The L4S identifier is expected to work through and within any | <t>The L4S identifier is expected to work through and within any | |||
tunnel without modification, as long as the tunnel propagates the ECN | tunnel without modification, as long as the tunnel propagates the ECN | |||
field in any of the ways that have been defined since the first | field in any of the ways that have been defined since the first | |||
variant in the year 2001 <xref target="RFC3168" format="default"/>. L4S will also | variant in the year 2001 <xref target="RFC3168" format="default"/>. L4S will also | |||
work with (but does not rely on) any of the more recent updates to ECN | work with (but does not rely on) any of the more recent updates to ECN | |||
propagation in <xref target="RFC4301" format="default"/>, <xref target=" RFC6040" format="default"/> or | propagation in <xref target="RFC4301" format="default"/>, <xref target=" RFC6040" format="default"/>, or | |||
<xref target="I-D.ietf-tsvwg-rfc6040update-shim" format="default"/>. How ever, it is | <xref target="I-D.ietf-tsvwg-rfc6040update-shim" format="default"/>. How ever, it is | |||
likely that some tunnels still do not implement ECN propagation at | likely that some tunnels still do not implement ECN propagation at | |||
all. In these cases, L4S will work through such tunnels, but within | all. In these cases, L4S will work through such tunnels, but within | |||
them the outer header of L4S traffic will appear as Classic.</t> | them the outer header of L4S traffic will appear as Classic.</t> | |||
<t>AQMs are typically implemented where an IP-layer buffer feeds into | <t>AQMs are typically implemented where an IP-layer buffer feeds into | |||
a lower layer, so they are agnostic to link layer encapsulations. | a lower layer, so they are agnostic to link-layer encapsulations. | |||
Where a bottleneck link is not IP-aware, the L4S identifier is still | Where a bottleneck link is not IP-aware, the L4S identifier is still | |||
expected to work within any lower layer encapsulation without | expected to work within any lower-layer encapsulation without | |||
modification, as long it propagates the ECN field as defined for the | modification, as long it propagates the IP-ECN field as defined for the | |||
link technology, for example for MPLS <xref target="RFC5129" format="def | link technology, for example, for MPLS <xref target="RFC5129" format="de | |||
ault"/> or | fault"/> or Transparent | |||
TRILL <xref target="I-D.ietf-trill-ecn-support" format="default"/>. In s | Interconnection of Lots of Links (TRILL) <xref target="I-D.ietf-trill-ec | |||
ome of | n-support" format="default"/>. In some of | |||
these cases, e.g. layer-3 Ethernet switches, the AQM accesses the | these cases, e.g., Layer 3 Ethernet switches, the AQM accesses the | |||
IP layer header within the outer encapsulation, so again the L4S | IP-layer header within the outer encapsulation, so again the L4S | |||
identifier is expected to work without modification. Nonetheless, the | identifier is expected to work without modification. Nonetheless, the | |||
programme to define ECN for other lower layers is still in | programme to define ECN for other lower layers is still in | |||
progress <xref target="I-D.ietf-tsvwg-ecn-encap-guidelines" format="defa ult"/>.</t> | progress <xref target="I-D.ietf-tsvwg-ecn-encap-guidelines" format="defa ult"/>.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_VPN_anti-replay" numbered="true" toc="default"> | <section anchor="l4sid_VPN_anti-replay" numbered="true" toc="default"> | |||
<name>VPN Behaviour to Avoid Limitations of Anti-Replay</name> | <name>VPN Behaviour to Avoid Limitations of Anti-Replay</name> | |||
<t>If a mix of L4S and Classic packets is sent into the same security | <t>If a mix of L4S and Classic packets is sent into the same security | |||
association (SA) of a virtual private network (VPN), and if the VPN | association (SA) of a VPN, and if the VPN | |||
egress is employing the optional anti-replay feature, it could | egress is employing the optional anti-replay feature, it could | |||
inappropriately discard Classic packets (or discard the records in | inappropriately discard Classic packets (or discard the records in | |||
Classic packets) by mistaking their greater queuing delay for a replay | Classic packets) by mistaking their greater queuing delay for a replay | |||
attack (see "Dropped Packets for Tunnels with Replay Protection | attack (see "Dropped Packets for Tunnels with Replay Protection | |||
Enabled" in <xref target="Heist21" format="default"/> for the potential performance | Enabled" in <xref target="Heist21" format="default"/> for the potential performance | |||
impact). This known problem is common to both IPsec <xref target="RFC430 1" format="default"/> and DTLS <xref target="RFC9147" format="default"/> VPNs, g iven | impact). This known problem is common to both IPsec <xref target="RFC430 1" format="default"/> and DTLS <xref target="RFC9147" format="default"/> VPNs, g iven | |||
they use similar anti-replay window mechanisms. The mechanism used can | they use similar anti-replay window mechanisms. The mechanism used can | |||
only check for replay within its window, so if the window is smaller | only check for replay within its window, so if the window is smaller | |||
than the degree of reordering, it can only assume there might be a | than the degree of reordering, it can only assume there might be a | |||
replay attack and discard all the packets behind the trailing edge of | replay attack and discard all the packets behind the trailing edge of | |||
the window. The specifications of IPsec AH <xref target="RFC4302" format | the window. The specifications of IPsec Authentication Header (AH) | |||
="default"/> and ESP <xref target="RFC4303" format="default"/> suggest that | <xref target="RFC4302" format="default"/> and Encapsulating Security Pay | |||
load (ESP) <xref target="RFC4303" format="default"/> suggest that | ||||
an implementer scales the size of the anti-replay window with | an implementer scales the size of the anti-replay window with | |||
interface speed, and DTLS v1.3 <xref target="RFC9147" format="default"/> | interface speed, and DTLS v1.3 <xref target="RFC9147" format="default"/> | |||
says "The | states that "The | |||
receiver SHOULD pick a window large enough to handle any plausible | receiver <bcp14>SHOULD</bcp14> pick a window large enough to handle any | |||
plausible | ||||
reordering, which depends on the data rate." However, in practice, the | reordering, which depends on the data rate." However, in practice, the | |||
size of a VPN's anti-replay window is not always scaled | size of a VPN's anti-replay window is not always scaled | |||
appropriately.</t> | appropriately.</t> | |||
<t>If a VPN carrying traffic participating in the L4S experiment | <t>If a VPN carrying traffic participating in the L4S experiment | |||
experiences inappropriate replay detection, the foremost remedy would | experiences inappropriate replay detection, the foremost remedy would | |||
be to ensure that the egress is configured to comply with the above | be to ensure that the egress is configured to comply with the above | |||
window-sizing requirements.</t> | window-sizing requirements.</t> | |||
<t>If an implementation of a VPN egress does not support a | <t>If an implementation of a VPN egress does not support a | |||
sufficiently large anti-replay window, e.g. due to hardware | sufficiently large anti-replay window, e.g., due to hardware | |||
limitations, one of the temporary alternatives listed in order of | limitations, one of the temporary alternatives listed in order of | |||
preference below might be feasible instead:</t> | preference below might be feasible instead:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>If the VPN can be configured to classify packets into different | <li>If the VPN can be configured to classify packets into different | |||
SAs indexed by DSCP, apply the appropriate locally defined DSCPs | SAs indexed by DSCP, apply the appropriate locally defined DSCPs | |||
to Classic and L4S packets. The DSCPs could be applied by the | to Classic and L4S packets. The DSCPs could be applied by the | |||
network (based on the least significant bit of the ECN field), or | network (based on the least-significant bit of the IP-ECN field), or | |||
by the sending host. Such DSCPs would only need to survive as far | by the sending host. Such DSCPs would only need to survive as far | |||
as the VPN ingress.</li> | as the VPN ingress.</li> | |||
<li> | <li> | |||
<t>If the above is not possible and it is necessary to use L4S, | <t>If the above is not possible and it is necessary to use L4S, | |||
either of the following might be appropriate as a last | either of the following might be appropriate as a last | |||
resort:</t> | resort:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>disable anti-replay protection at the VPN egress, after | <li>disable anti-replay protection at the VPN egress, after | |||
considering the security implications (it is mandatory to | considering the security implications (it is mandatory to | |||
allow the anti-replay facility to be disabled in both IPsec | allow the anti-replay facility to be disabled in both IPsec | |||
and DTLS);</li> | and DTLS), or</li> | |||
<li>configure the tunnel ingress not to propagate ECN to the | <li>configure the tunnel ingress not to propagate ECN to the | |||
outer, which would lose the benefits of L4S and Classic ECN | outer, which would lose the benefits of L4S and Classic ECN | |||
over the VPN.</li> | over the VPN.</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
<!--ToDo: Perhaps better to delete this whole third bullet.--> | ||||
</ul> | </ul> | |||
<t>Modification to VPN implementations is outside the present scope, | <t>Modification to VPN implementations is outside the present scope, | |||
which is why this section has so far focused on reconfiguration. | which is why this section has so far focused on reconfiguration. | |||
Although this document does not define any requirements for VPN | Although this document does not define any requirements for VPN | |||
implementations, determining whether there is a need for such | implementations, determining whether there is a need for such | |||
requirements could be one aspect of L4S experimentation.</t> | requirements could be one aspect of L4S experimentation.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_expts" numbered="true" toc="default"> | <section anchor="l4sid_expts" numbered="true" toc="default"> | |||
<name>L4S Experiments</name> | <name>L4S Experiments</name> | |||
<t>This section describes open questions that L4S Experiments ought to | <t>This section describes open questions that L4S experiments ought to | |||
focus on. This section also documents outstanding open issues that will | focus on. This section also documents outstanding open issues that will | |||
need to be investigated as part of L4S experimentation, given they could | need to be investigated as part of L4S experimentation, given they could | |||
not be fully resolved during the WG phase. It also lists metrics that | not be fully resolved during the working group phase. It also lists metric s that | |||
will need to be monitored during experiments (summarizing text elsewhere | will need to be monitored during experiments (summarizing text elsewhere | |||
in L4S documents) and finally lists some potential future directions | in L4S documents) and finally lists some potential future directions | |||
that researchers might wish to investigate.</t> | that researchers might wish to investigate.</t> | |||
<t>In addition to this section, the DualQ spec <xref target="I-D.ietf-tsvw | ||||
g-aqm-dualq-coupled" format="default"/> sets operational and | <t>In addition to this section, i) the DualQ spec <xref target="RFC9332" f | |||
management requirements for experiments with DualQ Coupled AQMs; and | ormat="default"/> sets operational and | |||
General operational and management requirements for experiments with L4S | management requirements for experiments with DualQ Coupled AQMs, and | |||
congestion controls are given in <xref target="l4sid_transport_req" format | ii) general operational and management requirements for experiments with L | |||
="default"/> | 4S | |||
and <xref target="l4sid_network_req" format="default"/> above, e.g. co-exi | congestion controls are given in Sections <xref target="l4sid_transport_re | |||
stence and | q" format="counter"/> | |||
scaling requirements, incremental deployment arrangements.</t> | and <xref target="l4sid_network_req" format="counter"/> above, e.g., coexi | |||
<t>The specification of each scalable congestion control will need to | stence and | |||
scaling requirements and incremental deployment arrangements.</t> | ||||
<t>The specification of each Scalable congestion control will need to | ||||
include protocol-specific requirements for configuration and monitoring | include protocol-specific requirements for configuration and monitoring | |||
performance during experiments. Appendix A of the guidelines in <xref targ | performance during experiments. | |||
et="RFC5706" format="default"/> provides a helpful checklist.</t> | ||||
<xref target="RFC5706" sectionFormat="of" section="A"/> provides a helpful | ||||
checklist.</t> | ||||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Open Questions</name> | <name>Open Questions</name> | |||
<t>L4S experiments would be expected to answer the following | <t>L4S experiments would be expected to answer the following | |||
questions:</t> | questions:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li> | <li> | |||
<t>Have all the parts of L4S been deployed, and if so, what | <t>Have all the parts of L4S been deployed, and if so, what | |||
proportion of paths support it?</t> | proportion of paths support it?</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>What types of L4S AQMs were deployed, e.g. FQ, coupled | <li>What types of L4S AQMs were deployed, e.g., FQ, coupled | |||
DualQ, uncoupled DualQ, other? And how prevalent was each?</li> | DualQ, uncoupled DualQ, other? And how prevalent was each?</li> | |||
<li>Are the signalling patterns emitted by the deployed AQMs in | <li>Are the signalling patterns emitted by the deployed AQMs in | |||
any way different from those expected when the Prague | any way different from those expected when the Prague | |||
requirements for endpoints were written?</li> | requirements for endpoints were written?</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
<li>Does use of L4S over the Internet result in significantly | <li>Does use of L4S over the Internet result in a significantly | |||
improved user experience?</li> | improved user experience?</li> | |||
<li>Has L4S enabled novel interactive applications?</li> | <li>Has L4S enabled novel interactive applications?</li> | |||
<li> | <li> | |||
<t>Did use of L4S over the Internet result in improvements to the | <t>Did use of L4S over the Internet result in improvements to the | |||
following metrics:</t> | following metrics:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>queue delay (mean and 99th percentile) under various | <li>queue delay (mean and 99th percentile) under various | |||
loads;</li> | loads;</li> | |||
<li>utilization;</li> | <li>utilization;</li> | |||
<li>starvation / fairness;</li> | <li>starvation / fairness; and</li> | |||
<li>scaling range of flow rates and RTTs?</li> | <li>scaling range of flow rates and RTTs?</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
<li>How dependent was the performance of L4S service on the | <li>How dependent was the performance of L4S service on the | |||
bottleneck bandwidth or the path RTT?</li> | bottleneck bandwidth or the path RTT?</li> | |||
<li>How much do bursty links in the Internet affect L4S performance | <li>How much do bursty links in the Internet affect L4S performance | |||
(see "Underutilization with Bursty Links" in <xref target="Heist21" format="default"/>) and how prevalent are they? How much | (see "Underutilization with Bursty Links" in <xref target="Heist21" format="default"/>) and how prevalent are they? How much | |||
limitation of burstiness from upstream links was needed and/or was | limitation of burstiness from upstream links was needed and/or was | |||
realized - both at senders and at links, especially radio links or | realized -- both at senders and at links, especially radio links -- or | |||
how much did L4S target delay have to be increased to accommodate | how much did L4S target delay have to be increased to accommodate | |||
the bursts (see bullet #7 in <xref target="l4sid_congestion_response | the bursts (see Item <xref target="l4sid_Prague_req-burstiness" form | |||
" format="default"/> and <xref target="l4sid_bursts_links_l4s_upstream" format=" | at="counter"/> in <xref target="l4sid_congestion_response"/> and see <xref targe | |||
default"/>)?</li> | t="l4sid_bursts_links_l4s_upstream"/>)?</li> | |||
<li>Is the initial experiment with mis-marked bursty traffic at | <li>Is the initial experiment with mis-identified bursty traffic at | |||
high RTT (see "Underutilization with Bursty Traffic" in <xref target | high RTT (see "Underutilization with Bursty Traffic" in <xref target | |||
="Heist21" format="default"/>) indicative of similar problems at lower RTTs | ="Heist21" format="default"/>) indicative of similar problems at lower RTTs, | |||
and, if so, how effective is the suggested remedy in Appendix A.1 | and if so, how effective is the suggested remedy in <xref target="RF | |||
of the DualQ spec <xref target="I-D.ietf-tsvwg-aqm-dualq-coupled" fo | C9332" format="default" section="A.1" sectionFormat="of">the DualQ spec</xref> ( | |||
rmat="default"/> (or possible other | or possible other | |||
remedies)?</li> | remedies)?</li> | |||
<li> | <li> | |||
<t>Was per-flow queue protection typically (un)necessary? </t> | <t>Was per-flow queue protection typically (un)necessary? </t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>How well did overload protection or queue protection | <li>How well did overload protection or queue protection | |||
work?</li> | work?</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
<li>How well did L4S flows coexist with Classic flows when sharing | <li><t>How well did L4S flows coexist with Classic flows when sharing | |||
a bottleneck?</li> | a bottleneck?</t> | |||
<li> | ||||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>How frequently did problems arise?</li> | <li>How frequently did problems arise?</li> | |||
<li>What caused any coexistence problems, and were any problems | <li>What caused any coexistence problems, and were any problems | |||
due to single-queue Classic ECN AQMs (this assumes | due to single-queue Classic ECN AQMs (this assumes | |||
single-queue Classic ECN AQMs can be distinguished from FQ | single-queue Classic ECN AQMs can be distinguished from FQ | |||
ones)?</li> | ones)?</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
<li>How prevalent were problems with the L4S service due to tunnels | <li>How prevalent were problems with the L4S service due to tunnels/en | |||
/ encapsulations that do not support ECN decapsulation?</li> | capsulations | |||
that do not support ECN decapsulation?</li> | ||||
<li>How easy was it to implement a fully compliant L4S congestion | <li>How easy was it to implement a fully compliant L4S congestion | |||
control, over various different transport protocols (TCP, QUIC, | control, over various different transport protocols (TCP, QUIC, | |||
RMCAT, etc.)?</li> | RMCAT, etc.)?</li> | |||
</ul> | </ul> | |||
<t>Monitoring for harm to other traffic, specifically bandwidth | <t>Monitoring for harm to other traffic, specifically bandwidth | |||
starvation or excess queuing delay, will need to be conducted | starvation or excess queuing delay, will need to be conducted | |||
alongside all early L4S experiments. It is hard, if not impossible, | alongside all early L4S experiments. It is hard, if not impossible, | |||
for an individual flow to measure its impact on other traffic. So such | for an individual flow to measure its impact on other traffic. So such | |||
monitoring will need to be conducted using bespoke monitoring across | monitoring will need to be conducted using bespoke monitoring across | |||
flows and/or across classes of traffic.</t> | flows and/or across classes of traffic.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Open Issues</name> | <name>Open Issues</name> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>What is the best way forward to deal with L4S over single-queue | <li>What is the best way forward to deal with L4S over single-queue | |||
Classic ECN AQM bottlenecks, given current problems with | Classic ECN AQM bottlenecks, given current problems with | |||
misdetecting L4S AQMs as Classic ECN AQMs? See the L4S operational | misdetecting L4S AQMs as Classic ECN AQMs? See the L4S operational | |||
guidance <xref target="I-D.ietf-tsvwg-l4sops" format="default"/>.</l | guidance <xref target="I-D.ietf-tsvwg-l4sops" format="default"/>.</l | |||
i> | i> | |||
<li>Fixing the poor Interaction between current L4S congestion | <li>Fixing the poor interaction between current L4S congestion | |||
controls and CoDel with only Classic ECN support during flow | controls and CoDel with only Classic ECN support during flow | |||
startup. Originally, this was due to a bug in the initialization | startup. | |||
of the congestion EWMA in the Linux implementation of TCP Prague. | Originally, this was due to a bug in the initialization | |||
of the congestion average in the | ||||
Linux implementation of TCP Prague. | ||||
That was quickly fixed, which removed the main performance impact, | That was quickly fixed, which removed the main performance impact, | |||
but further improvement would be useful (either by modifying | but further improvement would be useful (by modifying either | |||
CoDel, Scalable congestion controls, or both).</li> | CoDel or Scalable congestion controls, or both).</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Future Potential</name> | <name>Future Potential</name> | |||
<t>Researchers might find that L4S opens up the following interesting | <t>Researchers might find that L4S opens up the following interesting | |||
areas for investigation:</t> | areas for investigation:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Potential for faster convergence time and tracking of available | <li>potential for faster convergence time and tracking of available | |||
capacity;</li> | capacity;</li> | |||
<li>Potential for improvements to particular link technologies, and | <li>potential for improvements to particular link technologies and | |||
cross-layer interactions with them;</li> | cross-layer interactions with them;</li> | |||
<li>Potential for using virtual queues, e.g. to further reduce | <li>potential for using virtual queues, e.g., to further reduce | |||
latency jitter, or to leave headroom for capacity variation in | latency jitter or to leave headroom for capacity variation in | |||
radio networks;</li> | radio networks;</li> | |||
<li>Development and specification of reverse path congestion | <li>development and specification of reverse path congestion | |||
control using L4S building blocks (e.g. AccECN, QUIC);</li> | control using L4S building blocks (e.g., AccECN or QUIC);</li> | |||
<li>Once queuing delay is cut down, what becomes the | <li>once queuing delay is cut down, what becomes the | |||
'second-longest pole in the tent' (other than the speed of | 'second-longest pole in the tent' (other than the speed of | |||
light)?</li> | light)?</li> | |||
<li>Novel alternatives to the existing set of L4S AQMs;</li> | <li>novel alternatives to the existing set of L4S AQMs; and</li> | |||
<li>Novel applications enabled by L4S.</li> | <li>novel applications enabled by L4S.</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_IANA" numbered="true" toc="default"> | <section anchor="l4sid_IANA" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<t>The 01 codepoint of the ECN Field of the IP header is specified by | <t>The semantics of the 01 codepoint of the ECN field of the IP header are | |||
the present Experimental RFC. The process for an experimental RFC to | specified by | |||
this Experimental RFC. The process for an Experimental RFC to | ||||
assign this codepoint in the IP header (v4 and v6) is documented in | assign this codepoint in the IP header (v4 and v6) is documented in | |||
Proposed Standard <xref target="RFC8311" format="default"/>, which updates the Proposed | Proposed Standard <xref target="RFC8311" format="default"/>, which updates the Proposed | |||
Standard <xref target="RFC3168" format="default"/>.</t> | Standard <xref target="RFC3168" format="default"/>.</t> | |||
<t>When the present document is published as an RFC, IANA is asked to | ||||
update the 01 entry in the registry, "ECN Field (Bits 6-7)" to the | <t>IANA has updated the 01 entry in the "ECN Field (Bits 6-7)" registry (s | |||
following (see | ee <eref target="https://www.iana.org/assignments/dscp-registry/" brackets="angl | |||
https://www.iana.org/assignments/dscp-registry/dscp-registry.xhtml#ecn-fie | e"/>) as | |||
ld | follows:</t> | |||
):</t> | ||||
<table align="center"> | <table align="center"> | |||
<name>ECN Field (Bits 6-7) Registry</name> | ||||
<thead> | <thead> | |||
<tr> | <tr> | |||
<th align="left">Binary</th> | <th align="left">Binary</th> | |||
<th align="left">Keyword</th> | <th align="left">Keyword</th> | |||
<th align="left">References</th> | <th align="left">Reference</th> | |||
</tr> | </tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr> | <tr> | |||
<td align="left">01</td> | <td align="left">01</td> | |||
<td align="left">ECT(1) (ECN-Capable Transport(1))[1]</td> | <td align="left">ECT(1) (ECN-Capable Transport(1))[1]</td> | |||
<td align="left"> | <td align="left"> | |||
<xref target="RFC8311" format="default"/> [RFC Errata 5399] | <xref target="RFC8311" format="default"/> [RFC Errata 5399] | |||
[RFCXXXX]</td> | RFC 9331</td> | |||
</tr> | </tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
<t>[XXXX is the number that the RFC Editor assigns to the | <t>[1] ECT(1) is for experimental use only <xref target="RFC8311" sectio | |||
present document (this sentence to be removed by the RFC Editor)].</t> | n="4.2" sectionFormat="comma"/></t> | |||
</section> | </section> | |||
<section anchor="l4sid_Security_Considerations" numbered="true" toc="default "> | <section anchor="l4sid_Security_Considerations" numbered="true" toc="default "> | |||
<name>Security Considerations</name> | <name>Security Considerations</name> | |||
<t>Approaches to assure the integrity of signals using the new | <t>Approaches to assure the integrity of signals using the new | |||
identifier are introduced in <xref target="l4sid_competing_integrity" form | identifier are introduced in <xref target="l4sid_competing_integrity" form | |||
at="default"/>. See the security considerations in | at="default"/>. See the security considerations in | |||
the L4S architecture <xref target="I-D.ietf-tsvwg-l4s-arch" format="defaul | the L4S architecture <xref target="RFC9330" format="default"/> for | |||
t"/> for | further discussion of misuse of the identifier, as well as extensive | |||
further discussion of mis-use of the identifier, as well as extensive | ||||
discussion of policing rate and latency in regard to L4S.</t> | discussion of policing rate and latency in regard to L4S.</t> | |||
<t>Defining ECT(1) as the L4S identifier introduces a difference between | <t>Defining ECT(1) as the L4S identifier introduces a difference between | |||
the effects of ECT0 and ECT1 that RFC 3168 previously defined as | the effects of ECT(0) and ECT(1) that <xref target="RFC3168" format="defau lt"/> previously defined as | |||
distinct but with equivalent effect. For L4S ECN, a network node is | distinct but with equivalent effect. For L4S ECN, a network node is | |||
still required not to swap one to the other, even if the network | still required not to swap one to the other, even if the network | |||
operator chooses to locally apply the treatment associated with the | operator chooses to locally apply the treatment associated with the | |||
opposite codepoint (see Sections <xref format="counter" target="l4sid_incl usion_dualq"/> and <xref format="counter" target="l4sid_exclusion_dualq"/>). The se sections also describe the | opposite codepoint (see Sections <xref format="counter" target="l4sid_incl usion_dualq"/> and <xref format="counter" target="l4sid_exclusion_dualq"/>). The se sections also describe the | |||
potential effects if a non-compliant or malicious network node does swap | potential effects if a non-compliant or malicious network node does swap | |||
one to the other. The present specification does not change the effects | one to the other. The present specification does not change the effects | |||
of other unexpected transitions of the ECN field, which are still as | of other unexpected transitions of the IP-ECN field, which are still as | |||
described in Section 18 of RFC 3168.</t> | described in <xref target="RFC3168" sectionFormat="of" section="18"/>.</t> | |||
<t>If the anti-replay window of a VPN egress is too small, it will | <t>If the anti-replay window of a VPN egress is too small, it will | |||
mistake deliberate delay differences as a replay attack, and discard | mistake deliberate delay differences as a replay attack and discard | |||
higher delay packets (e.g. Classic) carried within the same | higher-delay packets (e.g., Classic) carried within the same | |||
security association (SA) as low delay packets (e.g. L4S). <xref target="l | security association (SA) as low-delay packets (e.g., L4S). <xref target=" | |||
4sid_VPN_anti-replay" format="default"/> recommends that VPNs used in L4S | l4sid_VPN_anti-replay" format="default"/> recommends that VPNs used in L4S | |||
experiments are configured with a sufficiently large anti-replay window, | experiments are configured with a sufficiently large anti-replay window, | |||
as required by the relevant specifications. It also discusses other | as required by the relevant specifications. It also discusses other | |||
alternatives.</t> | alternatives.</t> | |||
<t>If a user taking part in the L4S experiment sets up a VPN without | <t>If a user taking part in the L4S experiment sets up a VPN without | |||
being aware of the above advice, and if the user allows anyone to send | being aware of the above advice, and if the user allows anyone to send | |||
traffic into their VPN, they would open up a DoS vulnerability in which | traffic into their VPN, they would open up a DoS vulnerability in which | |||
an attacker could induce the VPN's anti-replay mechanism to discard | an attacker could induce the VPN's anti-replay mechanism to discard | |||
enough of the user's Classic (C) traffic (if they are receiving any) to | enough of the user's Classic (C) traffic (if they are receiving any) to | |||
cause a significant rate reduction. While the user is actively | cause a significant rate reduction. While the user is actively | |||
downloading C traffic, the attacker sends C traffic into the VPN to fill | downloading C traffic, the attacker sends C traffic into the VPN to fill | |||
the remainder of the bottleneck link, then sends intermittent L4S | the remainder of the bottleneck link, then sends intermittent L4S | |||
packets to maximize the chance of exceeding the VPN's replay window. The | packets to maximize the chance of exceeding the VPN's replay window. The | |||
user can prevent this attack by following the recommendations in <xref tar | user can prevent this attack by following the recommendations in <xref tar | |||
get="l4sid_VPN_anti-replay" format="default"/>.<!--ToDo: I'm not sure this para | get="l4sid_VPN_anti-replay" format="default"/>. | |||
is warranted. | ||||
It's a bit lame to say there's an attack if you don't follow advice, and the sol | ||||
ution to the attack is to follow the advice.--> | ||||
</t> | </t> | |||
<t>The recommendation to detect loss in time units prevents the | <t>The recommendation to detect loss in time units prevents the | |||
ACK-splitting attacks described in <xref target="Savage-TCP" format="defau lt"/>.</t> | ACK-splitting attacks described in <xref target="Savage-TCP" format="defau lt"/>.</t> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<!-- *****BACK MATTER ***** --> | ||||
<back> | <back> | |||
<displayreference target="I-D.ietf-tcpm-accurate-ecn" to="ACCECN"/> | ||||
<displayreference target="I-D.ietf-tsvwg-ecn-encap-guidelines" to="ECN-ENCAP"/> | ||||
<displayreference target="I-D.ietf-tsvwg-rfc6040update-shim" to="ECN-SHIM"/> | ||||
<displayreference target="I-D.ietf-trill-ecn-support" to="TRILL-ECN-SUPPORT"/> | ||||
<displayreference target="I-D.stewart-tsvwg-sctpecn" to="SCTP-ECN"/> | ||||
<displayreference target="I-D.briscoe-tsvwg-l4s-diffserv" to="L4S-DIFFSERV"/> | ||||
<displayreference target="I-D.ietf-tsvwg-nqb" to="NQB-PHB"/> | ||||
<displayreference target="I-D.ietf-tsvwg-l4sops" to="L4SOPS"/> | ||||
<displayreference target="I-D.ietf-tcpm-generalized-ecn" to="ECN++"/> | ||||
<displayreference target="I-D.sridharan-tcpm-ctcp" to="CTCP"/> | ||||
<displayreference target="I-D.briscoe-docsis-q-protection" to="DOCSIS-QPROT"/> | ||||
<displayreference target="I-D.briscoe-iccrg-prague-congestion-control" to="PRAGU | ||||
E-CC"/> | ||||
<displayreference target="I-D.cardwell-iccrg-bbr-congestion-control" to="BBR-CC" | ||||
/> | ||||
<displayreference target="I-D.mathis-iccrg-relentless-tcp" to="RELENTLESS"/> | ||||
<references> | <references> | |||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
<front> | xml"/> | |||
<title>Key words for use in RFCs to Indicate Requirement Levels</tit | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3168. | |||
le> | xml"/> | |||
<author initials="S." surname="Bradner" fullname="S. Bradner"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4774. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6679. | |||
<date year="1997" month="March"/> | xml"/> | |||
<abstract> | ||||
<t>In many standards track documents several words are used to sig | ||||
nify the requirements in the specification. These words are often capitalized. | ||||
This document defines these words as they should be interpreted in IETF document | ||||
s. This document specifies an Internet Best Current Practices for the Internet | ||||
Community, and requests discussion and suggestions for improvements.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="2119"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | ||||
<reference anchor="RFC3168" target="https://www.rfc-editor.org/info/rfc3 | ||||
168" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3168.xml"> | ||||
<front> | ||||
<title>The Addition of Explicit Congestion Notification (ECN) to IP< | ||||
/title> | ||||
<author initials="K." surname="Ramakrishnan" fullname="K. Ramakrishn | ||||
an"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Black" fullname="D. Black"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2001" month="September"/> | ||||
<abstract> | ||||
<t>This memo specifies the incorporation of ECN (Explicit Congesti | ||||
on Notification) to TCP and IP, including ECN's use of two bits in the IP header | ||||
. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3168"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3168"/> | ||||
</reference> | ||||
<reference anchor="RFC4774" target="https://www.rfc-editor.org/info/rfc4 | ||||
774" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4774.xml"> | ||||
<front> | ||||
<title>Specifying Alternate Semantics for the Explicit Congestion No | ||||
tification (ECN) Field</title> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2006" month="November"/> | ||||
<abstract> | ||||
<t>There have been a number of proposals for alternate semantics f | ||||
or the Explicit Congestion Notification (ECN) field in the IP header RFC 3168. | ||||
This document discusses some of the issues in defining alternate semantics for t | ||||
he ECN field, and specifies requirements for a safe coexistence in an Internet t | ||||
hat could include routers that do not understand the defined alternate semantics | ||||
. This document evolved as a result of discussions with the authors of one rece | ||||
nt proposal for such alternate semantics. This document specifies an Internet B | ||||
est Current Practices for the Internet Community, and requests discussion and su | ||||
ggestions for improvements.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="124"/> | ||||
<seriesInfo name="RFC" value="4774"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4774"/> | ||||
</reference> | ||||
<reference anchor="RFC6679" target="https://www.rfc-editor.org/info/rfc6 | ||||
679" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6679.xml"> | ||||
<front> | ||||
<title>Explicit Congestion Notification (ECN) for RTP over UDP</titl | ||||
e> | ||||
<author initials="M." surname="Westerlund" fullname="M. Westerlund"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="I." surname="Johansson" fullname="I. Johansson"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P." surname="O'Hanlon" fullname="P. O'Hanlon"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="K." surname="Carlberg" fullname="K. Carlberg"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2012" month="August"/> | ||||
<abstract> | ||||
<t>This memo specifies how Explicit Congestion Notification (ECN) | ||||
can be used with the Real-time Transport Protocol (RTP) running over UDP, using | ||||
the RTP Control Protocol (RTCP) as a feedback mechanism. It defines a new RTCP | ||||
Extended Report (XR) block for periodic ECN feedback, a new RTCP transport feedb | ||||
ack message for timely reporting of congestion events, and a Session Traversal U | ||||
tilities for NAT (STUN) extension used in the optional initialisation method usi | ||||
ng Interactive Connectivity Establishment (ICE). Signalling and procedures for | ||||
negotiation of capabilities and initialisation methods are also defined. [STAND | ||||
ARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6679"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6679"/> | ||||
</reference> | ||||
</references> | </references> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<reference anchor="RFC2474" target="https://www.rfc-editor.org/info/rfc2 | ||||
474" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2474.xml"> | ||||
<front> | ||||
<title>Definition of the Differentiated Services Field (DS Field) in | ||||
the IPv4 and IPv6 Headers</title> | ||||
<author initials="K." surname="Nichols" fullname="K. Nichols"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Blake" fullname="S. Blake"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="F." surname="Baker" fullname="F. Baker"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Black" fullname="D. Black"> | ||||
<organization/> | ||||
</author> | ||||
<date year="1998" month="December"/> | ||||
<abstract> | ||||
<t>This document defines the IP header field, called the DS (for d | ||||
ifferentiated services) field. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="2474"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2474"/> | ||||
</reference> | ||||
<reference anchor="RFC2309" target="https://www.rfc-editor.org/info/rfc2 | ||||
309" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2309.xml"> | ||||
<front> | ||||
<title>Recommendations on Queue Management and Congestion Avoidance | ||||
in the Internet</title> | ||||
<author initials="B." surname="Braden" fullname="B. Braden"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Clark" fullname="D. Clark"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Crowcroft" fullname="J. Crowcroft"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="B." surname="Davie" fullname="B. Davie"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Deering" fullname="S. Deering"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Estrin" fullname="D. Estrin"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="V." surname="Jacobson" fullname="V. Jacobson"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="Minshall" fullname="G. Minshall"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C." surname="Partridge" fullname="C. Partridge"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L." surname="Peterson" fullname="L. Peterson"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="K." surname="Ramakrishnan" fullname="K. Ramakrishn | ||||
an"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Shenker" fullname="S. Shenker"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Wroclawski" fullname="J. Wroclawski"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L." surname="Zhang" fullname="L. Zhang"> | ||||
<organization/> | ||||
</author> | ||||
<date year="1998" month="April"/> | ||||
<abstract> | ||||
<t>This memo presents two recommendations to the Internet communit | ||||
y concerning measures to improve and preserve Internet performance. It presents | ||||
a strong recommendation for testing, standardization, and widespread deployment | ||||
of active queue management in routers, to improve the performance of today's In | ||||
ternet. It also urges a concerted effort of research, measurement, and ultimate | ||||
deployment of router mechanisms to protect the Internet from flows that are not | ||||
sufficiently responsive to congestion notification. This memo provides informa | ||||
tion for the Internet community. It does not specify an Internet standard of an | ||||
y kind.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="2309"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2309"/> | ||||
</reference> | ||||
<reference anchor="RFC3540" target="https://www.rfc-editor.org/info/rfc3 | ||||
540" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3540.xml"> | ||||
<front> | ||||
<title>Robust Explicit Congestion Notification (ECN) Signaling with | ||||
Nonces</title> | ||||
<author initials="N." surname="Spring" fullname="N. Spring"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Wetherall" fullname="D. Wetherall"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Ely" fullname="D. Ely"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2003" month="June"/> | ||||
<abstract> | ||||
<t>This note describes the Explicit Congestion Notification (ECN)- | ||||
nonce, an optional addition to ECN that protects against accidental or malicious | ||||
concealment of marked packets from the TCP sender. It improves the robustness | ||||
of congestion control by preventing receivers from exploiting ECN to gain an unf | ||||
air share of network bandwidth. The ECN-nonce uses the two ECN-Capable Transpor | ||||
t (ECT)codepoints in the ECN field of the IP header, and requires a flag in the | ||||
TCP header. It is computationally efficient for both routers and hosts. This m | ||||
emo defines an Experimental Protocol for the Internet community.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3540"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3540"/> | ||||
</reference> | ||||
<reference anchor="RFC3246" target="https://www.rfc-editor.org/info/rfc3 | ||||
246" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3246.xml"> | ||||
<front> | ||||
<title>An Expedited Forwarding PHB (Per-Hop Behavior)</title> | ||||
<author initials="B." surname="Davie" fullname="B. Davie"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A." surname="Charny" fullname="A. Charny"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J.C.R." surname="Bennet" fullname="J.C.R. Bennet"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="K." surname="Benson" fullname="K. Benson"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J.Y." surname="Le Boudec" fullname="J.Y. Le Boudec | ||||
"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="W." surname="Courtney" fullname="W. Courtney"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Davari" fullname="S. Davari"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="V." surname="Firoiu" fullname="V. Firoiu"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Stiliadis" fullname="D. Stiliadis"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2002" month="March"/> | ||||
<abstract> | ||||
<t>This document defines a PHB (per-hop behavior) called Expedited | ||||
Forwarding (EF). The PHB is a basic building block in the Differentiated Servi | ||||
ces architecture. EF is intended to provide a building block for low delay, low | ||||
jitter and low loss services by ensuring that the EF aggregate is served at a c | ||||
ertain configured rate. This document obsoletes RFC 2598. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3246"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3246"/> | ||||
</reference> | ||||
<reference anchor="RFC3649" target="https://www.rfc-editor.org/info/rfc3 | ||||
649" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3649.xml"> | ||||
<front> | ||||
<title>HighSpeed TCP for Large Congestion Windows</title> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2003" month="December"/> | ||||
<abstract> | ||||
<t>The proposals in this document are experimental. While they ma | ||||
y be deployed in the current Internet, they do not represent a consensus that th | ||||
is is the best method for high-speed congestion control. In particular, we note | ||||
that alternative experimental proposals are likely to be forthcoming, and it is | ||||
not well understood how the proposals in this document will interact with such | ||||
alternative proposals. This document proposes HighSpeed TCP, a modification to | ||||
TCP's congestion control mechanism for use with TCP connections with large conge | ||||
stion windows. The congestion control mechanisms of the current Standard TCP co | ||||
nstrains the congestion windows that can be achieved by TCP in realistic environ | ||||
ments. For example, for a Standard TCP connection with 1500-byte packets and a | ||||
100 ms round-trip time, achieving a steady-state throughput of 10 Gbps would req | ||||
uire an average congestion window of 83,333 segments, and a packet drop rate of | ||||
at most one congestion event every 5,000,000,000 packets (or equivalently, at mo | ||||
st one congestion event every 1 2/3 hours). This is widely acknowledged as an u | ||||
nrealistic constraint. To address his limitation of TCP, this document proposes | ||||
HighSpeed TCP, and solicits experimentation and feedback from the wider communi | ||||
ty.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3649"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3649"/> | ||||
</reference> | ||||
<reference anchor="RFC4301" target="https://www.rfc-editor.org/info/rfc4 | ||||
301" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4301.xml"> | ||||
<front> | ||||
<title>Security Architecture for the Internet Protocol</title> | ||||
<author initials="S." surname="Kent" fullname="S. Kent"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="K." surname="Seo" fullname="K. Seo"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2005" month="December"/> | ||||
<abstract> | ||||
<t>This document describes an updated version of the "Security Arc | ||||
hitecture for IP", which is designed to provide security services for traffic at | ||||
the IP layer. This document obsoletes RFC 2401 (November 1998). [STANDARDS-TR | ||||
ACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4301"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4301"/> | ||||
</reference> | ||||
<reference anchor="RFC4302" target="https://www.rfc-editor.org/info/rfc4 | ||||
302" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4302.xml"> | ||||
<front> | ||||
<title>IP Authentication Header</title> | ||||
<author initials="S." surname="Kent" fullname="S. Kent"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2005" month="December"/> | ||||
<abstract> | ||||
<t>This document describes an updated version of the IP Authentica | ||||
tion Header (AH), which is designed to provide authentication services in IPv4 a | ||||
nd IPv6. This document obsoletes RFC 2402 (November 1998). [STANDARDS-TRACK]</ | ||||
t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4302"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4302"/> | ||||
</reference> | ||||
<reference anchor="RFC4303" target="https://www.rfc-editor.org/info/rfc4 | ||||
303" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4303.xml"> | ||||
<front> | ||||
<title>IP Encapsulating Security Payload (ESP)</title> | ||||
<author initials="S." surname="Kent" fullname="S. Kent"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2005" month="December"/> | ||||
<abstract> | ||||
<t>This document describes an updated version of the Encapsulating | ||||
Security Payload (ESP) protocol, which is designed to provide a mix of security | ||||
services in IPv4 and IPv6. ESP is used to provide confidentiality, data origin | ||||
authentication, connectionless integrity, an anti-replay service (a form of par | ||||
tial sequence integrity), and limited traffic flow confidentiality. This docume | ||||
nt obsoletes RFC 2406 (November 1998). [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4303"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4303"/> | ||||
</reference> | ||||
<reference anchor="RFC4340" target="https://www.rfc-editor.org/info/rfc4 | ||||
340" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4340.xml"> | ||||
<front> | ||||
<title>Datagram Congestion Control Protocol (DCCP)</title> | ||||
<author initials="E." surname="Kohler" fullname="E. Kohler"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Handley" fullname="M. Handley"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2006" month="March"/> | ||||
<abstract> | ||||
<t>The Datagram Congestion Control Protocol (DCCP) is a transport | ||||
protocol that provides bidirectional unicast connections of congestion-controlle | ||||
d unreliable datagrams. DCCP is suitable for applications that transfer fairly | ||||
large amounts of data and that can benefit from control over the tradeoff betwee | ||||
n timeliness and reliability. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4340"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4340"/> | ||||
</reference> | ||||
<reference anchor="RFC4341" target="https://www.rfc-editor.org/info/rfc4 | ||||
341" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4341.xml"> | ||||
<front> | ||||
<title>Profile for Datagram Congestion Control Protocol (DCCP) Conge | ||||
stion Control ID 2: TCP-like Congestion Control</title> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="E." surname="Kohler" fullname="E. Kohler"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2006" month="March"/> | ||||
<abstract> | ||||
<t>This document contains the profile for Congestion Control Ident | ||||
ifier 2 (CCID 2), TCP-like Congestion Control, in the Datagram Congestion Contro | ||||
l Protocol (DCCP). CCID 2 should be used by senders who would like to take adva | ||||
ntage of the available bandwidth in an environment with rapidly changing conditi | ||||
ons, and who are able to adapt to the abrupt changes in the congestion window ty | ||||
pical of TCP's Additive Increase Multiplicative Decrease (AIMD) congestion contr | ||||
ol. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4341"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4341"/> | ||||
</reference> | ||||
<reference anchor="RFC4342" target="https://www.rfc-editor.org/info/rfc4 | ||||
342" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4342.xml"> | ||||
<front> | ||||
<title>Profile for Datagram Congestion Control Protocol (DCCP) Conge | ||||
stion Control ID 3: TCP-Friendly Rate Control (TFRC)</title> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="E." surname="Kohler" fullname="E. Kohler"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Padhye" fullname="J. Padhye"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2006" month="March"/> | ||||
<abstract> | ||||
<t>This document contains the profile for Congestion Control Ident | ||||
ifier 3, TCP-Friendly Rate Control (TFRC), in the Datagram Congestion Control Pr | ||||
otocol (DCCP). CCID 3 should be used by senders that want a TCP-friendly sendin | ||||
g rate, possibly with Explicit Congestion Notification (ECN), while minimizing a | ||||
brupt rate changes. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4342"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4342"/> | ||||
</reference> | ||||
<reference anchor="RFC5033" target="https://www.rfc-editor.org/info/rfc5 | ||||
033" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5033.xml"> | ||||
<front> | ||||
<title>Specifying New Congestion Control Algorithms</title> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Allman" fullname="M. Allman"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2007" month="August"/> | ||||
<abstract> | ||||
<t>The IETF's standard congestion control schemes have been widely | ||||
shown to be inadequate for various environments (e.g., high-speed networks). R | ||||
ecent research has yielded many alternate congestion control schemes that signif | ||||
icantly differ from the IETF's congestion control principles. Using these new c | ||||
ongestion control schemes in the global Internet has possible ramifications to b | ||||
oth the traffic using the new congestion control and to traffic using the curren | ||||
tly standardized congestion control. Therefore, the IETF must proceed with caut | ||||
ion when dealing with alternate congestion control proposals. The goal of this | ||||
document is to provide guidance for considering alternate congestion control alg | ||||
orithms within the IETF. This document specifies an Internet Best Current Pract | ||||
ices for the Internet Community, and requests discussion and suggestions for imp | ||||
rovements.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="133"/> | ||||
<seriesInfo name="RFC" value="5033"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5033"/> | ||||
</reference> | ||||
<reference anchor="RFC5129" target="https://www.rfc-editor.org/info/rfc5 | ||||
129" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5129.xml"> | ||||
<front> | ||||
<title>Explicit Congestion Marking in MPLS</title> | ||||
<author initials="B." surname="Davie" fullname="B. Davie"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="B." surname="Briscoe" fullname="B. Briscoe"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Tay" fullname="J. Tay"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2008" month="January"/> | ||||
<abstract> | ||||
<t>RFC 3270 defines how to support the Diffserv architecture in MP | ||||
LS networks, including how to encode Diffserv Code Points (DSCPs) in an MPLS hea | ||||
der. DSCPs may be encoded in the EXP field, while other uses of that field are | ||||
not precluded. RFC 3270 makes no statement about how Explicit Congestion Notifi | ||||
cation (ECN) marking might be encoded in the MPLS header. This document defines | ||||
how an operator might define some of the EXP codepoints for explicit congestion | ||||
notification, without precluding other uses. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5129"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5129"/> | ||||
</reference> | ||||
<!-- <?rfc include='reference.RFC.5238'?> | ||||
<?rfc include='reference.RFC.5415'?> | ||||
<?rfc include='reference.RFC.5764'?> | ||||
<?rfc include='reference.RFC.6083'?> | ||||
<reference anchor="RFC5348" target="https://www.rfc-editor.org/info/rfc534 | <!-- [I-D.ietf-tsvwg-aqm-dualq-coupled]; companion document 9332 - title matches | |||
8" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5348.xml"> | as of 1/17/23 --> | |||
<front> | <reference anchor='RFC9332' target='https://www.rfc-editor.org/info/rfc9332'> | |||
<title>TCP Friendly Rate Control (TFRC): Protocol Specification</tit | <front> | |||
le> | <title>Dual-Queue Coupled Active Queue Management (AQM) for Low Latency, Low Los | |||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | s, and Scalable Throughput (L4S)</title> | |||
<organization/> | <author initials='K' surname='De Schepper' fullname='Koen De Schepper'> | |||
</author> | <organization /> | |||
<author initials="M." surname="Handley" fullname="M. Handley"> | </author> | |||
<organization/> | <author initials='B' surname='Briscoe' fullname='Bob Briscoe' role="editor"> | |||
</author> | <organization /> | |||
<author initials="J." surname="Padhye" fullname="J. Padhye"> | </author> | |||
<organization/> | <author initials='G' surname='White' fullname='Greg White'> | |||
</author> | <organization /> | |||
<author initials="J." surname="Widmer" fullname="J. Widmer"> | </author> | |||
<organization/> | <date month="January" year="2023"/> | |||
</author> | </front> | |||
<date year="2008" month="September"/> | <seriesInfo name="RFC" value="9332"/> | |||
<abstract> | <seriesInfo name="DOI" value="10.17487/RFC9332"/> | |||
<t>This document specifies TCP Friendly Rate Control (TFRC). TFRC | </reference> | |||
is a congestion control mechanism for unicast flows operating in a best-effort | ||||
Internet environment. It is reasonably fair when competing for bandwidth with T | <!-- [I-D.ietf-tsvwg-l4s-arch]; companion document 9330 - title matches as of 1/ | |||
CP flows, but has a much lower variation of throughput over time compared with T | 17/23 --> | |||
CP, making it more suitable for applications such as streaming media where a rel | <reference anchor='RFC9330' target='https://www.rfc-editor.org/info/rfc9330'> | |||
atively smooth sending rate is of importance.</t> | <front> | |||
<t>This document obsoletes RFC 3448 and updates RFC 4342. [STANDA | <title>Low Latency, Low Loss, and Scalable Throughput (L4S) Internet Service: Ar | |||
RDS-TRACK]</t> | chitecture</title> | |||
</abstract> | <author initials='B' surname='Briscoe' fullname='Bob Briscoe' role='editor' /> | |||
</front> | <author initials='K' surname='De Schepper' fullname='Koen De Schepper' /> | |||
<seriesInfo name="RFC" value="5348"/> | <author initials='M' surname='Bagnulo' fullname='Marcelo Bagnulo' /> | |||
<seriesInfo name="DOI" value="10.17487/RFC5348"/> | <author initials='G' surname='White' fullname='Greg White' /> | |||
</reference> | <date month="January" year="2023"/> | |||
<reference anchor="RFC5622" target="https://www.rfc-editor.org/info/rfc5 | </front> | |||
622" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5622.xml"> | <seriesInfo name="RFC" value="9330"/> | |||
<front> | <seriesInfo name="DOI" value="10.17487/RFC9330"/> | |||
<title>Profile for Datagram Congestion Control Protocol (DCCP) Conge | </reference> | |||
stion ID 4: TCP-Friendly Rate Control for Small Packets (TFRC-SP)</title> | ||||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2474. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3540. | |||
<author initials="E." surname="Kohler" fullname="E. Kohler"> | xml"/> | |||
<organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3246. | |||
</author> | xml"/> | |||
<date year="2009" month="August"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3649. | |||
<abstract> | xml"/> | |||
<t>This document specifies a profile for Congestion Control Identi | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4301. | |||
fier 4, the small-packet variant of TCP-Friendly Rate Control (TFRC), in the Dat | xml"/> | |||
agram Congestion Control Protocol (DCCP). CCID 4 is for experimental use, and u | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4302. | |||
ses TFRC-SP (RFC 4828), a variant of TFRC designed for applications that send sm | xml"/> | |||
all packets. CCID 4 is considered experimental because TFRC-SP is itself experi | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4303. | |||
mental, and is not proposed for widespread deployment in the global Internet at | xml"/> | |||
this time. The goal for TFRC-SP is to achieve roughly the same bandwidth in bit | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4340. | |||
s per second (bps) as a TCP flow using packets of up to 1500 bytes but experienc | xml"/> | |||
ing the same level of congestion. CCID 4 is for use for senders that send small | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4341. | |||
packets and would like a TCP- friendly sending rate, possibly with Explicit Con | xml"/> | |||
gestion Notification (ECN), while minimizing abrupt rate changes. This memo def | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4342. | |||
ines an Experimental Protocol for the Internet community.</t> | xml"/> | |||
</abstract> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5033. | |||
</front> | xml"/> | |||
<seriesInfo name="RFC" value="5622"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5129. | |||
<seriesInfo name="DOI" value="10.17487/RFC5622"/> | xml"/> | |||
</reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5348. | |||
<reference anchor="RFC5865" target="https://www.rfc-editor.org/info/rfc5 | xml"/> | |||
865" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5865.xml"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5622. | |||
<front> | xml"/> | |||
<title>A Differentiated Services Code Point (DSCP) for Capacity-Admi | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5865. | |||
tted Traffic</title> | xml"/> | |||
<author initials="F." surname="Baker" fullname="F. Baker"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4960. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5562. | |||
<author initials="J." surname="Polk" fullname="J. Polk"> | xml"/> | |||
<organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5681. | |||
</author> | xml"/> | |||
<author initials="M." surname="Dolly" fullname="M. Dolly"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5706. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6040. | |||
<date year="2010" month="May"/> | xml"/> | |||
<abstract> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6077. | |||
<t>This document requests one Differentiated Services Code Point ( | xml"/> | |||
DSCP) from the Internet Assigned Numbers Authority (IANA) for a class of real-ti | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6660. | |||
me traffic. This traffic class conforms to the Expedited Forwarding Per-Hop Beh | xml"/> | |||
avior. This traffic is also admitted by the network using a Call Admission Cont | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6675. | |||
rol (CAC) procedure involving authentication, authorization, and capacity admiss | xml"/> | |||
ion. This differs from a real-time traffic class that conforms to the Expedited | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7560. | |||
Forwarding Per-Hop Behavior but is not subject to capacity admission or subject | xml"/> | |||
to very coarse capacity admission. [STANDARDS-TRACK]</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7567. | |||
</abstract> | xml"/> | |||
</front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7713. | |||
<seriesInfo name="RFC" value="5865"/> | xml"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC5865"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5925. | |||
</reference> | xml"/> | |||
<reference anchor="RFC4960" target="https://www.rfc-editor.org/info/rfc4 | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8033. | |||
960" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4960.xml"> | xml"/> | |||
<front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8083. | |||
<title>Stream Control Transmission Protocol</title> | xml"/> | |||
<author initials="R." surname="Stewart" fullname="R. Stewart" role=" | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8085. | |||
editor"> | xml"/> | |||
<organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
</author> | xml"/> | |||
<date year="2007" month="September"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8290. | |||
<abstract> | xml"/> | |||
<t>This document obsoletes RFC 2960 and RFC 3309. It describes th | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8298. | |||
e Stream Control Transmission Protocol (SCTP). SCTP is designed to transport Pu | xml"/> | |||
blic Switched Telephone Network (PSTN) signaling messages over IP networks, but | ||||
is capable of broader applications.</t> | <!-- [I-D.ietf-tcpm-accurate-ecn] IESG state I-D Exists as of 1/17/23--> | |||
<t>SCTP is a reliable transport protocol operating on top of a con | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-tc | |||
nectionless packet network such as IP. It offers the following services to its | pm-accurate-ecn.xml"/> | |||
users:</t> | ||||
<t>-- acknowledged error-free non-duplicated transfer of user dat | <!-- [I-D.ietf-tsvwg-ecn-encap-guidelines] Expired as of 1/17/23 --> | |||
a,</t> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-ts | |||
<t>-- data fragmentation to conform to discovered path MTU size,< | vwg-ecn-encap-guidelines.xml"/> | |||
/t> | ||||
<t>-- sequenced delivery of user messages within multiple streams | <!-- [I-D.ietf-tsvwg-rfc6040update-shim] Expired as of 1/17/23 --> | |||
, with an option for order-of-arrival delivery of individual user messages,</t> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-ts | |||
<t>-- optional bundling of multiple user messages into a single S | vwg-rfc6040update-shim.xml"/> | |||
CTP packet, and</t> | ||||
<t>-- network-level fault tolerance through supporting of multi-h | <!-- [I-D.ietf-trill-ecn-support] in MISSREF state as of 1/17/23. xi:include | |||
oming at either or both ends of an association.</t> | incorrectly shows Eastlake's name as "D. E. Eastlake" but author name | |||
<t> The design of SCTP includes appropriate congestion avoidance b | preferences show he wants "D. Eastlake 3rd" --> | |||
ehavior and resistance to flooding and masquerade attacks. [STANDARDS-TRACK]</t | <reference anchor="I-D.ietf-trill-ecn-support"> | |||
> | <front> | |||
</abstract> | <title>TRILL (TRansparent Interconnection of Lots of Links): ECN (Explicit C | |||
</front> | ongestion Notification) Support</title> | |||
<seriesInfo name="RFC" value="4960"/> | <author initials="D." surname="Eastlake 3rd" fullname="Donald Eastlake 3rd"> | |||
<seriesInfo name="DOI" value="10.17487/RFC4960"/> | <organization>Huawei</organization> | |||
</reference> | </author> | |||
<reference anchor="RFC5562" target="https://www.rfc-editor.org/info/rfc5 | <author initials="B." surname="Briscoe" fullname="Bob Briscoe"> | |||
562" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5562.xml"> | <organization>CableLabs</organization> | |||
<front> | </author> | |||
<title>Adding Explicit Congestion Notification (ECN) Capability to T | <date month="February" day="25" year="2018"/> | |||
CP's SYN/ACK Packets</title> | </front> | |||
<author initials="A." surname="Kuzmanovic" fullname="A. Kuzmanovic"> | <seriesInfo name="Internet-Draft" value="draft-ietf-trill-ecn-support-07"/> | |||
<organization/> | </reference> | |||
</author> | ||||
<author initials="A." surname="Mondal" fullname="A. Mondal"> | <!-- [I-D.stewart-tsvwg-sctpecn] IESG state Expired as of 1/17/23. xi:include in | |||
<organization/> | correctly | |||
</author> | shows Stewart's name as "R. R. Stewart" when the draft only has | |||
<author initials="S." surname="Floyd" fullname="S. Floyd"> | "R. Stewart" --> | |||
<organization/> | <reference anchor="I-D.stewart-tsvwg-sctpecn"> | |||
</author> | <front> | |||
<author initials="K." surname="Ramakrishnan" fullname="K. Ramakrishn | <title>ECN for Stream Control Transmission Protocol (SCTP)</title> | |||
an"> | <author initials="R." surname="Stewart" fullname="Randall R. Stewart"> | |||
<organization/> | <organization>Adara Networks</organization> | |||
</author> | </author> | |||
<date year="2009" month="June"/> | <author initials="M." surname="Tüxen" fullname="Michael Tüxen"> | |||
<abstract> | <organization>Muenster Univ. of Appl. Sciences</organization> | |||
<t>The proposal in this document is Experimental. While it may be | </author> | |||
deployed in the current Internet, it does not represent a consensus that this i | <author initials="X." surname="Dong" fullname="Xuesong Dong"> | |||
s the best possible mechanism for the use of Explicit Congestion Notification (E | <organization>Huawei</organization> | |||
CN) in TCP SYN/ACK packets.</t> | </author> | |||
<t>This document describes an optional, experimental modification | <date month="January" day="15" year="2014"/> | |||
to RFC 3168 to allow TCP SYN/ACK packets to be ECN-Capable. For TCP, RFC 3168 s | </front> | |||
pecifies setting an ECN-Capable codepoint on data packets, but not on SYN and SY | <seriesInfo name="Internet-Draft" value="draft-stewart-tsvwg-sctpecn-05"/> | |||
N/ACK packets. However, because of the high cost to the TCP transfer of having | </reference> | |||
a SYN/ACK packet dropped, with the resulting retransmission timeout, this docume | ||||
nt describes the use of ECN for the SYN/ACK packet itself, when sent in response | <!-- [I-D.briscoe-tsvwg-l4s-diffserv] IESG state Expired as of 1/17/23. xi:inclu | |||
to a SYN packet with the two ECN flags set in the TCP header, indicating a will | de wrong date: --> | |||
ingness to use ECN. Setting the initial TCP SYN/ACK packet as ECN-Capable can b | <reference anchor="I-D.briscoe-tsvwg-l4s-diffserv"> | |||
e of great benefit to the TCP connection, avoiding the severe penalty of a retra | <front> | |||
nsmission timeout for a connection that has not yet started placing a load on th | <title>Interactions between Low Latency, Low Loss, Scalable Throughput (L4S) | |||
e network. The TCP responder (the sender of the SYN/ACK packet) must reply to a | and Differentiated Services</title> | |||
report of an ECN-marked SYN/ACK packet by resending a SYN/ACK packet that is no | <author fullname="Bob Briscoe" surname="Briscoe" initials="B"> | |||
t ECN-Capable. If the resent SYN/ACK packet is acknowledged, then the TCP respo | <organization>CableLabs</organization> | |||
nder reduces its initial congestion window from two, three, or four segments to | </author> | |||
one segment, thereby reducing the subsequent load from that connection on the ne | <date month="November" day="1" year="2018"/> | |||
twork. If instead the SYN/ACK packet is dropped, or for some other reason the T | </front> | |||
CP responder does not receive an acknowledgement in the specified time, the TCP | <seriesInfo name="Internet-Draft" value="draft-briscoe-tsvwg-l4s-diffserv-02"/ | |||
responder follows TCP standards for a dropped SYN/ACK packet (setting the retran | > | |||
smission timer). This memo defines an Experimental Protocol for the Internet co | </reference> | |||
mmunity.</t> | ||||
</abstract> | <!-- [I-D.ietf-tsvwg-nqb] IESG state I-D Exists.--> | |||
</front> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-ts | |||
<seriesInfo name="RFC" value="5562"/> | vwg-nqb.xml"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC5562"/> | ||||
</reference> | <!-- [I-D.ietf-tsvwg-l4sops] IESG state I-D Exists as of 1/17/23. xi:incl | |||
<reference anchor="RFC5681" target="https://www.rfc-editor.org/info/rfc5 | ude missing editor role--> | |||
681" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5681.xml"> | <reference anchor="I-D.ietf-tsvwg-l4sops"> | |||
<front> | <front> | |||
<title>TCP Congestion Control</title> | <title>Operational Guidance for Deployment of L4S in the Internet | |||
<author initials="M." surname="Allman" fullname="M. Allman"> | </title> | |||
<organization/> | <author fullname="Greg White" surname="White" initials="G" role="editor"> | |||
</author> | <organization>CableLabs</organization> | |||
<author initials="V." surname="Paxson" fullname="V. Paxson"> | </author> | |||
<organization/> | <date month="April" day="28" year="2022"/> | |||
</author> | </front> | |||
<author initials="E." surname="Blanton" fullname="E. Blanton"> | <seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-l4sops-03"/> | |||
<organization/> | </reference> | |||
</author> | ||||
<date year="2009" month="September"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8311. | |||
<abstract> | xml"/> | |||
<t>This document defines TCP's four intertwined congestion control | ||||
algorithms: slow start, congestion avoidance, fast retransmit, and fast recover | <!-- [I-D.ietf-tcpm-generalized-ecn] IESG state I-D Exists as of 1/1/7/23 --> | |||
y. In addition, the document specifies how TCP should begin transmission after | <xi:include | |||
a relatively long idle period, as well as discussing various acknowledgment gene | href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-tcpm-gener | |||
ration methods. This document obsoletes RFC 2581. [STANDARDS-TRACK]</t> | alized-ecn.xml"/> | |||
</abstract> | ||||
</front> | <reference anchor="ARED01" target="https://www.icsi.berkeley.edu/icsi/no | |||
<seriesInfo name="RFC" value="5681"/> | de/2032"> | |||
<seriesInfo name="DOI" value="10.17487/RFC5681"/> | ||||
</reference> | ||||
<reference anchor="RFC5706" target="https://www.rfc-editor.org/info/rfc5 | ||||
706" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5706.xml"> | ||||
<front> | ||||
<title>Guidelines for Considering Operations and Management of New P | ||||
rotocols and Protocol Extensions</title> | ||||
<author initials="D." surname="Harrington" fullname="D. Harrington"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2009" month="November"/> | ||||
<abstract> | ||||
<t>New protocols or protocol extensions are best designed with due | ||||
consideration of the functionality needed to operate and manage the protocols. | ||||
Retrofitting operations and management is sub-optimal. The purpose of this docu | ||||
ment is to provide guidance to authors and reviewers of documents that define ne | ||||
w protocols or protocol extensions regarding aspects of operations and managemen | ||||
t that should be considered. This memo provides information for the Internet co | ||||
mmunity.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5706"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5706"/> | ||||
</reference> | ||||
<reference anchor="RFC6040" target="https://www.rfc-editor.org/info/rfc6 | ||||
040" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6040.xml"> | ||||
<front> | ||||
<title>Tunnelling of Explicit Congestion Notification</title> | ||||
<author initials="B." surname="Briscoe" fullname="B. Briscoe"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2010" month="November"/> | ||||
<abstract> | ||||
<t>This document redefines how the explicit congestion notificatio | ||||
n (ECN) field of the IP header should be constructed on entry to and exit from a | ||||
ny IP-in-IP tunnel. On encapsulation, it updates RFC 3168 to bring all IP-in-IP | ||||
tunnels (v4 or v6) into line with RFC 4301 IPsec ECN processing. On decapsulat | ||||
ion, it updates both RFC 3168 and RFC 4301 to add new behaviours for previously | ||||
unused combinations of inner and outer headers. The new rules ensure the ECN fi | ||||
eld is correctly propagated across a tunnel whether it is used to signal one or | ||||
two severity levels of congestion; whereas before, only one severity level was s | ||||
upported. Tunnel endpoints can be updated in any order without affecting pre-ex | ||||
isting uses of the ECN field, thus ensuring backward compatibility. Nonetheless | ||||
, operators wanting to support two severity levels (e.g., for pre-congestion not | ||||
ification -- PCN) can require compliance with this new specification. A thoroug | ||||
h analysis of the reasoning for these changes and the implications is included. | ||||
In the unlikely event that the new rules do not meet a specific need, RFC 4774 | ||||
gives guidance on designing alternate ECN semantics, and this document extends t | ||||
hat to include tunnelling issues. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6040"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6040"/> | ||||
</reference> | ||||
<reference anchor="RFC6077" target="https://www.rfc-editor.org/info/rfc6 | ||||
077" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6077.xml"> | ||||
<front> | ||||
<title>Open Research Issues in Internet Congestion Control</title> | ||||
<author initials="D." surname="Papadimitriou" fullname="D. Papadimit | ||||
riou" role="editor"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Welzl" fullname="M. Welzl"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Scharf" fullname="M. Scharf"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="B." surname="Briscoe" fullname="B. Briscoe"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2011" month="February"/> | ||||
<abstract> | ||||
<t>This document describes some of the open problems in Internet c | ||||
ongestion control that are known today. This includes several new challenges th | ||||
at are becoming important as the network grows, as well as some issues that have | ||||
been known for many years. These challenges are generally considered to be ope | ||||
n research topics that may require more study or application of innovative techn | ||||
iques before Internet-scale solutions can be confidently engineered and deployed | ||||
. This document is not an Internet Standards Track specification; it is publis | ||||
hed for informational purposes.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6077"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6077"/> | ||||
</reference> | ||||
<reference anchor="RFC6660" target="https://www.rfc-editor.org/info/rfc6 | ||||
660" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6660.xml"> | ||||
<front> | ||||
<title>Encoding Three Pre-Congestion Notification (PCN) States in th | ||||
e IP Header Using a Single Diffserv Codepoint (DSCP)</title> | ||||
<author initials="B." surname="Briscoe" fullname="B. Briscoe"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="T." surname="Moncaster" fullname="T. Moncaster"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Menth" fullname="M. Menth"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2012" month="July"/> | ||||
<abstract> | ||||
<t>The objective of Pre-Congestion Notification (PCN) is to protec | ||||
t the quality of service (QoS) of inelastic flows within a Diffserv domain. The | ||||
overall rate of PCN-traffic is metered on every link in the PCN- domain, and PCN | ||||
-packets are appropriately marked when certain configured rates are exceeded. E | ||||
gress nodes pass information about these PCN-marks to Decision Points that then | ||||
decide whether to admit or block new flow requests or to terminate some already | ||||
admitted flows during serious pre-congestion.</t> | ||||
<t>This document specifies how PCN-marks are to be encoded into th | ||||
e IP header by reusing the Explicit Congestion Notification (ECN) codepoints wit | ||||
hin a PCN-domain. The PCN wire protocol for non-IP protocol headers will need t | ||||
o be defined elsewhere. Nonetheless, this document clarifies the PCN encoding f | ||||
or MPLS in an informational appendix. The encoding for IP provides for up to th | ||||
ree different PCN marking states using a single Diffserv codepoint (DSCP): not-m | ||||
arked (NM), threshold-marked (ThM), and excess-traffic-marked (ETM). Hence, it i | ||||
s called the 3-in-1 PCN encoding. This document obsoletes RFC 5696. [STANDARDS | ||||
-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6660"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6660"/> | ||||
</reference> | ||||
<reference anchor="RFC6675" target="https://www.rfc-editor.org/info/rfc6 | ||||
675" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6675.xml"> | ||||
<front> | ||||
<title>A Conservative Loss Recovery Algorithm Based on Selective Ack | ||||
nowledgment (SACK) for TCP</title> | ||||
<author initials="E." surname="Blanton" fullname="E. Blanton"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Allman" fullname="M. Allman"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L." surname="Wang" fullname="L. Wang"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="I." surname="Jarvinen" fullname="I. Jarvinen"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Kojo" fullname="M. Kojo"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="Y." surname="Nishida" fullname="Y. Nishida"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2012" month="August"/> | ||||
<abstract> | ||||
<t>This document presents a conservative loss recovery algorithm f | ||||
or TCP that is based on the use of the selective acknowledgment (SACK) TCP optio | ||||
n. The algorithm presented in this document conforms to the spirit of the curre | ||||
nt congestion control specification (RFC 5681), but allows TCP senders to recove | ||||
r more effectively when multiple segments are lost from a single flight of data. | ||||
This document obsoletes RFC 3517 and describes changes from it. [STANDARDS-TR | ||||
ACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6675"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6675"/> | ||||
</reference> | ||||
<reference anchor="RFC7560" target="https://www.rfc-editor.org/info/rfc7 | ||||
560" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7560.xml"> | ||||
<front> | ||||
<title>Problem Statement and Requirements for Increased Accuracy in | ||||
Explicit Congestion Notification (ECN) Feedback</title> | ||||
<author initials="M." surname="Kuehlewind" fullname="M. Kuehlewind" | ||||
role="editor"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="R." surname="Scheffenegger" fullname="R. Scheffene | ||||
gger"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="B." surname="Briscoe" fullname="B. Briscoe"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2015" month="August"/> | ||||
<abstract> | ||||
<t>Explicit Congestion Notification (ECN) is a mechanism where net | ||||
work nodes can mark IP packets, instead of dropping them, to indicate congestion | ||||
to the endpoints. An ECN-capable receiver will feed this information back to t | ||||
he sender. ECN is specified for TCP in such a way that it can only feed back on | ||||
e congestion signal per Round-Trip Time (RTT). In contrast, ECN for other trans | ||||
port protocols, such as RTP/UDP and SCTP, is specified with more accurate ECN fe | ||||
edback. Recent new TCP mechanisms (like Congestion Exposure (ConEx) or Data Cent | ||||
er TCP (DCTCP)) need more accurate ECN feedback in the case where more than one | ||||
marking is received in one RTT. This document specifies requirements for an upd | ||||
ate to the TCP protocol to provide more accurate ECN feedback.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7560"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7560"/> | ||||
</reference> | ||||
<reference anchor="RFC7567" target="https://www.rfc-editor.org/info/rfc7 | ||||
567" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7567.xml"> | ||||
<front> | ||||
<title>IETF Recommendations Regarding Active Queue Management</title | ||||
> | ||||
<author initials="F." surname="Baker" fullname="F. Baker" role="edit | ||||
or"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="Fairhurst" fullname="G. Fairhurst" ro | ||||
le="editor"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2015" month="July"/> | ||||
<abstract> | ||||
<t>This memo presents recommendations to the Internet community co | ||||
ncerning measures to improve and preserve Internet performance. It presents a s | ||||
trong recommendation for testing, standardization, and widespread deployment of | ||||
active queue management (AQM) in network devices to improve the performance of t | ||||
oday's Internet. It also urges a concerted effort of research, measurement, and | ||||
ultimate deployment of AQM mechanisms to protect the Internet from flows that a | ||||
re not sufficiently responsive to congestion notification.</t> | ||||
<t>Based on 15 years of experience and new research, this document | ||||
replaces the recommendations of RFC 2309.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="197"/> | ||||
<seriesInfo name="RFC" value="7567"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7567"/> | ||||
</reference> | ||||
<reference anchor="RFC7713" target="https://www.rfc-editor.org/info/rfc7 | ||||
713" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7713.xml"> | ||||
<front> | ||||
<title>Congestion Exposure (ConEx) Concepts, Abstract Mechanism, and | ||||
Requirements</title> | ||||
<author initials="M." surname="Mathis" fullname="M. Mathis"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="B." surname="Briscoe" fullname="B. Briscoe"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2015" month="December"/> | ||||
<abstract> | ||||
<t>This document describes an abstract mechanism by which senders | ||||
inform the network about the congestion recently encountered by packets in the s | ||||
ame flow. Today, network elements at any layer may signal congestion to the rec | ||||
eiver by dropping packets or by Explicit Congestion Notification (ECN) markings, | ||||
and the receiver passes this information back to the sender in transport-layer | ||||
feedback. The mechanism described here enables the sender to also relay this co | ||||
ngestion information back into the network in-band at the IP layer, such that th | ||||
e total amount of congestion from all elements on the path is revealed to all IP | ||||
elements along the path, where it could, for example, be used to provide input | ||||
to traffic management. This mechanism is called Congestion Exposure, or ConEx. | ||||
The companion document, "Congestion Exposure (ConEx) Concepts and Use Cases" (R | ||||
FC 6789), provides the entry point to the set of ConEx documentation.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7713"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7713"/> | ||||
</reference> | ||||
<reference anchor="RFC5925" target="https://www.rfc-editor.org/info/rfc5 | ||||
925" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5925.xml"> | ||||
<front> | ||||
<title>The TCP Authentication Option</title> | ||||
<author initials="J." surname="Touch" fullname="J. Touch"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A." surname="Mankin" fullname="A. Mankin"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="R." surname="Bonica" fullname="R. Bonica"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2010" month="June"/> | ||||
<abstract> | ||||
<t>This document specifies the TCP Authentication Option (TCP-AO), | ||||
which obsoletes the TCP MD5 Signature option of RFC 2385 (TCP MD5). TCP-AO spe | ||||
cifies the use of stronger Message Authentication Codes (MACs), protects against | ||||
replays even for long-lived TCP connections, and provides more details on the a | ||||
ssociation of security with TCP connections than TCP MD5. TCP-AO is compatible | ||||
with either a static Master Key Tuple (MKT) configuration or an external, out-of | ||||
-band MKT management mechanism; in either case, TCP-AO also protects connections | ||||
when using the same MKT across repeated instances of a connection, using traffi | ||||
c keys derived from the MKT, and coordinates MKT changes between endpoints. The | ||||
result is intended to support current infrastructure uses of TCP MD5, such as t | ||||
o protect long-lived connections (as used, e.g., in BGP and LDP), and to support | ||||
a larger set of MACs with minimal other system and operational changes. TCP-AO | ||||
uses a different option identifier than TCP MD5, even though TCP-AO and TCP MD5 | ||||
are never permitted to be used simultaneously. TCP-AO supports IPv6, and is fu | ||||
lly compatible with the proposed requirements for the replacement of TCP MD5. [ | ||||
STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5925"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5925"/> | ||||
</reference> | ||||
<reference anchor="RFC8033" target="https://www.rfc-editor.org/info/rfc8 | ||||
033" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8033.xml"> | ||||
<front> | ||||
<title>Proportional Integral Controller Enhanced (PIE): A Lightweigh | ||||
t Control Scheme to Address the Bufferbloat Problem</title> | ||||
<author initials="R." surname="Pan" fullname="R. Pan"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P." surname="Natarajan" fullname="P. Natarajan"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="F." surname="Baker" fullname="F. Baker"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="White" fullname="G. White"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2017" month="February"/> | ||||
<abstract> | ||||
<t>Bufferbloat is a phenomenon in which excess buffers in the netw | ||||
ork cause high latency and latency variation. As more and more interactive appl | ||||
ications (e.g., voice over IP, real-time video streaming, and financial transact | ||||
ions) run in the Internet, high latency and latency variation degrade applicatio | ||||
n performance. There is a pressing need to design intelligent queue management | ||||
schemes that can control latency and latency variation, and hence provide desira | ||||
ble quality of service to users.</t> | ||||
<t>This document presents a lightweight active queue management de | ||||
sign called "PIE" (Proportional Integral controller Enhanced) that can effective | ||||
ly control the average queuing latency to a target value. Simulation results, th | ||||
eoretical analysis, and Linux testbed results have shown that PIE can ensure low | ||||
latency and achieve high link utilization under various congestion situations. | ||||
The design does not require per-packet timestamps, so it incurs very little ove | ||||
rhead and is simple enough to implement in both hardware and software.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8033"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8033"/> | ||||
</reference> | ||||
<reference anchor="RFC8083" target="https://www.rfc-editor.org/info/rfc8 | ||||
083" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8083.xml"> | ||||
<front> | ||||
<title>Multimedia Congestion Control: Circuit Breakers for Unicast R | ||||
TP Sessions</title> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="V." surname="Singh" fullname="V. Singh"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2017" month="March"/> | ||||
<abstract> | ||||
<t>The Real-time Transport Protocol (RTP) is widely used in teleph | ||||
ony, video conferencing, and telepresence applications. Such applications are o | ||||
ften run on best-effort UDP/IP networks. If congestion control is not implement | ||||
ed in these applications, then network congestion can lead to uncontrolled packe | ||||
t loss and a resulting deterioration of the user's multimedia experience. The c | ||||
ongestion control algorithm acts as a safety measure by stopping RTP flows from | ||||
using excessive resources and protecting the network from overload. At the time | ||||
of this writing, however, while there are several proprietary solutions, there | ||||
is no standard algorithm for congestion control of interactive RTP flows.</t> | ||||
<t>This document does not propose a congestion control algorithm. | ||||
It instead defines a minimal set of RTP circuit breakers: conditions under whic | ||||
h an RTP sender needs to stop transmitting media data to protect the network fro | ||||
m excessive congestion. It is expected that, in the absence of long-lived exces | ||||
sive congestion, RTP applications running on best-effort IP networks will be abl | ||||
e to operate without triggering these circuit breakers. To avoid triggering the | ||||
RTP circuit breaker, any Standards Track congestion control algorithms defined | ||||
for RTP will need to operate within the envelope set by these RTP circuit breake | ||||
r algorithms.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8083"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8083"/> | ||||
</reference> | ||||
<reference anchor="RFC8085" target="https://www.rfc-editor.org/info/rfc8 | ||||
085" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8085.xml"> | ||||
<front> | ||||
<title>UDP Usage Guidelines</title> | ||||
<author initials="L." surname="Eggert" fullname="L. Eggert"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="Fairhurst" fullname="G. Fairhurst"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="Shepherd" fullname="G. Shepherd"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2017" month="March"/> | ||||
<abstract> | ||||
<t>The User Datagram Protocol (UDP) provides a minimal message-pas | ||||
sing transport that has no inherent congestion control mechanisms. This documen | ||||
t provides guidelines on the use of UDP for the designers of applications, tunne | ||||
ls, and other protocols that use UDP. Congestion control guidelines are a prima | ||||
ry focus, but the document also provides guidance on other topics, including mes | ||||
sage sizes, reliability, checksums, middlebox traversal, the use of Explicit Con | ||||
gestion Notification (ECN), Differentiated Services Code Points (DSCPs), and por | ||||
ts.</t> | ||||
<t>Because congestion control is critical to the stable operation | ||||
of the Internet, applications and other protocols that choose to use UDP as an I | ||||
nternet transport must employ mechanisms to prevent congestion collapse and to e | ||||
stablish some degree of fairness with concurrent traffic. They may also need to | ||||
implement additional mechanisms, depending on how they use UDP.</t> | ||||
<t>Some guidance is also applicable to the design of other protoco | ||||
ls (e.g., protocols layered directly on IP or via IP-based tunnels), especially | ||||
when these protocols do not themselves provide congestion control.</t> | ||||
<t>This document obsoletes RFC 5405 and adds guidelines for multic | ||||
ast UDP usage.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="145"/> | ||||
<seriesInfo name="RFC" value="8085"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8085"/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
tle> | ||||
<author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2017" month="May"/> | ||||
<abstract> | ||||
<t>RFC 2119 specifies common key words that may be used in protoco | ||||
l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
<reference anchor="RFC8290" target="https://www.rfc-editor.org/info/rfc8 | ||||
290" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8290.xml"> | ||||
<front> | ||||
<title>The Flow Queue CoDel Packet Scheduler and Active Queue Manage | ||||
ment Algorithm</title> | ||||
<author initials="T." surname="Hoeiland-Joergensen" fullname="T. Hoe | ||||
iland-Joergensen"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P." surname="McKenney" fullname="P. McKenney"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Taht" fullname="D. Taht"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Gettys" fullname="J. Gettys"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="E." surname="Dumazet" fullname="E. Dumazet"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2018" month="January"/> | ||||
<abstract> | ||||
<t>This memo presents the FQ-CoDel hybrid packet scheduler and Act | ||||
ive Queue Management (AQM) algorithm, a powerful tool for fighting bufferbloat a | ||||
nd reducing latency.</t> | ||||
<t>FQ-CoDel mixes packets from multiple flows and reduces the impa | ||||
ct of head-of-line blocking from bursty traffic. It provides isolation for low- | ||||
rate traffic such as DNS, web, and videoconferencing traffic. It improves utili | ||||
sation across the networking fabric, especially for bidirectional traffic, by ke | ||||
eping queue lengths short, and it can be implemented in a memory- and CPU-effici | ||||
ent fashion across a wide range of hardware.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8290"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8290"/> | ||||
</reference> | ||||
<reference anchor="RFC8298" target="https://www.rfc-editor.org/info/rfc8 | ||||
298" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8298.xml"> | ||||
<front> | ||||
<title>Self-Clocked Rate Adaptation for Multimedia</title> | ||||
<author initials="I." surname="Johansson" fullname="I. Johansson"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="Z." surname="Sarker" fullname="Z. Sarker"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2017" month="December"/> | ||||
<abstract> | ||||
<t>This memo describes a rate adaptation algorithm for conversatio | ||||
nal media services such as interactive video. The solution conforms to the pack | ||||
et conservation principle and uses a hybrid loss-and-delay- based congestion con | ||||
trol algorithm. The algorithm is evaluated over both simulated Internet bottlen | ||||
eck scenarios as well as in a Long Term Evolution (LTE) system simulator and is | ||||
shown to achieve both low latency and high video throughput in these scenarios.< | ||||
/t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8298"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8298"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tcpm-accurate-ecn" target="https://datatrack | ||||
er.ietf.org/api/v1/doc/document/draft-ietf-tcpm-accurate-ecn/" xml:base="https:/ | ||||
/bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-tcpm-accurate-ecn.xml"> | ||||
<front> | ||||
<title>More Accurate ECN Feedback in TCP</title> | ||||
<author fullname="Bob Briscoe"/> | ||||
<author fullname="Mirja Kühlewind"/> | ||||
<author fullname="Richard Scheffenegger"/> | ||||
<date day="25" month="July" year="2022"/> | ||||
<abstract> | ||||
<t>Explicit Congestion Notification (ECN) is a mechanism where net | ||||
work | ||||
nodes can mark IP packets instead of dropping them to indicate | ||||
incipient congestion to the end-points. Receivers with an ECN- | ||||
capable transport protocol feed back this information to the sender. | ||||
ECN was originally specified for TCP in such a way that only one | ||||
feedback signal can be transmitted per Round-Trip Time (RTT). Recent | ||||
new TCP mechanisms like Congestion Exposure (ConEx), Data Center TCP | ||||
(DCTCP) or Low Latency Low Loss Scalable Throughput (L4S) need more | ||||
accurate ECN feedback information whenever more than one marking is | ||||
received in one RTT. This document updates the original ECN | ||||
specification to specify a scheme to provide more than one feedback | ||||
signal per RTT in the TCP header. Given TCP header space is scarce, | ||||
it allocates a reserved header bit previously assigned to the ECN- | ||||
Nonce. It also overloads the two existing ECN flags in the TCP | ||||
header. The resulting extra space is exploited to feed back the IP- | ||||
ECN field received during the 3-way handshake as well. Supplementary | ||||
feedback information can optionally be provided in a new TCP option, | ||||
which is never used on the TCP SYN. The document also specifies the | ||||
treatment of this updated TCP wire protocol by middleboxes.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tcpm-accurate-ecn- | ||||
20"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tsvwg-ecn-encap-guidelines" target="https:// | ||||
datatracker.ietf.org/api/v1/doc/document/draft-ietf-tsvwg-ecn-encap-guidelines/" | ||||
xml:base="https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-tsvwg-e | ||||
cn-encap-guidelines.xml"> | ||||
<front> | ||||
<title>Guidelines for Adding Congestion Notification to Protocols th | ||||
at Encapsulate IP</title> | ||||
<author fullname="Bob Briscoe"/> | ||||
<author fullname="John Kaippallimalil"/> | ||||
<date day="11" month="July" year="2022"/> | ||||
<abstract> | ||||
<t>The purpose of this document is to guide the design of congesti | ||||
on | ||||
notification in any lower layer or tunnelling protocol that | ||||
encapsulates IP. The aim is for explicit congestion signals to | ||||
propagate consistently from lower layer protocols into IP. Then the | ||||
IP internetwork layer can act as a portability layer to carry | ||||
congestion notification from non-IP-aware congested nodes up to the | ||||
transport layer (L4). Following these guidelines should assure | ||||
interworking among IP layer and lower layer congestion notification | ||||
mechanisms, whether specified by the IETF or other standards bodies. | ||||
This document updates the advice to subnetwork designers about ECN in | ||||
RFC 3819.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-ecn-encap-gu | ||||
idelines-17"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tsvwg-rfc6040update-shim" target="https://da | ||||
tatracker.ietf.org/api/v1/doc/document/draft-ietf-tsvwg-rfc6040update-shim/" xml | ||||
:base="https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-tsvwg-rfc60 | ||||
40update-shim.xml"> | ||||
<front> | ||||
<title>Propagating Explicit Congestion Notification Across IP Tunnel | ||||
Headers Separated by a Shim</title> | ||||
<author fullname="Bob Briscoe"/> | ||||
<date day="11" month="July" year="2022"/> | ||||
<abstract> | ||||
<t>RFC 6040 on "Tunnelling of Explicit Congestion Notification" ma | ||||
de the | ||||
rules for propagation of ECN consistent for all forms of IP in IP | ||||
tunnel. This specification updates RFC 6040 to clarify that its | ||||
scope includes tunnels where two IP headers are separated by at least | ||||
one shim header that is not sufficient on its own for wide area | ||||
packet forwarding. It surveys widely deployed IP tunnelling | ||||
protocols that use such shim header(s) and updates the specifications | ||||
of those that do not mention ECN propagation (L2TPv2, L2TPv3, GRE, | ||||
Teredo and AMT). This specification also updates RFC 6040 with | ||||
configuration requirements needed to make any legacy tunnel ingress | ||||
safe.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-rfc6040updat | ||||
e-shim-15"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-trill-ecn-support" target="https://datatrack | ||||
er.ietf.org/api/v1/doc/document/draft-ietf-trill-ecn-support/" xml:base="https:/ | ||||
/bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-trill-ecn-support.xml"> | ||||
<front> | ||||
<title>TRILL (TRansparent Interconnection of Lots of Links): ECN (Ex | ||||
plicit Congestion Notification) Support</title> | ||||
<author fullname="Donald E. Eastlake"/> | ||||
<author fullname="Bob Briscoe"/> | ||||
<date day="25" month="February" year="2018"/> | ||||
<abstract> | ||||
<t>Explicit congestion notification (ECN) allows a forwarding elem | ||||
ent to | ||||
notify downstream devices, including the destination, of the onset of | ||||
congestion without having to drop packets. This can improve network | ||||
efficiency through better congestion control without packet drops. | ||||
This document extends ECN to TRILL (TRansparent Interconnection of | ||||
Lots of Links) switches, including integration with IP ECN, and | ||||
provides for ECN marking in the TRILL Header Extension Flags Word | ||||
(see RFC 7179).</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-trill-ecn-support- | ||||
07"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tsvwg-aqm-dualq-coupled" target="https://dat | ||||
atracker.ietf.org/api/v1/doc/document/draft-ietf-tsvwg-aqm-dualq-coupled/" xml:b | ||||
ase="https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-tsvwg-aqm-dua | ||||
lq-coupled.xml"> | ||||
<front> | ||||
<title>DualQ Coupled AQMs for Low Latency, Low Loss and Scalable Thr | ||||
oughput (L4S)</title> | ||||
<author fullname="Koen De Schepper"/> | ||||
<author fullname="Bob Briscoe"/> | ||||
<author fullname="Greg White"/> | ||||
<date day="7" month="July" year="2022"/> | ||||
<abstract> | ||||
<t>This specification defines a framework for coupling the Active | ||||
Queue | ||||
Management (AQM) algorithms in two queues intended for flows with | ||||
different responses to congestion. This provides a way for the | ||||
Internet to transition from the scaling problems of standard TCP | ||||
Reno-friendly ('Classic') congestion controls to the family of | ||||
'Scalable' congestion controls. These are designed for consistently | ||||
very Low queuing Latency, very Low congestion Loss and Scaling of | ||||
per-flow throughput (L4S) by using Explicit Congestion Notification | ||||
(ECN) in a modified way. Until the Coupled DualQ, these L4S senders | ||||
could only be deployed where a clean-slate environment could be | ||||
arranged, such as in private data centres. The coupling acts like a | ||||
semi-permeable membrane: isolating the sub-millisecond average | ||||
queuing delay and zero congestion loss of L4S from Classic latency | ||||
and loss; but pooling the capacity between any combination of | ||||
Scalable and Classic flows with roughly equivalent throughput per | ||||
flow. The DualQ achieves this indirectly, without having to inspect | ||||
transport layer flow identifiers and without compromising the | ||||
performance of the Classic traffic, relative to a single queue. The | ||||
DualQ design has low complexity and requires no configuration for the | ||||
public Internet.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-aqm-dualq-co | ||||
upled-24"/> | ||||
</reference> | ||||
<reference anchor="I-D.stewart-tsvwg-sctpecn" target="https://www.ietf.o | ||||
rg/archive/id/draft-stewart-tsvwg-sctpecn-05.txt" xml:base="https://bib.ietf.org | ||||
/public/rfc/bibxml-ids/reference.I-D.stewart-tsvwg-sctpecn.xml"> | ||||
<front> | ||||
<title>ECN for Stream Control Transmission Protocol (SCTP)</title> | ||||
<author fullname="Randall R. Stewart"/> | ||||
<author fullname="Michael Tuexen"/> | ||||
<author fullname="Xuesong Dong"/> | ||||
<date day="15" month="January" year="2014"/> | ||||
<abstract> | ||||
<t>This document describes the addition of the ECN to the Stream C | ||||
ontrol Transmission Protocol (SCTP).</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-stewart-tsvwg-sctpecn-0 | ||||
5"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tsvwg-l4s-arch" target="https://datatracker. | ||||
ietf.org/api/v1/doc/document/draft-ietf-tsvwg-l4s-arch/" xml:base="https://bib.i | ||||
etf.org/public/rfc/bibxml-ids/reference.I-D.ietf-tsvwg-l4s-arch.xml"> | ||||
<front> | ||||
<title>Low Latency, Low Loss, Scalable Throughput (L4S) Internet Ser | ||||
vice: Architecture</title> | ||||
<author fullname="Bob Briscoe"/> | ||||
<author fullname="Koen De Schepper"/> | ||||
<author fullname="Marcelo Bagnulo"/> | ||||
<author fullname="Greg White"/> | ||||
<date day="27" month="July" year="2022"/> | ||||
<abstract> | ||||
<t>This document describes the L4S architecture, which enables Int | ||||
ernet | ||||
applications to achieve Low queuing Latency, Low Loss, and Scalable | ||||
throughput (L4S). The insight on which L4S is based is that the root | ||||
cause of queuing delay is in the congestion controllers of senders, | ||||
not in the queue itself. With the L4S architecture all Internet | ||||
applications could (but do not have to) transition away from | ||||
congestion control algorithms that cause substantial queuing delay, | ||||
to a new class of congestion controls that induce very little | ||||
queuing, aided by explicit congestion signalling from the network. | ||||
This new class of congestion controls can provide low latency for | ||||
capacity-seeking flows, so applications can achieve both high | ||||
bandwidth and low latency.</t> | ||||
<t>The architecture primarily concerns incremental deployment. It | ||||
defines mechanisms that allow the new class of L4S congestion | ||||
controls to coexist with 'Classic' congestion controls in a shared | ||||
network. These mechanisms aim to ensure that the latency and | ||||
throughput performance using an L4S-compliant congestion controller | ||||
is usually much better (and rarely worse) than performance would have | ||||
been using a 'Classic' congestion controller, and that competing | ||||
flows continuing to use 'Classic' controllers are typically not | ||||
impacted by the presence of L4S. These characteristics are important | ||||
to encourage adoption of L4S congestion control algorithms and L4S | ||||
compliant network elements.</t> | ||||
<t>The L4S architecture consists of three components: network supp | ||||
ort to | ||||
isolate L4S traffic from classic traffic; protocol features that | ||||
allow network elements to identify L4S traffic; and host support for | ||||
L4S congestion controls. The protocol is defined separately as an | ||||
experimental change to Explicit Congestion Notification (ECN).</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-l4s-arch-19" | ||||
/> | ||||
</reference> | ||||
<reference anchor="I-D.briscoe-tsvwg-l4s-diffserv" target="https://datat | ||||
racker.ietf.org/api/v1/doc/document/draft-briscoe-tsvwg-l4s-diffserv/" xml:base= | ||||
"https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.briscoe-tsvwg-l4s-diff | ||||
serv.xml"> | ||||
<front> | ||||
<title>Interactions between Low Latency, Low Loss, Scalable Throughp | ||||
ut (L4S) and Differentiated Services</title> | ||||
<author fullname="Bob Briscoe"/> | ||||
<date day="2" month="July" year="2018"/> | ||||
<abstract> | ||||
<t>L4S and Diffserv offer somewhat overlapping services (low laten | ||||
cy and | ||||
low loss), but bandwidth allocation is out of scope for L4S. | ||||
Therefore there is scope for the two approaches to complement each | ||||
other, but also to conflict. This informational document explains | ||||
how the two approaches interact, how they can be arranged to | ||||
complement each other and in which cases one can stand alone without | ||||
needing the other.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-briscoe-tsvwg-l4s-diffs | ||||
erv-02"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tsvwg-nqb" target="https://datatracker.ietf. | ||||
org/api/v1/doc/document/draft-ietf-tsvwg-nqb/" xml:base="https://bib.ietf.org/pu | ||||
blic/rfc/bibxml-ids/reference.I-D.ietf-tsvwg-nqb.xml"> | ||||
<front> | ||||
<title>A Non-Queue-Building Per-Hop Behavior (NQB PHB) for Different | ||||
iated Services</title> | ||||
<author fullname="Greg White"/> | ||||
<author fullname="Thomas Fossati"/> | ||||
<date day="4" month="March" year="2022"/> | ||||
<abstract> | ||||
<t>This document specifies properties and characteristics of a Non | ||||
- | ||||
Queue-Building Per-Hop Behavior (NQB PHB). The purpose of this NQB | ||||
PHB is to provide a separate queue that enables smooth, low-data- | ||||
rate, application-limited traffic flows, which would ordinarily share | ||||
a queue with bursty and capacity-seeking traffic, to avoid the | ||||
latency, latency variation and loss caused by such traffic. This PHB | ||||
is implemented without prioritization and without rate policing, | ||||
making it suitable for environments where the use of either these | ||||
features may be restricted. The NQB PHB has been developed primarily | ||||
for use by access network segments, where queuing delays and queuing | ||||
loss caused by Queue-Building protocols are manifested, but its use | ||||
is not limited to such segments. In particular, applications to | ||||
cable broadband links, Wi-Fi links, and mobile network radio and core | ||||
segments are discussed. This document recommends a specific | ||||
Differentiated Services Code Point (DSCP) to identify Non-Queue- | ||||
Building flows.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-nqb-10"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tsvwg-l4sops" target="https://datatracker.ie | ||||
tf.org/api/v1/doc/document/draft-ietf-tsvwg-l4sops/" xml:base="https://bib.ietf. | ||||
org/public/rfc/bibxml-ids/reference.I-D.ietf-tsvwg-l4sops.xml"> | ||||
<front> | ||||
<title>Operational Guidance for Deployment of L4S in the Internet</t | ||||
itle> | ||||
<author fullname="Greg White"/> | ||||
<date day="28" month="April" year="2022"/> | ||||
<abstract> | ||||
<t>This document is intended to provide guidance in order to ensur | ||||
e | ||||
successful deployment of Low Latency Low Loss Scalable throughput | ||||
(L4S) in the Internet. Other L4S documents provide guidance for | ||||
running an L4S experiment, but this document is focused solely on | ||||
potential interactions between L4S flows and flows using the original | ||||
('Classic') ECN over a Classic ECN bottleneck link. The document | ||||
discusses the potential outcomes of these interactions, describes | ||||
mechanisms to detect the presence of Classic ECN bottlenecks, and | ||||
identifies opportunities to prevent and/or detect and resolve | ||||
fairness problems in such networks. This guidance is aimed at | ||||
operators of end-systems, operators of networks, and researchers.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-l4sops-03"/> | ||||
</reference> | ||||
<reference anchor="RFC8311" target="https://www.rfc-editor.org/info/rfc8 | ||||
311" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8311.xml"> | ||||
<front> | ||||
<title>Relaxing Restrictions on Explicit Congestion Notification (EC | ||||
N) Experimentation</title> | ||||
<author initials="D." surname="Black" fullname="D. Black"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2018" month="January"/> | ||||
<abstract> | ||||
<t>This memo updates RFC 3168, which specifies Explicit Congestion | ||||
Notification (ECN) as an alternative to packet drops for indicating network con | ||||
gestion to endpoints. It relaxes restrictions in RFC 3168 that hinder experimen | ||||
tation towards benefits beyond just removal of loss. This memo summarizes the a | ||||
nticipated areas of experimentation and updates RFC 3168 to enable experimentati | ||||
on in these areas. An Experimental RFC in the IETF document stream is required | ||||
to take advantage of any of these enabling updates. In addition, this memo make | ||||
s related updates to the ECN specifications for RTP in RFC 6679 and for the Data | ||||
gram Congestion Control Protocol (DCCP) in RFCs 4341, 4342, and 5622. This memo | ||||
also records the conclusion of the ECN nonce experiment in RFC 3540 and provide | ||||
s the rationale for reclassification of RFC 3540 from Experimental to Historic; | ||||
this reclassification enables new experimental use of the ECT(1) codepoint.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8311"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8311"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tcpm-generalized-ecn" target="https://datatr | ||||
acker.ietf.org/api/v1/doc/document/draft-ietf-tcpm-generalized-ecn/" xml:base="h | ||||
ttps://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-tcpm-generalized-ec | ||||
n.xml"> | ||||
<front> | ||||
<title>ECN++: Adding Explicit Congestion Notification (ECN) to TCP C | ||||
ontrol Packets</title> | ||||
<author fullname="Marcelo Bagnulo"/> | ||||
<author fullname="Bob Briscoe"/> | ||||
<date day="27" month="July" year="2022"/> | ||||
<abstract> | ||||
<t>This document describes an experimental modification to ECN whe | ||||
n used | ||||
with TCP. It allows the use of ECN on the following TCP packets: | ||||
SYNs, pure ACKs, Window probes, FINs, RSTs and retransmissions.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tcpm-generalized-e | ||||
cn-10"/> | ||||
</reference> | ||||
<reference anchor="ARED01" target="https://www.icir.org/floyd/red.html"> | ||||
<front> | <front> | |||
<title>Adaptive RED: An Algorithm for Increasing the Robustness of | <title>Adaptive RED: An Algorithm for Increasing the Robustness of | |||
RED's Active Queue Management</title> | RED's Active Queue Management</title> | |||
<author fullname="Sally Floyd" initials="S." surname="Floyd"> | <author fullname="Sally Floyd" initials="S." surname="Floyd"> | |||
<organization>ACIRI</organization> | <organization>ACIRI</organization> | |||
</author> | </author> | |||
<author fullname="Ramakrishna Gummadi" initials="R." surname="Gummad i"> | <author fullname="Ramakrishna Gummadi" initials="R." surname="Gummad i"> | |||
<organization>ACIRI</organization> | <organization>ACIRI</organization> | |||
</author> | </author> | |||
<author fullname="S. Shenker" initials="S." surname="Shenker"> | <author fullname="S. Shenker" initials="S." surname="Shenker"> | |||
<organization>ACIRI</organization> | <organization>ACIRI</organization> | |||
</author> | </author> | |||
<date month="August" year="2001"/> | <date month="August" year="2001"/> | |||
</front> | </front> | |||
<seriesInfo name="ACIRI Technical Report" value=""/> | <refcontent>ACIRI Technical Report 301</refcontent> | |||
</reference> | ||||
<reference anchor="RFC8257" target="https://www.rfc-editor.org/info/rfc8 | ||||
257" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8257.xml"> | ||||
<front> | ||||
<title>Data Center TCP (DCTCP): TCP Congestion Control for Data Cent | ||||
ers</title> | ||||
<author initials="S." surname="Bensley" fullname="S. Bensley"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Thaler" fullname="D. Thaler"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P." surname="Balasubramanian" fullname="P. Balasub | ||||
ramanian"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L." surname="Eggert" fullname="L. Eggert"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="Judd" fullname="G. Judd"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2017" month="October"/> | ||||
<abstract> | ||||
<t>This Informational RFC describes Data Center TCP (DCTCP): a TCP | ||||
congestion control scheme for data-center traffic. DCTCP extends the Explicit | ||||
Congestion Notification (ECN) processing to estimate the fraction of bytes that | ||||
encounter congestion rather than simply detecting that some congestion has occur | ||||
red. DCTCP then scales the TCP congestion window based on this estimate. This | ||||
method achieves high-burst tolerance, low latency, and high throughput with shal | ||||
low- buffered switches. This memo also discusses deployment issues related to t | ||||
he coexistence of DCTCP and conventional TCP, discusses the lack of a negotiatin | ||||
g mechanism between sender and receiver, and presents some possible mitigations. | ||||
This memo documents DCTCP as currently implemented by several major operating | ||||
systems. DCTCP, as described in this specification, is applicable to deployment | ||||
s in controlled environments like data centers, but it must not be deployed over | ||||
the public Internet without additional measures.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8257"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8257"/> | ||||
</reference> | ||||
<reference anchor="RFC8312" target="https://www.rfc-editor.org/info/rfc8 | ||||
312" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8312.xml"> | ||||
<front> | ||||
<title>CUBIC for Fast Long-Distance Networks</title> | ||||
<author initials="I." surname="Rhee" fullname="I. Rhee"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L." surname="Xu" fullname="L. Xu"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Ha" fullname="S. Ha"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A." surname="Zimmermann" fullname="A. Zimmermann"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L." surname="Eggert" fullname="L. Eggert"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="R." surname="Scheffenegger" fullname="R. Scheffene | ||||
gger"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2018" month="February"/> | ||||
<abstract> | ||||
<t>CUBIC is an extension to the current TCP standards. It differs | ||||
from the current TCP standards only in the congestion control algorithm on the | ||||
sender side. In particular, it uses a cubic function instead of a linear window | ||||
increase function of the current TCP standards to improve scalability and stabi | ||||
lity under fast and long-distance networks. CUBIC and its predecessor algorithm | ||||
have been adopted as defaults by Linux and have been used for many years. This | ||||
document provides a specification of CUBIC to enable third-party implementation | ||||
s and to solicit community feedback through experimentation on the performance o | ||||
f CUBIC.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8312"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8312"/> | ||||
</reference> | ||||
<reference anchor="RFC8511" target="https://www.rfc-editor.org/info/rfc8 | ||||
511" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8511.xml"> | ||||
<front> | ||||
<title>TCP Alternative Backoff with ECN (ABE)</title> | ||||
<author initials="N." surname="Khademi" fullname="N. Khademi"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Welzl" fullname="M. Welzl"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="Armitage" fullname="G. Armitage"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="G." surname="Fairhurst" fullname="G. Fairhurst"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2018" month="December"/> | ||||
<abstract> | ||||
<t>Active Queue Management (AQM) mechanisms allow for burst tolera | ||||
nce while enforcing short queues to minimise the time that packets spend enqueue | ||||
d at a bottleneck. This can cause noticeable performance degradation for TCP co | ||||
nnections traversing such a bottleneck, especially if there are only a few flows | ||||
or their bandwidth-delay product (BDP) is large. The reception of a Congestion | ||||
Experienced (CE) Explicit Congestion Notification (ECN) mark indicates that an | ||||
AQM mechanism is used at the bottleneck, and the bottleneck network queue is the | ||||
refore likely to be short. Feedback of this signal allows the TCP sender-side E | ||||
CN reaction in congestion avoidance to reduce the Congestion Window (cwnd) by a | ||||
smaller amount than the congestion control algorithm's reaction to inferred pack | ||||
et loss. Therefore, this specification defines an experimental change to the TCP | ||||
reaction specified in RFC 3168, as permitted by RFC 8311.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8511"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8511"/> | ||||
</reference> | ||||
<reference anchor="RFC8985" target="https://www.rfc-editor.org/info/rfc8 | ||||
985" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8985.xml"> | ||||
<front> | ||||
<title>The RACK-TLP Loss Detection Algorithm for TCP</title> | ||||
<author initials="Y." surname="Cheng" fullname="Y. Cheng"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="N." surname="Cardwell" fullname="N. Cardwell"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="N." surname="Dukkipati" fullname="N. Dukkipati"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P." surname="Jha" fullname="P. Jha"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2021" month="February"/> | ||||
<abstract> | ||||
<t>This document presents the RACK-TLP loss detection algorithm fo | ||||
r TCP. RACK-TLP uses per-segment transmit timestamps and selective acknowledgmen | ||||
ts (SACKs) and has two parts. Recent Acknowledgment (RACK) starts fast recovery | ||||
quickly using time-based inferences derived from acknowledgment (ACK) feedback, | ||||
and Tail Loss Probe (TLP) leverages RACK and sends a probe packet to trigger ACK | ||||
feedback to avoid retransmission timeout (RTO) events. Compared to the widely u | ||||
sed duplicate acknowledgment (DupAck) threshold approach, RACK-TLP detects losse | ||||
s more efficiently when there are application-limited flights of data, lost retr | ||||
ansmissions, or data packet reordering events. It is intended to be an alternati | ||||
ve to the DupAck threshold approach.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8985"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8985"/> | ||||
</reference> | ||||
<reference anchor="RFC8888" target="https://www.rfc-editor.org/info/rfc8 | ||||
888" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8888.xml"> | ||||
<front> | ||||
<title>RTP Control Protocol (RTCP) Feedback for Congestion Control</ | ||||
title> | ||||
<author initials="Z." surname="Sarker" fullname="Z. Sarker"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="V." surname="Singh" fullname="V. Singh"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Ramalho" fullname="M. Ramalho"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2021" month="January"/> | ||||
<abstract> | ||||
<t>An effective RTP congestion control algorithm requires more fin | ||||
e-grained feedback on packet loss, timing, and Explicit Congestion Notification | ||||
(ECN) marks than is provided by the standard RTP Control Protocol (RTCP) Sender | ||||
Report (SR) and Receiver Report (RR) packets. This document describes an RTCP fe | ||||
edback message intended to enable congestion control for interactive real-time t | ||||
raffic using RTP. The feedback message is designed for use with a sender-based c | ||||
ongestion control algorithm, in which the receiver of an RTP flow sends back to | ||||
the sender RTCP feedback packets containing the information the sender needs to | ||||
perform congestion control.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8888"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8888"/> | ||||
</reference> | ||||
<reference anchor="RFC9000" target="https://www.rfc-editor.org/info/rfc9 | ||||
000" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml"> | ||||
<front> | ||||
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title> | ||||
<author initials="J." surname="Iyengar" fullname="J. Iyengar" role=" | ||||
editor"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Thomson" fullname="M. Thomson" role=" | ||||
editor"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2021" month="May"/> | ||||
<abstract> | ||||
<t>This document defines the core of the QUIC transport protocol. | ||||
QUIC provides applications with flow-controlled streams for structured communic | ||||
ation, low-latency connection establishment, and network path migration. QUIC in | ||||
cludes security measures that ensure confidentiality, integrity, and availabilit | ||||
y in a range of deployment circumstances. Accompanying documents describe the i | ||||
ntegration of TLS for key negotiation, loss detection, and an exemplary congesti | ||||
on control algorithm.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9000"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9000"/> | ||||
</reference> | ||||
<reference anchor="RFC9001" target="https://www.rfc-editor.org/info/rfc9 | ||||
001" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9001.xml"> | ||||
<front> | ||||
<title>Using TLS to Secure QUIC</title> | ||||
<author initials="M." surname="Thomson" fullname="M. Thomson" role=" | ||||
editor"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Turner" fullname="S. Turner" role="ed | ||||
itor"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2021" month="May"/> | ||||
<abstract> | ||||
<t>This document describes how Transport Layer Security (TLS) is u | ||||
sed to secure QUIC.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9001"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9001"/> | ||||
</reference> | ||||
<reference anchor="RFC9147" target="https://www.rfc-editor.org/info/rfc9 | ||||
147" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9147.xml"> | ||||
<front> | ||||
<title>The Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3</title> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H." surname="Tschofenig" fullname="H. Tschofenig"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="N." surname="Modadugu" fullname="N. Modadugu"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2022" month="April"/> | ||||
<abstract> | ||||
<t>This document specifies version 1.3 of the Datagram Transport L | ||||
ayer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to com | ||||
municate over the Internet in a way that is designed to prevent eavesdropping, t | ||||
ampering, and message forgery.</t> | ||||
<t>The DTLS 1.3 protocol is based on the Transport Layer Security | ||||
(TLS) 1.3 protocol and provides equivalent security guarantees with the exceptio | ||||
n of order protection / non-replayability. Datagram semantics of the underlying | ||||
transport are preserved by the DTLS protocol.</t> | ||||
<t>This document obsoletes RFC 6347.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9147"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9147"/> | ||||
</reference> | ||||
<reference anchor="I-D.sridharan-tcpm-ctcp" target="https://datatracker. | ||||
ietf.org/api/v1/doc/document/draft-sridharan-tcpm-ctcp/" xml:base="https://bib.i | ||||
etf.org/public/rfc/bibxml-ids/reference.I-D.sridharan-tcpm-ctcp.xml"> | ||||
<front> | ||||
<title>Compound TCP: A New TCP Congestion Control for High-Speed and | ||||
Long Distance Networks</title> | ||||
<author fullname="Murali Sridharan"/> | ||||
<author fullname="Kun Tan"/> | ||||
<author fullname="Deepak Bansal"/> | ||||
<author fullname="Dave Thaler"/> | ||||
<date day="29" month="October" year="2007"/> | ||||
<abstract> | ||||
<t>Compound TCP (CTCP) is a modification to TCP's congestion contr | ||||
ol | ||||
mechanism for use with TCP connections with large congestion windows. | ||||
This document describes the Compound TCP algorithm in detail, and | ||||
solicits experimentation and feedback from the wider community. The | ||||
key idea behind CTCP is to add a scalable delay-based component to the | ||||
standard TCP's loss-based congestion control. The sending rate of CTCP | ||||
is controlled by both loss and delay components. The delay-based | ||||
component has a scalable window increasing rule that not only | ||||
efficiently uses the link capacity, but on sensing queue build up, | ||||
proactively reduces the sending rate.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-sridharan-tcpm-ctcp-02" | ||||
/> | ||||
</reference> | ||||
<reference anchor="I-D.briscoe-docsis-q-protection" target="https://data | ||||
tracker.ietf.org/api/v1/doc/document/draft-briscoe-docsis-q-protection/" xml:bas | ||||
e="https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.briscoe-docsis-q-pro | ||||
tection.xml"> | ||||
<front> | ||||
<title>The DOCSIS(r) Queue Protection Algorithm to Preserve Low Late | ||||
ncy</title> | ||||
<author fullname="Bob Briscoe"/> | ||||
<author fullname="Greg White"/> | ||||
<date day="13" month="May" year="2022"/> | ||||
<abstract> | ||||
<t>This informational document explains the specification of the q | ||||
ueue | ||||
protection algorithm used in DOCSIS technology since version 3.1. A | ||||
shared low latency queue relies on the non-queue-building behaviour | ||||
of every traffic flow using it. However, some flows might not take | ||||
such care, either accidentally or maliciously. If a queue is about | ||||
to exceed a threshold level of delay, the queue protection algorithm | ||||
can rapidly detect the flows most likely to be responsible. It can | ||||
then prevent harm to other traffic in the low latency queue by | ||||
ejecting selected packets (or all packets) of these flows. The | ||||
document is designed for four types of audience: a) congestion | ||||
control designers who need to understand how to keep on the 'good' | ||||
side of the algorithm; b) implementers of the algorithm who want to | ||||
understand it in more depth; c) designers of algorithms with similar | ||||
goals, perhaps for non-DOCSIS scenarios; and d) researchers | ||||
interested in evaluating the algorithm.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-briscoe-docsis-q-protec | ||||
tion-06"/> | ||||
</reference> | ||||
<reference anchor="I-D.briscoe-iccrg-prague-congestion-control" target=" | ||||
https://datatracker.ietf.org/api/v1/doc/document/draft-briscoe-iccrg-prague-cong | ||||
estion-control/" xml:base="https://bib.ietf.org/public/rfc/bibxml-ids/reference. | ||||
I-D.briscoe-iccrg-prague-congestion-control.xml"> | ||||
<front> | ||||
<title>Prague Congestion Control</title> | ||||
<author fullname="Koen De Schepper"/> | ||||
<author fullname="Olivier Tilmans"/> | ||||
<author fullname="Bob Briscoe"/> | ||||
<date day="11" month="July" year="2022"/> | ||||
<abstract> | ||||
<t>This specification defines the Prague congestion control scheme | ||||
, | ||||
which is derived from DCTCP and adapted for Internet traffic by | ||||
implementing the Prague L4S requirements. Over paths with L4S | ||||
support at the bottleneck, it adapts the DCTCP mechanisms to achieve | ||||
consistently low latency and full throughput. It is defined | ||||
independently of any particular transport protocol or operating | ||||
system, but notes are added that highlight issues specific to certain | ||||
transports and OSs. It is mainly based on the current default | ||||
options of the reference Linux implementation of TCP Prague, but it | ||||
includes experience from other implementations where available. It | ||||
separately describes non-default and optional parts, as well as | ||||
future plans.</t> | ||||
<t>The implementation does not satisfy all the Prague requirements | ||||
(yet) | ||||
and the IETF might decide that certain requirements need to be | ||||
relaxed as an outcome of the process of trying to satisfy them all. | ||||
In two cases, research code is replaced by placeholders until full | ||||
evaluation is complete.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-briscoe-iccrg-prague-co | ||||
ngestion-control-01"/> | ||||
</reference> | ||||
<reference anchor="I-D.cardwell-iccrg-bbr-congestion-control" target="ht | ||||
tps://datatracker.ietf.org/api/v1/doc/document/draft-cardwell-iccrg-bbr-congesti | ||||
on-control/" xml:base="https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D. | ||||
cardwell-iccrg-bbr-congestion-control.xml"> | ||||
<front> | ||||
<title>BBR Congestion Control</title> | ||||
<author fullname="Neal Cardwell"/> | ||||
<author fullname="Yuchung Cheng"/> | ||||
<author fullname="Soheil Hassas Yeganeh"/> | ||||
<author fullname="Ian Swett"/> | ||||
<author fullname="Van Jacobson"/> | ||||
<date day="7" month="March" year="2022"/> | ||||
<abstract> | ||||
<t>This document specifies the BBR congestion control algorithm. | ||||
BBR | ||||
("Bottleneck Bandwidth and Round-trip propagation time") uses recent | ||||
measurements of a transport connection's delivery rate, round-trip | ||||
time, and packet loss rate to build an explicit model of the network | ||||
path. BBR then uses this model to control both how fast it sends | ||||
data and the maximum volume of data it allows in flight in the | ||||
network at any time. Relative to loss-based congestion control | ||||
algorithms such as Reno [RFC5681] or CUBIC [RFC8312], BBR offers | ||||
substantially higher throughput for bottlenecks with shallow buffers | ||||
or random losses, and substantially lower queueing delays for | ||||
bottlenecks with deep buffers (avoiding "bufferbloat"). BBR can be | ||||
implemented in any transport protocol that supports packet-delivery | ||||
acknowledgment. Thus far, open source implementations are available | ||||
for TCP [RFC793] and QUIC [RFC9000]. This document specifies version | ||||
2 of the BBR algorithm, also sometimes referred to as BBRv2 or bbr2.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-cardwell-iccrg-bbr-cong | ||||
estion-control-02"/> | ||||
</reference> | ||||
<reference anchor="I-D.mathis-iccrg-relentless-tcp" target="https://www. | ||||
ietf.org/archive/id/draft-mathis-iccrg-relentless-tcp-00.txt" xml:base="https:// | ||||
bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.mathis-iccrg-relentless-tcp.xml | ||||
"> | ||||
<front> | ||||
<title>Relentless Congestion Control</title> | ||||
<author fullname="Matt Mathis"/> | ||||
<date day="4" month="March" year="2009"/> | ||||
<abstract> | ||||
<t>Relentless congestion control is a simple modification that can | ||||
be applied to almost any AIMD style congestion control: instead of applying a m | ||||
ultiplicative reduction to cwnd after a loss, cwnd is reduced by the number of l | ||||
ost segments. It can be modeled as a strict implementation of van Jacobson's Pac | ||||
ket Conservation Principle. During recovery, new segments are injected into the | ||||
network in exact accordance with the segments that are reported to have been del | ||||
ivered to the receiver by the returning ACKs. This algorithm offers a valuable n | ||||
ew congestion control property: the TCP portion of the control loop has exactly | ||||
unity gain, which should make it easier to implement simple controllers in netwo | ||||
rk devices to accurately control queue sizes across a huge range of scales. Rele | ||||
ntless Congestion Control conforms to neither the details nor the philosophy of | ||||
current congestion control standards. These standards are based on the idea that | ||||
the Internet can attain sufficient fairness by having relatively simple network | ||||
devices send uniform congestion signals to all flows, and mandating that all pr | ||||
otocols have equivalent responses to these congestion signals. To function appro | ||||
priately in a shared environment, Relentless Congestion Control requires that th | ||||
e network allocates capacity through some technique such as Fair Queuing, Approx | ||||
imate Fair Dropping, etc. The salient features of these algorithms are that they | ||||
segregate the traffic into distinct flows, and send different congestion signal | ||||
s to each flow. This alternative congestion control paradigm is described in a s | ||||
eparate document, also under consideration by the ICCRG. The goal of the documen | ||||
t is to illustrate some new protocol features and properties might be possible i | ||||
f we relax the "TCP-friendly" mandate. A secondary goal of Relentless TCP is to | ||||
make a distinction between the bottlenecks that belong to protocol itself, vs st | ||||
andard congestion control and the "TCP-friendly" paradigm.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-mathis-iccrg-relentless | ||||
-tcp-00"/> | ||||
</reference> | </reference> | |||
<reference anchor="BBRv2" target="https://github.com/google/bbr/blob/v2a | ||||
lpha/README.md"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8257. | |||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8312. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8511. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8985. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8888. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9000. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9001. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9147. | ||||
xml"/> | ||||
<!-- [I-D.sridharan-tcpm-ctcp] IESG state Expired as of 1/1/7/23. xi:include Wro | ||||
ng date.--> | ||||
<reference anchor="I-D.sridharan-tcpm-ctcp"> | ||||
<front> | ||||
<title>Compound TCP: A New TCP Congestion Control for High-Speed and Long Di | ||||
stance Networks | ||||
</title> | ||||
<author initials="M." surname="Sridharan" fullname="Murari Sridharan"> | ||||
<organization>Microsoft</organization> | ||||
</author> | ||||
<author initials="K." surname="Tan" fullname="Kun Tan"> | ||||
<organization>Microsoft Research</organization> | ||||
</author> | ||||
<author initials="D." surname="Bansal" fullname="Deepak Bansal"> | ||||
<organization>Microsoft</organization> | ||||
</author> | ||||
<author initials="D." surname="Thaler" fullname="Dave Thaler"> | ||||
<organization>Microsoft</organization> | ||||
</author> | ||||
<date month="November" day="3" year="2008"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-sridharan-tcpm-ctcp-02"/> | ||||
</reference> | ||||
<!-- [I-D.briscoe-docsis-q-protection] in MISSREF state as of 1/17/23. xi:includ | ||||
e is missing editor role --> | ||||
<reference anchor="I-D.briscoe-docsis-q-protection"> | ||||
<front> | ||||
<title>The DOCSIS® Queue Protection Algorithm to Preserve Low Latency</title | ||||
> | ||||
<author fullname="Bob Briscoe" role="editor"> | ||||
<organization>Independent</organization> | ||||
</author> | ||||
<author fullname="Greg White"> | ||||
<organization>CableLabs</organization> | ||||
</author> | ||||
<date day="13" month="May" year="2022"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-briscoe-docsis-q-protection-06" | ||||
/> | ||||
</reference> | ||||
<!-- [I-D.briscoe-iccrg-prague-congestion-control] Expired as of 1/17/23. Missin | ||||
g editor role. --> | ||||
<reference anchor="I-D.briscoe-iccrg-prague-congestion-control"> | ||||
<front> | ||||
<title>Prague Congestion Control</title> | ||||
<author fullname="Koen De Schepper" surname="De Schepper" initials="K."> | ||||
<organization>Nokia Bell Labs</organization> | ||||
</author> | ||||
<author fullname="Olivier Tilmans"> | ||||
<organization>Nokia Bell Labs</organization> | ||||
</author> | ||||
<author fullname="Bob Briscoe" role="editor"> | ||||
<organization>Independent</organization> | ||||
</author> | ||||
<date month="July" day="11" year="2022"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-briscoe-iccrg-prague-congestion | ||||
-control-01"/> | ||||
</reference> | ||||
<!-- [I-D.cardwell-iccrg-bbr-congestion-control] IESG state | ||||
Expired as of 1/17/23. xi:include incorrectly shows Hassas Yeganeh's name as | ||||
"S. H. Yeganeh" when it should be "S. Hassas Yeganeh" --> | ||||
<reference anchor="I-D.cardwell-iccrg-bbr-congestion-control"> | ||||
<front> | ||||
<title>BBR Congestion Control</title> | ||||
<author initials="N." surname="Cardwell" fullname="Neal Cardwell"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<author initials="Y." surname="Cheng" fullname="Yuchung Cheng"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<author initials="S." surname="Hassas Yeganeh" fullname="Soheil Hassas Yegan | ||||
eh"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<author initials="I." surname="Swett" fullname="Ian Swett"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<author initials="V." surname="Jacobson" fullname="Van Jacobson"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<date month="March" day="7" year="2022"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-cardwell-iccrg-bbr-congestion-c | ||||
ontrol-02"/> | ||||
</reference> | ||||
<!-- [I-D.mathis-iccrg-relentless-tcp] IESG state Expired as of 1/17/23 --> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.mathis- | ||||
iccrg-relentless-tcp.xml"/> | ||||
<reference anchor="BBRv2" target="https://github.com/google/bbr"> | ||||
<front> | <front> | |||
<title>BRTCP BBR v2 Alpha/Preview Release</title> | <title>TCP BBR v2 Alpha/Preview Release</title> | |||
<author fullname="Neal Cardwell" initials="N" surname="Cardwell"> | <author/> | |||
<organization/> | <date month="June" year="2022"/> | |||
</author> | ||||
<date/> | ||||
</front> | </front> | |||
<seriesInfo name="GitHub repository;" value="Linux congestion control module"/> | <refcontent>commit 17700ca</refcontent> | |||
</reference> | </reference> | |||
<!--{ToDo: DCttH ref will need to be updated, once stable}--> | ||||
<reference anchor="DCttH19" target="https://bobbriscoe.net/pubs.html#DCttH _TR"> | <reference anchor="DCttH19" target="https://bobbriscoe.net/projects/latenc y/dctth_journal_draft20190726.pdf"> | |||
<front> | <front> | |||
<title>`Data Centre to the Home': Ultra-Low Latency for All</title> | <title>'Data Centre to the Home': Ultra-Low Latency for All</title> | |||
<author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | <author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | |||
<organization>Nokia Bell Labs</organization> | <organization>Nokia Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Olga Bondarenko" initials="O." surname="Bondarenko "> | <author fullname="Olga Bondarenko" initials="O." surname="Bondarenko "> | |||
<organization>Simula Research Lab</organization> | <organization>Simula Research Lab</organization> | |||
</author> | </author> | |||
<author fullname="Olivier" initials="O." surname="Tilmans"> | <author fullname="Olivier" initials="O." surname="Tilmans"> | |||
<organization>Nokia Bell Labs</organization> | <organization>Nokia Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>Independent (bobbriscoe.net)</organization> | <organization>Independent (bobbriscoe.net)</organization> | |||
</author> | </author> | |||
<date month="July" year="2019"/> | <date month="July" year="2019"/> | |||
</front> | </front> | |||
<seriesInfo name="Updated RITE project Technical Report" value=""/> | <refcontent>Updated RITE project Technical Report</refcontent> | |||
<format target="https://bobbriscoe.net/projects/latency/dctth_journal_ | ||||
draft20190726.pdf" type="PDF"/> | ||||
</reference> | </reference> | |||
<reference anchor="L4Seval22" target="https://arxiv.org/abs/2209.01078"> | ||||
<front> | ||||
<title>Dual Queue Coupled AQM: Deployable Very Low Queuing Delay for | ||||
All</title> | ||||
<author fullname="Koen De Schepper" initials="K." surname="De Schepper | ||||
"> | ||||
<organization>Nokia Bell Labs</organization> | ||||
</author> | ||||
<author fullname="Olga Albisser" initials="O." surname="Albisser"> | ||||
<organization>Simula Research Lab</organization> | ||||
</author> | ||||
<author fullname="Olivier Tilmans" initials="O." surname="Tilmans"> | ||||
<organization>Nokia Bell Labs</organization> | ||||
</author> | ||||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | ||||
<organization>Independent (bobbriscoe.net)</organization> | ||||
</author> | ||||
<date month="September" year="2022"/> | ||||
</front> | ||||
<seriesInfo name="DOI" value="10.48550/arXiv.2209.01078"/> | ||||
<refcontent>Preprint submitted to IEEE/ACM Transactions on Networking</r | ||||
efcontent> | ||||
</reference> | ||||
<reference anchor="PI2" target="https://dl.acm.org/citation.cfm?doid=299 9572.2999578"> | <reference anchor="PI2" target="https://dl.acm.org/citation.cfm?doid=299 9572.2999578"> | |||
<front> | <front> | |||
<title>PI^2 : A Linearized AQM for both Classic and Scalable | <title>PI^2: A Linearized AQM for both Classic and Scalable | |||
TCP</title> | TCP</title> | |||
<author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | <author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | |||
<organization>Bell Labs</organization> | <organization>Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Olga Bondarenko" initials="O." surname="Bondarenko "> | <author fullname="Olga Bondarenko" initials="O." surname="Bondarenko "> | |||
<organization>Simula Research Lab</organization> | <organization>Simula Research Lab</organization> | |||
</author> | </author> | |||
<author fullname="Ing-jyh Tsang" initials="I." surname="Tsang"> | <author fullname="Ing-jyh Tsang" initials="I." surname="Tsang"> | |||
<organization>Bell Labs</organization> | <organization>Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>BT</organization> | <organization>BT</organization> | |||
</author> | </author> | |||
<date month="December" year="2016"/> | <date month="December" year="2016"/> | |||
</front> | </front> | |||
<seriesInfo name="Proc. ACM CoNEXT 2016" value="pp.105-119"/> | <seriesInfo name="DOI" value="10.1145/2999572.2999578"/> | |||
<refcontent>Proceedings of ACM CoNEXT 2016, pp. 105-119</refcontent> | ||||
</reference> | </reference> | |||
<reference anchor="VCP" target="https://doi.acm.org/10.1145/1080091.1080 098"> | <reference anchor="VCP" target="https://doi.acm.org/10.1145/1080091.1080 098"> | |||
<front> | <front> | |||
<title>One more bit is enough</title> | <title>One more bit is enough</title> | |||
<author fullname="Yong Xia" initials="Y." surname="Xia"> | <author fullname="Yong Xia" initials="Y." surname="Xia"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Lakshminarayanan Subramanian" initials="L." surnam e="Subramanian"> | <author fullname="Lakshminarayanan Subramanian" initials="L." surnam e="Subramanian"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Ion Stoica" initials="I." surname="Stoica"> | <author fullname="Ion Stoica" initials="I." surname="Stoica"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Shivkumar Kalyanaraman" initials="S." surname="Kal yanaraman"> | <author fullname="Shivkumar Kalyanaraman" initials="S." surname="Kal yanaraman"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date month="" year="2005"/> | <date month="August" year="2005"/> | |||
</front> | </front> | |||
<seriesInfo name="Proc. SIGCOMM'05, ACM CCR" value="35(4)37--48"/> | <seriesInfo name="DOI" value="10.1145/1080091.1080098"/> | |||
<format target="https://conferences.sigcomm.org/sigcomm/2005/paper-Xia | <refcontent>SIGCOMM '05: Proceedings of the 2005 conference on Applicat | |||
Sub.pdf" type="PDF"/> | ions, technologies, architectures, and protocols for computer communications, pp | |||
. 37–48</refcontent> | ||||
</reference> | </reference> | |||
<reference anchor="QV" target="https://riteproject.files.wordpress.com/2 015/12/rite-deliverable-2-3.pdf"> | <reference anchor="QV" target="https://riteproject.files.wordpress.com/2 015/12/rite-deliverable-2-3.pdf"> | |||
<front> | <front> | |||
<title>Up to Speed with Queue View</title> | <title>Report on Prototype Development and Evaluation of Network and Interaction Techniques</title> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>BT</organization> | <organization>BT</organization> | |||
</author> | </author> | |||
<author fullname="Per Hurtig" initials="P." surname="Hurtig"> | <author fullname="Per Hurtig" initials="P." surname="Hurtig"> | |||
<organization>Uni Karlstad</organization> | <organization>Karlstad University</organization> | |||
</author> | </author> | |||
<date month="August" year="2015"/> | <date month="September" year="2015"/> | |||
</front> | </front> | |||
<seriesInfo name="RITE Technical Report" value="D2.3; Appendix C.2"/> | <refcontent>RITE Technical Report, Deliverable 2.3, Appendix C.2: "Up to Speed with Queue View"</refcontent> | |||
</reference> | </reference> | |||
<reference anchor="Alizadeh-stability" target="https://people.csail.mit. | ||||
edu/alizadeh/papers/dctcp_analysis-sigmetrics11.pdf"> | <reference anchor="Alizadeh-stability" target="https://dl.acm.org/doi/10 | |||
.1145/1993744.1993753"> | ||||
<front> | <front> | |||
<title>Analysis of DCTCP: Stability, Convergence, and | <title>Analysis of DCTCP: Stability, Convergence, and | |||
Fairness</title> | Fairness</title> | |||
<author fullname="Mohamed Alizadeh" initials="M." surname="Alizadeh" /> | <author fullname="Mohamed Alizadeh" initials="M." surname="Alizadeh" /> | |||
<author fullname="Adel Javanmard" initials="A." surname="Javanmard"/ > | <author fullname="Adel Javanmard" initials="A." surname="Javanmard"/ > | |||
<author fullname="Balaji Prabhakar" initials="B." surname="Prabhakar "/> | <author fullname="Balaji Prabhakar" initials="B." surname="Prabhakar "/> | |||
<date month="June" year="2011"/> | <date month="June" year="2011"/> | |||
</front> | </front> | |||
<seriesInfo name="ACM SIGMETRICS 2011" value=""/> | <seriesInfo name="DOI" value="10.1145/1993744.1993753"/> | |||
<refcontent>SIGMETRICS '11: Proceedings of the ACM SIGMETRICS Joint In | ||||
ternational Conference on Measurement and Modeling of Computer Systems, pp. 73-8 | ||||
4</refcontent> | ||||
<format target="https://people.csail.mit.edu/alizadeh/papers/dctcp_ana | ||||
lysis-sigmetrics11.pdf" type="PDF"/> | ||||
</reference> | </reference> | |||
<reference anchor="TCPPrague" target="https://www.ietf.org/mail-archive/ web/tcpprague/current/msg00001.html"> | <reference anchor="TCPPrague" target="https://www.ietf.org/mail-archive/ web/tcpprague/current/msg00001.html"> | |||
<front> | <front> | |||
<title>Notes: DCTCP evolution 'bar BoF': Tue 21 Jul 2015, 17:40, | <title>Notes: DCTCP evolution 'bar BoF': Tue 21 Jul 2015, 17:40, | |||
Prague</title> | Prague</title> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>Simula</organization> | <organization>Simula</organization> | |||
</author> | </author> | |||
<date month="July" year="2015"/> | <date month="July" year="2015"/> | |||
</front> | </front> | |||
<seriesInfo name="tcpprague mailing list archive" value=""/> | <refcontent>message to the tcpPrague mailing list</refcontent> | |||
</reference> | </reference> | |||
<reference anchor="sub-mss-prob" target="https://arxiv.org/abs/1904.0759 8"> | <reference anchor="sub-mss-prob" target="https://arxiv.org/abs/1904.0759 8"> | |||
<front> | <front> | |||
<title>Scaling TCP's Congestion Window for Small Round Trip | <title>Scaling TCP's Congestion Window for Small Round Trip | |||
Times</title> | Times</title> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>BT</organization> | <organization>BT</organization> | |||
</author> | </author> | |||
<author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | <author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | |||
<organization>Bell Labs</organization> | <organization>Bell Labs</organization> | |||
</author> | </author> | |||
<date month="May" year="2015"/> | <date month="May" year="2015"/> | |||
</front> | </front> | |||
<seriesInfo name="BT Technical Report" value="TR-TUB8-2015-002"/> | <seriesInfo name="DOI" value="10.48550/arXiv.1904.07598"/> | |||
<format target="https://arxiv.org/pdf/1904.07598" type="PDF"/> | <refcontent>BT Technical Report: TR-TUB8-2015-002</refcontent> | |||
</reference> | </reference> | |||
<reference anchor="ecn-fallback" target="https://arxiv.org/abs/1911.0071 0"> | <reference anchor="ecn-fallback" target="https://arxiv.org/abs/1911.0071 0"> | |||
<front> | <front> | |||
<title>TCP Prague Fall-back on Detection of a Classic ECN | <title>TCP Prague Fall-back on Detection of a Classic ECN | |||
AQM</title> | AQM</title> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>Independent</organization> | <organization>Independent</organization> | |||
</author> | </author> | |||
<author fullname="Asad Sajjad Ahmed" initials="A.S." surname="Ahmed" > | <author fullname="Asad Sajjad Ahmed" initials="A." surname="Ahmed"> | |||
<organization>Simula and Uni Oslo</organization> | <organization>Simula and Uni Oslo</organization> | |||
</author> | </author> | |||
<date month="April" year="2020"/> | <date month="February" year="2021"/> | |||
</front> | </front> | |||
<seriesInfo name="bobbriscoe.net Technical Report" value="TR-BB-2019-0 | <seriesInfo name="DOI" value="10.48550/arXiv.1911.00710"/> | |||
02"/> | <refcontent>Technical Report: TR-BB-2019-002</refcontent> | |||
</reference> | </reference> | |||
<reference anchor="Ahmed19" target="https://www.duo.uio.no/handle/10852/ 70966"> | <reference anchor="Ahmed19" target="https://www.duo.uio.no/handle/10852/ 70966"> | |||
<front> | <front> | |||
<title>Extending TCP for Low Round Trip Delay</title> | <title>Extending TCP for Low Round Trip Delay</title> | |||
<author fullname="Asad Sajjad Ahmed" initials="A.S." surname="Ahmed" > | <author fullname="Asad Sajjad Ahmed" initials="A.S." surname="Ahmed" > | |||
<organization>Simula and Uni Oslo</organization> | <organization>Simula and Uni Oslo</organization> | |||
</author> | </author> | |||
<date month="August" year="2019"/> | <date month="August" year="2019"/> | |||
</front> | </front> | |||
<seriesInfo name="Master's Thesis, Uni Oslo" value=""/> | <refcontent>Master's Thesis, University of Oslo</refcontent> | |||
<format target="https://www.duo.uio.no/bitstream/handle/10852/70966/ma | ||||
in.pdf?sequence=5&isAllowed=y" type="PDF"/> | ||||
</reference> | ||||
<reference anchor="Paced-Chirping" target="https://riteproject.files.wor | ||||
dpress.com/2018/07/misundjoakimmastersthesissubmitted180515.pdf"> | ||||
<front> | ||||
<title>Rapid Acceleration in TCP Prague</title> | ||||
<author fullname="Joakim Misund" initials="J." surname="Misund"> | ||||
<organization>University of Oslo and Simula</organization> | ||||
</author> | ||||
<date month="May" year="2018"/> | ||||
</front> | ||||
<seriesInfo name="Master's Thesis" value=""/> | ||||
</reference> | </reference> | |||
<reference anchor="A2DTCP" target="https://ieeexplore.ieee.org/xpl/artic leDetails.jsp?arnumber=6871352"> | <reference anchor="A2DTCP" target="https://ieeexplore.ieee.org/xpl/artic leDetails.jsp?arnumber=6871352"> | |||
<front> | <front> | |||
<title>Adaptive-Acceleration Data Center TCP</title> | <title>Adaptive-Acceleration Data Center TCP</title> | |||
<author fullname="Tao Zhang" initials="T." surname="Zhang"> | <author fullname="Tao Zhang" initials="T." surname="Zhang"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Jianxin Wang" initials="J." surname="Wang"> | <author fullname="Jianxin Wang" initials="J." surname="Wang"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Jiawei Huang" initials="J." surname="Huang"> | <author fullname="Jiawei Huang" initials="J." surname="Huang"> | |||
skipping to change at line 3175 ¶ | skipping to change at line 2047 ¶ | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Jianer Chen" initials="J." surname="Chen"> | <author fullname="Jianer Chen" initials="J." surname="Chen"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Yi Pan" initials="Y." surname="Pan"> | <author fullname="Yi Pan" initials="Y." surname="Pan"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date month="June" year="2015"/> | <date month="June" year="2015"/> | |||
</front> | </front> | |||
<seriesInfo name="IEEE Transactions on Computers" value="64(6):1522-15 | <seriesInfo name="DOI" value="10.1109/TC.2014.2345393"/> | |||
33"/> | <refcontent>IEEE Transactions on Computers, Volume 64, Issue 6, pp. 15 | |||
22-1533</refcontent> | ||||
</reference> | </reference> | |||
<reference anchor="PragueLinux" target="https://www.netdevconf.org/0x13/ session.html?talk-tcp-prague-l4s"> | <reference anchor="PragueLinux" target="https://www.netdevconf.org/0x13/ session.html?talk-tcp-prague-l4s"> | |||
<front> | <front> | |||
<title>Implementing the `TCP Prague' Requirements for Low Latency | <title>Implementing the 'TCP Prague' Requirements for L4S</title> | |||
Low Loss Scalable Throughput (L4S)</title> | ||||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>Independent</organization> | <organization>Independent</organization> | |||
</author> | </author> | |||
<author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | <author fullname="Koen De Schepper" initials="K." surname="De Schepp er"> | |||
<organization>Nokia Bell Labs</organization> | <organization>Nokia Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Olga Albisser" initials="O." surname="Albisser"> | <author fullname="Olga Albisser" initials="O." surname="Albisser"> | |||
<organization>Simula</organization> | <organization>Simula</organization> | |||
</author> | </author> | |||
<author fullname="Joakim Misund" initials="J." surname="Misund"> | <author fullname="Joakim Misund" initials="J." surname="Misund"> | |||
<organization>University of Oslo</organization> | <organization>University of Oslo</organization> | |||
</author> | </author> | |||
<author fullname="Olivier Tilmans" initials="O." surname="Tilmans"> | <author fullname="Olivier Tilmans" initials="O." surname="Tilmans"> | |||
<organization>Nokia Bell Labs</organization> | <organization>Nokia Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind" > | <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind" > | |||
<organization>ETHZ</organization> | <organization>ETHZ</organization> | |||
</author> | </author> | |||
<author fullname="Asad Sajjad Ahmed" initials="A.S." surname="Ahmed" > | <author fullname="Asad Sajjad Ahmed" initials="A." surname="Ahmed"> | |||
<organization>Simula</organization> | <organization>Simula</organization> | |||
</author> | </author> | |||
<date month="March" year="2019"/> | <date month="March" year="2019"/> | |||
</front> | </front> | |||
<seriesInfo name="Proc. Linux Netdev 0x13" value=""/> | <refcontent>Proceedings of Linux Netdev 0x13</refcontent> | |||
<format target="https://www.files.netdevconf.info/f/4d6939d5f1fb404faf d1/?dl=1" type="PDF"/> | <format target="https://www.files.netdevconf.info/f/4d6939d5f1fb404faf d1/?dl=1" type="PDF"/> | |||
</reference> | </reference> | |||
<reference anchor="LinuxPacedChirping" target="https://www.netdevconf.or | ||||
g/0x13/session.html?talk-chirp"> | <reference anchor="LinuxPacedChirping" target="https://legacy.netdevconf | |||
.info/0x13/session.html?talk-chirp"> | ||||
<front> | <front> | |||
<title>Paced Chirping - Rethinking TCP start-up</title> | <title>Paced Chirping - Rethinking TCP start-up</title> | |||
<author fullname="Joakim Misund" initials="J." surname="Misund"> | <author fullname="Joakim Misund" initials="J." surname="Misund"> | |||
<organization>University of Oslo</organization> | <organization>University of Oslo</organization> | |||
</author> | </author> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>Independent</organization> | <organization>Independent</organization> | |||
</author> | </author> | |||
<date month="March" year="2019"/> | <date month="March" year="2019"/> | |||
</front> | </front> | |||
<seriesInfo name="Proc. Linux Netdev 0x13" value=""/> | <refcontent>Proceedings of Linux Netdev 0x13</refcontent> | |||
<format target="https://www.files.netdevconf.info/f/da8cc04a608a448f89 | ||||
0e/?dl=1" type="PDF"/> | ||||
</reference> | </reference> | |||
<reference anchor="TCP-CA" target="https://ee.lbl.gov/papers/congavoid.p df"> | <reference anchor="TCP-CA" target="https://ee.lbl.gov/papers/congavoid.p df"> | |||
<front> | <front> | |||
<title>Congestion Avoidance and Control</title> | <title>Congestion Avoidance and Control</title> | |||
<author fullname="Van Jacobson" initials="V." surname="Jacobson"> | <author fullname="Van Jacobson" initials="V." surname="Jacobson"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="Michael J. Karels" initials="M.J." surname="Karels | <author fullname="Michael J. Karels" initials="M. J." surname="Karel | |||
"> | s"> | |||
<organization/> | <organization/> | |||
<address> | </author> | |||
<postal> | <date month="November" year="1988"/> | |||
<street/> | </front> | |||
<city/> | <refcontent>Laurence Berkeley Labs Technical Report</refcontent> | |||
<region/> | </reference> | |||
<code/> | ||||
<country/> | <reference anchor="Savage-TCP" target="https://dl.acm.org/doi/abs/10.114 | |||
</postal> | 5/505696.505704"> | |||
<phone/> | ||||
<email/> | ||||
<uri/> | ||||
</address> | ||||
</author> | ||||
<date month="November" year="1988"/> | ||||
</front> | ||||
<seriesInfo name="Laurence Berkeley Labs Technical Report" value=""/> | ||||
</reference> | ||||
<reference anchor="Savage-TCP"> | ||||
<front> | <front> | |||
<title>TCP Congestion Control with a Misbehaving Receiver</title> | <title>TCP Congestion Control with a Misbehaving Receiver</title> | |||
<author fullname="Stefan Savage" initials="S." surname="Savage"> | <author fullname="Stefan Savage" initials="S." surname="Savage"> | |||
<organization>Uni Washington</organization> | <organization>University of Washington</organization> | |||
</author> | </author> | |||
<author fullname="Neal Cardwell" initials="N." surname="Cardwell"> | <author fullname="Neal Cardwell" initials="N." surname="Cardwell"> | |||
<organization>Uni Washington</organization> | <organization>University of Washington</organization> | |||
</author> | </author> | |||
<author fullname="David Wetherall" initials="D." surname="Wetherall" > | <author fullname="David Wetherall" initials="D." surname="Wetherall" > | |||
<organization>Uni Washington</organization> | <organization>University of Washington</organization> | |||
</author> | </author> | |||
<author fullname="Tom Anderson" initials="T." surname="Anderson"> | <author fullname="Tom Anderson" initials="T." surname="Anderson"> | |||
<organization>Uni Washington</organization> | <organization>University of Washington</organization> | |||
</author> | </author> | |||
<date month="October" year="1999"/> | <date month="October" year="1999"/> | |||
</front> | </front> | |||
<seriesInfo name="ACM SIGCOMM Computer Communication Review" value="29 | <seriesInfo name="DOI" value="10.1145/505696.505704"/> | |||
(5):71--78"/> | <refcontent>ACM SIGCOMM Computer Communication Review, Volume 29, Issue | |||
5, pp. 71–78</refcontent> | ||||
</reference> | </reference> | |||
<reference anchor="Heist21" target="https://github.com/heistp/l4s-tests/ | ||||
"> | <reference anchor="Heist21" target="https://github.com/heistp/l4s-tests"> | |||
<front> | <front> | |||
<title>L4S Tests</title> | <title>L4S Tests</title> | |||
<author fullname="Pete Heist" initials="P." surname="Heist"> | <author> | |||
<organization/> | ||||
</author> | ||||
<author fullname="Jonathan Morton" initials="J." surname="Morton"> | ||||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date month="May" year="2021"/> | <date month="August" year="2021"/> | |||
</front> | </front> | |||
<seriesInfo name="GitHub" value="README"/> | <refcontent>commit e21cd91</refcontent> | |||
</reference> | </reference> | |||
<reference anchor="SCReAM-L4S" target="https://github.com/EricssonResear | ||||
ch/scream/blob/master/README.md"> | <reference anchor="SCReAM-L4S" target="https://github.com/EricssonResear | |||
ch/scream"> | ||||
<front> | <front> | |||
<title>SCReAM</title> | <title>SCReAM</title> | |||
<author fullname="Ingemar Johansson" initials="I" surname="Johansson | <author/> | |||
"> | <date month="November" year="2022"/> | |||
<organization/> | ||||
</author> | ||||
<date/> | ||||
</front> | </front> | |||
<seriesInfo name="GitHub repository;" value=""/> | <refcontent>commit 140e292</refcontent> | |||
<format target="https://github.com/google/bbr/blob/v2alpha/README.md" | ||||
type="Source code"/> | ||||
</reference> | </reference> | |||
<reference anchor="DualPI2Linux" target="https://www.netdevconf.org/0x13 | ||||
/session.html?talk-DUALPI2-AQM"> | <reference anchor="DualPI2Linux" target="https://www.netdevconf.org/0x13/s | |||
<front> | ession.html?talk-DUALPI2-AQM"> | |||
<title>DUALPI2 - Low Latency, Low Loss and Scalable (L4S) | <front> | |||
<title>DUALPI2 - Low Latency, Low Loss and Scalable (L4S) | ||||
AQM</title> | AQM</title> | |||
<author fullname="Olga Albisser" initials="O." surname="Albisser"> | <author fullname="Olga Albisser" initials="O." surname="Albisser"> | |||
<organization>Simula Research Lab</organization> | <organization>Simula Research Lab</organization> | |||
</author> | </author> | |||
<author fullname="Koen De Schepper" initials="K." surname="De Schepp | <author fullname="Koen De Schepper" initials="K." surname="De Schepper | |||
er"> | "> | |||
<organization>Nokia Bell Labs</organization> | <organization>Nokia Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | <author fullname="Bob Briscoe" initials="B." surname="Briscoe"> | |||
<organization>Independent</organization> | <organization>Independent</organization> | |||
</author> | </author> | |||
<author fullname="Olivier Tilmans" initials="O." surname="Tilmans"> | <author fullname="Olivier Tilmans" initials="O." surname="Tilmans"> | |||
<organization>Nokia Bell Labs</organization> | <organization>Nokia Bell Labs</organization> | |||
</author> | </author> | |||
<author fullname="Henrik Steen" initials="H." surname="Steen"> | <author fullname="Henrik Steen" initials="H." surname="Steen"> | |||
<organization>Simula Research Lab</organization> | <organization>Simula Research Lab</organization> | |||
</author> | </author> | |||
<date month="March" year="2019"/> | <date month="March" year="2019"/> | |||
</front> | </front> | |||
<seriesInfo name="Proc. Linux Netdev 0x13" value=""/> | <refcontent>Proceedings of Linux Netdev 0x13</refcontent> | |||
<format target="https://www.files.netdevconf.org/f/febbe8c6a05b4ceab64 | <format target="https://www.files.netdevconf.org/f/febbe8c6a05b4ceab641/ | |||
1/?dl=1" type="PDF"/> | ?dl=1" type="PDF"/> | |||
</reference> | </reference> | |||
<reference anchor="COBALT" target="https://doi.org/10.1109/LANMAN.2019.8 | ||||
847054"> | <reference anchor="COBALT" target="https://ieeexplore.ieee.org/abstract/doc | |||
<front> | ument/8847054"> | |||
<title>Design and Evaluation of COBALT Queue Discipline</title> | <front> | |||
<author initials="J." surname="Palmei"/> | <title>Design and Evaluation of COBALT Queue Discipline</title> | |||
<author initials="S." surname="Gupta"/> | <author fullname="Jendaipou Palmei" initials="J." surname="Palmei"> | |||
<author initials="P." surname="Imputato"/> | <organization/> | |||
<author initials="J." surname="Morton"/> | </author> | |||
<author initials="M." surname="Tahiliani"/> | <author fullname="Shefali Gupta" initials="S." surname="Gupta"> | |||
<author initials="S." surname="Avallone"/> | <organization/> | |||
<author initials="D." surname="Taht"/> | </author> | |||
<date year="2019"/> | <author fullname="Pasquale Imputato" initials="P." surname="Imputato"> | |||
</front> | <organization/> | |||
<seriesInfo name="In Proc. IEEE Int'l Symp. on Local and Metropolitan | </author> | |||
Area Networks" value="2019, pp1--6"/> | <author fullname="Jonathan Morton" initials="J." surname="Morton"> | |||
</reference> | <organization/> | |||
<reference anchor="Dukkipati06" target="https://dl.acm.org/doi/10.1145/1 | </author> | |||
111322.1111336"> | <author fullname="Mohit P. Tahiliani" initials="M. P." surname="Tahili | |||
<front> | ani"> | |||
<title>Why Flow-Completion Time is the Right Metric for Congestion | <organization/> | |||
</author> | ||||
<author fullname="Stefan Avallone" initials="S." surname="Avallone"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Dave Täht" initials="D." surname="Täht"> | ||||
<organization/> | ||||
</author> | ||||
<date month="July" year="2019"/> | ||||
</front> | ||||
<seriesInfo name="DOI" value="10.1109/LANMAN.2019.8847054"/> | ||||
<refcontent>IEEE International Symposium on Local and Metropolitan Area N | ||||
etworks (LANMAN)</refcontent> | ||||
</reference> | ||||
<reference anchor="Dukkipati06" target="https://dl.acm.org/doi/10.1145/111 | ||||
1322.1111336"> | ||||
<front> | ||||
<title>Why Flow-Completion Time is the Right Metric for Congestion | ||||
Control</title> | Control</title> | |||
<author fullname="Nandita Dukkipati" initials="N." surname="Dukkipat | <author fullname="Nandita Dukkipati" initials="N." surname="Dukkipati" | |||
i"> | > | |||
<organization>Stanford Uni</organization> | <organization>Stanford University</organization> | |||
</author> | </author> | |||
<author fullname="Nick McKeown" initials="N." surname="McKeown"> | <author fullname="Nick McKeown" initials="N." surname="McKeown"> | |||
<organization>Stanford Uni</organization> | <organization>Stanford University</organization> | |||
</author> | </author> | |||
<date month="January" year="2006"/> | <date month="January" year="2006"/> | |||
</front> | </front> | |||
<seriesInfo name="ACM CCR" value="36(1):59--62"/> | <seriesInfo name="DOI" value="10.1145/1111322.1111336"/> | |||
<format target="http://yuba.stanford.edu/rcp/flowCompTime-dukkipati.pd | <refcontent>ACM SIGCOMM Computer Communication Review, Volume 36, Issue | |||
f" type="PDF"/> | 1, pp. 59-62</refcontent> | |||
</reference> | </reference> | |||
<reference anchor="Bufferbloat" target="https://bufferbloat.net/"> | <reference anchor="Bufferbloat" target="https://bufferbloat.net/"> | |||
<front> | <front> | |||
<title>Bufferbloat</title> | <title>Bufferbloat</title> | |||
<author fullname=""> | <author> | |||
<organization/> | <organization>The Bufferbloat community</organization> | |||
</author> | </author> | |||
<date/> | <date/> | |||
</front> | </front> | |||
<annotation>(last accessed 27 Aug 2022)</annotation> | ||||
</reference> | </reference> | |||
</references> | </references> | |||
</references> | </references> | |||
<section anchor="l4sps_tcp-prague-reqs" numbered="true" toc="default"> | <section anchor="l4sps_tcp-prague-reqs" numbered="true" toc="default"> | |||
<name>Rationale for the 'Prague L4S Requirements'</name> | <name>Rationale for the 'Prague L4S Requirements'</name> | |||
<t>This appendix is informative, not normative. It gives a list of | <t>This appendix is informative, not normative. It gives a list of | |||
modifications to current scalable congestion controls so that they can | modifications to current Scalable congestion controls so that they can | |||
be deployed over the public Internet and coexist safely with existing | be deployed over the public Internet and coexist safely with existing | |||
traffic. The list complements the normative requirements in <xref target=" l4sid_transport_req" format="default"/> that a sender has to comply with before | traffic. The list complements the normative requirements in <xref target=" l4sid_transport_req" format="default"/> that a sender has to comply with before | |||
it can set the L4S identifier in packets it sends into the Internet. As | it can set the L4S identifier in packets it sends into the Internet. As | |||
well as rationale for safety improvements (the requirements in <xref targe t="l4sid_transport_req" format="default"/>) this appendix also includes preferab le | well as rationale for safety improvements (the requirements in <xref targe t="l4sid_transport_req" format="default"/>), this appendix also includes prefera ble | |||
performance improvements (optimizations).</t> | performance improvements (optimizations).</t> | |||
<t>The requirements and recommendations in <xref target="l4sid_transport_r | <t>The requirements and recommendations in <xref target="l4sid_transport_r | |||
eq" format="default"/>) have become known as the Prague L4S | eq" format="default"/> have become known as the 'Prague L4S | |||
Requirements, because they were originally identified at an ad hoc | Requirements', because they were originally identified at an ad hoc | |||
meeting during IETF-94 in Prague <xref target="TCPPrague" format="default" | meeting during IETF 94 in Prague <xref target="TCPPrague" format="default" | |||
/>. They | />. They | |||
were originally called the 'TCP Prague Requirements', but they are not | were originally called the 'TCP Prague Requirements', but they are not | |||
solely applicable to TCP, so the name and wording has been generalized | solely applicable to TCP, so the name and wording has been generalized | |||
for all transport protocols, and the name 'TCP Prague' is now used for a | for all transport protocols, and the name 'TCP Prague' is now used for a | |||
specific implementation of the requirements.</t> | specific implementation of the requirements.</t> | |||
<t>At the time of writing, DCTCP <xref target="RFC8257" format="default"/> | <t>At the time of writing, DCTCP <xref target="RFC8257" format="default"/> | |||
is the | is the | |||
most widely used scalable transport protocol. In its current form, DCTCP | most widely used Scalable transport protocol. In its current form, DCTCP | |||
is specified to be deployable only in controlled environments. Deploying | is specified to be deployable only in controlled environments. Deploying | |||
it in the public Internet would lead to a number of issues, both from | it in the public Internet would lead to a number of issues, from both | |||
the safety and the performance perspective. The modifications and | the safety and the performance perspective. The modifications and | |||
additional mechanisms listed in this section will be necessary for its | additional mechanisms listed in this section will be necessary for its | |||
deployment over the global Internet. Where an example is needed, DCTCP | deployment over the global Internet. Where an example is needed, DCTCP | |||
is used as a base, but the requirements in <xref target="l4sid_transport_r eq" format="default"/> apply equally to other scalable | is used as a base, but the requirements in <xref target="l4sid_transport_r eq" format="default"/> apply equally to other Scalable | |||
congestion controls, covering adaptive real-time media, etc., not just | congestion controls, covering adaptive real-time media, etc., not just | |||
capacity-seeking behaviours.</t> | capacity-seeking behaviours.</t> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Rationale for the Requirements for Scalable Transport Protocols</n ame> | <name>Rationale for the Requirements for Scalable Transport Protocols</n ame> | |||
<t/> | ||||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Use of L4S Packet Identifier</name> | <name>Use of L4S Packet Identifier</name> | |||
<t>Description: A scalable congestion control needs to distinguish | <t>Description: A Scalable congestion control needs to distinguish | |||
the packets it sends from those sent by Classic congestion controls | the packets it sends from those sent by Classic congestion controls | |||
(see the precise normative requirement wording in <xref target="l4sid_ codepoint" format="default"/>).</t> | (see the precise normative requirement wording in <xref target="l4sid_ codepoint" format="default"/>).</t> | |||
<t>Motivation: It needs to be possible for a network node to | <t>Motivation: It needs to be possible for a network node to | |||
classify L4S packets without flow state into a queue that applies an | classify L4S packets without flow state into a queue that applies an | |||
L4S ECN marking behaviour and isolates L4S packets from the queuing | L4S ECN-marking behaviour and isolates L4S packets from the queuing | |||
delay of Classic packets.</t> | delay of Classic packets.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Accurate ECN Feedback</name> | <name>Accurate ECN Feedback</name> | |||
<t>Description: The transport protocol for a scalable congestion | <t>Description: The transport protocol for a Scalable congestion | |||
control needs to provide timely, accurate feedback about the extent | control needs to provide timely, accurate feedback about the extent | |||
of ECN marking experienced by all packets (see the precise normative | of ECN marking experienced by all packets (see the precise normative | |||
requirement wording in <xref target="l4sid_feedback" format="default"/ >).</t> | requirement wording in <xref target="l4sid_feedback" format="default"/ >).</t> | |||
<t>Motivation: Classic congestion controls only need feedback about | <t>Motivation: Classic congestion controls only need feedback about | |||
the existence of a congestion episode within a round trip, not | the existence of a congestion episode within a round trip, not | |||
precisely how many packets were marked with ECN or dropped. | precisely how many packets were ECN-marked or dropped. | |||
Therefore, in 2001, when ECN feedback was added to TCP <xref target="R | Therefore, in 2001, when ECN feedback was added to TCP <xref target="R | |||
FC3168" format="default"/>, it could not inform the sender of more than one | FC3168" format="default"/>, it could not inform the sender of more than one | |||
ECN mark per RTT. Since then, requirements for more accurate ECN | ECN mark per RTT. | |||
feedback in TCP have been defined in <xref target="RFC7560" format="de | Since then, requirements for more accurate ECN | |||
fault"/> and | feedback in TCP have been defined in <xref target="RFC7560" format="de | |||
fault"/>, and | ||||
<xref target="I-D.ietf-tcpm-accurate-ecn" format="default"/> specifies a change to | <xref target="I-D.ietf-tcpm-accurate-ecn" format="default"/> specifies a change to | |||
the TCP protocol to satisfy these requirements. Most other transport | the TCP protocol to satisfy these requirements. Most other transport | |||
protocols already satisfy this requirement (see <xref target="l4sid_fe edback" format="default"/>).</t> | protocols already satisfy this requirement (see <xref target="l4sid_fe edback" format="default"/>).</t> | |||
</section> | </section> | |||
<section anchor="l4sid_sec_replaceable" numbered="true" toc="default"> | <section anchor="l4sid_sec_replaceable" numbered="true" toc="default"> | |||
<name>Capable of Replacement by Classic Congestion Control</name> | <name>Capable of Replacement by Classic Congestion Control</name> | |||
<t>Description: It needs to be possible to replace the | <t>Description: It needs to be possible to replace the | |||
implementation of a scalable congestion control with a Classic | implementation of a Scalable congestion control with a Classic | |||
control (see the precise normative requirement wording in <xref target | control (see the precise normative requirement wording in <xref target | |||
="l4sid_congestion_response" format="default"/>).</t> | ="l4sid_Prague_req-replaceable" format="default"/>).</t> | |||
<t>Motivation: L4S is an experimental protocol, therefore it seems | <t>Motivation: L4S is an experimental protocol; therefore, it seems | |||
prudent to be able to disable it at source in case of insurmountable | prudent to be able to disable it at source in case of insurmountable | |||
problems, perhaps due to some unexpected interaction on a particular | problems, perhaps due to some unexpected interaction on a particular | |||
sender; over a particular path or network; with a particular | sender; over a particular path or network; or with a particular | |||
receiver or even ultimately an insurmountable problem with the | receiver, or even ultimately an insurmountable problem with the | |||
experiment as a whole.</t> | experiment as a whole.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_sec_fallback_on_loss" numbered="true" toc="defaul t"> | <section anchor="l4sid_sec_fallback_on_loss" numbered="true" toc="defaul t"> | |||
<name>Fall back to Classic Congestion Control on Packet Loss</name> | <name>Fall Back to Classic Congestion Control on Packet Loss</name> | |||
<t>Description: As well as responding to ECN markings in a scalable | <t>Description: As well as responding to ECN markings in a scalable | |||
way, a scalable congestion control needs to react to packet loss in | way, a Scalable congestion control needs to react to packet loss in | |||
a way that will coexist safely with a Reno congestion | a way that will coexist safely with a Reno congestion | |||
control <xref target="RFC5681" format="default"/> (see the precise nor | control <xref target="RFC5681" format="default"/> (see the precise nor | |||
mative | mative | |||
requirement wording in <xref target="l4sid_congestion_response" format | requirement wording in <xref target="l4sid_Prague_req-loss-response" f | |||
="default"/>).</t> | ormat="default"/>).</t> | |||
<t>Motivation: Part of the safety conditions for deploying a | <t>Motivation: Part of the safety conditions for deploying a | |||
scalable congestion control on the public Internet is to make sure | Scalable congestion control on the public Internet is to make sure | |||
that it behaves properly when it builds a queue at a network | that it behaves properly when it builds a queue at a network | |||
bottleneck that has not been upgraded to support L4S. Packet loss | bottleneck that has not been upgraded to support L4S. Packet loss | |||
can have many causes, but it usually has to be conservatively | can have many causes, but it usually has to be conservatively | |||
assumed that it is a sign of congestion. Therefore, on detecting | assumed that it is a sign of congestion. Therefore, on detecting | |||
packet loss, a scalable congestion control will need to fall back to | packet loss, a Scalable congestion control will need to fall back to | |||
Classic congestion control behaviour. If it does not comply, it | Classic congestion control behaviour. If it does not comply, it | |||
could starve Classic traffic.</t> | could starve Classic traffic.</t> | |||
<t>A scalable congestion control can be used for different types of | <t>A Scalable congestion control can be used for different types of | |||
transport, e.g. for real-time media or for reliable transport | transport, e.g., for real-time media or for reliable transport | |||
like TCP. Therefore, the particular Classic congestion control | like TCP. Therefore, the particular Classic congestion control | |||
behaviour to fall back on will need to be dependent on the specific | behaviour to fall back on will need to be dependent on the specific | |||
congestion control implementation. In the particular case of DCTCP, | congestion control implementation. | |||
the DCTCP specification <xref target="RFC8257" format="default"/> stat | In the particular case of DCTCP, | |||
es that | the DCTCP specification <xref target="RFC8257" format="default"/> stat | |||
"It is RECOMMENDED that an implementation deal with loss episodes in | es that | |||
the same way as conventional TCP." For safe deployment, <xref target=" | "A DCTCP sender <bcp14>MUST</bcp14> react to loss episodes in | |||
l4sid_congestion_response" format="default"/> requires any specification of a | the same way as conventional TCP,...". To ensure any Scalable congest | |||
scalable congestion control for the public Internet to define the | ion control is safe to deploy over the public Internet, Item | |||
above requirement as a "MUST".</t> | <xref target="l4sid_Prague_req-loss-response" format="counter"/> of <x | |||
<t>Even though a bottleneck is L4S capable, it might still become | ref target="l4sid_congestion_response" format="default"/> in the present spec | |||
does not require precisely the same response as Reno TCP, but it does | ||||
require a response that will coexist safely with Classic congestion co | ||||
ntrols | ||||
like Reno.</t> | ||||
<t>Even though a bottleneck is L4S capable, it might still become | ||||
overloaded and have to drop packets. In this case, the sender may | overloaded and have to drop packets. In this case, the sender may | |||
receive a high proportion of packets marked with the CE bit set and | receive a high proportion of packets marked with the CE codepoint and | |||
also experience loss. Current DCTCP implementations each react | also experience loss. Current DCTCP implementations each react | |||
differently to this situation. At least one implementation reacts | differently to this situation. One approach is to react only to the dr | |||
only to the drop signal (e.g. by halving the CWND) and at least | op | |||
another DCTCP implementation reacts to both signals (e.g. by | signal (e.g., by halving the cwnd); another approach is to react to bo | |||
halving the CWND due to the drop and also further reducing the CWND | th | |||
based on the proportion of marked packet). A third approach for the | signals, which reduces cwnd by more than half. A compromise | |||
public Internet has been proposed that adjusts the loss response to | between these two has been proposed where the loss response is adjuste | |||
result in a halving when combined with the ECN response. We believe | d to | |||
result in a halving when combined with any ECN response earlier in the | ||||
same | ||||
round. We believe | ||||
that further experimentation is needed to understand what is the | that further experimentation is needed to understand what is the | |||
best behaviour for the public Internet, which may or not be one of | best behaviour for the public Internet, which may or may not be one of | |||
these existing approaches.</t> | these existing approaches.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_sec_fallback_on_classic_CE" numbered="true" toc=" default"> | <section anchor="l4sid_sec_fallback_on_classic_CE" numbered="true" toc=" default"> | |||
<name>Coexistence with Classic Congestion Control at Classic ECN bottl enecks</name> | <name>Coexistence with Classic Congestion Control at Classic ECN Bottl enecks</name> | |||
<t>Description: Monitoring has to be in place so that a non-L4S but | <t>Description: Monitoring has to be in place so that a non-L4S but | |||
ECN-capable AQM can be detected at path bottlenecks. This is in case | ECN-capable AQM can be detected at path bottlenecks. This is in case | |||
such an AQM has been implemented in a shared queue, in which case | such an AQM has been implemented in a shared queue, in which case | |||
any long-running scalable flow would predominate over any | any long-running Scalable flow would predominate over any | |||
simultaneous long-running Classic flow sharing the queue. The | simultaneous long-running Classic flow sharing the queue. The | |||
precise requirement wording in <xref target="l4sid_congestion_response | precise requirement wording in <xref target="l4sid_Prague_req-classic- | |||
" format="default"/> is written so that such a | ecn-response" format="default"/> is written so that such a | |||
problem could either be resolved in real-time, or via administrative | problem could be resolved either in real time or via administrative | |||
intervention.</t> | intervention.</t> | |||
<t>Motivation: Similarly to the discussion in <xref target="l4sid_sec_ fallback_on_loss" format="default"/>, this requirement in <xref target="l4sid_co ngestion_response" format="default"/> is a safety condition to ensure | <t>Motivation: Similarly to the discussion in <xref target="l4sid_sec_ fallback_on_loss" format="default"/>, this requirement in <xref target="l4sid_co ngestion_response" format="default"/> is a safety condition to ensure | |||
an L4S congestion control coexists well with Classic flows when it | an L4S congestion control coexists well with Classic flows when it | |||
builds a queue at a shared network bottleneck that has not been | builds a queue at a shared network bottleneck that has not been | |||
upgraded to support L4S. Nonetheless, if necessary, it is considered | upgraded to support L4S. Nonetheless, if necessary, it is considered | |||
reasonable to resolve such problems over management timescales | reasonable to resolve such problems over management timescales | |||
(possibly involving human intervention) because:</t> | (possibly involving human intervention) because:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>although a Classic flow can considerably reduce its | <li>although a Classic flow can considerably reduce its | |||
throughput in the face of a competing scalable flow, it still | throughput in the face of a competing Scalable flow, it still | |||
makes progress and does not starve;</li> | makes progress and does not starve;</li> | |||
<li>implementations of a Classic ECN AQM in a queue that is | <li>implementations of a Classic ECN AQM in a queue that is | |||
intended to be shared are believed to be rare;</li> | intended to be shared are believed to be rare; and</li> | |||
<li>detection of such AQMs is not always clear-cut; so focused | <li>detection of such AQMs is not always clear-cut; so focused | |||
out-of-band testing (or even contacting the relevant network | out-of-band testing (or even contacting the relevant network | |||
operator) would improve certainty.</li> | operator) would improve certainty.</li> | |||
</ul> | </ul> | |||
<t>Therefore, the relevant normative requirement (<xref target="l4sid_ | <t>The relevant normative requirement (<xref target="l4sid_congestion_ | |||
congestion_response" format="default"/>) is divided into three stages: | response" format="default"/>) is therefore divided into three stages: | |||
monitoring, detection and action:</t> | monitoring, detection, and action:</t> | |||
<dl newline="false" spacing="normal"> | <dl newline="false" spacing="normal"> | |||
<dt>Monitoring:</dt> | <dt>Monitoring:</dt> | |||
<dd>Monitoring involves collection of the | <dd>Monitoring involves collection of the | |||
measurement data to be analysed. Monitoring is expressed as a | measurement data to be analysed. Monitoring is expressed as a | |||
'MUST' for uncontrolled environments, although the placement of | "<bcp14>MUST</bcp14>" for uncontrolled environments, although the placement of | |||
the monitoring function is left open. Whether monitoring has to | the monitoring function is left open. Whether monitoring has to | |||
be applied in real-time is expressed as a 'SHOULD'. This allows | be applied in real time is expressed as a "<bcp14>SHOULD</bcp14>". | |||
This allows | ||||
for the possibility that the operator of an L4S sender | for the possibility that the operator of an L4S sender | |||
(e.g. a CDN) might prefer to test out-of-band for signs of | (e.g., a Content Distribution Network (CDN)) might prefer to test out-of-band for signs of | |||
Classic ECN AQMs, perhaps to avoid continually consuming | Classic ECN AQMs, perhaps to avoid continually consuming | |||
resources to monitor live traffic.</dd> | resources to monitor live traffic.</dd> | |||
<dt>Detection:</dt> | <dt>Detection:</dt> | |||
<dd>Detection involves analysis of the | <dd>Detection involves analysis of the | |||
monitored data to detect the likelihood of a Classic ECN AQM. | monitored data to detect the likelihood of a Classic ECN AQM. | |||
Detection can either directly detect actual coexistence problems | Detection can either directly detect actual coexistence problems | |||
between flows, or it can aim to identify AQM technologies that | between flows or aim to identify AQM technologies that | |||
are likely to present coexistence problems, based on knowledge | are likely to present coexistence problems, based on knowledge | |||
of AQMs deployed at the time. The requirements recommend that | of AQMs deployed at the time. The requirements recommend that | |||
detection occurs live in real-time. However, detection is | detection occurs live in real time. However, detection is | |||
allowed to be deferred (e.g. it might involve further | allowed to be deferred (e.g., it might involve further | |||
testing targeted at candidate AQMs);</dd> | testing targeted at candidate AQMs).</dd> | |||
<dt>Action:</dt> | <dt>Action:</dt> | |||
<dd> | <dd> | |||
<t>This involves the act of switching the | <t>This involves the act of switching the | |||
sender to a Classic congestion control. This might occur in | sender to a Classic congestion control. This might occur in | |||
real-time within the congestion control for the subsequent | real time within the congestion control for the subsequent | |||
duration of a flow, or it might involve administrative action to | duration of a flow, or it might involve administrative action to | |||
switch to Classic congestion control for a specific interface or | switch to Classic congestion control for a specific interface or | |||
for a certain set of destination addresses.</t> | for a certain set of destination addresses.</t> | |||
<t>Instead of the sender taking action itself, the | <t>Instead of the sender taking action itself, the | |||
operator of the sender (e.g. a CDN) might prefer to ask the | operator of the sender (e.g., a CDN) might prefer to ask the | |||
network operator to modify the Classic AQM's treatment of L4S | network operator to modify the Classic AQM's treatment of L4S | |||
packets; or to ensure L4S packets bypass the AQM; or to upgrade | packets; ensure L4S packets bypass the AQM; or upgrade | |||
the AQM to support L4S (see the L4S operational | the AQM to support L4S (see the L4S operational | |||
guidance <xref target="I-D.ietf-tsvwg-l4sops" format="default"/>). | guidance <xref target="I-D.ietf-tsvwg-l4sops" format="default"/>). | |||
Once L4S | If L4S | |||
flows no longer shared the Classic ECN AQM they would obviously | flows then no longer shared the Classic ECN AQM, they would obviou | |||
sly | ||||
no longer detect it, and the requirement to act on it would no | no longer detect it, and the requirement to act on it would no | |||
longer apply.</t> | longer apply.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>The whole set of normative requirements concerning Classic ECN | <t>The whole set of normative requirements concerning Classic ECN | |||
AQMs in <xref target="l4sid_congestion_response" format="default"/> is worded so that | AQMs in <xref target="l4sid_congestion_response" format="default"/> is worded so that | |||
it does not apply in controlled environments, such as private | it does not apply in controlled environments, such as private | |||
networks or data centre networks. CDN servers placed within an | networks or data-centre networks. CDN servers placed within an | |||
access ISP's network can be considered as a single controlled | access ISP's network can be considered as a single controlled | |||
environment, but any onward networks served by the access network, | environment, but any onward networks served by the access network, | |||
including all the attached customer networks, would be unlikely to | including all the attached customer networks, would be unlikely to | |||
fall under the same degree of coordinated control. Monitoring is | fall under the same degree of coordinated control. Monitoring is | |||
expressed as a 'MUST' for these uncontrolled segments of paths | expressed as a "<bcp14>MUST</bcp14>" for these uncontrolled segments o | |||
(e.g. beyond the access ISP in a home network), because there | f paths | |||
(e.g., beyond the access ISP in a home network), because there | ||||
is a possibility that there might be a shared queue Classic ECN AQM | is a possibility that there might be a shared queue Classic ECN AQM | |||
in that segment. Nonetheless, the intent of the wording is to only | in that segment. Nonetheless, the intent of the wording is to only | |||
require occasional monitoring of these uncontrolled regions, and not | require occasional monitoring of these uncontrolled regions and not | |||
to burden CDN operators if monitoring never uncovers any potential | to burden CDN operators if monitoring never uncovers any potential | |||
problems.</t> | problems.</t> | |||
<t>More detailed discussion of all the above options and | <t>More detailed discussion of all the above options and | |||
alternatives can be found in the L4S operational guidance <xref target | alternatives can be found in the L4S operational guidance <xref target | |||
="I-D.ietf-tsvwg-l4sops" format="default"/>.</t> | ="I-D.ietf-tsvwg-l4sops" format="default"/>.</t> | |||
<t>Having said all the above, the approach recommended in <xref target | <t>Having said all the above, the approach recommended in <xref target | |||
="l4sid_congestion_response" format="default"/> is to monitor, detect and act | ="l4sid_congestion_response" format="default"/> is to monitor, detect, and act | |||
in real-time on live traffic. A passive monitoring algorithm to | in real time on live traffic. A passive monitoring algorithm to | |||
detect a Classic ECN AQM at the bottleneck and fall back to Classic | detect a Classic ECN AQM at the bottleneck and fall back to Classic | |||
congestion control is described in an extensive technical | congestion control is described in an extensive technical | |||
report <xref target="ecn-fallback" format="default"/>, which also prov | report <xref target="ecn-fallback" format="default"/>, which also prov | |||
ides a | ides a | |||
link to Linux source code, and a large online visualization of its | link to Linux source code and a large online visualization of its | |||
evaluation results. Very briefly, the algorithm primarily monitors | evaluation results. Very briefly, the algorithm primarily monitors | |||
RTT variation using the same algorithm that maintains the mean | RTT variation using the same algorithm that maintains the mean | |||
deviation of TCP's smoothed RTT, but it smooths over a duration of | deviation of TCP's smoothed RTT, but it smooths over a duration of | |||
the order of a Classic sawtooth. The outcome is also conditioned on | the order of a Classic sawtooth. | |||
The outcome is also conditioned on | ||||
other metrics such as the presence of CE marking and congestion | other metrics such as the presence of CE marking and congestion | |||
avoidance phase having stabilized. The report also identifies | avoidance phase having stabilized. The report also identifies | |||
further work to improve the approach, for instance improvements with | further work to improve the approach, for instance, improvements with | |||
low capacity links and combining the measurements with a cache of | low-capacity links and combining the measurements with a cache of | |||
what had been learned about a path in previous connections. The | what had been learned about a path in previous connections. The | |||
report also suggests alternative approaches.</t> | report also suggests alternative approaches.</t> | |||
<t>Although using passive measurements within live traffic (as | <t>Although using passive measurements within live traffic (as | |||
above) can detect a Classic ECN AQM, it is much harder (perhaps | above) can detect a Classic ECN AQM, it is much harder (perhaps | |||
impossible) to determine whether or not the AQM is in a shared | impossible) to determine whether or not the AQM is in a shared | |||
queue. Nonetheless, this is much easier using active test traffic | queue. Nonetheless, this is much easier using active test traffic | |||
out-of-band, because two flows can be used. Section 4 of the same | out-of-band because two flows can be used. Section 4 of the same | |||
report <xref target="ecn-fallback" format="default"/> describes a simp | report <xref target="ecn-fallback" format="default"/> describes a simp | |||
le | le | |||
technique to detect a Classic ECN AQM and determine whether it is in | technique to detect a Classic ECN AQM and determine whether it is in | |||
a shared queue, summarized here.</t> | a shared queue, which is summarized here.</t> | |||
<t>An L4S-enabled test server could be set up so that, when a test | <t>An L4S-enabled test server could be set up so that, when a test | |||
client accesses it, it serves a script that gets the client to open | client accesses it, it serves a script that gets the client to open | |||
two parallel long-running flows. It could serve one with a Classic | two parallel long-running flows. It could serve one with a Classic | |||
congestion control (C, that sets ECT(0)) and one with a scalable CC | congestion control (C, that sets ECT(0)) and one with a Scalable CC | |||
(L, that sets ECT(1)). If neither flow induces any ECN marks, it can | (L, that sets ECT(1)). If neither flow induces any ECN marks, it can | |||
be presumed the path does not contain a Classic ECN AQM. If either | be presumed that the path does not contain a Classic ECN AQM. If eithe r | |||
flow induces some ECN marks, the server could measure the relative | flow induces some ECN marks, the server could measure the relative | |||
flow rates and round trip times of the two flows. <xref target="l4sid_ | flow rates and round-trip times of the two flows. | |||
tab_active_AQN_test" format="default"/> shows the AQM that can be | <xref target="l4sid_tab_active_AQN_test" format="default"/> shows the | |||
inferred for various cases (presuming the AQM behaviours known at | AQM that can be | |||
inferred for various cases (presuming no more types of AQM behaviour t | ||||
han those known at | ||||
the time of writing).</t> | the time of writing).</t> | |||
<table anchor="l4sid_tab_active_AQN_test" align="center"> | <table anchor="l4sid_tab_active_AQN_test" align="center"> | |||
<name>Out-of-band testing with two parallel flows. L:=L4S, C:=Classi c.</name> | <name>Out-of-Band Testing with Two Parallel Flows</name> | |||
<thead> | <thead> | |||
<tr> | <tr> | |||
<th align="left">Rate</th> | <th align="left">Rate</th> | |||
<th align="left">RTT</th> | <th align="left">RTT</th> | |||
<th align="left">Inferred AQM</th> | <th align="left">Inferred AQM</th> | |||
</tr> | </tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr> | <tr> | |||
<td align="left">L > C</td> | <td align="left">L > C</td> | |||
skipping to change at line 3609 ¶ | skipping to change at line 2496 ¶ | |||
<td align="left">Classic ECN AQM (FQ)</td> | <td align="left">Classic ECN AQM (FQ)</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">L = C</td> | <td align="left">L = C</td> | |||
<td align="left">L < C</td> | <td align="left">L < C</td> | |||
<td align="left">FQ-L4S AQM</td> | <td align="left">FQ-L4S AQM</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">L ~= C</td> | <td align="left">L ~= C</td> | |||
<td align="left">L < C</td> | <td align="left">L < C</td> | |||
<td align="left">Coupled DualQ AQM</td> | <td align="left">DualQ Coupled AQM</td> | |||
</tr> | </tr> | |||
</tbody> | </tbody> | |||
<tfoot> | ||||
<tr> | ||||
<th colspan="3" align="center">L = L4S; C = Classic</th> | ||||
</tr> | ||||
</tfoot> | ||||
</table> | </table> | |||
<t>Finally, we motivate the recommendation in <xref target="l4sid_cong | ||||
estion_response" format="default"/> that a scalable congestion | <t>Finally, we motivate the recommendation in <xref target="l4sid_cong | |||
estion_response" format="default"/> that a Scalable congestion | ||||
control is not expected to change to setting ECT(0) while it adapts | control is not expected to change to setting ECT(0) while it adapts | |||
its behaviour to coexist with Classic flows. This is because the | its behaviour to coexist with Classic flows. This is because the | |||
sender needs to continue to check whether it made the right decision | sender needs to continue to check whether it made the right decision | |||
- and switch back if it was wrong, or if a different link becomes | and switch back if it was wrong, or if a different link becomes | |||
the bottleneck:</t> | the bottleneck:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>If, as recommended, the sender changes only its behaviour but | <li>If, as recommended, the sender changes only its behaviour but | |||
not its codepoint to Classic, its codepoint will still be | not its codepoint to Classic, its codepoint will still be | |||
compatible with either an L4S or a Classic AQM. If the | compatible with either an L4S or a Classic AQM. If the | |||
bottleneck does actually support both, it will still classify | bottleneck does actually support both, it will still classify | |||
ECT(1) into the same L4S queue, where the sender can measure | ECT(1) into the same L4S queue, where the sender can measure | |||
that switching to Classic behaviour was wrong, so that it can | that switching to Classic behaviour was wrong so that it can | |||
switch back.</li> | switch back.</li> | |||
<li>In contrast, if the sender changes both its behaviour and its | <li>In contrast, if the sender changes both its behaviour and its | |||
codepoint to Classic, even if the bottleneck supports both, it | codepoint to Classic, even if the bottleneck supports both, it | |||
will classify ECT(0) into the Classic queue, reinforcing the | will classify ECT(0) into the Classic queue, reinforcing the | |||
sender's incorrect decision so that it never switches back.</li> | sender's incorrect decision so that it never switches back.</li> | |||
<li>Also, not changing codepoint avoids the risk of being flipped | ||||
<li>Also, not changing its codepoint avoids the risk of being flippe | ||||
d | ||||
to a different path by a load balancer or multipath routing that | to a different path by a load balancer or multipath routing that | |||
hashes on the whole of the ex-ToS byte (unfortunately still a | hashes on the whole of the former Type-of-Service (ToS) byte (whic h is unfortunately still a | |||
common pathology).</li> | common pathology).</li> | |||
</ul> | </ul> | |||
<t>Note that if a flow is configured to <em>only</em> | <aside><t>Note that if a flow is configured to <em>only</em> | |||
use a Classic congestion control, it is then entirely appropriate | use a Classic congestion control, it is then entirely appropriate | |||
not to use ECT(1).</t> | not to use ECT(1).</t></aside> | |||
</section> | </section> | |||
<section anchor="l4sid_sec_RTT_dependence" numbered="true" toc="default" > | <section anchor="l4sid_sec_RTT_dependence" numbered="true" toc="default" > | |||
<name>Reduce RTT dependence</name> | <name>Reduce RTT Dependence</name> | |||
<t>Description: A scalable congestion control needs to reduce RTT | <t>Description: A Scalable congestion control needs to reduce RTT | |||
bias as much as possible at least over the low to typical range of | bias as much as possible at least over the low-to-typical range of | |||
RTTs that will interact in the intended deployment scenario (see the | RTTs that will interact in the intended deployment scenario (see the | |||
precise normative requirement wording in <xref target="l4sid_congestio n_response" format="default"/>).</t> | precise normative requirement wording in <xref target="l4sid_Prague_re q-rtt-independence" format="default"/>).</t> | |||
<t>Motivation: The throughput of Classic congestion controls is | <t>Motivation: The throughput of Classic congestion controls is | |||
known to be inversely proportional to RTT, so one would expect flows | known to be inversely proportional to RTT, so one would expect flows | |||
over very low RTT paths to nearly starve flows over larger RTTs. | over very low RTT paths to nearly starve flows over larger RTTs. | |||
However, Classic congestion controls have never allowed a very low | However, Classic congestion controls have never allowed a very low | |||
RTT path to exist because they induce a large queue. For instance, | RTT path to exist because they induce a large queue. For instance, | |||
consider two paths with base RTT 1 ms and 100 ms. If a | consider two paths with base RTT 1 ms and 100 ms. If a | |||
Classic congestion control induces a 100 ms queue, it turns | Classic congestion control induces a 100 ms queue, it turns | |||
these RTTs into 101 ms and 200 ms leading to a throughput | these RTTs into 101 ms and 200 ms, leading to a throughput | |||
ratio of about 2:1. Whereas if a scalable congestion control induces | ratio of about 2:1. Whereas if a Scalable congestion control induces | |||
only a 1 ms queue, the ratio is 2:101, leading to a throughput | only a 1 ms queue, the ratio is 2:101, leading to a throughput | |||
ratio of about 50:1.</t> | ratio of about 50:1.</t> | |||
<t>Therefore, with very small queues, long RTT flows will | <t>Therefore, with very small queues, long RTT flows will | |||
essentially starve, unless scalable congestion controls comply with | essentially starve, unless Scalable congestion controls comply with | |||
this requirement in <xref target="l4sid_congestion_response" format="d | the requirement in <xref target="l4sid_congestion_response" format="de | |||
efault"/>.</t> | fault"/>.</t> | |||
<t>Over higher than typical RTTs, L4S flows can use the same RTT | <t>Over higher than typical RTTs, L4S flows can use the same RTT | |||
bias as in current Classic congestion controls and still work | bias as in current Classic congestion controls and still work | |||
satisfactorily. So, there is no additional requirement in <xref target | satisfactorily. So there is no additional requirement in <xref target= | |||
="l4sid_congestion_response" format="default"/> for high RTT L4S flows to | "l4sid_congestion_response" format="default"/> for high RTT L4S flows to | |||
remove RTT bias - they can but they don't have to.</t> | remove RTT bias -- they can, but they don't have to.</t> | |||
<t>One way for a Scalable congestion control to satisfy these | <t>One way for a Scalable congestion control to satisfy these | |||
requirements is to make its additive increase behave as if it were a | requirements is to make its additive increase behave as if it were a | |||
standard Reno flow but over a larger RTT by using a virtual RTT | standard Reno flow but over a larger RTT by using a virtual RTT | |||
(rtt_virt) that is a function of the actual RTT (rtt). Example | (rtt_virt) that is a function of the actual RTT (rtt). Example | |||
functions might be:</t> | functions might be:</t> | |||
<ul empty="true" spacing="normal"> | ||||
<ul spacing="normal" empty="true"> | ||||
<li> | <li> | |||
<tt>rtt_virt = max(rtt, 25ms)</tt></li> | <tt>rtt_virt = max(rtt, 25 ms)</tt></li> | |||
<li> | <li> | |||
<tt>rtt_virt = rtt + 10ms</tt></li> | <tt>rtt_virt = rtt + 10 ms</tt></li> | |||
</ul> | </ul> | |||
<t>These example functions are chosen so that, as the actual | <t>These example functions are chosen so that, as the actual | |||
RTT reduces from high to low, the virtual RTT reduces less (see | RTT reduces from high to low, the virtual RTT reduces less (see | |||
<xref target="I-D.briscoe-iccrg-prague-congestion-control" format="def ault"/> for | <xref target="I-D.briscoe-iccrg-prague-congestion-control" format="def ault"/> for | |||
details).</t> | details).</t> | |||
<t>However, short RTT flows can more rapidly respond to changes in | <t>However, short RTT flows can more rapidly respond to changes in | |||
available capacity, whether due to other flows arriving and | available capacity, whether due to other flows arriving and | |||
departing or radio capacity varying. So it would wrong to require | departing or radio capacity varying. So it would be wrong to require | |||
short RTT flows to be as sluggish as long-RTT flows, which would | short RTT flows to be as sluggish as long RTT flows, which would | |||
unnecessarily under-utilize capacity and result in unnecessary | unnecessarily underutilize capacity and result in unnecessary | |||
overshoots and undershoots (instability). Therefore, rather than | overshoots and undershoots (instability). Therefore, rather than | |||
requiring strict RTT-independence, the wording says "as independent | requiring strict RTT independence, the wording in Item <xref target="l 4sid_Prague_req-rtt-independence" format="counter"/> of <xref target="l4sid_cong estion_response" format="default"/> is "as independent | |||
of RTT as possible without compromising stability or utilization". | of RTT as possible without compromising stability or utilization". | |||
This allows shorter RTT flows to exploit their agility | This allows shorter RTT flows to exploit their agility | |||
advantage.</t> | advantage.</t> | |||
</section> | </section> | |||
<section anchor="l4sid_sec_min_cwnd" numbered="true" toc="default"> | <section anchor="l4sid_sec_min_cwnd" numbered="true" toc="default"> | |||
<name>Scaling down to fractional congestion windows</name> | <name>Scaling Down to Fractional Congestion Windows</name> | |||
<t>Description: A scalable congestion control needs to remain | <t>Description: A Scalable congestion control needs to remain | |||
responsive to congestion when typical RTTs over the public Internet | responsive to congestion when typical RTTs over the public Internet | |||
are significantly smaller because they are no longer inflated by | are significantly smaller because they are no longer inflated by | |||
queuing delay (see the precise normative requirement wording in | queuing delay (see the precise normative requirement wording in | |||
<xref target="l4sid_congestion_response" format="default"/>).</t> | <xref target="l4sid_Prague_req-fractional-window" format="default"/>). </t> | |||
<t>Motivation: As currently specified, the minimum congestion window | <t>Motivation: As currently specified, the minimum congestion window | |||
of ECN-capable TCP (and its derivatives) is expected to be 2 sender | of ECN-capable TCP (and its derivatives) is expected to be 2 sender | |||
maximum segment sizes (SMSS), or 1 SMSS after a retransmission | maximum segment sizes (SMSS), or 1 SMSS after a retransmission | |||
timeout. Once the congestion window reaches this minimum, if there | timeout. Once the congestion window reaches this minimum, if there | |||
is further ECN-marking, TCP is meant to wait for a retransmission | is further ECN marking, TCP is meant to wait for a retransmission | |||
timeout before sending another segment (see section 6.1.2 of the ECN | timeout before sending another segment (see <xref target="RFC3168" | |||
spec <xref target="RFC3168" format="default"/>). In practice, most kno | sectionFormat="of" section="6.1.2">the ECN spec</xref>). In | |||
wn | practice, most known window-based congestion control algorithms | |||
window-based congestion control algorithms become unresponsive to | become unresponsive to ECN congestion signals at this point. No | |||
ECN congestion signals at this point. No matter how much ECN | matter how much ECN marking, the congestion window no longer | |||
marking, the congestion window no longer reduces. Instead, the | reduces. Instead, the sender's lack of any further congestion | |||
sender's lack of any further congestion response forces the queue to | response forces the queue to grow, overriding any AQM and increasing | |||
grow, overriding any AQM and increasing queuing delay (making the | queuing delay (making the window large enough to become responsive | |||
window large enough to become responsive again). This can result in | again). This can result in a stable but deeper queue, or it might | |||
a stable but deeper queue, or it might drive the queue to loss, then | drive the queue to loss, in which case the retransmission timeout mech | |||
the retransmission timeout mechanism acts as a backstop.</t> | anism | |||
acts as a backstop.</t> | ||||
<t>Most window-based congestion controls for other transport | <t>Most window-based congestion controls for other transport | |||
protocols have a similar minimum window, albeit when measured in | protocols have a similar minimum window, albeit when measured in | |||
bytes for those that use smaller packets.</t> | bytes for those that use smaller packets.</t> | |||
<t>L4S mechanisms significantly reduce queueing delay so, over the | <t>L4S mechanisms significantly reduce queuing delay so, over the | |||
same path, the RTT becomes lower. Then this problem becomes | same path, the RTT becomes lower. Then, this problem becomes | |||
surprisingly common <xref target="sub-mss-prob" format="default"/>. Th | surprisingly common <xref target="sub-mss-prob" format="default"/>. Th | |||
is is | is is | |||
because, for the same link capacity, smaller RTT implies a smaller | because, for the same link capacity, smaller RTT implies a smaller | |||
window. For instance, consider a residential setting with an | window. For instance, consider a residential setting with an | |||
upstream broadband Internet access of 8 Mb/s, assuming a max | upstream broadband Internet access of 8 Mb/s, assuming a max | |||
segment size of 1500 B. Two upstream flows will each have the | segment size of 1500 B. Two upstream flows will each have the | |||
minimum window of 2 SMSS if the RTT is 6 ms or less, which | minimum window of 2 SMSS if the RTT is 6 ms or less, which | |||
is quite common when accessing a nearby data centre. So, any more | is quite common when accessing a nearby data centre. So any more | |||
than two such parallel TCP flows will become unresponsive to ECN and | than two such parallel TCP flows will become unresponsive to ECN and | |||
increase queuing delay.</t> | increase queuing delay.</t> | |||
<t>Unless scalable congestion controls address the requirement in | <t>Unless Scalable congestion controls address the requirement in | |||
<xref target="l4sid_congestion_response" format="default"/> from the s tart, they will | <xref target="l4sid_congestion_response" format="default"/> from the s tart, they will | |||
frequently become unresponsive to ECN, negating the low latency | frequently become unresponsive to ECN, negating the low-latency | |||
benefit of L4S, for themselves and for others.</t> | benefit of L4S, for themselves and for others.</t> | |||
<t>That would seem to imply that scalable congestion controllers | <t>That would seem to imply that Scalable congestion controllers | |||
ought to be required to be able work with a congestion window less | ought to be required to be able work with a congestion window less | |||
than 1 SMSS. For instance, if an ECN-capable TCP gets an | than 1 SMSS. For instance, if an ECN-capable TCP gets an | |||
ECN-mark when it is already sitting at a window of 1 SMSS, | ECN mark when it is already sitting at a window of 1 SMSS, | |||
RFC 3168 requires it to defer sending for a retransmission | <xref target="RFC3168" format="default"/> requires it to defer sending | |||
for a retransmission | ||||
timeout. A less drastic but more complex mechanism can maintain a | timeout. A less drastic but more complex mechanism can maintain a | |||
congestion window less than 1 SMSS (significantly less if | congestion window less than 1 SMSS (significantly less if | |||
necessary), as described in <xref target="Ahmed19" format="default"/>. Other | necessary), as described in <xref target="Ahmed19" format="default"/>. Other | |||
approaches are likely to be feasible.</t> | approaches are likely to be feasible.</t> | |||
<t>However, the requirement in <xref target="l4sid_congestion_response " format="default"/> is worded as a "SHOULD" because | <t>However, the requirement in <xref target="l4sid_congestion_response " format="default"/> is worded as a "<bcp14>SHOULD</bcp14>" because | |||
it is believed that the existence of a minimum window is not all | it is believed that the existence of a minimum window is not all | |||
bad. When competing with an unresponsive flow, a minimum window | bad. When competing with an unresponsive flow, a minimum window | |||
naturally protects the flow from starvation by at least keeping some | naturally protects the flow from starvation by at least keeping some | |||
data flowing.</t> | data flowing.</t> | |||
<t>By stating the requirement to go lower than 1 SMSS as a | <t>By stating the requirement to go lower than 1 SMSS as a | |||
"SHOULD", while the requirement in RFC 3168 still stands as | "<bcp14>SHOULD</bcp14>", while the requirement in <xref target="RFC316 | |||
8" format="default"/> still stands as | ||||
well, we shall be able to watch the choices of minimum window evolve | well, we shall be able to watch the choices of minimum window evolve | |||
in different scalable congestion controllers.</t> | in different Scalable congestion controllers.</t> | |||
<!-- Requirement #3.5: Smoothing ECN feedback | ||||
Description: The ratio of marked packets CE marks received by the | ||||
scalable transport sender are averaged | ||||
</section> | </section> | |||
<section anchor="l4sid_sec_reordering_tolerance" numbered="true" toc="de fault"> | <section anchor="l4sid_sec_reordering_tolerance" numbered="true" toc="de fault"> | |||
<name>Measuring Reordering Tolerance in Time Units</name> | <name>Measuring Reordering Tolerance in Time Units</name> | |||
<t>Description: When detecting loss, a scalable congestion control | <t>Description: When detecting loss, a Scalable congestion control | |||
needs to be tolerant to reordering over an adaptive time interval, | needs to be tolerant to reordering over an adaptive time interval, | |||
which scales with throughput, rather than counting only in fixed | which scales with throughput, rather than counting only in fixed | |||
units of packets, which does not scale (see the precise normative | units of packets, which does not scale (see the precise normative | |||
requirement wording in <xref target="l4sid_congestion_response" format ="default"/>).</t> | requirement wording in <xref target="l4sid_Prague_req-reordering" form at="default"/>).</t> | |||
<t>Motivation: A primary purpose of L4S is scalable throughput (it's | <t>Motivation: A primary purpose of L4S is scalable throughput (it's | |||
in the name). Scalability in all dimensions is, of course, also a | in the name). Scalability in all dimensions is, of course, also a | |||
goal of all IETF technology. The inverse linear congestion response | goal of all IETF technology. The inverse linear congestion response | |||
in <xref target="l4sid_congestion_response" format="default"/> is nece ssary, but not | in <xref target="l4sid_congestion_response" format="default"/> is nece ssary, but not | |||
sufficient, to solve the congestion control scalability problem | sufficient, to solve the congestion control scalability problem | |||
identified in <xref target="RFC3649" format="default"/>. As well as ma intaining | identified in <xref target="RFC3649" format="default"/>. As well as ma intaining | |||
frequent ECN signals as rate scales, it is also important to ensure | frequent ECN signals as rate scales, it is also important to ensure | |||
that a potentially false perception of loss does not limit | that a potentially false perception of loss does not limit | |||
throughput scaling.</t> | throughput scaling.</t> | |||
<t>End-systems cannot know whether a missing packet is due to loss | <t>End systems cannot know whether a missing packet is due to loss | |||
or reordering, except in hindsight - if it appears later. So they | or reordering, except in hindsight -- if it appears later. So they | |||
can only deem that there has been a loss if a gap in the sequence | can only deem that there has been a loss if a gap in the sequence | |||
space has not been filled, either after a certain number of | space has not been filled, either after a certain number of | |||
subsequent packets has arrived (e.g. the 3 DupACK rule of | subsequent packets has arrived (e.g., the 3 DupACK rule of | |||
standard TCP congestion control <xref target="RFC5681" format="default | standard TCP congestion control <xref target="RFC5681" format="default | |||
"/>) or | "/>) or | |||
after a certain amount of time (e.g. the RACK | after a certain amount of time (e.g., the RACK | |||
approach <xref target="RFC8985" format="default"/>).</t> | approach <xref target="RFC8985" format="default"/>).</t> | |||
<t>As we attempt to scale packet rate over the years:</t> | <t>As we attempt to scale packet rate over the years:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Even if only <em>some</em> sending hosts | <li>Even if only <em>some</em> sending hosts | |||
still deem that loss has occurred by counting reordered packets, | still deem that loss has occurred by counting reordered packets, | |||
<em>all</em> networks will have to keep | <em>all</em> networks will have to keep | |||
reducing the time over which they keep packets in order. If some | reducing the time over which they keep packets in order. If some | |||
link technologies keep the time within which reordering occurs | link technologies keep the time within which reordering occurs | |||
roughly unchanged, then loss over these links, as perceived by | roughly unchanged, then loss over these links, as perceived by | |||
these hosts, will appear to continually rise over the years.</li> | these hosts, will appear to continually rise over the years.</li> | |||
<li>In contrast, if all senders detect loss in units of time, the | <li>In contrast, if all senders detect loss in units of time, the | |||
time over which the network has to keep packets in order stays | time over which the network has to keep packets in order stays | |||
roughly invariant.</li> | roughly invariant.</li> | |||
</ul> | </ul> | |||
<t>Therefore, hosts have an incentive to detect loss in time | <t>Therefore, hosts have an incentive to detect loss in time | |||
units (so as not to fool themselves too often into detecting losses | units (so as not to fool themselves too often into detecting losses | |||
when there are none). And for hosts that are changing their | when there are none). And for hosts that are changing their | |||
congestion control implementation to L4S, there is no downside to | congestion control implementation to L4S, there is no downside to | |||
including time-based loss detection code in the change (loss | including time-based loss detection code in the change (loss | |||
recovery implemented in hardware is an exception, covered later). | recovery implemented in hardware is an exception, which is covered lat er). | |||
Therefore, requiring L4S hosts to detect loss in time-based units | Therefore, requiring L4S hosts to detect loss in time-based units | |||
would not be a burden.</t> | would not be a burden.</t> | |||
<t>If the requirement in <xref target="l4sid_congestion_response" form at="default"/> | <t>If the requirement in <xref target="l4sid_congestion_response" form at="default"/> | |||
were not placed on L4S hosts, even though it would be no burden on | were not placed on L4S hosts, even though it would be no burden on | |||
hosts to comply, all networks would face unnecessary uncertainty | hosts to comply, all networks would face unnecessary uncertainty | |||
over whether some L4S hosts might be detecting loss by counting | over whether some L4S hosts might be detecting loss by counting | |||
packets. Then <em>all</em> link technologies will | packets. Then, <em>all</em> link technologies would | |||
have to unnecessarily keep reducing the time within which reordering | have to unnecessarily keep reducing the time within which reordering | |||
occurs. That is not a problem for some link technologies, but it | occurs. That is not a problem for some link technologies, but it | |||
becomes increasingly challenging for other link technologies to | becomes increasingly challenging for other link technologies to | |||
continue to scale, particularly those relying on channel bonding for | continue to scale, particularly those relying on channel bonding for | |||
scaling, such as LTE, 5G and DOCSIS.</t> | scaling, such as LTE, 5G, and Data Over Cable Service Interface Specif ication (DOCSIS).</t> | |||
<t>Given Internet paths traverse many link technologies, any scaling | <t>Given Internet paths traverse many link technologies, any scaling | |||
limit for these more challenging access link technologies would | limit for these more challenging access link technologies would | |||
become a scaling limit for the Internet as a whole.</t> | become a scaling limit for the Internet as a whole.</t> | |||
<t>It might be asked how it helps to place this loss detection | <t>It might be asked how it helps to place this loss detection | |||
requirement only on L4S hosts, because networks will still face | requirement only on L4S hosts, because networks will still face | |||
uncertainty over whether non-L4S flows are detecting loss by | uncertainty over whether non-L4S flows are detecting loss by | |||
counting DupACKs. The answer is that those link technologies for | counting DupACKs. The answer is that those link technologies for | |||
which it is challenging to keep squeezing the reordering time will | which it is challenging to keep squeezing the reordering time will | |||
only need to do so for non-L4S traffic (which they can do because | only need to do so for non-L4S traffic (which they can do because | |||
the L4S identifier is visible at the IP layer). Therefore, they can | the L4S identifier is visible at the IP layer). Therefore, they can | |||
focus their processing and memory resources into scaling non-L4S | focus their processing and memory resources into scaling non-L4S | |||
(Classic) traffic. Then, the higher the proportion of L4S traffic, | (Classic) traffic. Then, the higher the proportion of L4S traffic, | |||
the less of a scaling challenge they will have.</t> | the less of a scaling challenge they will have.</t> | |||
<t>To summarize, there is no reason for L4S hosts not to be part of | <t>To summarize, there is no reason for L4S hosts not to be part of | |||
the solution instead of part of the problem.</t> | the solution instead of part of the problem.</t> | |||
<t>Requirement ("MUST") or recommendation ("SHOULD")? As explained | <t>Requirement ("<bcp14>MUST</bcp14>") or recommendation ("<bcp14>SHOU LD</bcp14>")? As explained | |||
above, this is a subtle interoperability issue between hosts and | above, this is a subtle interoperability issue between hosts and | |||
networks, which seems to need a "MUST". Unless networks can be | networks, which seems to need a "<bcp14>MUST</bcp14>". Unless networks can be | |||
certain that all L4S hosts follow the time-based approach, they | certain that all L4S hosts follow the time-based approach, they | |||
still have to cater for the worst case - continually squeeze | still have to cater for the worst case -- continually squeeze | |||
reordering into a smaller and smaller duration - just for hosts that | reordering into a smaller and smaller duration -- just for hosts that | |||
might be using the counting approach. However, it was decided to | might be using the counting approach. However, it was decided to | |||
express this as a recommendation, using "SHOULD". The main | express this as a recommendation, using "<bcp14>SHOULD</bcp14>". The m ain | |||
justification was that networks can still be fairly certain that L4S | justification was that networks can still be fairly certain that L4S | |||
hosts will follow this recommendation, because following it offers | hosts will follow this recommendation, because following it offers | |||
only gain and no pain.</t> | only gain and no pain.</t> | |||
<t>Details:</t> | <t>Details:</t> | |||
<t>The speed of loss recovery is much more significant for short | ||||
flows than long, therefore a good compromise is to adapt the | <t>The time spent recovering a loss is much more significant for short | |||
reordering window; from a small fraction of the RTT at the start of | flows than long; therefore, a good compromise is to adapt the | |||
a flow, to a larger fraction of the RTT for flows that continue for | reordering window from a small fraction of the RTT at the start of | |||
a flow to a larger fraction of the RTT for flows that continue for | ||||
many round trips.</t> | many round trips.</t> | |||
<t>This is broadly the approach adopted by TCP RACK (Recent | <t>This is broadly the approach adopted by RACK <xref target="RFC8985" | |||
ACKnowledgements) <xref target="RFC8985" format="default"/>. However, | format="default"/>. However, RACK | |||
RACK | ||||
starts with the 3 DupACK approach, because the RTT estimate is not | starts with the 3 DupACK approach, because the RTT estimate is not | |||
necessarily stable. As long as the initial window is paced, such | necessarily stable. As long as the initial window is paced, such | |||
initial use of 3 DupACK counting would amount to time-based loss | initial use of 3 DupACK counting would amount to time-based loss | |||
detection and therefore would satisfy the time-based loss detection | detection and therefore would satisfy the time-based loss detection | |||
recommendation of <xref target="l4sid_congestion_response" format="def ault"/>. This | recommendation of <xref target="l4sid_congestion_response" format="def ault"/>. This | |||
is because pacing of the initial window would ensure that 3 DupACKs | is because pacing of the initial window would ensure that 3 DupACKs | |||
early in the connection would be spread over a small fraction of the | early in the connection would be spread over a small fraction of the | |||
round trip.</t> | round trip.</t> | |||
<t>As mentioned above, hardware implementations of loss recovery | <t>As mentioned above, hardware implementations of loss recovery | |||
using DupACK counting exist (e.g. some implementations of | using DupACK counting exist (e.g., some implementations of | |||
RoCEv2 for RDMA). For low latency, these implementations can change | Remote Direct Memory Access over Converged Ethernet version 2 (RoCEv2) | |||
). | ||||
For low latency, these implementations can change | ||||
their congestion control to implement L4S, because the congestion | their congestion control to implement L4S, because the congestion | |||
control (as distinct from loss recovery) is implemented in software. | control (as distinct from loss recovery) is implemented in software. | |||
But they cannot easily satisfy this loss recovery requirement. | But they cannot easily satisfy this loss recovery requirement. | |||
However, it is believed they do not need to, because such | However, it is believed they do not need to, because such | |||
implementations are believed to solely exist in controlled | implementations are believed to solely exist in controlled | |||
environments, where the network technology keeps reordering | environments, where the network technology keeps reordering | |||
extremely low anyway. This is why controlled environments with | extremely low anyway. This is why controlled environments with | |||
hardly any reordering are excluded from the scope of the normative | hardly any reordering are excluded from the scope of the normative | |||
recommendation in <xref target="l4sid_congestion_response" format="def ault"/>.</t> | recommendation in <xref target="l4sid_congestion_response" format="def ault"/>.</t> | |||
<t>Detecting loss in time units also prevents the ACK-splitting | <t>Detecting loss in time units also prevents the ACK-splitting | |||
attacks described in <xref target="Savage-TCP" format="default"/>.</t> | attacks described in <xref target="Savage-TCP" format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Scalable Transport Protocol Optimizations</name> | <name>Scalable Transport Protocol Optimizations</name> | |||
<t/> | ||||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Setting ECT in Control Packets and Retransmissions</name> | <name>Setting ECT in Control Packets and Retransmissions</name> | |||
<t>Description: This item concerns TCP and its derivatives | <t>Description: This item concerns TCP and its derivatives | |||
(e.g. SCTP) as well as RTP/RTCP <xref target="RFC6679" format="default "/>. | (e.g., SCTP) as well as RTP/RTCP <xref target="RFC6679" format="defaul t"/>. | |||
The original specification of ECN for TCP precluded the use of ECN | The original specification of ECN for TCP precluded the use of ECN | |||
on control packets and retransmissions. Similarly, RFC 6679 | on control packets and retransmissions. Similarly, <xref target="RFC66 79" format="default"/> | |||
precludes the use of ECT on RTCP datagrams, in case the path changes | precludes the use of ECT on RTCP datagrams, in case the path changes | |||
after it has been checked for ECN traversal. To improve performance, | after it has been checked for ECN traversal. To improve performance, | |||
scalable transport protocols ought to enable ECN at the IP layer in | Scalable transport protocols ought to enable ECN at the IP layer in | |||
TCP control packets (SYN, SYN-ACK, pure ACKs, etc.) and in | TCP control packets (SYN, SYN-ACK, pure ACKs, etc.) and in | |||
retransmitted packets. The same is true for other transports, | retransmitted packets. The same is true for other transports, | |||
e.g. SCTP, RTCP.</t> | e.g., SCTP and RTCP.</t> | |||
<t>Motivation (TCP): RFC 3168 prohibits the use of ECN on these | <t>Motivation (TCP): <xref target="RFC3168" format="default"/> prohibi | |||
types of TCP packet, based on a number of arguments. This means | ts the use of ECN on these | |||
types of TCP packets, based on a number of arguments. This means | ||||
these packets are not protected from congestion loss by ECN, which | these packets are not protected from congestion loss by ECN, which | |||
considerably harms performance, particularly for short flows. | considerably harms performance, particularly for short flows. | |||
ECN++ <xref target="I-D.ietf-tcpm-generalized-ecn" format="default"/> | ECN++ <xref target="I-D.ietf-tcpm-generalized-ecn" format="default"/> | |||
proposes | proposes | |||
experimental use of ECN on all types of TCP packet as long as AccECN | experimental use of ECN on all types of TCP packets as long as AccECN | |||
feedback <xref target="I-D.ietf-tcpm-accurate-ecn" format="default"/> | feedback <xref target="I-D.ietf-tcpm-accurate-ecn" format="default"/> | |||
is | is | |||
available (which itself satisfies the accurate feedback requirement | available (which itself satisfies the accurate feedback requirement | |||
in <xref target="l4sid_feedback" format="default"/> for using a scalab le congestion | in <xref target="l4sid_feedback" format="default"/> for using a Scalab le congestion | |||
control).</t> | control).</t> | |||
<t>Motivation (RTCP): L4S experiments in general will need to | <t>Motivation (RTCP): L4S experiments in general will need to | |||
observe the rule in the RTP ECN spec <xref target="RFC6679" format="de fault"/> | observe the rule in the RTP ECN spec <xref target="RFC6679" format="de fault"/> | |||
that precludes ECT on RTCP datagrams. Nonetheless, as ECN usage | that precludes ECT on RTCP datagrams. Nonetheless, as ECN usage | |||
becomes more widespread, it would be useful to conduct specific | becomes more widespread, it would be useful to conduct specific | |||
experiments with ECN-capable RTCP to gather data on whether such | experiments with ECN-capable RTCP to gather data on whether such | |||
caution is necessary.</t> | caution is necessary.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Faster than Additive Increase</name> | <name>Faster than Additive Increase</name> | |||
<t>Description: It would improve performance if scalable congestion | <t>Description: It would improve performance if Scalable congestion | |||
controls did not limit their congestion window increase to the | controls did not limit their congestion window increase to the | |||
standard additive increase of 1 SMSS per round trip <xref target="RFC5 681" format="default"/> during congestion avoidance. The same is true for | standard additive increase of 1 SMSS per round trip <xref target="RFC5 681" format="default"/> during congestion avoidance. The same is true for | |||
derivatives of TCP congestion control, including similar approaches | derivatives of TCP congestion control, including similar approaches | |||
used for real-time media.</t> | used for real-time media.</t> | |||
<t>Motivation: As currently defined <xref target="RFC8257" format="def | <t>Motivation: As currently defined <xref target="RFC8257" format="def | |||
ault"/>, | ault"/>, | |||
DCTCP uses the conventional Reno additive increase in congestion | DCTCP uses the conventional Reno additive increase in the congestion | |||
avoidance phase. When the available capacity suddenly increases | avoidance phase. When the available capacity suddenly increases | |||
(e.g. when another flow finishes, or if radio capacity | (e.g., when another flow finishes or if radio capacity | |||
increases) it can take very many round trips to take advantage of | increases) it can take very many round trips to take advantage of | |||
the new capacity. TCP Cubic <xref target="RFC8312" format="default"/> was | the new capacity. TCP CUBIC <xref target="RFC8312" format="default"/> was | |||
designed to solve this problem, but as flow rates have continued to | designed to solve this problem, but as flow rates have continued to | |||
increase, the delay accelerating into available capacity has become | increase, the delay accelerating into available capacity has become | |||
prohibitive. See, for instance, the examples in Section 5.1 of the | prohibitive. See, for instance, the examples in Section <xref target=" | |||
L4S architecture <xref target="I-D.ietf-tsvwg-l4s-arch" format="defaul | RFC9330" section="5.1" | |||
t"/>. Even | sectionFormat="bare"/> of the | |||
when out of its Reno-compatibility mode, every 8x scaling of Cubic's | L4S architecture <xref target="RFC9330" format="default"/>. Even | |||
flow rate leads to 2x more acceleration delay.</t> | when out of its Reno-friendly mode, every 8 times scaling of CUBIC's f | |||
low | ||||
rate leads to 2 times more acceleration delay.</t> | ||||
<t>In the steady state, DCTCP induces about 2 ECN marks per round | <t>In the steady state, DCTCP induces about 2 ECN marks per round | |||
trip, so it is possible to quickly detect when these signals have | trip, so it is possible to quickly detect when these signals have | |||
disappeared and seek available capacity more rapidly, while | disappeared and seek available capacity more rapidly, while | |||
minimizing the impact on other flows (Classic and | minimizing the impact on other flows (Classic and | |||
scalable) <xref target="LinuxPacedChirping" format="default"/>. Altern | Scalable) <xref target="LinuxPacedChirping" format="default"/>. Altern | |||
atively, | atively, | |||
approaches such as Adaptive Acceleration (A2DTCP <xref target="A2DTCP" | approaches such as Adaptive-Acceleration Data Center TCP (A2DTCP) <xre | |||
format="default"/>) have been proposed to address this problem in | f target="A2DTCP" format="default"/>) have been proposed to address this problem | |||
in | ||||
data centres, which might be deployable over the public | data centres, which might be deployable over the public | |||
Internet.</t> | Internet.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Faster Convergence at Flow Start</name> | <name>Faster Convergence at Flow Start</name> | |||
<t>Description: It would improve performance if scalable congestion | <t>Description: It would improve performance if Scalable congestion | |||
controls converged (reached their steady-state share of the | controls converged (reached their steady-state share of the | |||
capacity) faster than Classic congestion controls or at least no | capacity) faster than Classic congestion controls or at least no | |||
slower. This affects the flow start behaviour of any L4S congestion | slower. This affects the flow start behaviour of any L4S congestion | |||
control derived from a Classic transport that uses TCP slow start, | control derived from a Classic transport that uses TCP slow start, | |||
including those for real-time media.</t> | including those for real-time media.</t> | |||
<t>Motivation: As an example, a new DCTCP flow takes longer than a | <t>Motivation: As an example, a new DCTCP flow takes longer than a | |||
Classic congestion control to obtain its share of the capacity of | Classic congestion control to obtain its share of the capacity of | |||
the bottleneck when there are already ongoing flows using the | the bottleneck when there are already ongoing flows using the | |||
bottleneck capacity. In a data centre environment DCTCP takes about | bottleneck capacity. | |||
a factor of 1.5 to 2 longer to converge due to the much higher | In a data-centre environment, DCTCP takes about | |||
1.5 to 2 times longer to converge due to the much higher | ||||
typical level of ECN marking that DCTCP background traffic induces, | typical level of ECN marking that DCTCP background traffic induces, | |||
which causes new flows to exit slow start early <xref target="Alizadeh | which causes new flows to exit slow start early <xref target="Alizadeh | |||
-stability" format="default"/>. In testing for use over the public | -stability" format="default"/>. In testing for use over the public | |||
Internet the convergence time of DCTCP relative to a regular | Internet, the convergence time of DCTCP relative to a regular | |||
loss-based TCP slow start is even less favourable <xref target="Paced- | loss-based TCP slow start is even less favourable <xref target="LinuxP | |||
Chirping" format="default"/> due to the shallow ECN marking threshold | acedChirping" format="default"/> due to the shallow ECN-marking threshold | |||
needed for L4S. It is exacerbated by the typically greater mismatch | needed for L4S. It is exacerbated by the typically greater mismatch | |||
between the link rate of the sending host and typical Internet | between the link rate of the sending host and typical Internet | |||
access bottlenecks. This problem is detrimental in general, but | access bottlenecks. This problem is detrimental in general but | |||
would particularly harm the performance of short flows relative to | would particularly harm the performance of short flows relative to | |||
Classic congestion controls.</t> | Classic congestion controls.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="l4sid_ECT1_CE" numbered="true" toc="default"> | <section anchor="l4sid_ECT1_CE" numbered="true" toc="default"> | |||
<name>Compromises in the Choice of L4S Identifier</name> | <name>Compromises in the Choice of L4S Identifier</name> | |||
<t>This appendix is informative, not normative. As explained in <xref targ et="l4sid_reqs" format="default"/>, there is insufficient space in the IP header (v4 | <t>This appendix is informative, not normative. As explained in <xref targ et="l4sid_reqs" format="default"/>, there is insufficient space in the IP header (v4 | |||
or v6) to fully accommodate every requirement. So the choice of L4S | or v6) to fully accommodate every requirement. So the choice of L4S | |||
identifier involves tradeoffs. This appendix records the pros and cons | identifier involves trade-offs. This appendix records the pros and cons | |||
of the choice that was made.</t> | of the choice that was made.</t> | |||
<t>Non-normative recap of the chosen codepoint scheme:</t> | <t>Non-normative recap of the chosen codepoint scheme:</t> | |||
<ul empty="true" spacing="normal"> | <ul spacing="normal" empty="true"> | |||
<li> | <li> | |||
<t>Packets with ECT(1) and conditionally packets with CE signify L4S | <t>Packets with ECT(1) and conditionally packets with CE signify L4S | |||
semantics as an alternative to the semantics of Classic | semantics as an alternative to the semantics of Classic | |||
ECN <xref target="RFC3168" format="default"/>, specifically:</t> | ECN <xref target="RFC3168" format="default"/>, specifically:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>The ECT(1) codepoint signifies that the packet was sent by an | <li>The ECT(1) codepoint signifies that the packet was sent by an | |||
L4S-capable sender.</li> | L4S-capable sender.</li> | |||
<li>Given shortage of codepoints, both L4S and Classic ECN sides | <li>Given the shortage of codepoints, both the L4S and Classic ECN s ides | |||
of an AQM have to use the same CE codepoint to indicate that a | of an AQM have to use the same CE codepoint to indicate that a | |||
packet has experienced congestion. If a packet that had already | packet has experienced congestion. If a packet that had already | |||
been marked CE in an upstream buffer arrived at a subsequent | been marked CE in an upstream buffer arrived at a subsequent | |||
AQM, this AQM would then have to guess whether to classify CE | AQM, this AQM would then have to guess whether to classify CE | |||
packets as L4S or Classic ECN. Choosing the L4S treatment is a | packets as L4S or Classic ECN. | |||
Choosing the L4S treatment is a | ||||
safer choice, because then a few Classic packets might arrive | safer choice, because then a few Classic packets might arrive | |||
early, rather than a few L4S packets arriving late.</li> | early rather than a few L4S packets arriving late.</li> | |||
<li>Additional information might be available if the classifier | <li>Additional information might be available if the classifier | |||
were transport-aware. Then it could classify a CE packet for | were transport-aware. Then, it could classify a CE packet for | |||
Classic ECN treatment if the most recent ECT packet in the same | Classic ECN treatment if the most recent ECT packet in the same | |||
flow had been marked ECT(0). However, the L4S service ought not | flow had been set to ECT(0). However, the L4S service ought not | |||
to need transport-layer awareness.</li> | need transport-layer awareness.</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
</ul> | </ul> | |||
<t>Cons:</t> | <t>Cons:</t> | |||
<dl newline="false" spacing="normal"> | <dl newline="false" spacing="normal"> | |||
<dt>Consumes the last ECN codepoint:</dt> | <dt>Consumes the last ECN codepoint:</dt> | |||
<dd>The L4S service could | <dd>The L4S service could | |||
potentially supersede the service provided by Classic ECN, therefore | potentially supersede the service provided by Classic ECN; therefore, | |||
using ECT(1) to identify L4S packets could ultimately mean that the | using ECT(1) to identify L4S packets could ultimately mean that the | |||
ECT(0) codepoint was 'wasted' purely to distinguish one form of ECN | ECT(0) codepoint was 'wasted' purely to distinguish one form of ECN | |||
from its successor.</dd> | from its successor.</dd> | |||
<dt>ECN hard in some lower layers:</dt> | <dt>ECN hard in some lower layers:</dt> | |||
<dd>It is not always | <dd>It is not always | |||
possible to support the equivalent of an IP-ECN field in an AQM | possible to support the equivalent of an IP-ECN field in an AQM | |||
acting in a buffer below the IP layer <xref target="I-D.ietf-tsvwg-ecn | acting in a buffer below the IP layer <xref target="I-D.ietf-tsvwg-ecn | |||
-encap-guidelines" format="default"/>. Then, depending on | -encap-guidelines" format="default"/>. Then, depending on | |||
the lower layer scheme, the L4S service might have to drop rather | the lower-layer scheme, the L4S service might have to drop rather | |||
than mark frames even though they might encapsulate an ECN-capable | than mark frames even though they might encapsulate an ECN-capable | |||
packet.</dd> | packet.</dd> | |||
<dt>Risk of reordering Classic CE packets within a flow:</dt> | <dt>Risk of reordering Classic CE packets within a flow:</dt> | |||
<dd anchor="l4sid_CE_reordering"> | <dd anchor="l4sid_CE_reordering"> | |||
<t>Classifying | <t>Classifying | |||
all CE packets into the L4S queue risks any CE packets that were | all CE packets into the L4S queue risks any CE packets that were | |||
originally ECT(0) being incorrectly classified as L4S. If there were | originally ECT(0) being incorrectly classified as L4S. If there were | |||
delay in the Classic queue, these incorrectly classified CE packets | delay in the Classic queue, these incorrectly classified CE packets | |||
would arrive early, which is a form of reordering. Reordering within | would arrive early, which is a form of reordering. Reordering within | |||
a microflow can cause TCP senders (and senders of similar | a microflow can cause TCP senders (and senders of similar | |||
skipping to change at line 4010 ¶ | skipping to change at line 2909 ¶ | |||
originally ECT(0) being incorrectly classified as L4S. If there were | originally ECT(0) being incorrectly classified as L4S. If there were | |||
delay in the Classic queue, these incorrectly classified CE packets | delay in the Classic queue, these incorrectly classified CE packets | |||
would arrive early, which is a form of reordering. Reordering within | would arrive early, which is a form of reordering. Reordering within | |||
a microflow can cause TCP senders (and senders of similar | a microflow can cause TCP senders (and senders of similar | |||
transports) to retransmit spuriously. However, the risk of spurious | transports) to retransmit spuriously. However, the risk of spurious | |||
retransmissions would be extremely low for the following | retransmissions would be extremely low for the following | |||
reasons:</t> | reasons:</t> | |||
<ol spacing="normal" type="1"><li>It is quite unusual to experience qu euing at more than one | <ol spacing="normal" type="1"><li>It is quite unusual to experience qu euing at more than one | |||
bottleneck on the same path (the available capacities have to be | bottleneck on the same path (the available capacities have to be | |||
identical).</li> | identical).</li> | |||
<li>In only a subset of these unusual cases would the first | <li>In only a subset of these unusual cases would the first | |||
bottleneck support Classic ECN marking while the second | bottleneck support Classic ECN marking and the second | |||
supported L4S ECN marking, which would be the only scenario | L4S ECN marking. This would be the only scenario | |||
where some ECT(0) packets could be CE marked by an AQM | where some ECT(0) packets could be CE marked by an AQM | |||
supporting Classic ECN then the remainder experienced further | supporting Classic ECN while subsequently the remaining ECT(0) pac kets would experience further | |||
delay through the Classic side of a subsequent L4S DualQ | delay through the Classic side of a subsequent L4S DualQ | |||
AQM.</li> | AQM.</li> | |||
<li> | <li> | |||
<t>Even then, when a few packets are delivered early, it takes | <t>Even then, when a few packets are delivered early, it takes | |||
very unusual conditions to cause a spurious retransmission, in | very unusual conditions to cause a spurious retransmission, in | |||
contrast to when some packets are delivered late. The first | contrast to when some packets are delivered late. The first | |||
bottleneck has to apply CE-marks to at least N contiguous | bottleneck has to apply CE marks to at least N contiguous | |||
packets and the second bottleneck has to inject an uninterrupted | packets, and the second bottleneck has to inject an uninterrupted | |||
sequence of at least N of these packets between two packets | sequence of at least N of these packets between two packets | |||
earlier in the stream (where N is the reordering window that the | earlier in the stream (where N is the reordering window that the | |||
transport protocol allows before it considers a packet is | transport protocol allows before it considers a packet is | |||
lost).</t> | lost).</t> | |||
<ul empty="true" spacing="normal"> | <ul spacing="normal" empty="true"> | |||
<li>For example consider N=3, and consider the sequence of | ||||
packets 100, 101, 102, 103,... and imagine that packets | <li>For example, consider N=3, and consider the sequence of | |||
150,151,152 from later in the flow are injected as follows: | packets 100, 101, 102, 103,... Imagine that packets | |||
100, 150, 151, 101, 152, 102, 103... If this were late | 150, 151, 152 from later in the flow are injected as follows: | |||
100, 150, 151, 101, 152, 102, 103,... If this were late | ||||
reordering, even one packet arriving out of sequence would | reordering, even one packet arriving out of sequence would | |||
trigger a spurious retransmission, but there is no spurious | trigger a spurious retransmission, but there is no spurious | |||
retransmission here with early reordering, because packet | retransmission here with early reordering, because packet | |||
101 moves the cumulative ACK counter forward before 3 | 101 moves the cumulative ACK counter forward before 3 | |||
packets have arrived out of order. Later, when packets 148, | packets have arrived out of order. | |||
149, 153... arrive, even though there is a 3-packet hole, | Later, when packets 148, | |||
149, 153,... arrive, even though there is a 3-packet hole, | ||||
there will be no problem, because the packets to fill the | there will be no problem, because the packets to fill the | |||
hole are already in the receive buffer.</li> | hole are already in the receive buffer.</li> | |||
</ul> | </ul> | |||
</li> | </li> | |||
<li>Even with the current TCP recommendation of N=3 <xref target="RF | <li>Even with the current TCP recommendation of N=3 <xref target="RF | |||
C5681" format="default"/> spurious retransmissions will be unlikely for | C5681" format="default"/>, spurious retransmissions will be unlikely for | |||
all the above reasons. As RACK <xref target="RFC8985" format="defa | all the above reasons. As RACK <xref target="RFC8985" format="defa | |||
ult"/> is | ult"/> is | |||
becoming widely deployed, it tends to adapt its reordering | becoming widely deployed, it tends to adapt its reordering | |||
window to a larger value of N, which will make the chance of a | window to a larger value of N, which will make the chance of a | |||
contiguous sequence of N early arrivals vanishingly small.</li> | contiguous sequence of N early arrivals vanishingly small.</li> | |||
<li>Even a run of 2 CE marks within a Classic ECN flow is | <li>Even a run of 2 CE marks within a Classic ECN flow is | |||
unlikely, given FQ-CoDel is the only known widely deployed AQM | unlikely, given FQ-CoDel is the only known widely deployed AQM | |||
that supports Classic ECN marking and it takes great care to | that supports Classic ECN marking, and it takes great care to | |||
separate out flows and to space any markings evenly along each | separate out flows and to space any markings evenly along each | |||
flow.</li> | flow.</li> | |||
</ol> | </ol> | |||
<t>It is extremely unlikely that the above set of 5 | <t>It is extremely unlikely that the above set of 5 | |||
eventualities that are each unusual in themselves would all happen | eventualities that are each unusual in themselves would all happen | |||
simultaneously. But, even if they did, the consequences would hardly | simultaneously. But, even if they did, the consequences would hardly | |||
be dire: the odd spurious fast retransmission. Whenever the traffic | be dire: the odd spurious fast retransmission. Whenever the traffic | |||
source (a Classic congestion control) mistakes the reordering of a | source (a Classic congestion control) mistakes the reordering of a | |||
string of CE marks for a loss, one might think that it will reduce | string of CE marks for a loss, one might think that it will reduce | |||
its congestion window as well as emitting a spurious retransmission. | its congestion window as well as emitting a spurious retransmission. | |||
However, it would have already reduced its congestion window when | However, it would have already reduced its congestion window when | |||
the CE markings arrived early. If it is using ABE <xref target="RFC851 1" format="default"/>, it might reduce cwnd a little more for a loss | the CE markings arrived early. If it is using ABE <xref target="RFC851 1" format="default"/>, it might reduce cwnd a little more for a loss | |||
than for a CE mark. But it will revert that reduction once it | than for a CE mark. But it will revert that reduction once it | |||
detects that the retransmission was spurious.</t> | detects that the retransmission was spurious.</t> | |||
<t>In conclusion, the impact of early reordering on | <t>In conclusion, the impact of early reordering on | |||
spurious retransmissions due to CE being ambiguous will generally be | spurious retransmissions due to CE being ambiguous will generally be | |||
vanishingly small.</t> | vanishingly small.</t> | |||
</dd> | </dd> | |||
<dt>Insufficient anti-replay window in some pre-existing VPNs:</dt> | <dt>Insufficient anti-replay window in some pre-existing VPNs:</dt> | |||
<dd>If | <dd>If | |||
delay is reduced for a subset of the flows within a VPN, the | delay is reduced for a subset of the flows within a VPN, the | |||
anti-replay feature of some VPNs is known to potentially mistake the | anti-replay feature of some VPNs is known to potentially mistake the | |||
difference in delay for a replay attack. <xref target="l4sid_VPN_anti- replay" format="default"/> recommends that the anti-replay | difference in delay for a replay attack. <xref target="l4sid_VPN_anti- replay" format="default"/> recommends that the anti-replay | |||
window at the VPN egress is sufficiently sized, as required by the | window at the VPN egress is sufficiently sized, as required by the | |||
relevant specifications. However, in some VPN implementations the | relevant specifications. | |||
However, in some VPN implementations, the | ||||
maximum anti-replay window is insufficient to cater for a large | maximum anti-replay window is insufficient to cater for a large | |||
delay difference at prevailing packet rates. <xref target="l4sid_VPN_a nti-replay" format="default"/> suggests alternative work-rounds | delay difference at prevailing packet rates. <xref target="l4sid_VPN_a nti-replay" format="default"/> suggests alternative work-rounds | |||
for such cases, but end-users using L4S over a VPN will need to be | for such cases, but end users using L4S over a VPN will need to be | |||
able to recognize the symptoms of this problem, in order to seek out | able to recognize the symptoms of this problem, in order to seek out | |||
these work-rounds.</dd> | these work-rounds.</dd> | |||
<dt>Hard to distinguish Classic ECN AQM:</dt> | <dt>Hard to distinguish Classic ECN AQM:</dt> | |||
<dd> | <dd> | |||
<t>With this scheme, | <t>With this scheme, | |||
when a source receives ECN feedback, it is not explicitly clear | when a source receives ECN feedback, it is not explicitly clear | |||
which type of AQM generated the CE markings. This is not a problem | which type of AQM generated the CE markings. This is not a problem | |||
for Classic ECN sources that send ECT(0) packets, because an L4S AQM | for Classic ECN sources that send ECT(0) packets, because an L4S AQM | |||
will recognize the ECT(0) packets as Classic and apply the | will recognize the ECT(0) packets as Classic and apply the | |||
appropriate Classic ECN marking behaviour.</t> | appropriate Classic ECN-marking behaviour.</t> | |||
<t>However, in the absence of explicit disambiguation | <t>However, in the absence of explicit disambiguation | |||
of the CE markings, an L4S source needs to use heuristic techniques | of the CE markings, an L4S source needs to use heuristic techniques | |||
to work out which type of congestion response to apply (see <xref targ | to work out which type of congestion response to apply (see <xref targ | |||
et="l4sid_sec_fallback_on_classic_CE" format="default"/>). Otherwise, if | et="l4sid_sec_fallback_on_classic_CE" format="default"/>). | |||
long-running Classic flow(s) are sharing a Classic ECN AQM | Otherwise, if | |||
bottleneck with long-running L4S flow(s), which then apply an L4S | long-running Classic flows are sharing a Classic ECN AQM | |||
response to Classic CE signals, the L4S flows would outcompete the | bottleneck with long-running L4S flows, and the L4S flows apply an L4S | |||
Classic flow(s). Experiments have shown that L4S flows can take | response to the Classic CE signals, they would then outcompete the | |||
Classic flows. Experiments have shown that L4S flows can take | ||||
about 20 times more capacity share than equivalent Classic flows. | about 20 times more capacity share than equivalent Classic flows. | |||
Nonetheless, as link capacity reduces (e.g. to 4 Mb/s), the | Nonetheless, as link capacity reduces (e.g., to 4 Mb/s), the | |||
inequality reduces. So Classic flows always make progress and are | inequality reduces. So Classic flows always make progress and are | |||
not starved.</t> | not starved.</t> | |||
<t>When L4S was first proposed (in | <t>When L4S was first proposed (in | |||
2015, 14 years after the Classic ECN spec <xref target="RFC3168" forma | 2015, 14 years after the Classic ECN spec <xref target="RFC3168" forma | |||
t="default"/> was published), it was believed that Classic ECN | t="default"/> was published), it was believed that Classic ECN | |||
AQMs had failed to be deployed, because research measurements had | AQMs had failed to be deployed because research measurements had | |||
found little or no evidence of CE marking. In subsequent years | found little or no evidence of CE marking. | |||
Classic ECN was included in per-flow-queuing (FQ) deployments, | In subsequent years, | |||
however an FQ scheduler stops an L4S flow outcompeting Classic, | Classic ECN was included in FQ deployments; | |||
however, an FQ scheduler stops an L4S flow outcompeting Classic, | ||||
because it enforces equality between flow rates. It is not known | because it enforces equality between flow rates. It is not known | |||
whether there have been any non-FQ deployments of Classic ECN AQMs | whether there have been any non-FQ deployments of Classic ECN AQMs | |||
in the subsequent years, or whether there will be in future.</t> | in the subsequent years or whether there will be any in future.</t> | |||
<t>An algorithm for detecting a Classic ECN AQM as soon | <t>An algorithm for detecting a Classic ECN AQM as soon | |||
as a flow stabilizes after start-up has been proposed <xref target="ec n-fallback" format="default"/> (see <xref target="l4sid_sec_fallback_on_classic_ CE" format="default"/> for a brief summary). | as a flow stabilizes after start-up has been proposed <xref target="ec n-fallback" format="default"/> (see <xref target="l4sid_sec_fallback_on_classic_ CE" format="default"/> for a brief summary). | |||
Testbed evaluations of v2 of the algorithm have shown detection is | Testbed evaluations of v2 of the algorithm have shown detection is | |||
reasonably good for Classic ECN AQMs, in a wide range of | reasonably good for Classic ECN AQMs, in a wide range of | |||
circumstances. However, although it can correctly detect an L4S ECN | circumstances. | |||
AQM in many circumstances, its is often incorrect at low link | However, although it can correctly detect an L4S ECN | |||
AQM in many circumstances, it is often incorrect at low link | ||||
capacities and/or high RTTs. Although this is the safe way round, | capacities and/or high RTTs. Although this is the safe way round, | |||
there is a danger that it will discourage use of the algorithm.</t> | there is a danger that it will discourage use of the algorithm.</t> | |||
</dd> | </dd> | |||
<dt>Non-L4S service for control packets:</dt> | <dt>Non-L4S service for control packets:</dt> | |||
<dd>Solely for the | <dd>Solely for the | |||
case of TCP, the Classic ECN RFCs <xref target="RFC3168" format="defau | case of TCP, the Classic ECN RFCs <xref target="RFC3168" format="defau | |||
lt"/> and | lt"/> and | |||
<xref target="RFC5562" format="default"/> require a sender to clear th | <xref target="RFC5562" format="default"/> require a sender to clear th | |||
e ECN field to | e IP-ECN field to | |||
Not-ECT on retransmissions and on certain control packets | Not-ECT on retransmissions and on certain control packets, | |||
specifically pure ACKs, window probes and SYNs. When L4S packets are | specifically pure ACKs, window probes, and SYNs. When L4S packets are | |||
classified by the ECN field, these TCP control packets would not be | classified by the IP-ECN field, these TCP control packets would not be | |||
classified into an L4S queue, and could therefore be delayed | classified into an L4S queue and could therefore be delayed | |||
relative to the other packets in the flow. This would not cause | relative to the other packets in the flow. This would not cause | |||
reordering (because retransmissions are already out of order, and | reordering (because retransmissions are already out of order, and | |||
these control packets typically carry no data). However, it would | these control packets typically carry no data). However, it would | |||
make critical TCP control packets more vulnerable to loss and delay. | make critical TCP control packets more vulnerable to loss and delay. | |||
To address this problem, ECN++ <xref target="I-D.ietf-tcpm-generalized -ecn" format="default"/> proposes an experiment in | To address this problem, ECN++ <xref target="I-D.ietf-tcpm-generalized -ecn" format="default"/> proposes an experiment in | |||
which all TCP control packets and retransmissions are ECN-capable as | which all TCP control packets and retransmissions are ECN-capable as | |||
long as appropriate ECN feedback is available in each case.</dd> | long as appropriate ECN feedback is available in each case.</dd> | |||
</dl> | </dl> | |||
<t>Pros:</t> | <t>Pros:</t> | |||
<dl newline="false" spacing="normal"> | <dl newline="false" spacing="normal"> | |||
<dt>Should work e2e:</dt> | <dt>Should work end to end:</dt> | |||
<dd>The ECN field generally propagates | <dd>The IP-ECN field generally propagates | |||
end-to-end across the Internet without being wiped or mangled, at | end to end across the Internet without being wiped or mangled, at | |||
least over fixed networks. Unlike the DSCP, the setting of the ECN | least over fixed networks. Unlike the DSCP, the setting of the ECN | |||
field is at least meant to be forwarded unchanged by networks that | field is at least meant to be forwarded unchanged by networks that | |||
do not support ECN.</dd> | do not support ECN.</dd> | |||
<dt>Should work in tunnels:</dt> | <dt>Should work in tunnels:</dt> | |||
<dd>The L4S identifiers work | <dd>The L4S identifiers work | |||
across and within any tunnel that propagates the ECN field in any of | across and within any tunnel that propagates the IP-ECN field in any o f | |||
the variant ways it has been defined since ECN-tunneling was first | the variant ways it has been defined since ECN-tunneling was first | |||
specified in the year 2001 <xref target="RFC3168" format="default"/>. However, | specified in the year 2001 <xref target="RFC3168" format="default"/>. However, | |||
it is likely that some tunnels still do not implement ECN | it is likely that some tunnels still do not implement ECN | |||
propagation at all.</dd> | propagation at all.</dd> | |||
<dt>Should work for many link technologies:</dt> | <dt>Should work for many link technologies:</dt> | |||
<dd>At most, but | <dd>At most, but | |||
not all, path bottlenecks there is IP-awareness, so that L4S AQMs | not all, path bottlenecks there is IP awareness, so that L4S AQMs | |||
can be located where the IP-ECN field can be manipulated. | can be located where the IP-ECN field can be manipulated. | |||
Bottlenecks at lower layer nodes without IP-awareness either have to | Bottlenecks at lower-layer nodes without IP awareness have to either u | |||
use drop to signal congestion or a specific congestion notification | se | |||
facility has to be defined for that link technology, including | drop to signal congestion or have a specific congestion notification | |||
facility defined for that link technology, including | ||||
propagation to and from IP-ECN. The programme to define these is | propagation to and from IP-ECN. The programme to define these is | |||
progressing and in each case so far the scheme already defined for | progressing, and in each case so far, the scheme already defined for | |||
ECN inherently supports L4S as well (see <xref target="l4sid_encaps_no _change" format="default"/>).</dd> | ECN inherently supports L4S as well (see <xref target="l4sid_encaps_no _change" format="default"/>).</dd> | |||
<dt>Could migrate to one codepoint:</dt> | <dt>Could migrate to one codepoint:</dt> | |||
<dd>If all Classic ECN | <dd>If all Classic ECN | |||
senders eventually evolve to use the L4S service, the ECT(0) | senders eventually evolve to use the L4S service, the ECT(0) | |||
codepoint could be reused for some future purpose, but only once use | codepoint could be reused for some future purpose but only once use | |||
of ECT(0) packets had reduced to zero, or near-zero, which might | of ECT(0) packets has reduced to zero, or near zero, which might | |||
never happen.</dd> | never happen.</dd> | |||
<dt>L4 not required:</dt> | <dt>L4 not required:</dt> | |||
<dd>Being based on the ECN field, this | <dd>Being based on the IP-ECN field, this | |||
scheme does not need the network to access transport layer flow | scheme does not need the network to access transport-layer flow | |||
identifiers. Nonetheless, it does not preclude solutions that | IDs. Nonetheless, it does not preclude solutions that | |||
do.</dd> | do.</dd> | |||
</dl> | </dl> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Potential Competing Uses for the ECT(1) Codepoint</name> | <name>Potential Competing Uses for the ECT(1) Codepoint</name> | |||
<t>The ECT(1) codepoint of the ECN field has already been assigned once | <t>The ECT(1) codepoint of the IP-ECN field has already been assigned once | |||
for the ECN nonce <xref target="RFC3540" format="default"/>, which has now | for the ECN nonce spec <xref target="RFC3540" format="default"/>, which ha | |||
been | s now been | |||
categorized as historic <xref target="RFC8311" format="default"/>. ECN is | categorized as Historic <xref target="RFC8311" format="default"/>. ECN is | |||
probably | probably | |||
the only remaining field in the Internet Protocol that is common to IPv4 | the only remaining field in the Internet Protocol that is common to IPv4 | |||
and IPv6 and still has potential to work end-to-end, with tunnels and | and IPv6 and still has potential to work end to end, with tunnels and | |||
with lower layers. Therefore, ECT(1) should not be reassigned to a | with lower layers. Therefore, ECT(1) should not be reassigned to a | |||
different experimental use (L4S) without carefully assessing competing | different experimental use (L4S) without carefully assessing competing | |||
potential uses. These fall into the following categories:</t> | potential uses. | |||
These fall into the categories described below.</t> | ||||
<section anchor="l4sid_competing_integrity" numbered="true" toc="default"> | <section anchor="l4sid_competing_integrity" numbered="true" toc="default"> | |||
<name>Integrity of Congestion Feedback</name> | <name>Integrity of Congestion Feedback</name> | |||
<t>Receiving hosts can fool a sender into downloading faster by | <t>Receiving hosts can fool a sender into downloading faster by | |||
suppressing feedback of ECN marks (or of losses if retransmissions are | suppressing feedback of ECN marks (or of losses if retransmissions are | |||
not necessary or available otherwise).</t> | not necessary or available otherwise).</t> | |||
<t>The historic ECN nonce protocol <xref target="RFC3540" format="defaul | <t>The Historic ECN nonce spec <xref target="RFC3540" format="default"/> | |||
t"/> | proposed that a TCP sender could set either ECT(0) or ECT(1) in | |||
proposed that a TCP sender could set either of ECT(0) or ECT(1) in | ||||
each packet of a flow and remember the sequence it had set. If any | each packet of a flow and remember the sequence it had set. If any | |||
packet was lost or congestion marked, the receiver would miss that bit | packet was lost or congestion marked, the receiver would miss that bit | |||
of the sequence. An ECN Nonce receiver had to feed back the least | of the sequence. An ECN nonce receiver had to feed back the least-signif | |||
significant bit of the sum, so it could not suppress feedback of a | icant | |||
bit of the sum, so it could not suppress feedback of a | ||||
loss or mark without a 50-50 chance of guessing the sum | loss or mark without a 50-50 chance of guessing the sum | |||
incorrectly.</t> | incorrectly.</t> | |||
<t>It is highly unlikely that ECT(1) will be needed as a nonce for | <t>It is highly unlikely that ECT(1) will be needed as a nonce for | |||
integrity protection of congestion notifications in future. The ECN | integrity protection of congestion notifications in future. The ECN | |||
Nonce RFC <xref target="RFC3540" format="default"/> has been reclassifie | nonce spec <xref target="RFC3540" format="default"/> has been reclassifi | |||
d as | ed as | |||
historic, partly because other ways (that do not consume a codepoint | Historic, partly because other ways (that do not consume a codepoint | |||
in the IP header) have been developed to protect feedback integrity of | in the IP header) have been developed to protect feedback integrity of | |||
TCP and other transports <xref target="RFC8311" format="default"/>. For | TCP and other transports <xref target="RFC8311" format="default"/>. For | |||
instance:</t> | instance:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>the sender can test the integrity of a small random sample of | <li>The sender can test the integrity of a small random sample of | |||
the receiver's feedback by occasionally setting the IP-ECN field | the receiver's feedback by occasionally setting the IP-ECN field | |||
to a value normally only set by the network. Then it can test | to a value normally only set by the network. | |||
Then, it can test | ||||
whether the receiver's feedback faithfully reports what it expects | whether the receiver's feedback faithfully reports what it expects | |||
(see para 2 of Section 20.2 of the ECN spec <xref target="RFC3168" f | (see Paragraph 2 of <xref target="RFC3168" sectionFormat="of" sectio | |||
ormat="default"/>. This works for loss and it will work for the | n="20.2">the ECN spec</xref>. This works for loss, and it will work for the | |||
accurate ECN feedback <xref target="RFC7560" format="default"/> inte | accurate ECN feedback <xref target="RFC7560" format="default"/> inte | |||
nded for | nded for | |||
L4S. Like the (historic) ECN nonce, this technique does not | L4S. Like the (Historic) ECN nonce spec, this technique does not | |||
protect against a misbehaving sender. But it allows a well-behaved | protect against a misbehaving sender. But it allows a well-behaved | |||
sender to check that each receiver is correctly feeding back | sender to check that each receiver is correctly feeding back | |||
congestion notifications.</li> | congestion notifications.</li> | |||
<li>A network can check that its ECN markings (or packet losses) | <li>A network can check that its ECN markings (or packet losses) | |||
have been passed correctly round the full feedback loop by | have been passed correctly around the full feedback loop by | |||
auditing congestion exposure (ConEx) <xref target="RFC7713" format=" | auditing Congestion Exposure (ConEx) <xref target="RFC7713" format=" | |||
default"/>. This assures that the integrity of congestion | default"/>. This assures that the integrity of congestion | |||
notifications and feedback messages must have both been preserved. | notifications and feedback messages must have both been preserved. | |||
ConEx information is also available anywhere along the network | ConEx information is also available anywhere along the network | |||
path, so it can be used to enforce a congestion response. Whether | path, so it can be used to enforce a congestion response. Whether | |||
the receiver or a downstream network is suppressing congestion | the receiver or a downstream network is suppressing congestion | |||
feedback or the sender is unresponsive to the feedback, or both, | feedback or the sender is unresponsive to the feedback, or both, | |||
ConEx is intended to neutralise any advantage that any of these | ConEx is intended to neutralize any advantage that any of these | |||
three parties would otherwise gain.</li> | three parties would otherwise gain.</li> | |||
<li>Congestion feedback fields in transport layer headers are | <li>Congestion feedback fields in transport-layer headers are | |||
immutable end-to-end, and therefore amenable to end-to-end | immutable end to end and therefore amenable to end-to-end | |||
integrity protection. This preserves the integrity of a receiver's | integrity protection. This preserves the integrity of a receiver's | |||
feedback messages to the sender, but it does not protect against | feedback messages to the sender, but it does not protect against | |||
misbehaving receivers or misbehaving senders. The TCP | misbehaving receivers or misbehaving senders. The TCP | |||
authentication option (TCP-AO <xref target="RFC5925" format="default | Authentication Option (TCP-AO) <xref target="RFC5925" format="defaul | |||
"/>), | t"/>, | |||
QUIC's end-to-end protection <xref target="RFC9001" format="default" | QUIC's end-to-end protection <xref target="RFC9001" format="default" | |||
/> or | />, or | |||
end-to-end IPsec integrity protection <xref target="RFC4303" format= "default"/> can | end-to-end IPsec integrity protection <xref target="RFC4303" format= "default"/> can | |||
be used to detect any tampering with congestion feedback (whether | be used to detect any tampering with congestion feedback (whether | |||
malicious or accidental). respectively in TCP, QUIC or any | malicious or accidental), respectively, in TCP, QUIC, or any | |||
transport. TCP-AO covers the main TCP header and TCP options by | transport. TCP-AO covers the main TCP header and TCP options by | |||
default, but it is often too brittle to use on many end-to-end | default, but it is often too brittle to use on many end-to-end | |||
paths, where middleboxes can make verification fail in their | paths, where middleboxes can make verification fail in their | |||
attempts to improve performance or security, e.g. by | attempts to improve performance or security, e.g., by | |||
resegmentation or shifting the sequence space.</li> | resegmentation or shifting the sequence space.</li> | |||
</ul> | </ul> | |||
<t>At the time of writing, It is not common to protect the | <t>At the time of writing, it is becoming common to protect the | |||
integrity of congestion feedback, whether loss or Classic ECN. If this | integrity of transport feedback using QUIC. However, it is still not | |||
position changes during the L4S experiment, one or more of the above | common to protect the integrity of the wider congestion feedback loop, | |||
techniques might need to be developed and deployed.</t> | whether based on loss or Classic ECN. If this position changes during | |||
the L4S experiment, one or more of the above techniques might need to | ||||
be developed and deployed.</t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
<name>Notification of Less Severe Congestion than CE</name> | <name>Notification of Less Severe Congestion than CE</name> | |||
<t>Various researchers have proposed to use ECT(1) as a less severe | <t>Various researchers have proposed to use ECT(1) as a less severe | |||
congestion notification than CE, particularly to enable flows to fill | congestion notification than CE, particularly to enable flows to fill | |||
available capacity more quickly after an idle period, when another | available capacity more quickly after an idle period, when another | |||
flow departs or when a flow starts, e.g. VCP <xref target="VCP" format=" default"/>, Queue View (QV) <xref target="QV" format="default"/>.</t> | flow departs or when a flow starts, e.g., the Variable-structure congest ion Control Protocol (VCP) <xref target="VCP" format="default"/> and Queue View (QV) <xref target="QV" format="default"/>.</t> | |||
<t>Before assigning ECT(1) as an identifier for L4S, we must carefully | <t>Before assigning ECT(1) as an identifier for L4S, we must carefully | |||
consider whether it might be better to hold ECT(1) in reserve for | consider whether it might be better to hold ECT(1) in reserve for | |||
future standardisation of rapid flow acceleration, which is an | future standardization of rapid flow acceleration, which is an | |||
important and enduring problem <xref target="RFC6077" format="default"/> | important and enduring problem <xref target="RFC6077" format="default"/> | |||
.</t> | .</t> | |||
<t>Pre-Congestion Notification (PCN) is another scheme that assigns | <t>Pre-Congestion Notification (PCN) is another scheme that assigns | |||
alternative semantics to the ECN field. It uses ECT(1) to signify a | alternative semantics to the IP-ECN field. It uses ECT(1) to signify a | |||
less severe level of pre-congestion notification than CE <xref target="R | less severe level of pre-congestion notification than CE <xref target="R | |||
FC6660" format="default"/>. However, the ECN field only takes on the PCN | FC6660" format="default"/>. However, the IP-ECN field only takes on the PCN | |||
semantics if packets carry a Diffserv codepoint defined to indicate | semantics if packets carry a Diffserv codepoint defined to indicate | |||
PCN marking within a controlled environment. PCN is required to be | PCN marking within a controlled environment. PCN is required to be | |||
applied solely to the outer header of a tunnel across the controlled | applied solely to the outer header of a tunnel across the controlled | |||
region in order not to interfere with any end-to-end use of the ECN | region in order not to interfere with any end-to-end use of the ECN | |||
field. Therefore, a PCN region on the path would not interfere with | field. Therefore, a PCN region on the path would not interfere with | |||
the L4S service identifier defined in <xref target="l4sid_identification " format="default"/>.</t> | the L4S service identifier defined in <xref target="l4sid_identification " format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<!-- <section title="Change Log (to be Deleted before Publication)"> | ||||
<t>A detailed version history can be accessed at | ||||
<http://datatracker.ietf.org/doc/draft-briscoe-aqm-ecn-roadmap/history/ | ||||
></t> | ||||
<t><list style="hanging"> | <section numbered="false" toc="default"> <name>Acknowledgements</name> | |||
<t hangText="From briscoe-...-00 to briscoe-...-01:">Technical | <t>Thanks to <contact fullname="Richard Scheffenegger"/>, <contact | |||
changes:<list style="symbols"> | fullname="John Leslie"/>, <contact fullname="David Täht"/>, <contact | |||
<t/> | fullname="Jonathan Morton"/>, <contact fullname="Gorry Fairhurst"/>, | |||
</list>Editorial changes:<list style="symbols"> | <contact fullname="Michael Welzl"/>, <contact fullname="Mikael | |||
<t/> | Abrahamsson"/>, and <contact fullname="Andrew McGregor"/> for the | |||
</list></t> | discussions that led to this specification. <contact fullname="Ing-jyh | |||
</list></t> | (Inton) Tsang"/> was a contributor to the early draft versions of this | |||
</section> | document. Thanks to <contact fullname="Mikael Abrahamsson"/>, <contact | |||
fullname="Lloyd Wood"/>, <contact fullname="Nicolas Kuhn"/>, <contact | ||||
fullname="Greg White"/>, <contact fullname="Tom Henderson"/>, <contact | ||||
fullname="David Black"/>, <contact fullname="Gorry Fairhurst"/>, <contact | ||||
fullname="Brian Carpenter"/>, <contact fullname="Jake Holland"/>, <contact | ||||
fullname="Rod Grimes"/>, <contact fullname="Richard Scheffenegger"/>, | ||||
<contact fullname="Sebastian Moeller"/>, <contact fullname="Neal | ||||
Cardwell"/>, <contact fullname="Praveen Balasubramanian"/>, <contact | ||||
fullname="Reza Marandian Hagh"/>, <contact fullname="Pete Heist"/>, | ||||
<contact fullname="Stuart Cheshire"/>, <contact fullname="Vidhi Goel"/>, | ||||
<contact fullname="Mirja Kühlewind"/>, <contact fullname="Ermin Sakic"/>, | ||||
and <contact fullname="Martin Duke"/> for providing help and reviewing | ||||
this document. And thanks to <contact fullname="Ingemar Johansson"/> for | ||||
reviewing and providing substantial text. Thanks also to the area | ||||
reviewers: <contact fullname="Valery Smyslov"/>, <contact fullname="Maria | ||||
Ines Robles"/>, <contact fullname="Bernard Aboba"/>, <contact | ||||
fullname="Lars Eggert"/>, <contact fullname="Roman Danyliw"/>, and <contact | ||||
fullname="Éric Vyncke"/>. Thanks to <contact fullname="Sebastian | ||||
Moeller"/> for identifying the interaction with VPN anti-replay and to | ||||
<contact fullname="Jonathan Morton"/> for identifying the attack based on | ||||
this. Particular thanks to tsvwg chairs <contact fullname="Gorry | ||||
Fairhurst"/>, <contact fullname="David Black"/>, and <contact fullname="Wes | ||||
Eddy"/> for patiently helping this and the other L4S documents through the | ||||
IETF process. <xref target="l4sps_tcp-prague-reqs" format="default"/>, which | ||||
lists the Prague L4S Requirements, is based on text authored by <contact | ||||
fullname="Marcelo Bagnulo Braun"/> that was originally an appendix to | ||||
<xref target="RFC9330" format="default"/>. That text was in turn based on | ||||
the collective output of the attendees listed in the minutes of a 'bar | ||||
BoF' on DCTCP Evolution during IETF 94 <xref target="TCPPrague" | ||||
format="default"/>.</t> | ||||
<t>The authors' contributions were partly funded by | ||||
the European Community under its Seventh Framework Programme through the | ||||
Reducing Internet Transport Latency (RITE) project (ICT-317700). The | ||||
contribution of <contact fullname="Koen De Schepper"/> was also | ||||
partly funded by the 5Growth and DAEMON EU H2020 projects. <contact | ||||
fullname="Bob Briscoe"/> was partly funded by the Research Council of | ||||
Norway through the TimeIn project, CableLabs, and the | ||||
Comcast Innovation Fund. The views expressed here are solely those of the | ||||
authors.</t> | ||||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t>Thanks to Richard Scheffenegger, John Leslie, David Taeht, | ||||
Jonathan Morton, Gorry Fairhurst, Michael Welzl, Mikael Abrahamsson and | ||||
Andrew McGregor for the discussions that led to this specification. | ||||
Ing-jyh (Inton) Tsang was a contributor to the early drafts of this | ||||
document. And thanks to Mikael Abrahamsson, Lloyd Wood, Nicolas Kuhn, | ||||
Greg White, Tom Henderson, David Black, Gorry Fairhurst, Brian | ||||
Carpenter, Jake Holland, Rod Grimes, Richard Scheffenegger, Sebastian | ||||
Moeller, Neal Cardwell, Praveen Balasubramanian, Reza Marandian Hagh, | ||||
Pete Heist, Stuart Cheshire, Vidhi Goel, Mirja Kuehlewind, Ermin | ||||
Sakic and Martin Duke for providing help and reviewing this draft, and | ||||
thanks to Ingemar Johansson for reviewing and providing substantial | ||||
text. Thanks also to the area reviewers: Valery Smyslov, Maria Ines | ||||
Robles, Bernard Aboba, Lars Eggert, Roman Danyliw and Eric Vyncke. | ||||
Thanks to Sebastian Moeller for identifying the interaction with VPN | ||||
anti-replay and to Jonathan Morton for identifying the attack based on | ||||
this. Particular thanks to tsvwg chairs Gorry Fairhurst, David Black and | ||||
Wes Eddy for patiently helping this and the other L4S drafts through the | ||||
IETF process. <xref target="l4sps_tcp-prague-reqs" format="default"/> list | ||||
ing the Prague | ||||
L4S Requirements is based on text authored by Marcelo Bagnulo Braun that | ||||
was originally an appendix to <xref target="I-D.ietf-tsvwg-l4s-arch" forma | ||||
t="default"/>. | ||||
That text was in turn based on the collective output of the attendees | ||||
listed in the minutes of a 'bar BoF' on DCTCP Evolution during | ||||
IETF-94 <xref target="TCPPrague" format="default"/>.</t> | ||||
<t>The authors' contributions were part-funded by the European Community | ||||
under its Seventh Framework Programme through the Reducing Internet | ||||
Transport Latency (RITE) project (ICT-317700). The contribution of Koen | ||||
De Schepper was also part-funded by the 5Growth and DAEMON EU H2020 | ||||
projects. Bob Briscoe was also funded partly by the Research Council of | ||||
Norway through the TimeIn project, partly by CableLabs and partly by the | ||||
Comcast Innovation Fund. The views expressed here are solely those of | ||||
the authors.</t> | ||||
</section> | </section> | |||
</back> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 537 change blocks. | ||||
3305 lines changed or deleted | 1766 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |