rfc9681.original | rfc9681.txt | |||
---|---|---|---|---|
Network Working Group B. Decraene | Internet Engineering Task Force (IETF) B. Decraene | |||
Internet-Draft Orange | Request for Comments: 9681 Orange | |||
Intended status: Experimental L. Ginsberg | Category: Experimental L. Ginsberg | |||
Expires: 14 November 2024 Cisco Systems | ISSN: 2070-1721 Cisco Systems | |||
T. Li | T. Li | |||
Juniper Networks, Inc. | Juniper Networks, Inc. | |||
G. Solignac | G. Solignac | |||
M. Karasek | M. Karasek | |||
Cisco Systems | Cisco Systems | |||
G. Van de Velde | G. Van de Velde | |||
Nokia | Nokia | |||
T. Przygienda | T. Przygienda | |||
Juniper | Juniper | |||
13 May 2024 | November 2024 | |||
IS-IS Fast Flooding | IS-IS Fast Flooding | |||
draft-ietf-lsr-isis-fast-flooding-11 | ||||
Abstract | Abstract | |||
Current Link State Protocol Data Unit (PDU) flooding rates are much | Current Link State PDU flooding rates are much slower than what | |||
slower than what modern networks can support. The use of IS-IS at | modern networks can support. The use of IS-IS at larger scale | |||
larger scale requires faster flooding rates to achieve desired | requires faster flooding rates to achieve desired convergence goals. | |||
convergence goals. This document discusses the need for faster | This document discusses the need for faster flooding, the issues | |||
flooding, the issues around faster flooding, and some example | around faster flooding, and some example approaches to achieve faster | |||
approaches to achieve faster flooding. It also defines protocol | flooding. It also defines protocol extensions relevant to faster | |||
extensions relevant to faster flooding. | flooding. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Engineering | |||
time. It is inappropriate to use Internet-Drafts as reference | Task Force (IETF). It represents the consensus of the IETF | |||
material or to cite them other than as "work in progress." | community. It has received public review and has been approved for | |||
publication by the Internet Engineering Steering Group (IESG). Not | ||||
all documents approved by the IESG are candidates for any level of | ||||
Internet Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 14 November 2024. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9681. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 4 | 2. Requirements Language | |||
3. Historical Behavior . . . . . . . . . . . . . . . . . . . . . 4 | 3. Historical Behavior | |||
4. Flooding Parameters TLV . . . . . . . . . . . . . . . . . . . 5 | 4. Flooding Parameters TLV | |||
4.1. LSP Burst Size sub-TLV . . . . . . . . . . . . . . . . . 6 | 4.1. LSP Burst Size Sub-TLV | |||
4.2. LSP Transmission Interval sub-TLV . . . . . . . . . . . . 6 | 4.2. LSP Transmission Interval Sub-TLV | |||
4.3. LSPs Per PSNP sub-TLV . . . . . . . . . . . . . . . . . . 6 | 4.3. LSPs per PSNP Sub-TLV | |||
4.4. Flags sub-TLV . . . . . . . . . . . . . . . . . . . . . . 7 | 4.4. Flags Sub-TLV | |||
4.5. Partial SNP Interval sub-TLV . . . . . . . . . . . . . . 7 | 4.5. PSNP Interval Sub-TLV | |||
4.6. Receive Window sub-TLV . . . . . . . . . . . . . . . . . 8 | 4.6. Receive Window Sub-TLV | |||
4.7. Operation on a LAN interface . . . . . . . . . . . . . . 8 | 4.7. Operation on a LAN Interface | |||
5. Performance improvement on the receiver . . . . . . . . . . . 9 | 5. Performance Improvement on the Receiver | |||
5.1. Rate of LSP Acknowledgments . . . . . . . . . . . . . . . 9 | 5.1. Rate of LSP Acknowledgments | |||
5.2. Packet Prioritization on Receive . . . . . . . . . . . . 10 | 5.2. Packet Prioritization on Receive | |||
6. Congestion and Flow Control . . . . . . . . . . . . . . . . . 11 | 6. Congestion and Flow Control | |||
6.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.1. Overview | |||
6.2. Congestion and Flow Control algorithm . . . . . . . . . . 11 | 6.2. Congestion and Flow Control Algorithm | |||
6.3. Transmitter Based Congestion Control Approach . . . . . . 19 | 6.3. Transmitter-Based Congestion Control Approach | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 7. IANA Considerations | |||
7.1. Flooding Parameters TLV . . . . . . . . . . . . . . . . . 21 | 7.1. Flooding Parameters TLV | |||
7.2. Registry: IS-IS Sub-TLV for Flooding Parameters TLV . . . 21 | 7.2. Registry: IS-IS Sub-TLV for Flooding Parameters TLV | |||
7.3. Registry: IS-IS Bit Values for Flooding Parameters Flags | 7.3. Registry: IS-IS Bit Values for Flooding Parameters Flags | |||
Sub-TLV . . . . . . . . . . . . . . . . . . . . . . . . . 22 | Sub-TLV | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | 8. Security Considerations | |||
9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 24 | 9. References | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 24 | 9.1. Normative References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 9.2. Informative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 24 | Acknowledgments | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 25 | Contributors | |||
Appendix A. Changes / Author Notes . . . . . . . . . . . . . . . 25 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
1. Introduction | 1. Introduction | |||
Link state IGPs such as Intermediate-System-to-Intermediate-System | Link state IGPs such as Intermediate System to Intermediate System | |||
(IS-IS) depend upon having consistent Link State Databases (LSDB) on | (IS-IS) depend upon having consistent Link State Databases (LSDBs) on | |||
all Intermediate Systems (ISs) in the network in order to provide | all Intermediate Systems (ISs) in the network in order to provide | |||
correct forwarding of data packets. When topology changes occur, | correct forwarding of data packets. When topology changes occur, | |||
new/updated Link State PDUs (LSPs) are propagated network-wide. The | new/updated Link State PDUs (LSPs) are propagated network-wide. The | |||
speed of propagation is a key contributor to convergence time. | speed of propagation is a key contributor to convergence time. | |||
IS-IS base specification [ISO10589] does not use flow or congestion | IS-IS base specification [ISO10589] does not use flow or congestion | |||
control but static flooding rates. Historically, flooding rates have | control but static flooding rates. Historically, flooding rates have | |||
been conservative - on the order of 10s of LSPs/second. This is the | been conservative -- on the order of tens of LSPs per second. This | |||
result of guidance in the base specification and early deployments | is the result of guidance in the base specification and early | |||
when the CPU and interface speeds were much slower and the area scale | deployments when the CPU and interface speeds were much slower and | |||
much smaller than they are today. | the area scale was much smaller than they are today. | |||
As IS-IS is deployed in greater scale both in the number of nodes in | As IS-IS is deployed in greater scale both in the number of nodes in | |||
an area and in the number of neighbors per node, the impact of the | an area and in the number of neighbors per node, the impact of the | |||
historic flooding rates becomes more significant. Consider the | historic flooding rates becomes more significant. Consider the | |||
bringup or failure of a node with 1000 neighbors. This will result | bring-up or failure of a node with 1000 neighbors. This will result | |||
in a minimum of 1000 LSP updates. At typical LSP flooding rates used | in a minimum of 1000 LSP updates. At typical LSP flooding rates used | |||
today (33 LSPs/second), it would take more than 30 seconds simply to | today (33 LSPs per second), it would take more than 30 seconds simply | |||
send the updated LSPs to a given neighbor. Depending on the diameter | to send the updated LSPs to a given neighbor. Depending on the | |||
of the network, achieving a consistent LSDB on all nodes in the | diameter of the network, achieving a consistent LSDB on all nodes in | |||
network could easily take a minute or more. | the network could easily take a minute or more. | |||
Increasing the LSP flooding rate therefore becomes an essential | Therefore, increasing the LSP flooding rate becomes an essential | |||
element of supporting greater network scale. | element of supporting greater network scale. | |||
Improving the LSP flooding rate is complementary to protocol | Improving the LSP flooding rate is complementary to protocol | |||
extensions that reduce LSP flooding traffic by reducing the flooding | extensions that reduce LSP flooding traffic by reducing the flooding | |||
topology such as Mesh Groups [RFC2973] or Dynamic Flooding | topology such as Mesh Groups [RFC2973] or Dynamic Flooding [RFC9667]. | |||
[I-D.ietf-lsr-dynamic-flooding] . Reduction of the flooding topology | Reduction of the flooding topology does not alter the number of LSPs | |||
does not alter the number of LSPs required to be exchanged between | required to be exchanged between two nodes, so increasing the overall | |||
two nodes, so increasing the overall flooding speed is still | flooding speed is still beneficial when such extensions are in use. | |||
beneficial when such extensions are in use. It is also possible that | It is also possible that the flooding topology can be reduced in ways | |||
the flooding topology can be reduced in ways that prefer the use of | that prefer the use of neighbors that support improved flooding | |||
neighbors that support improved flooding performance. | performance. | |||
With the goal of supporting faster flooding, this document introduces | With the goal of supporting faster flooding, this document introduces | |||
the signaling of additional flooding related parameters Section 4, | the signaling of additional flooding related parameters (Section 4), | |||
specifies some performance improvements on the receiver Section 5 and | specifies some performance improvements on the receiver (Section 5) | |||
introduces the use of flow and/or congestion control Section 6. | and introduces the use of flow and/or congestion control (Section 6). | |||
2. Requirements Language | 2. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Historical Behavior | 3. Historical Behavior | |||
The base specification for IS-IS [ISO10589] was first published in | The base specification for IS-IS [ISO10589] was first published in | |||
1992 and updated in 2002. The update made no changes in regards to | 1992 and updated in 2002. The update made no changes in regards to | |||
suggested timer values. Convergence targets at the time were on the | suggested timer values. Convergence targets at the time were on the | |||
order of seconds and the specified timer values reflect that. Here | order of seconds, and the specified timer values reflect that. Here | |||
are some examples: | are some examples: | |||
minimumLSPGenerationInterval - This is the minimum time interval | | minimumLSPGenerationInterval - This is the minimum time interval | |||
between generation of Link State PDUs. A source Intermediate | | between generation of Link State PDUs. A source Intermediate | |||
system shall wait at least this long before re-generating one | | system shall wait at least this long before regenerating one of | |||
of its own Link State PDUs. | | its own Link State PDUs. [...] | |||
| | ||||
The recommended value is 30 seconds. | | A reasonable value is 30 s. | |||
| | ||||
minimumLSPTransmissionInterval - This is the amount of time an | | minimumLSPTransmissionInterval - This is the amount of time an | |||
Intermediate system shall wait before further propagating | | Intermediate system shall wait before further propagating | |||
another Link State PDU from the same source system. | | another Link State PDU from the same source system. [...] | |||
| | ||||
The recommended value is 5 seconds. | | A reasonable value is 5 s. | |||
| | ||||
partialSNPInterval - This is the amount of time between periodic | | partialSNPInterval - This is the amount of time between periodic | |||
action for transmission of Partial Sequence Number PDUs. | | action for transmission of Partial Sequence Number PDUs. It | |||
It shall be less than minimumLSPTransmissionInterval. | | shall be less than minimumLSPTransmissionInterval. [...] | |||
| | ||||
The recommended value is 2 seconds. | | A reasonable value is 2 s. | |||
Most relevant to a discussion of the LSP flooding rate is the | Most relevant to a discussion of the LSP flooding rate is the | |||
recommended interval between the transmission of two different LSPs | recommended interval between the transmission of two different LSPs | |||
on a given interface. | on a given interface. | |||
For broadcast interfaces, [ISO10589] defined: | For broadcast interfaces, [ISO10589] states: | |||
minimumBroadcastLSPTransmissionInterval - the minimum interval | | minimumBroadcastLSPTransmissionInterval indicates the minimum | |||
between PDU arrivals which can be processed by the slowest | | interval between PDU arrivals which can be processed by the | |||
Intermediate System on the LAN. | | slowest Intermediate System on the LAN. | |||
The default value was defined as 33 milliseconds. It is permitted to | The default value was defined as 33 milliseconds. It is permitted to | |||
send multiple LSPs "back-to-back" as a burst, but this was limited to | send multiple LSPs back to back as a burst, but this was limited to | |||
10 LSPs in a one second period. | 10 LSPs in a one-second period. | |||
Although this value was specific to LAN interfaces, this has commonly | Although this value was specific to LAN interfaces, this has commonly | |||
been applied by implementations to all interfaces though that was not | been applied by implementations to all interfaces though that was not | |||
the original intent of the base specification. In fact | the original intent of the base specification. In fact, | |||
Section 12.1.2.4.3 states: | Section 12.1.2.4.3 of [ISO10589] states: | |||
On point-to-point links the peak rate of arrival is limited only | | On point-to-point links the peak rate of arrival is limited only | |||
by the speed of the data link and the other traffic flowing on | | by the speed of the data link and the other traffic flowing on | |||
that link. | | that link. | |||
Although modern implementations have not strictly adhered to the 33 | Although modern implementations have not strictly adhered to the | |||
millisecond interval, it is commonplace for implementations to limit | 33-millisecond interval, it is commonplace for implementations to | |||
the flooding rate to the same order of magnitude: tens of | limit the flooding rate to the same order of magnitude: tens of | |||
milliseconds, and not the single digits or fractions of milliseconds | milliseconds, and not the single digits or fractions of milliseconds | |||
that are needed today. | that are needed today. | |||
In the past 20 years, significant work on achieving faster | In the past 20 years, significant work on achieving faster | |||
convergence, more specifically sub-second convergence, has resulted | convergence, more specifically sub-second convergence, has resulted | |||
in implementations modifying a number of the above timers in order to | in implementations modifying a number of the above timers in order to | |||
support faster signaling of topology changes. For example, | support faster signaling of topology changes. For example, | |||
minimumLSPGenerationInterval has been modified to support millisecond | minimumLSPGenerationInterval has been modified to support millisecond | |||
intervals, often with a backoff algorithm applied to prevent LSP | intervals, often with a backoff algorithm applied to prevent LSP | |||
generation storms in the event of rapid successive oscillations. | generation storms in the event of rapid successive oscillations. | |||
However, the flooding rate has not been fundamentally altered. | However, the flooding rate has not been fundamentally altered. | |||
4. Flooding Parameters TLV | 4. Flooding Parameters TLV | |||
This document defines a new Type-Length-Value tuple (TLV) called the | This document defines a new Type-Length-Value (TLV) tuple called the | |||
"Flooding Parameters TLV" that may be included in IS to IS Hellos | "Flooding Parameters TLV" that may be included in IS-IS Hellos (IIHs) | |||
(IIH) or Partial Sequence Number PDUs (PSNPs). It allows IS-IS | or Partial Sequence Number PDUs (PSNPs). It allows IS-IS | |||
implementations to advertise flooding-related parameters and | implementations to advertise flooding-related parameters and | |||
capabilities which may be used by the peer to support faster | capabilities that may be used by the peer to support faster flooding. | |||
flooding. | ||||
Type: 21 | ||||
Length: variable, the size in octets of the Value field | ||||
Value: One or more sub-TLVs | Type: 21 | |||
Length: variable; the size in octets of the Value field | ||||
Value: one or more sub-TLVs | ||||
Several sub-TLVs are defined in this document. The support of any | Several sub-TLVs are defined in this document. The support of any | |||
sub-TLV is OPTIONAL. | sub-TLV is OPTIONAL. | |||
For a given IS-IS adjacency, the Flooding Parameters TLV does not | For a given IS-IS adjacency, the Flooding Parameters TLV does not | |||
need to be advertised in each IIH or PSNP. An IS uses the latest | need to be advertised in each IIH or PSNP. An IS uses the latest | |||
received value for each parameter until a new value is advertised by | received value for each parameter until a new value is advertised by | |||
the peer. However, as IIHs and PSNPs are not reliably exchanged, and | the peer. However, as IIHs and PSNPs are not reliably exchanged and | |||
may never be received, parameters SHOULD be sent even if there is no | may never be received, parameters SHOULD be sent even if there is no | |||
change in value since the last transmission. For a parameter that | change in value since the last transmission. For a parameter that | |||
has never been advertised, an IS uses its local default value. That | has never been advertised, an IS uses its local default value. That | |||
value SHOULD be configurable on a per-node basis and MAY be | value SHOULD be configurable on a per-node basis and MAY be | |||
configurable on a per-interface basis. | configurable on a per-interface basis. | |||
4.1. LSP Burst Size sub-TLV | 4.1. LSP Burst Size Sub-TLV | |||
The LSP Burst Size sub-TLV advertises the maximum number of LSPs that | The LSP Burst Size sub-TLV advertises the maximum number of LSPs that | |||
the node can receive without an intervening delay between LSP | the node can receive without an intervening delay between LSP | |||
transmissions. | transmissions. | |||
Type: 1 | Type: 1 | |||
Length: 4 octets | ||||
Length: 4 octets | Value: number of LSPs that can be received back to back | |||
Value: number of LSPs that can be received back-to-back. | ||||
4.2. LSP Transmission Interval sub-TLV | 4.2. LSP Transmission Interval Sub-TLV | |||
The LSP Transmission Interval sub-TLV advertises the minimum | The LSP Transmission Interval sub-TLV advertises the minimum | |||
interval, in micro-seconds, between LSPs arrivals which can be | interval, in microseconds, between LSPs arrivals that can be | |||
sustained on this receiving interface. | sustained on this receiving interface. | |||
Type: 2 | Type: 2 | |||
Length: 4 octets | ||||
Length: 4 octets | Value: minimum interval, in microseconds, between two consecutive | |||
LSPs received after LSP Burst Size LSPs have been received | ||||
Value: minimum interval, in micro-seconds, between two consecutive | ||||
LSPs received after LSP Burst Size LSPs have been received | ||||
The LSP Transmission Interval is an advertisement of the receiver's | The LSP Transmission Interval is an advertisement of the receiver's | |||
sustainable LSP reception rate. This rate may be safely used by a | sustainable LSP reception rate. This rate may be safely used by a | |||
sender which do not support the flow control or congestion algorithm. | sender that does not support the flow control or congestion | |||
It may also be used as the minimal safe rate by flow control or | algorithm. It may also be used as the minimal safe rate by flow | |||
congestion algorithms in unexpected cases, e.g., when the receiver is | control or congestion algorithms in unexpected cases, e.g., when the | |||
not acknowledging LSPs anymore. | receiver is not acknowledging LSPs anymore. | |||
4.3. LSPs Per PSNP sub-TLV | 4.3. LSPs per PSNP Sub-TLV | |||
The LSP per PSNP (LPP) sub-TLV advertises the number of received LSPs | The LSP per PSNP (LPP) sub-TLV advertises the number of received LSPs | |||
that triggers the immediate sending of a PSNP to acknowledge them. | that triggers the immediate sending of a PSNP to acknowledge them. | |||
Type: 3 | Type: 3 | |||
Length: 2 octets | ||||
Length: 2 octets | Value: number of LSPs acknowledged per PSNP | |||
Value: number of LSPs acknowledged per PSNP | ||||
A node advertising this sub-TLV with a value for LPP MUST send a PSNP | A node advertising this sub-TLV with a value for LPP MUST send a PSNP | |||
once LPP LSPs have been received and need to be acknowledged. | once LPP LSPs have been received and need to be acknowledged. | |||
4.4. Flags sub-TLV | 4.4. Flags Sub-TLV | |||
The sub-TLV Flags advertises a set of flags. | The sub-TLV Flags advertises a set of flags. | |||
Type: 4 | Type: 4 | |||
Length: Indicates the length in octets (1-8) of the Value field. | ||||
Length: Indicates the length in octets (1-8) of the Value field. The | The length SHOULD be the minimum required to send all bits | |||
length SHOULD be the minimum required to send all bits that are set. | that are set. | |||
Value: list of flags | ||||
Value: List of flags. | ||||
0 1 2 3 4 5 6 7 ... | 0 1 2 3 4 5 6 7 ... | |||
+-+-+-+-+-+-+-+-+... | +-+-+-+-+-+-+-+-+... | |||
|O| ... | |O| ... | |||
+-+-+-+-+-+-+-+-+... | +-+-+-+-+-+-+-+-+... | |||
An LSP receiver sets the O-flag to indicate to the LSP sender that it | An LSP receiver sets the O-flag (Ordered acknowledgment) to indicate | |||
will acknowledge the LSPs in the order as received. A PSNP | to the LSP sender that it will acknowledge the LSPs in the order as | |||
acknowledging N LSPs is acknowledging the N oldest LSPs received. | received. A PSNP acknowledging N LSPs is acknowledging the N oldest | |||
The order inside the PSNP is meaningless. If the sender keeps track | LSPs received. The order inside the PSNP is meaningless. If the | |||
of the order of LSPs sent, this indication allows a fast detection of | sender keeps track of the order of LSPs sent, this indication allows | |||
the loss of an LSP. This MUST NOT be used to alter the | for fast detection of the loss of an LSP. This MUST NOT be used to | |||
retransmission timer for any LSP. This MAY be used to trigger a | alter the retransmission timer for any LSP. This MAY be used to | |||
congestion signal. | trigger a congestion signal. | |||
4.5. Partial SNP Interval sub-TLV | ||||
The Partial SNP Interval sub-TLV advertises the amount of time in | ||||
milliseconds between periodic action for transmission of Partial | ||||
Sequence Number PDUs. This time will trigger the sending of a PSNP | ||||
even if the number of unacknowledged LSPs received on a given | ||||
interface does not exceed LPP (Section 4.3). The time is measured | ||||
from the reception of the first unacknowledged LSP. | ||||
Type: 5 | 4.5. PSNP Interval Sub-TLV | |||
Length: 2 octets | The PSNP Interval sub-TLV advertises the amount of time in | |||
milliseconds between periodic action for transmission of PSNPs. This | ||||
time will trigger the sending of a PSNP even if the number of | ||||
unacknowledged LSPs received on a given interface does not exceed LPP | ||||
(Section 4.3). The time is measured from the reception of the first | ||||
unacknowledged LSP. | ||||
Value: partialSNPInterval in milliseconds | Type: 5 | |||
Length: 2 octets | ||||
Value: partialSNPInterval in milliseconds | ||||
A node advertising this sub-TLV SHOULD send a PSNP at least once per | A node advertising this sub-TLV SHOULD send a PSNP at least once per | |||
Partial SNP Interval if one or more unacknowledged LSPs have been | PSNP Interval if one or more unacknowledged LSPs have been received | |||
received on a given interface. | on a given interface. | |||
4.6. Receive Window sub-TLV | 4.6. Receive Window Sub-TLV | |||
The Receive Window (RWIN) sub-TLV advertises the maximum number of | The Receive Window (RWIN) sub-TLV advertises the maximum number of | |||
unacknowledged LSPs that the node can receive for a given adjacency. | unacknowledged LSPs that the node can receive for a given adjacency. | |||
Type: 6 | Type: 6 | |||
Length: 2 octets | ||||
Length: 2 octets | Value: maximum number of unacknowledged LSPs | |||
Value: maximum number of unacknowledged LSPs | ||||
4.7. Operation on a LAN interface | 4.7. Operation on a LAN Interface | |||
On a LAN interface, all LSPs are link-level multicasts. Each LSP | On a LAN interface, all LSPs are link-level multicasts. Each LSP | |||
sent will be received by all ISs on the LAN and each IS will receive | sent will be received by all ISs on the LAN, and each IS will receive | |||
LSPs from all transmitters. In this section, we clarify how the | LSPs from all transmitters. In this section, we clarify how the | |||
flooding parameters should be interpreted in the context of a LAN. | flooding parameters should be interpreted in the context of a LAN. | |||
An LSP receiver on a LAN will communicate its desired flooding | An LSP receiver on a LAN will communicate its desired flooding | |||
parameters using a single Flooding Parameters TLV, which will be | parameters using a single Flooding Parameters TLV, which will be | |||
received by all LSP transmitters. The flooding parameters sent by | received by all LSP transmitters. The flooding parameters sent by | |||
the LSP receiver MUST be understood as instructions from the LSP | the LSP receiver MUST be understood as instructions from the LSP | |||
receiver to each LSP transmitter about the desired maximum transmit | receiver to each LSP transmitter about the desired maximum transmit | |||
characteristics of each transmitter. The receiver is aware that | characteristics of each transmitter. The receiver is aware that | |||
there are multiple transmitters that can send LSPs to the receiver | there are multiple transmitters that can send LSPs to the receiver | |||
skipping to change at page 8, line 41 ¶ | skipping to change at line 353 ¶ | |||
advertising more conservative values, e.g., a higher LSP Transmission | advertising more conservative values, e.g., a higher LSP Transmission | |||
Interval. When the transmitters receive the LSP Transmission | Interval. When the transmitters receive the LSP Transmission | |||
Interval value advertised by an LSP receiver, the transmitters should | Interval value advertised by an LSP receiver, the transmitters should | |||
rate-limit LSPs according to the advertised flooding parameters. | rate-limit LSPs according to the advertised flooding parameters. | |||
They should not apply any further interpretation to the flooding | They should not apply any further interpretation to the flooding | |||
parameters advertised by the receiver. | parameters advertised by the receiver. | |||
A given LSP transmitter will receive multiple flooding parameter | A given LSP transmitter will receive multiple flooding parameter | |||
advertisements from different receivers that may include different | advertisements from different receivers that may include different | |||
flooding parameter values. A given transmitter SHOULD use the most | flooding parameter values. A given transmitter SHOULD use the most | |||
convervative value on a per-parameter basis. For example, if the | conservative value on a per-parameter basis. For example, if the | |||
transmitter receives multiple LSP Burst Size values, it should use | transmitter receives multiple LSP Burst Size values, it should use | |||
the smallest value. | the smallest value. | |||
The Designated Intermediate System (DIS) plays a special role in the | The Designated Intermediate System (DIS) plays a special role in the | |||
operation of flooding on the LAN as it is responsible for responding | operation of flooding on the LAN as it is responsible for responding | |||
to PSNPs sent on the LAN circuit which are used to request LSPs that | to PSNPs sent on the LAN circuit that are used to request LSPs that | |||
the sender of the PSNP does not have. If the DIS does not support | the sender of the PSNP does not have. If the DIS does not support | |||
faster flooding, this will impact the maximum flooding speed which | faster flooding, this will impact the maximum flooding speed that | |||
could occur on a LAN. Use of LAN priority to prefer a node which | could occur on a LAN. Use of LAN priority to prefer a node that | |||
supports faster flooding in the DIS election may be useful. | supports faster flooding in the DIS election may be useful. | |||
NOTE: The focus of work used to develop the example algorithms | Note: The focus of work used to develop the example algorithms | |||
discussed later in this document focused on operation over point-to- | discussed later in this document focused on operation over point-to- | |||
point interfaces. A full discussion of how best to do faster | point interfaces. A full discussion of how best to do faster | |||
flooding on a LAN interface is therefore out of scope for this | flooding on a LAN interface is therefore out of scope for this | |||
document. | document. | |||
5. Performance improvement on the receiver | 5. Performance Improvement on the Receiver | |||
This section defines two behaviors that SHOULD be implemented on the | This section defines two behaviors that SHOULD be implemented on the | |||
receiver. | receiver. | |||
5.1. Rate of LSP Acknowledgments | 5.1. Rate of LSP Acknowledgments | |||
On point-to-point networks, PSNPs provide acknowledgments for | On point-to-point networks, PSNPs provide acknowledgments for | |||
received LSPs. [ISO10589] suggests that some delay be used when | received LSPs. [ISO10589] suggests using some delay when sending | |||
sending PSNPs. This provides some optimization as multiple LSPs can | PSNPs. This provides some optimization as multiple LSPs can be | |||
be acknowledged by a single PSNP. | acknowledged by a single PSNP. | |||
Faster LSP flooding benefits from a faster feedback loop. This | Faster LSP flooding benefits from a faster feedback loop. This | |||
requires a reduction in the delay in sending PSNPs. | requires a reduction in the delay in sending PSNPs. | |||
For the generation of PSNPs, the receiver SHOULD use a | For the generation of PSNPs, the receiver SHOULD use a | |||
partialSNPInterval smaller than the one defined in [ISO10589]. The | partialSNPInterval smaller than the one defined in [ISO10589]. The | |||
choice of this lower value is a local choice. It may depend on the | choice of this lower value is a local choice. It may depend on the | |||
available processing power of the node, the number of adjacencies, | available processing power of the node, the number of adjacencies, | |||
and the requirement to synchronize the LSDB more quickly. 200 ms | and the requirement to synchronize the LSDB more quickly. 200 ms | |||
seems to be a reasonable value. | seems to be a reasonable value. | |||
In addition to the timer-based partialSNPInterval, the receiver | In addition to the timer-based partialSNPInterval, the receiver | |||
SHOULD keep track of the number of unacknowledged LSPs per circuit | SHOULD keep track of the number of unacknowledged LSPs per circuit | |||
and level. When this number exceeds a preset threshold of LSPs Per | and level. When this number exceeds a preset threshold of LSPs per | |||
PSNP (LPP), the receiver SHOULD immediately send a PSNP without | PSNP (LPP), the receiver SHOULD immediately send a PSNP without | |||
waiting for the PSNP timer to expire. In the case of a burst of | waiting for the PSNP timer to expire. In the case of a burst of | |||
LSPs, this allows for more frequent PSNPs, giving faster feedback to | LSPs, this allows more frequent PSNPs, giving faster feedback to the | |||
the sender. Outside of the burst case, the usual time-based PSNP | sender. Outside of the burst case, the usual timer-based PSNP | |||
approach comes into effect. | approach comes into effect. | |||
The smaller the LPP, the faster the feedback to the sender and | The smaller the LPP is, the faster the feedback to the sender and | |||
possibly the higher the rate if the rate is limited by the end to end | possibly the higher the rate if the rate is limited by the end-to-end | |||
RTT (link RTT + time to acknowledge). This may result in an increase | RTT (link RTT + time to acknowledge). This may result in an increase | |||
in the number of PSNPs sent which may increase CPU and IO load on | in the number of PSNPs sent, which may increase CPU and IO load on | |||
both the sender and receiver. The LPP should be less than or equal | both the sender and receiver. The LPP should be less than or equal | |||
to 90 as this is the maximum number of LSPs that can be acknowledged | to 90 as this is the maximum number of LSPs that can be acknowledged | |||
in a PSNP at common MTU sizes, hence waiting longer would not reduce | in a PSNP at common MTU sizes; hence, waiting longer would not reduce | |||
the number of PSNPs sent but would delay the acknowledgements. LPP | the number of PSNPs sent but would delay the acknowledgments. LPP | |||
should not be chosen too high as the congestion control starts with a | should not be chosen too high as the congestion control starts with a | |||
congestion window of LPP+1. Based on experimental evidence, 15 | congestion window of LPP + 1. Based on experimental evidence, 15 | |||
unacknowledged LSPs is a good value assuming that the Receive Window | unacknowledged LSPs is a good value, assuming that the Receive Window | |||
is at least 30. More frequent PSNPs gives the transmitter more | is at least 30. More frequent PSNPs give the transmitter more | |||
feedback on receiver progress, allowing the transmitter to continue | feedback on receiver progress, allowing the transmitter to continue | |||
transmitting while not burdening the receiver with undue overhead. | transmitting while not burdening the receiver with undue overhead. | |||
By deploying both the time-based and the threshold-based PSNP | By deploying both the timer-based and the threshold-based PSNP | |||
approaches, the receiver can be adaptive to both LSP bursts and | approaches, the receiver can be adaptive to both LSP bursts and | |||
infrequent LSP updates. | infrequent LSP updates. | |||
As PSNPs also consume link bandwidth, packet-queue space, and | As PSNPs also consume link bandwidth, packet-queue space, and | |||
protocol-processing time on receipt, the increased sending of PSNPs | protocol-processing time on receipt, the increased sending of PSNPs | |||
should be taken into account when considering the rate at which LSPs | should be taken into account when considering the rate at which LSPs | |||
can be sent on an interface. | can be sent on an interface. | |||
5.2. Packet Prioritization on Receive | 5.2. Packet Prioritization on Receive | |||
There are three classes of PDUs sent by IS-IS: | There are three classes of PDUs sent by IS-IS: | |||
* Hellos | * Hellos | |||
* LSPs | * LSPs | |||
* Complete Sequence Number PDUs (CSNPs) and PSNPs | * SNPs (Complete Sequence Number PDUs (CSNPs) and PSNPs) | |||
Implementations today may prioritize the reception of Hellos over | Implementations today may prioritize the reception of Hellos over | |||
LSPs and Sequence Number PDUs (SNPs) in order to prevent a burst of | LSPs and Sequence Number PDUs (SNPs) in order to prevent a burst of | |||
LSP updates from triggering an adjacency timeout which in turn would | LSP updates from triggering an adjacency timeout, which in turn would | |||
require additional LSPs to be updated. | require additional LSPs to be updated. | |||
CSNPs and PSNPs serve to trigger or acknowledge the transmission of | CSNPs and PSNPs serve to trigger or acknowledge the transmission of | |||
specified LSPs. On a point-to-point link, PSNPs acknowledge the | specified LSPs. On a point-to-point link, PSNPs acknowledge the | |||
receipt of one or more LSPs. For this reason, [ISO10589] specifies a | receipt of one or more LSPs. For this reason, [ISO10589] specifies a | |||
delay (partialSNPInterval) before sending a PSNP so that the number | delay (partialSNPInterval) before sending a PSNP so that the number | |||
of PSNPs required to be sent is reduced. On receipt of a PSNP, the | of PSNPs required to be sent is reduced. On receipt of a PSNP, the | |||
set of LSPs acknowledged by that PSNP can be marked so that they do | set of LSPs acknowledged by that PSNP can be marked so that they do | |||
not need to be retransmitted. | not need to be retransmitted. | |||
If a PSNP is dropped on reception, the set of LSPs advertised in the | If a PSNP is dropped on reception, the set of LSPs advertised in the | |||
PSNP cannot be marked as acknowledged and this results in needless | PSNP cannot be marked as acknowledged, and this results in needless | |||
retransmissions that will further delay transmission of other LSPs | retransmissions that further delay transmission of other LSPs that | |||
that are yet to be transmitted. It may also make it more likely that | are yet to be transmitted. It may also make it more likely that a | |||
a receiver becomes overwhelmed by LSP transmissions. | receiver becomes overwhelmed by LSP transmissions. | |||
Therefore implementations SHOULD prioritize IS-IS PDUs on the way | Therefore, implementations SHOULD prioritize IS-IS PDUs on the way | |||
from the incoming interface to the IS-IS process. The relative | from the incoming interface to the IS-IS process. The relative | |||
priority of packets in decreasing order SHOULD be: Hellos, SNPs, | priority of packets in decreasing order SHOULD be: Hellos, SNPs, and | |||
LSPs. Implementations MAY also prioritize IS-IS packets over other | LSPs. Implementations MAY also prioritize IS-IS packets over other | |||
protocols which are less critical for the router or network, less | protocols, which are less critical for the router or network, less | |||
sensitive to delay or more bursty (e.g., BGP). | sensitive to delay, or more bursty (e.g., BGP). | |||
6. Congestion and Flow Control | 6. Congestion and Flow Control | |||
6.1. Overview | 6.1. Overview | |||
Ensuring the goodput between two entities is a layer-4 responsibility | Ensuring the goodput between two entities is a Layer 4 responsibility | |||
as per the OSI model. A typical example is the TCP protocol defined | as per the OSI model. A typical example is the TCP protocol defined | |||
in [RFC9293] that provides flow control, congestion control, and | in [RFC9293] that provides flow control, congestion control, and | |||
reliability. | reliability. | |||
Flow control creates a control loop between a transmitter and a | Flow control creates a control loop between a transmitter and a | |||
receiver so that the transmitter does not overwhelm the receiver. | receiver so that the transmitter does not overwhelm the receiver. | |||
TCP provides a means for the receiver to govern the amount of data | TCP provides a means for the receiver to govern the amount of data | |||
sent by the sender through the use of a sliding window. | sent by the sender through the use of a sliding window. | |||
Congestion control prevents the set of transmitters from overwhelming | Congestion control prevents the set of transmitters from overwhelming | |||
the path of the packets between two IS-IS implementations. This path | the path of the packets between two IS-IS implementations. This path | |||
typically includes a point-to-point link between two IS-IS neighbors | typically includes a point-to-point link between two IS-IS neighbors, | |||
which is usually over-sized compared to the capability of the IS-IS | which is usually oversized compared to the capability of the IS-IS | |||
speakers, but potentially some internal elements inside each neighbor | speakers, but potentially also includes some internal elements inside | |||
such as switching fabric, line card CPU, and forwarding plane buffers | each neighbor such as switching fabric, line card CPU, and forwarding | |||
that may experience congestion. These resources may be shared across | plane buffers that may experience congestion. These resources may be | |||
multiple IS-IS adjacencies for the system and it is the | shared across multiple IS-IS adjacencies for the system, and it is | |||
responsibility of congestion control to ensure that these are shared | the responsibility of congestion control to ensure that these are | |||
reasonably. | shared reasonably. | |||
Reliability provides loss detection and recovery. IS-IS already has | Reliability provides loss detection and recovery. IS-IS already has | |||
mechanisms to ensure the reliable transmission of LSPs. This is not | mechanisms to ensure the reliable transmission of LSPs. This is not | |||
changed by this document. | changed by this document. | |||
The following two sections provide two Flow and/or Congestion control | Sections 6.2 and 6.3 provide two flow and/or congestion control | |||
algorithms that may be implemented by taking advantage of the | algorithms that may be implemented by taking advantage of the | |||
extensions defined in this document. The signal that these IS-IS | extensions defined in this document. The signal that these IS-IS | |||
extensions defined in Section 4 and Section 5 provide are generic and | extensions (defined in Sections 4 and 5) provide is generic and is | |||
are designed to support different sender-side algorithms. A sender | designed to support different sender-side algorithms. A sender can | |||
can unilaterally choose a different algorithm to use. | unilaterally choose a different algorithm to use. | |||
6.2. Congestion and Flow Control algorithm | 6.2. Congestion and Flow Control Algorithm | |||
6.2.1. Flow control | 6.2.1. Flow Control | |||
A flow control mechanism creates a control loop between a single | A flow control mechanism creates a control loop between a single | |||
instance of a transmitter and a single receiver. This section uses a | transmitter and a single receiver. This section uses a mechanism | |||
mechanism similar to the TCP receive window to allow the receiver to | similar to the TCP receive window to allow the receiver to govern the | |||
govern the amount of data sent by the sender. This receive window | amount of data sent by the sender. This receive window (RWIN) | |||
('rwin') indicates an allowed number of LSPs that the sender may | indicates an allowed number of LSPs that the sender may transmit | |||
transmit before waiting for an acknowledgment. The size of the | before waiting for an acknowledgment. The size of the receive | |||
receive window, in units of LSPs, is initialized with the value | window, in units of LSPs, is initialized with the value advertised by | |||
advertised by the receiver in the Receive Window sub-TLV. If no | the receiver in the Receive Window sub-TLV. If no value is | |||
value is advertised, the transmitter should initialize rwin with its | advertised, the transmitter should initialize RWIN with its locally | |||
locally configured value for this neighbor. | configured value for this receiver. | |||
When the transmitter sends a set of LSPs to the receiver, it | When the transmitter sends a set of LSPs to the receiver, it | |||
subtracts the number of LSPs sent from rwin. If the transmitter | subtracts the number of LSPs sent from RWIN. If the transmitter | |||
receives a PSNP, then rwin is incremented for each acknowledged LSP. | receives a PSNP, then RWIN is incremented for each acknowledged LSP. | |||
The transmitter must ensure that the value of rwin never goes | The transmitter must ensure that the value of RWIN never goes | |||
negative. | negative. | |||
The RWIN value is of importance when the RTT is the limiting factor | The RWIN value is of importance when the RTT is the limiting factor | |||
for the throughput. In this case the optimal size is the desired LSP | for the throughput. In this case, the optimal size is the desired | |||
rate multiplied by the RTT. The RTT being the addition of the link | LSP rate multiplied by the RTT. The RTT is the addition of the link | |||
RTT plus the time taken by the receiver to acknowledge the first | RTT plus the time taken by the receiver to acknowledge the first | |||
received LSP in its PSNP. 50 or 100 may be reasonable default | received LSP in its PSNP. The values 50 or 100 may be reasonable | |||
numbers. As an example, a RWIN of 100 requires a control plane input | default numbers for RWIN. As an example, an RWIN of 100 requires a | |||
buffer of 150 kbytes per neighbor assuming an IS-IS MTU of 1500 | control plane input buffer of 150 kbytes per neighbor (assuming an | |||
octets and limits the throughput to 10000 LSPs per second and per | IS-IS MTU of 1500 octets) and limits the throughput to 10000 LSPs per | |||
neighbor for a link RTT of 10 ms. With the same RWIN, the throughput | second and per neighbor for a link RTT of 10 ms. With the same RWIN, | |||
limitation is 2000 LSP per second when the RTT is 50ms. That's the | the throughput limitation is 2000 LSPs per second when the RTT is 50 | |||
maximum throughput assuming no other limitations such as CPU | ms. That's the maximum throughput assuming no other limitations such | |||
limitations. | as CPU limitations. | |||
Equally RTT is of importance for the performance. That is why the | Equally, RTT is of importance for the performance. That is why the | |||
performance improvements on the receiver specified in section | performance improvements on the receiver specified in Section 5 are | |||
Section 5 are important to achieve good throughput. If the receiver | important to achieve good throughput. If the receiver does not | |||
does not support those performance improvements, in the worst case | support those performance improvements, in the worst case (small RWIN | |||
(small RWIN and high RTT) the throughput will be limited by the LSP | and high RTT) the throughput will be limited by the LSP Transmission | |||
Transmission Interval as defined in section Section 4.2. | Interval as defined in Section 4.2. | |||
6.2.1.1. Operation on a point to point interface | 6.2.1.1. Operation on a Point-to-Point Interface | |||
By sending the Receive Window sub-TLV, a node advertises to its | By sending the Receive Window sub-TLV, a node advertises to its | |||
neighbor its ability to receive that many un-acknowledged LSPs from | neighbor its ability to receive that many unacknowledged LSPs from | |||
the neighbor. This is akin to a receive window or sliding window in | the neighbor. This is akin to a receive window or sliding window in | |||
flow control. In some implementations, this value should reflect the | flow control. In some implementations, this value should reflect the | |||
IS-IS socket buffer size. Special care must be taken to leave space | IS-IS socket buffer size. Special care must be taken to leave space | |||
for CSNPs and PSNPs and IIHs if they share the same input queue. In | for CSNPs, PSNPs, and IIHs if they share the same input queue. In | |||
this case, this document suggests advertising an LSP Receive Window | this case, this document suggests advertising an LSP Receive Window | |||
corresponding to half the size of the IS-IS input queue. | corresponding to half the size of the IS-IS input queue. | |||
By advertising an LSP Transmission Interval sub-TLV, a node | By advertising an LSP Transmission Interval sub-TLV, a node | |||
advertises its ability to receive LSPs separated by at least the | advertises its ability to receive LSPs separated by at least the | |||
advertised value, outside of LSP bursts. | advertised value, outside of LSP bursts. | |||
By advertising an LSP Burst Size sub-TLV, a node advertises its | By advertising an LSP Burst Size sub-TLV, a node advertises its | |||
ability to receive that number of LSPs back-to-back. | ability to receive that number of LSPs back to back. | |||
The LSP transmitter MUST NOT exceed these parameters. After having | The LSP transmitter MUST NOT exceed these parameters. After having | |||
sent a full burst of LSPs, it MUST send the subsequent LSPs with a | sent a full burst of LSPs, it MUST send the subsequent LSPs with a | |||
minimum of LSP Transmission Interval between LSP transmissions. For | minimum of LSP Transmission Interval between LSP transmissions. For | |||
CPU scheduling reasons, this rate MAY be averaged over a small | CPU scheduling reasons, this rate MAY be averaged over a small | |||
period, e.g., 10-30ms. | period, e.g., 10-30 ms. | |||
If either the LSP transmitter or receiver does not adhere to these | If either the LSP transmitter or receiver does not adhere to these | |||
parameters, for example because of transient conditions, this doesn't | parameters, for example, because of transient conditions, this | |||
result in a fatal condition for IS-IS operation. In the worst case, | doesn't result in a fatal condition for IS-IS operation. In the | |||
an LSP is lost at the receiver and this situation is already remedied | worst case, an LSP is lost at the receiver, and this situation is | |||
by mechanisms in [ISO10589]. After a few seconds, neighbors will | already remedied by mechanisms in [ISO10589]. After a few seconds, | |||
exchange PSNPs (for point-to-point interfaces) or CSNPs (for | neighbors will exchange PSNPs (for point-to-point interfaces) or | |||
broadcast interfaces) and recover from the lost LSPs. This worst | CSNPs (for broadcast interfaces) and recover from the lost LSPs. | |||
case should be avoided as those additional seconds impact convergence | This worst case should be avoided as those additional seconds impact | |||
time since the LSDB is not fully synchronized. Hence it is better to | convergence time since the LSDB is not fully synchronized. Hence, it | |||
err on the conservative side and to under-run the receiver rather | is better to err on the conservative side and to under-run the | |||
than over-run it. | receiver rather than over-run it. | |||
6.2.1.2. Operation on a broadcast LAN interface | 6.2.1.2. Operation on a Broadcast LAN Interface | |||
Flow and congestion control on a LAN interface is out of scope for | Flow and congestion control on a LAN interface is out of scope for | |||
this document. | this document. | |||
6.2.2. Congestion Control | 6.2.2. Congestion Control | |||
Whereas flow control prevents the sender from overwhelming the | Whereas flow control prevents the sender from overwhelming the | |||
receiver, congestion control prevents senders from overwhelming the | receiver, congestion control prevents senders from overwhelming the | |||
network. For an IS-IS adjacency, the network between two IS-IS | network. For an IS-IS adjacency, the network between two IS-IS | |||
neighbors is relatively limited in scope and includes a single link | neighbors is relatively limited in scope and includes a single link | |||
which is typically over-sized compared to the capability of the IS-IS | that is typically oversized compared to the capability of the IS-IS | |||
speakers. In situations where the probability of LSP drop is low, | speakers. In situations where the probability of LSP drop is low, | |||
flow control Section 6.2.1 is expected to give good results, without | flow control (Section 6.2.1) is expected to give good results, | |||
the need to implement congestion control. Otherwise, adding | without the need to implement congestion control. Otherwise, adding | |||
congestion control will help handling congestion of LSPs in the | congestion control will help handling congestion of LSPs in the | |||
receiver. | receiver. | |||
This section describes one sender-side congestion control algorithm | This section describes one sender-side congestion control algorithm | |||
largely inspired by the TCP congestion control algorithm [RFC5681]. | largely inspired by the TCP congestion control algorithm [RFC5681]. | |||
The proposed algorithm uses a variable congestion window 'cwin'. It | The proposed algorithm uses a variable congestion window 'cwin'. It | |||
plays a role similar to the receive window described above. The main | plays a role similar to the receive window described above. The main | |||
difference is that cwin is adjusted dynamically according to various | difference is that cwin is adjusted dynamically according to various | |||
events described below. | events described below. | |||
6.2.2.1. Core algorithm | 6.2.2.1. Core Algorithm | |||
In its simplest form, the congestion control algorithm looks like the | In its simplest form, the congestion control algorithm looks like the | |||
following: | following: | |||
+---------------+ | +---------------+ | |||
| | | | | | |||
| v | | v | |||
| +----------------------+ | | +----------------------+ | |||
| | Congestion avoidance | | | | Congestion avoidance | | |||
| + ---------------------+ | | + ---------------------+ | |||
| | | | | | |||
| | Congestion signal | | | Congestion signal | |||
----------------+ | ----------------+ | |||
Figure 1 | Figure 1 | |||
The algorithm starts with cwin = cwin0 = LPP + 1. In the congestion | The algorithm starts with cwin = cwin0 = LPP + 1. In the congestion | |||
avoidance phase, cwin increases as LSPs are acked: for every acked | avoidance phase, cwin increases as LSPs are acked: for every acked | |||
LSP, cwin += 1 / cwin without exceeding RWIN. When LSPs are | LSP, cwin += 1 / cwin without exceeding RWIN. When LSPs are | |||
exchanged, cwin LSPs will be acknowledged in 1 RTT, meaning cwin(t) = | exchanged, cwin LSPs will be acknowledged in 1 RTT, meaning cwin(t) = | |||
t/RTT + cwin0. Since the RTT is low in many IS-IS deployments, the | t/RTT + cwin0. Since the RTT is low in many IS-IS deployments, the | |||
sending rate can reach fast rates in short periods of time. | sending rate can reach fast rates in short periods of time. | |||
When updating cwin, it must not become higher than the number of LSPs | When updating cwin, it must not become higher than the number of LSPs | |||
waiting to be sent, otherwise the sending will not be paced by the | waiting to be sent, otherwise the sending will not be paced by the | |||
receiving of acks. Said differently, tx pressure is needed to | receiving of acks. Said differently, transmission pressure is needed | |||
maintain and increase cwin. | to maintain and increase cwin. | |||
When the congestion signal is triggered, cwin is set back to its | When the congestion signal is triggered, cwin is set back to its | |||
initial value and the congestion avoidance phase starts again. | initial value, and the congestion avoidance phase starts again. | |||
6.2.2.2. Congestion signals | 6.2.2.2. Congestion Signals | |||
The congestion signal can take various forms. The more reactive the | The congestion signal can take various forms. The more reactive the | |||
congestion signals, the fewer LSPs will be lost due to congestion. | congestion signals, the fewer LSPs will be lost due to congestion. | |||
However, overly aggressive congestion signals will cause a sender to | However, overly aggressive congestion signals will cause a sender to | |||
keep a very low sending rate even without actual congestion on the | keep a very low sending rate even without actual congestion on the | |||
path. | path. | |||
Two practical signals are given below. | Two practical signals are given below. | |||
Delay: When receiving acknowledgements, a sender estimates the | 1. Delay: When receiving acknowledgments, a sender estimates the | |||
acknowledgement time of the receiver. Based on this estimation, it | acknowledgment time of the receiver. Based on this estimation, | |||
can infer that a packet was lost, and infer congestion on the path. | it can infer that a packet was lost and that the path is | |||
congested. | ||||
There can be a timer per LSP, but this can become costly for | There can be a timer per LSP, but this can become costly for | |||
implementations. It is possible to use only a single timer t1 for | implementations. It is possible to use only a single timer t1 | |||
all LSPs: during t1, sent LSPs are recorded in a list list_1. Once | for all LSPs: during t1, sent LSPs are recorded in a list list_1. | |||
the RTT is over, list_1 is kept and another list list_2 is used to | Once the RTT is over, list_1 is kept and another list, list_2, is | |||
store the next LSPs. LSPs are removed from the lists when acked. At | used to store the next LSPs. LSPs are removed from the lists | |||
the end of the second t1 period, every LSP in list_1 should have been | when acked. At the end of the second t1 period, every LSP in | |||
acked, so list_1 is checked to be empty. list_1 can then be reused | list_1 should have been acked, so list_1 is checked to be empty. | |||
for the next RTT. | list_1 can then be reused for the next RTT. | |||
There are multiple strategies to set the timeout value t1. It should | There are multiple strategies to set the timeout value t1. It | |||
be based on measurements of the maximum acknowledgement time (MAT) of | should be based on measurements of the maximum acknowledgment | |||
each PSNP. The simplest one is to use three times the RTT. | time (MAT) of each PSNP. Using three times the RTT is the | |||
Alternatively an exponential moving average of the MATs, like | simplest strategy; alternatively, an exponential moving average | |||
[RFC6298]. A more elaborate one is to take a running maximum of the | of the MATs, as described in [RFC6298], can be used. A more | |||
MATs over a period of a few seconds. This value should include a | elaborate one is to take a running maximum of the MATs over a | |||
margin of error to avoid false positives (e.g., estimated MAT measure | period of a few seconds. This value should include a margin of | |||
variance) which would have a significant impact on performance. | error to avoid false positives (e.g., estimated MAT measure | |||
variance), which would have a significant impact on performance. | ||||
Loss: if the receiver has signaled the O-flag (Ordered | 2. Loss: if the receiver has signaled the O-flag (see Section 4.4), | |||
acknowledgement) Section 4.4, a sender MAY record its sending order | a sender MAY record its sending order and check that | |||
and check that acknowledgements arrive in the same order. If not, | acknowledgments arrive in the same order. If not, some LSPs are | |||
some LSPs are missing and this MAY be used to trigger a congestion | missing, and this MAY be used to trigger a congestion signal. | |||
signal. | ||||
6.2.2.3. Refinement | 6.2.2.3. Refinement | |||
With the algorithm presented above, if congestion is detected, cwin | With the algorithm presented above, if congestion is detected, cwin | |||
goes back to its initial value, and does not use the information | goes back to its initial value and does not use the information | |||
gathered in previous congestion avoidance phases. | gathered in previous congestion avoidance phases. | |||
It is possible to use a fast recovery phase once congestion is | It is possible to use a fast recovery phase once congestion is | |||
detected, to avoid going through this linear rate of growth from | detected and to avoid going through this linear rate of growth from | |||
scratch. When congestion is detected, a fast recovery threshold | scratch. When congestion is detected, a fast recovery threshold | |||
frthresh is set to frthresh = cwin / 2. In this fast recovery phase, | frthresh is set to frthresh = cwin / 2. In this fast recovery phase, | |||
for every acked LSP, cwin += 1. Once cwin reaches frthresh, the | for every acked LSP, cwin += 1. Once cwin reaches frthresh, the | |||
algorithm goes back to the congestion avoidance phase. | algorithm goes back to the congestion avoidance phase. | |||
+---------------+ | +---------------+ | |||
| | | | | | |||
| v | | v | |||
| +----------------------+ | | +----------------------+ | |||
| | Congestion avoidance | | | | Congestion avoidance | | |||
| + ---------------------+ | | + ---------------------+ | |||
| | | | | | |||
| | Congestion signal | | | Congestion signal | |||
| | | | | | |||
| +----------------------+ | | +----------------------+ | |||
| | Fast recovery | | | | Fast recovery | | |||
| +----------------------+ | | +----------------------+ | |||
| | | | | | |||
| | frthresh reached | | | frthresh reached | |||
----------------+ | ----------------+ | |||
Figure 2 | Figure 2 | |||
6.2.2.4. Remarks | 6.2.2.4. Remarks | |||
This algorithm's performance is dependent on the LPP value. Indeed, | This algorithm's performance is dependent on the LPP value. Indeed, | |||
the smaller LPP is, the more information is available for the | the smaller the LPP is, the more information is available for the | |||
congestion control algorithm to perform well. However, it also | congestion control algorithm to perform well. However, it also | |||
increases the resources spent on sending PSNPs, so a trade-off must | increases the resources spent on sending PSNPs, so a trade-off must | |||
be made. This document recommends to use an LPP of 15 or less. If a | be made. This document recommends using an LPP of 15 or less. If a | |||
Receive Window is advertised, LPP SHOULD be lower and the best | Receive Window is advertised, LPP SHOULD be lower, and the best | |||
performance is achieved when LPP is an integer fraction of the | performance is achieved when LPP is an integer fraction of the | |||
Receive Window. | Receive Window. | |||
Note that this congestion control algorithm benefits from the | Note that this congestion control algorithm benefits from the | |||
extensions proposed in this document. The advertisement of a receive | extensions proposed in this document. The advertisement of a receive | |||
window from the receiver (Section 6.2.1) avoids the use of an | window from the receiver (Section 6.2.1) avoids the use of an | |||
arbitrary maximum value by the sender. The faster acknowledgment of | arbitrary maximum value by the sender. The faster acknowledgment of | |||
LSPs (Section 5.1) allows for a faster control loop and hence a | LSPs (Section 5.1) allows for a faster control loop and hence a | |||
faster increase of the congestion window in the absence of | faster increase of the congestion window in the absence of | |||
congestion. | congestion. | |||
6.2.3. Pacing | 6.2.3. Pacing | |||
As discussed in [RFC9002], Section 7.7 a sender SHOULD pace sending | As discussed in [RFC9002], Section 7.7, a sender SHOULD pace sending | |||
of all in-flight LSPs based on input from the congestion controller. | of all in-flight LSPs based on input from the congestion controller. | |||
Sending multiple packets without any delay between them creates a | Sending multiple packets without any delay between them creates a | |||
packet burst that might cause short-term congestion and losses. | packet burst that might cause short-term congestion and losses. | |||
Senders MUST either use pacing or limit such bursts. Senders SHOULD | Senders MUST either use pacing or limit such bursts. Senders SHOULD | |||
limit bursts to LSP Burst Size. | limit bursts to LSP Burst Size. | |||
Senders can implement pacing as they choose. A perfectly paced | Senders can implement pacing as they choose. A perfectly paced | |||
sender spreads packets evenly over time. For a window-based | sender spreads packets evenly over time. For a window-based | |||
congestion controller, such as the one in this section, that rate can | congestion controller, such as the one in this section, that rate can | |||
be computed by averaging the congestion window over the RTT. | be computed by averaging the congestion window over the RTT. | |||
Expressed as an inter-packet interval in units of time: | Expressed as an inter-packet interval in units of time: | |||
interval = (SRTT / cwin) / N | interval = (SRTT / cwin) / N | |||
SRTT is the smoothed round-trip time [RFC6298] | SRTT is the Smoothed Round-Trip Time [RFC6298]. | |||
Using a value for N that is small, but at least 1 (for example, 1.25) | Using a value for N that is small, but at least 1 (for example, | |||
ensures that variations in RTT do not result in underutilization of | 1.25), ensures that variations in RTT do not result in | |||
the congestion window. | underutilization of the congestion window. | |||
Practical considerations, such as scheduling delays and computational | Practical considerations, such as scheduling delays and computational | |||
efficiency, can cause a sender to deviate from this rate over time | efficiency, can cause a sender to deviate from this rate over time | |||
periods that are much shorter than an RTT. | periods that are much shorter than an RTT. | |||
One possible implementation strategy for pacing uses a leaky bucket | One possible implementation strategy for pacing uses a leaky bucket | |||
algorithm, where the capacity of the "bucket" is limited to the | algorithm, where the capacity of the "bucket" is limited to the | |||
maximum burst size and the rate that the "bucket" fills is determined | maximum burst size, and the rate that the "bucket" fills is | |||
by the above function. | determined by the above function. | |||
6.2.4. Determining values to be advertised in the Flooding Parameters | 6.2.4. Determining Values to be Advertised in the Flooding Parameters | |||
TLV | TLV | |||
The values that a receiver advertises do not need to be perfect. If | The values that a receiver advertises do not need to be perfect. If | |||
the values are too low then the transmitter will not use the full | the values are too low, then the transmitter will not use the full | |||
bandwidth or available CPU resources. If the values are too high | bandwidth or available CPU resources. If the values are too high, | |||
then the receiver may drop some LSPs during the first RTT and this | then the receiver may drop some LSPs during the first RTT, and this | |||
loss will reduce the usable receive window and the protocol | loss will reduce the usable receive window, and the protocol | |||
mechanisms will allow the adjacency to recover. Flooding slower than | mechanisms will allow the adjacency to recover. Flooding slower than | |||
both nodes can support will hurt performance, as will consistently | both nodes can support will hurt performance as will consistently | |||
overloading the receiver. | overloading the receiver. | |||
6.2.4.1. Static values | 6.2.4.1. Static Values | |||
The values advertised need not be dynamic as feedback is provided by | The values advertised need not be dynamic, as feedback is provided by | |||
the acknowledgment of LSPs in SNP messages. Acknowledgments provide | the acknowledgment of LSPs in SNP messages. Acknowledgments provide | |||
a feedback loop on how fast the LSPs are processed by the receiver. | a feedback loop on how fast the LSPs are processed by the receiver. | |||
They also signal that the LSPs can be removed from receive window, | They also signal that the LSPs can be removed from the receive | |||
explicitly signaling to the sender that more LSPs may be sent. By | window, explicitly signaling to the sender that more LSPs may be | |||
advertising relatively static parameters, we expect to produce | sent. By advertising relatively static parameters, we expect to | |||
overall flooding behavior similar to what might be achieved by | produce overall flooding behavior similar to what might be achieved | |||
manually configuring per-interface LSP rate-limiting on all | by manually configuring per-interface LSP rate-limiting on all | |||
interfaces in the network. The advertised values could be based, for | interfaces in the network. The advertised values could be based, for | |||
example, on offline tests of the overall LSP-processing speed for a | example, on offline tests of the overall LSP-processing speed for a | |||
particular set of hardware and the number of interfaces configured | particular set of hardware and the number of interfaces configured | |||
for IS-IS. With such a formula, the values advertised in the | for IS-IS. With such a formula, the values advertised in the | |||
Flooding Parameters TLV would only change when additional IS-IS | Flooding Parameters TLV would only change when additional IS-IS | |||
interfaces are configured. | interfaces are configured. | |||
Static values are dependent on the CPU generation, class of router | Static values are dependent on the CPU generation, class of router, | |||
and network scaling, typically the number of adjacent neighbors. | and network scaling, typically the number of adjacent neighbors. | |||
Examples at the time of publication are provided below. LSP Burst | Examples at the time of publication are provided below. The LSP | |||
Size could be in the range 5 to 20. From a router perspective, this | Burst Size could be in the range 5 to 20. From a router perspective, | |||
value typically depends on the queue(s) size(s) on the I/O path from | this value typically depends on the queue(s) size(s) on the I/O path | |||
the packet forwarding engine to the control plane which is very | from the packet forwarding engine to the control plane, which is very | |||
platform dependent. It also depends upon how many IS-IS neighbors | platform-dependent. It also depends upon how many IS-IS neighbors | |||
share this I/O path as typically all neighbors will send the same | share this I/O path, as typically all neighbors will send the same | |||
LSPs at the same time. It may also depend on other incoming control | LSPs at the same time. It may also depend on other incoming control | |||
plane traffic sharing that I/O path, how bursty they are, and how | plane traffic that is sharing that I/O path, how bursty they are, and | |||
many incoming IS-IS packets are prioritized over other incoming | how many incoming IS-IS packets are prioritized over other incoming | |||
control plane traffic. As indicated in Section 3, the historical | control plane traffic. As indicated in Section 3, the historical | |||
behavior from [ISO10589] allows a value of 10 hence 10 seems | behavior from [ISO10589] allows a value of 10; hence, 10 seems | |||
conservative. From a network operation perspective, it would be | conservative. From a network operation perspective, it would be | |||
beneficial for the burst size to be equal to or higher than the | beneficial for the burst size to be equal to or higher than the | |||
number of LSPs which may be originated by a single failure. For a | number of LSPs that may be originated by a single failure. For a | |||
node failure, this is equal to the number of IS-IS neighbors of the | node failure, this is equal to the number of IS-IS neighbors of the | |||
failed node. LSP Transmission Interval could be in the range of 1 ms | failed node. The LSP Transmission Interval could be in the range of | |||
to 33 ms. As indicated in Section 3, the historical behavior from | 1 ms to 33 ms. As indicated in Section 3, the historical behavior | |||
[ISO10589] is 33ms hence is conservative. The LSP Transmission | from [ISO10589] is 33 ms; hence, 33 ms is conservative. The LSP | |||
Interval is an advertisement of the receiver's sustainable LSP | Transmission Interval is an advertisement of the receiver's | |||
reception rate taking into account all aspects and in particular the | sustainable LSP reception rate taking into account all aspects and | |||
control plane CPU and the I/O bandwidth. It's expected to improve | particularly the control plane CPU and the I/O bandwidth. It's | |||
(hence decrease) as hardware and software naturally improve over | expected to improve (hence, decrease) as hardware and software | |||
time. It should be chosen conservatively as this rate may be used by | naturally improve over time. It should be chosen conservatively, as | |||
the sender in all conditions including the worst conditions. It's | this rate may be used by the sender in all conditions -- including | |||
also not a bottleneck as the flow control algorithm may use a higher | the worst conditions. It's also not a bottleneck as the flow control | |||
rate in good conditions, in particular when the receiver acknowledges | algorithm may use a higher rate in good conditions, particularly when | |||
quickly and the receive window is large enough compared to the RTT. | the receiver acknowledges quickly, and the receive window is large | |||
LPP could be in the range of 5 to 90 with a proposed 15. A smaller | enough compared to the RTT. LPP could be in the range of 5 to 90 | |||
value provides faster feedback at the cost of the small overhead of | with a proposed 15. A smaller value provides faster feedback at the | |||
more PSNP messages. PartialSNPInterval could be in the range 50ms to | cost of the small overhead of more PSNP messages. PartialSNPInterval | |||
500ms with a proposed 200ms. One may distinguish the value used | could be in the range 50 to 500 ms with a proposed value of 200 ms. | |||
locally from the value signaled to the sender. The value used | One may distinguish the value used locally from the value signaled to | |||
locally benefits from being small but is not expected to be the main | the sender. The value used locally benefits from being small but is | |||
parameter to improve performance. It depends on how fast the IS-IS | not expected to be the main parameter to improve performance. It | |||
flooding process may be scheduled by the CPU. It's safe as, even | depends on how fast the IS-IS flooding process may be scheduled by | |||
when the receiver CPU is busy, it will naturally delay its | the CPU. Even when the receiver CPU is busy, it's safe because it | |||
acknowledgments which provides a negative feedback loop. The value | will naturally delay its acknowledgments, which provides a negative | |||
advertised to the sender should be conservative (high enough) as this | feedback loop. The value advertised to the sender should be | |||
value could be used by the sender to send some LSPs rather than keep | conservative (high enough) as this value could be used by the sender | |||
waiting for acknowledgments. Receive Window in the range of 30 to | to send some LSPs rather than keep waiting for acknowledgments. | |||
200 with a proposed 60. In general, the larger the better the | Receive Window could be in the range of 30 to 200 with a proposed | |||
performance on links with high RTT. The higher the number and the | value of 60. In general, the larger the better the performance on | |||
higher the number of IS-IS neighbors, the higher the use of control | links with high RTT. The higher that number and the higher the | |||
plane memory so it's mostly dependent on the amount of memory which | number of IS-IS neighbors, the higher the use of control plane | |||
may be dedicated to IS-IS flooding and the number of IS-IS neighbors. | memory, so it's mostly dependent on the amount of memory, which may | |||
From a memory usage perspective, a priori, one could use the same | be dedicated to IS-IS flooding and the number of IS-IS neighbors. | |||
From a memory usage perspective (a priori), one could use the same | ||||
value as the TCP receive window, but the value advertised should not | value as the TCP receive window, but the value advertised should not | |||
be higher than the buffer of the "socket" used. | be higher than the buffer of the "socket" used. | |||
6.2.4.2. Dynamic values | 6.2.4.2. Dynamic Values | |||
The values may be updated dynamically, to reflect the relative change | To reflect the relative change of load on the receiver, the values | |||
of load on the receiver, by improving the values when the receiver | may be updated dynamically by improving the values when the receiver | |||
load is getting lower and degrading the values when the receiver load | load is getting lower and by degrading the values when the receiver | |||
is getting higher. For example, if LSPs are regularly dropped, or if | load is getting higher. For example, if LSPs are regularly dropped, | |||
the queue regularly comes close to being filled, then the values may | or if the queue regularly comes close to being filled, then the | |||
be too high. On the other hand, if the queue is barely used (by IS- | values may be too high. On the other hand, if the queue is barely | |||
IS), then the values may be too low. | used (by IS-IS), then the values may be too low. | |||
The values may also be absolute value reflecting relevant average | Alternatively, the values may be computed to reflect the relevant | |||
hardware resources that are monitored, typically the amount of buffer | average hardware resources, e.g., the amount of buffer space used by | |||
space used by incoming LSPs. In this case, care must be taken when | incoming LSPs. In this case, care must be taken when choosing the | |||
choosing the parameters influencing the values in order to avoid | parameters influencing the values in order to avoid undesirable or | |||
undesirable or unstable feedback loops. It would be undesirable to | unstable feedback loops. For example, it would be undesirable to use | |||
use a formula that depends, for example, on an active measurement of | a formula that depends on an active measurement of the instantaneous | |||
the instantaneous CPU load to modify the values advertised in the | CPU load to modify the values advertised in the Flooding Parameters | |||
Flooding Parameters TLV. This could introduce feedback into the IGP | TLV. This could introduce feedback into the IGP flooding process | |||
flooding process that could produce unexpected behavior. | that could produce unexpected behavior. | |||
6.2.5. Operation considerations | 6.2.5. Operational Considerations | |||
As discussed in Section 4.7, the solution is more effective on point- | As discussed in Section 4.7, the solution is more effective on point- | |||
to-point adjacencies. Hence a broadcast interface (e.g., Ethernet) | to-point adjacencies. Hence, a broadcast interface (e.g., Ethernet) | |||
only shared by two IS-IS neighbors should be configured as point-to- | only shared by two IS-IS neighbors should be configured as point-to- | |||
point in order to have more effective flooding. | point in order to have more effective flooding. | |||
6.3. Transmitter Based Congestion Control Approach | 6.3. Transmitter-Based Congestion Control Approach | |||
This section describes an approach to congestion control algorithm | This section describes an approach to the congestion control | |||
based on performance measured by the transmitter without dependance | algorithm based on performance measured by the transmitter without | |||
on signaling from the receiver. | dependence on signaling from the receiver. | |||
6.3.1. Router Architecture Discussion | 6.3.1. Router Architecture Discussion | |||
(The following description is an abstraction - implementation details | Note that the following description is an abstraction; implementation | |||
vary.) | details vary. | |||
Existing router architectures may utilize multiple input queues. On | Existing router architectures may utilize multiple input queues. On | |||
a given line card, IS-IS PDUs from multiple interfaces may be placed | a given line card, IS-IS PDUs from multiple interfaces may be placed | |||
in a rate-limited input queue. This queue may be dedicated to IS-IS | in a rate-limited input queue. This queue may be dedicated to IS-IS | |||
PDUs or may be shared with other routing related packets. | PDUs or may be shared with other routing related packets. | |||
The input queue may then pass IS-IS PDUs to a "punt queue" which is | The input queue may then pass IS-IS PDUs to a "punt queue", which is | |||
used to pass PDUs from the data plane to the control plane. The punt | used to pass PDUs from the data plane to the control plane. The punt | |||
queue typically also has controls on its size and the rate at which | queue typically also has controls on its size and the rate at which | |||
packets will be punted. | packets will be punted. | |||
An input queue in the control plane may then be used to assemble PDUs | An input queue in the control plane may then be used to assemble PDUs | |||
from multiple linecards, separate the IS-IS PDUs from other types of | from multiple line cards, separate the IS-IS PDUs from other types of | |||
packets, and place the IS-IS PDUs on an input queue dedicated to the | packets, and place the IS-IS PDUs in an input queue dedicated to the | |||
IS-IS protocol. | IS-IS protocol. | |||
The IS-IS input queue then separates the IS-IS PDUs and directs them | The IS-IS input queue then separates the IS-IS PDUs and directs them | |||
to an instance-specific processing queue. The instance-specific | to an instance-specific processing queue. The instance-specific | |||
processing queue may then further separate the IS-IS PDUs by type | processing queue may then further separate the IS-IS PDUs by type | |||
(IIHs, SNPs, and LSPs) so that separate processing threads with | (IIHs, SNPs, and LSPs) so that separate processing threads with | |||
varying priorities may be employed to process the incoming PDUs. | varying priorities may be employed to process the incoming PDUs. | |||
In such an architecture, it may be difficult for IS-IS in the control | In such an architecture, it may be difficult for IS-IS in the control | |||
plane to determine what value should be advertised as a receive | plane to determine what value should be advertised as a receive | |||
window. | window. | |||
The following section describes an approach to congestion control | The following section describes an approach to congestion control | |||
based on performance measured by the transmitter without dependance | based on performance measured by the transmitter without dependence | |||
on signaling from the receiver. | on signaling from the receiver. | |||
6.3.2. Guidelines for transmitter side congestion controls | 6.3.2. Guidelines for Transmitter-Side Congestion Controls | |||
The approach described in this section does not depend upon direct | The approach described in this section does not depend upon direct | |||
signaling from the receiver. Instead it adapts the transmission rate | signaling from the receiver. Instead, it adapts the transmission | |||
based on measurement of the actual rate of acknowledgments received. | rate based on measurement of the actual rate of acknowledgments | |||
received. | ||||
Flow control is not used by this approach. When congestion control | Flow control is not used by this approach. When congestion control | |||
is necessary, it can be implemented based on knowledge of the current | is necessary, it can be implemented based on knowledge of the current | |||
flooding rate and the current acknowledgement rate. The algorithm | flooding rate and the current acknowledgment rate. The algorithm | |||
used is a local matter. There is no requirement to standardize it | used is a local matter. There is no requirement to standardize it, | |||
but there are a number of aspects which serve as guidelines which can | but there are a number of aspects that serve as guidelines that can | |||
be described. Algorithms based on this approach should follow the | be described. Algorithms based on this approach should follow the | |||
recommendations described below. | recommendations described below. | |||
A maximum LSP transmission rate (LSPTxMax) should be configurable. | A maximum LSP transmission rate (LSPTxMax) should be configurable. | |||
This represents the fastest LSP transmission rate which will be | This represents the fastest LSP transmission rate that will be | |||
attempted. This value should be applicable to all interfaces and | attempted. This value should be applicable to all interfaces and | |||
should be consistent network wide. | should be consistent network wide. | |||
When the current rate of LSP transmission (LSPTxRate) exceeds the | When the current rate of LSP transmission (LSPTxRate) exceeds the | |||
capabilities of the receiver, the congestion control algorithm needs | capabilities of the receiver, the congestion control algorithm needs | |||
to quickly and aggressively reduce the LSPTxRate. Slower | to quickly and aggressively reduce the LSPTxRate. Slower | |||
responsiveness is likely to result in a larger number of | responsiveness is likely to result in a larger number of | |||
retransmissions which can introduce much longer delays in | retransmissions, which can introduce much longer delays in | |||
convergence. | convergence. | |||
Dynamic increase of the rate of LSP transmission (LSPTxRate) (i.e., | Dynamic increase of the rate of LSP transmission (LSPTxRate), i.e., | |||
faster) should be done less aggressively and only be done when the | making the rate faster, should be done less aggressively and only be | |||
neighbor has demonstrated its ability to sustain the current | done when the neighbor has demonstrated its ability to sustain the | |||
LSPTxRate. | current LSPTxRate. | |||
The congestion control algorithm should not assume the receive | The congestion control algorithm should not assume that the receive | |||
performance of a neighbor is static, i.e., it should handle transient | performance of a neighbor is static, i.e., it should handle transient | |||
conditions which result in a slower or faster receive rate on the | conditions that result in a slower or faster receive rate on the part | |||
part of a neighbor. | of a neighbor. | |||
The congestion control algorithm should consider the expected delay | The congestion control algorithm should consider the expected delay | |||
time in receiving an acknowledgment. It therefore incorporates the | time in receiving an acknowledgment. Therefore, it incorporates the | |||
neighbor partialSNPInterval (Section 4.5) to help determine whether | neighbor partialSNPInterval (Section 4.5) to help determine whether | |||
acknowlegments are keeping pace with the rate of LSPs transmitted. | acknowledgments are keeping pace with the rate of LSPs transmitted. | |||
In the absence of an advertisement of partialSNPInterval, a locally | In the absence of an advertisement of partialSNPInterval, a locally | |||
configured value can be used. | configured value can be used. | |||
7. IANA Considerations | 7. IANA Considerations | |||
7.1. Flooding Parameters TLV | 7.1. Flooding Parameters TLV | |||
IANA has made the following temporary allocation from the IS-IS TLV | IANA has made the following allocation in the "IS-IS Top-Level TLV | |||
codepoint registry. This document requests the allocation be made | Codepoints" registry. | |||
permanent. | ||||
Type Description IIH LSP SNP Purge | +=======+=========================+=====+=====+=====+=======+ | |||
---- --------------------------- --- --- --- --- | | Value | Name | IIH | LSP | SNP | Purge | | |||
21 Flooding Parameters TLV y n y n | +=======+=========================+=====+=====+=====+=======+ | |||
| 21 | Flooding Parameters TLV | y | n | y | n | | ||||
+-------+-------------------------+-----+-----+-----+-------+ | ||||
Figure 3 | Table 1 | |||
7.2. Registry: IS-IS Sub-TLV for Flooding Parameters TLV | 7.2. Registry: IS-IS Sub-TLV for Flooding Parameters TLV | |||
This document creates the following sub-TLV Registry under the "IS-IS | IANA has created the following sub-TLV registry in the "IS-IS TLV | |||
TLV Codepoints" grouping: | Codepoints" registry group. | |||
Name: IS-IS Sub-TLVs for Flooding Parameters TLV. | ||||
Registration Procedure(s): Expert Review | ||||
Expert(s): TBD | ||||
Description: This registry defines sub-TLVs for the Flooding | ||||
Parameters TLV(21). | ||||
Reference: This document. | Name: IS-IS Sub-TLVs for Flooding Parameters TLV | |||
Registration Procedure(s): Expert Review | ||||
Description: This registry defines sub-TLVs for the Flooding | ||||
Parameters TLV (21). | ||||
Reference: RFC 9681 | ||||
+=======+===========================+ | +=======+===========================+ | |||
| Type | Description | | | Type | Description | | |||
+=======+===========================+ | +=======+===========================+ | |||
| 0 | Reserved | | | 0 | Reserved | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
| 1 | LSP Burst Size | | | 1 | LSP Burst Size | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
| 2 | LSP Transmission Interval | | | 2 | LSP Transmission Interval | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
| 3 | LSPs Per PSNP | | | 3 | LSPs per PSNP | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
| 4 | Flags | | | 4 | Flags | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
| 5 | Partial SNP Interval | | | 5 | PSNP Interval | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
| 6 | Receive Window | | | 6 | Receive Window | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
| 7-255 | Unassigned | | | 7-255 | Unassigned | | |||
+-------+---------------------------+ | +-------+---------------------------+ | |||
Table 1: Initial Sub-TLV | Table 2: Initial Sub-TLV | |||
allocations for Flooding | Allocations for Flooding | |||
Parameters TLV | Parameters TLV | |||
7.3. Registry: IS-IS Bit Values for Flooding Parameters Flags Sub-TLV | 7.3. Registry: IS-IS Bit Values for Flooding Parameters Flags Sub-TLV | |||
This document requests IANA to create a new registry, under the "IS- | IANA has created a new registry, in the "IS-IS TLV Codepoints" | |||
IS TLV Codepoints" grouping, for assigning Flag bits advertised in | registry group, for assigning Flag bits advertised in the Flags sub- | |||
the Flags sub- TLV. | TLV. | |||
Name: IS-IS Bit Values for Flooding Parameters Flags Sub-TLV. | ||||
Registration Procedure: Expert Review | ||||
Expert Review Expert(s): TBD | ||||
Description: This registry defines bit values for the Flags sub- | ||||
TLV(4) advertised in the Flooding Parameters TLV(21). | ||||
Note: In order to minimize encoding space, a new allocation should | ||||
pick the smallest available value. | ||||
Reference: This document. | Name: IS-IS Bit Values for Flooding Parameters Flags Sub-TLV | |||
Registration Procedure: Expert Review | ||||
Description: This registry defines bit values for the Flags sub-TLV | ||||
(4) advertised in the Flooding Parameters TLV (21). | ||||
Note: In order to minimize encoding space, a new allocation should | ||||
pick the smallest available value. | ||||
Reference: RFC 9681 | ||||
+=======+==================================+ | +=======+=================================+ | |||
| Bit # | Description | | | Bit # | Description | | |||
+=======+==================================+ | +=======+=================================+ | |||
| 0 | Ordered acknowledgement (O-flag) | | | 0 | Ordered acknowledgment (O-flag) | | |||
+-------+----------------------------------+ | +-------+---------------------------------+ | |||
| 1-63 | Unassigned | | | 1-63 | Unassigned | | |||
+-------+----------------------------------+ | +-------+---------------------------------+ | |||
Table 2: Initial bit allocations for | Table 3: Initial Bit Allocations for | |||
Flags Sub-TLV | Flags Sub-TLV | |||
8. Security Considerations | 8. Security Considerations | |||
Security concerns for IS-IS are addressed in [ISO10589] , [RFC5304] , | Security concerns for IS-IS are addressed in [ISO10589], [RFC5304], | |||
and [RFC5310] . These documents describe mechanisms that provide for | and [RFC5310]. These documents describe mechanisms that provide for | |||
the authentication and integrity of IS-IS PDUs, including SNPs and | the authentication and integrity of IS-IS PDUs, including SNPs and | |||
IIHs. These authentication mechanisms are not altered by this | IIHs. These authentication mechanisms are not altered by this | |||
document. | document. | |||
With the cryptographic mechanisms described in [RFC5304] and | With the cryptographic mechanisms described in [RFC5304] and | |||
[RFC5310] , an attacker wanting to advertise an incorrect Flooding | [RFC5310], an attacker wanting to advertise an incorrect Flooding | |||
Parameters TLV would have to first defeat these mechanisms. | Parameters TLV would have to first defeat these mechanisms. | |||
In the absence of cryptographic authentication, as IS-IS does not run | In the absence of cryptographic authentication, as IS-IS does not run | |||
over IP but directly over the link layer, it's considered difficult | over IP but directly over the link layer, it's considered difficult | |||
to inject false SNP/IIH without having access to the link layer. | to inject a false SNP or IIH without having access to the link layer. | |||
If a false SNP/IIH is sent with a Flooding Parameters TLV set to | If a false SNP or IIH is sent with a Flooding Parameters TLV set to | |||
conservative values, the attacker can reduce the flooding speed | conservative values, the attacker can reduce the flooding speed | |||
between the two adjacent neighbors which can result in LSDB | between the two adjacent neighbors, which can result in LSDB | |||
inconsistencies and transient forwarding loops. However, it is not | inconsistencies and transient forwarding loops. However, it is not | |||
significantly different than filtering or altering LSPs which would | significantly different than filtering or altering LSPs, which would | |||
also be possible with access to the link layer. In addition, if the | also be possible with access to the link layer. In addition, if the | |||
downstream flooding neighbor has multiple IGP neighbors, which is | downstream flooding neighbor has multiple IGP neighbors (which is | |||
typically the case for reliability or topological reasons, it would | typically the case for reliability or topological reasons), it would | |||
receive LSPs at a regular speed from its other neighbors and hence | receive LSPs at a regular speed from its other neighbors and hence | |||
would maintain LSDB consistency. | would maintain LSDB consistency. | |||
If a false SNP/IIH is sent with a Flooding Parameters TLV set to | If a false SNP or IIH is sent with a Flooding Parameters TLV set to | |||
aggressive values, the attacker can increase the flooding speed which | aggressive values, the attacker can increase the flooding speed, | |||
can either overload a node or more likely generate loss of LSPs. | which can either overload a node or more likely cause loss of LSPs. | |||
However, it is not significantly different than sending many LSPs | However, it is not significantly different than sending many LSPs, | |||
which would also be possible with access to the link layer, even with | which would also be possible with access to the link layer, even with | |||
cryptographic authentication enabled. In addition, IS-IS has | cryptographic authentication enabled. In addition, IS-IS has | |||
procedures to detect the loss of LSPs and recover. | procedures to detect the loss of LSPs and recover. | |||
This TLV advertisement is not flooded across the network but only | This TLV advertisement is not flooded across the network but only | |||
sent between adjacent IS-IS neighbors. This would limit the | sent between adjacent IS-IS neighbors. This would limit the | |||
consequences in case of forged messages, and also limits the | consequences in case of forged messages and also limit the | |||
dissemination of such information. | dissemination of such information. | |||
9. Contributors | 9. References | |||
The following people gave a substantial contribution to the content | ||||
of this document and should be considered as coauthors: | ||||
* Jayesh J, Ciena, jayesh.ietf@gmail.com | ||||
* Chris Bowers, Juniper Networks, cbowers@juniper.net | ||||
* Peter Psenak, Cisco Systems, ppsenak@cisco.com | ||||
10. Acknowledgments | ||||
The authors would like to thank Henk Smit, Sarah Chen, Xuesong Geng, | ||||
Pierre Francois, Hannes Gredler, Acee Lindem, Mirja Kuhlewind, | ||||
Zaheduzzaman Sarker and John Scudder for their reviews, comments and | ||||
suggestions. | ||||
The authors would like to thank David Jacquet, Sarah Chen, and | ||||
Qiangzhou Gao for the tests performed on commercial implementations | ||||
and their identification of some limiting factors. | ||||
11. References | ||||
11.1. Normative References | 9.1. Normative References | |||
[ISO10589] ISO, "Intermediate system to Intermediate system intra- | [ISO10589] ISO/IEC, "Information technology - Telecommunications and | |||
domain routeing information exchange protocol for use in | information exchange between systems - Intermediate system | |||
conjunction with the protocol for providing the | to Intermediate system intra-domain routeing information | |||
connectionless-mode Network Service (ISO 8473)", ISO/ | exchange protocol for use in conjunction with the protocol | |||
IEC 10589:2002, Second Edition, November 2002. | for providing the connectionless-mode network service (ISO | |||
8473)", Second Edition, ISO/IEC 10589:2002, November 2002, | ||||
<https://www.iso.org/standard/30932.html>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC5304] Li, T. and R. Atkinson, "IS-IS Cryptographic | [RFC5304] Li, T. and R. Atkinson, "IS-IS Cryptographic | |||
Authentication", RFC 5304, DOI 10.17487/RFC5304, October | Authentication", RFC 5304, DOI 10.17487/RFC5304, October | |||
2008, <https://www.rfc-editor.org/info/rfc5304>. | 2008, <https://www.rfc-editor.org/info/rfc5304>. | |||
skipping to change at page 25, line 19 ¶ | skipping to change at line 1097 ¶ | |||
[RFC6298] Paxson, V., Allman, M., Chu, J., and M. Sargent, | [RFC6298] Paxson, V., Allman, M., Chu, J., and M. Sargent, | |||
"Computing TCP's Retransmission Timer", RFC 6298, | "Computing TCP's Retransmission Timer", RFC 6298, | |||
DOI 10.17487/RFC6298, June 2011, | DOI 10.17487/RFC6298, June 2011, | |||
<https://www.rfc-editor.org/info/rfc6298>. | <https://www.rfc-editor.org/info/rfc6298>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
11.2. Informative References | 9.2. Informative References | |||
[I-D.ietf-lsr-dynamic-flooding] | ||||
Li, T., Psenak, P., Chen, H., Jalil, L., and S. Dontula, | ||||
"Dynamic Flooding on Dense Graphs", Work in Progress, | ||||
Internet-Draft, draft-ietf-lsr-dynamic-flooding-18, 5 | ||||
April 2024, <https://datatracker.ietf.org/doc/html/draft- | ||||
ietf-lsr-dynamic-flooding-18>. | ||||
[RFC2973] Balay, R., Katz, D., and J. Parker, "IS-IS Mesh Groups", | [RFC2973] Balay, R., Katz, D., and J. Parker, "IS-IS Mesh Groups", | |||
RFC 2973, DOI 10.17487/RFC2973, October 2000, | RFC 2973, DOI 10.17487/RFC2973, October 2000, | |||
<https://www.rfc-editor.org/info/rfc2973>. | <https://www.rfc-editor.org/info/rfc2973>. | |||
[RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion | [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion | |||
Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, | Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, | |||
<https://www.rfc-editor.org/info/rfc5681>. | <https://www.rfc-editor.org/info/rfc5681>. | |||
[RFC9002] Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | [RFC9002] Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | |||
and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | |||
May 2021, <https://www.rfc-editor.org/info/rfc9002>. | May 2021, <https://www.rfc-editor.org/info/rfc9002>. | |||
[RFC9293] Eddy, W., Ed., "Transmission Control Protocol (TCP)", | [RFC9293] Eddy, W., Ed., "Transmission Control Protocol (TCP)", | |||
STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022, | STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022, | |||
<https://www.rfc-editor.org/info/rfc9293>. | <https://www.rfc-editor.org/info/rfc9293>. | |||
Appendix A. Changes / Author Notes | [RFC9667] Li, T., Ed., Psenak, P., Ed., Chen, H., Jalil, L., and S. | |||
Dontula, "Dynamic Flooding on Dense Graphs", RFC 9667, | ||||
[RFC Editor: Please remove this section before publication] | DOI 10.17487/RFC9667, October 2024, | |||
<https://www.rfc-editor.org/info/rfc9667>. | ||||
IND 00: Initial version. | ||||
WG 00: No change. | ||||
WG 01: IANA allocated code point. | ||||
WG 02: No change. | Acknowledgments | |||
WG 03: | The authors would like to thank Henk Smit, Sarah Chen, Xuesong Geng, | |||
Pierre Francois, Hannes Gredler, Acee Lindem, Mirja Kühlewind, | ||||
Zaheduzzaman Sarker, and John Scudder for their reviews, comments, | ||||
and suggestions. | ||||
* Pacing section added (taken from RFC 9002). | The authors would like to thank David Jacquet, Sarah Chen, and | |||
Qiangzhou Gao for the tests performed on commercial implementations | ||||
and for their identification of some limiting factors. | ||||
* Some text borrowed from RFC 9002 (QUIC Loss Detection and | Contributors | |||
Congestion Control). | ||||
* Considerations on the special role of the DIS. | The following people gave substantial contributions to the content of | |||
this document and should be considered as coauthors: | ||||
* Editorial changes. | Jayesh J | |||
Ciena | ||||
Email: jayesh.ietf@gmail.com | ||||
WG 04: Update IANA section as per IANA editor comments (2023-03-23). | Chris Bowers | |||
Juniper Networks | ||||
Email: cbowers@juniper.net | ||||
WG 06: AD review. | Peter Psenak | |||
Cisco Systems | ||||
Email: ppsenak@cisco.com | ||||
Authors' Addresses | Authors' Addresses | |||
Bruno Decraene | Bruno Decraene | |||
Orange | Orange | |||
Email: bruno.decraene@orange.com | Email: bruno.decraene@orange.com | |||
Les Ginsberg | Les Ginsberg | |||
Cisco Systems | Cisco Systems | |||
821 Alder Drive | 821 Alder Drive | |||
skipping to change at page 27, line 4 ¶ | skipping to change at line 1174 ¶ | |||
Guillaume Solignac | Guillaume Solignac | |||
Email: gsoligna@protonmail.com | Email: gsoligna@protonmail.com | |||
Marek Karasek | Marek Karasek | |||
Cisco Systems | Cisco Systems | |||
Pujmanove 1753/10a, Prague 4 - Nusle | Pujmanove 1753/10a, Prague 4 - Nusle | |||
10 14000 Prague | 10 14000 Prague | |||
Czech Republic | Czech Republic | |||
Email: mkarasek@cisco.com | Email: mkarasek@cisco.com | |||
Gunter Van de Velde | Gunter Van de Velde | |||
Nokia | Nokia | |||
Copernicuslaan 50 | Copernicuslaan 50 | |||
2018 Antwerp | 2018 Antwerp | |||
Belgium | Belgium | |||
Email: gunter.van_de_velde@nokia.com | Email: gunter.van_de_velde@nokia.com | |||
Tony Przygienda | Tony Przygienda | |||
Juniper | Juniper | |||
1137 Innovation Way | 1133 Innovation Way | |||
Sunnyvale, Ca | Sunnyvale, CA 94089 | |||
United States of America | United States of America | |||
Email: prz@juniper.net | Email: prz@juniper.net | |||
End of changes. 178 change blocks. | ||||
570 lines changed or deleted | 531 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |