Internet-Draft | FTC Algorithm | November 2021 |
Chen, et al. | Expires 25 May 2022 | [Page] |
This document proposes an algorithm for a node to compute a flooding topology, which is a subgraph of the complete topology per underline physical network. When every node in an area automatically calculates a flooding topology by using a same algorithm and floods the link states using the flooding topology, the amount of flooding traffic in the network is greatly reduced. This would reduce convergence time with a more stable and optimized routing environment.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119].¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
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 and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 25 May 2022.¶
Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
For some networks such as dense Data Center (DC) networks, the existing Link State (LS) flooding mechanism is not efficient and may have some issues. The extra LS flooding consumes network bandwidth. Processing the extra LS flooding, including receiving, buffering and decoding the extra LSs, wastes memory space and processor time. This may cause scalability issues and affect the network convergence negatively.¶
This document proposes an algorithm for a node to compute a flooding topology, which is a subgraph of the complete topology per underline physical network. The physical network can be any network, including clos leaf spine network. It can be used in the distributed mode of flooding topology computation for flooding reduction and the centralized mode, which are described in [I-D.ietf-lsr-dynamic-flooding]. When the distributed mode is selected, every node in an area automatically calculates a flooding topology by using a same algorithm and floods the link states using the flooding topology, the amount of flooding traffic in the network is greatly reduced. This would reduce convergence time with a more stable and optimized routing environment.¶
There may be multiple algorithms for computing a flooding topology. Users can select one they prefer, and smoothly switch from one to another.¶
For a given network topology, a flooding topology is a sub-graph or sub-network of the given network topology that has the same reachability to every node as the given network topology. Thus all the nodes in the given network topology MUST be in the flooding topology. All the nodes MUST be inter-connected directly or indirectly. As a result, LS flooding will in most cases occur only on the flooding topology, that includes all nodes but a subset of links. Note even though the flooding topology is a sub-graph of the original topology, any single LS MUST still be disseminated in the entire network.¶
Many different flooding topologies can be constructed for a given network topology. For example, a chain connecting all the nodes in the given network topology is a flooding topology. A circle connecting all the nodes is another flooding topology. A tree connecting all the nodes is a flooding topology. In addition, the tree plus the connections between some leaves of the tree and branch nodes of the tree is a flooding topology.¶
The following parameters need to be considered for constructing a flooding topology:¶
Note that the flooding topology constructed by a node is dynamic in nature, that means when the base topology (the entire topology graph) changes, the flooding topology (the sub-graph) MUST be re-computed/re-constructed to ensure that any node that is reachable on the base topology MUST also be reachable on the flooding topology.¶
There are many algorithms to compute a flooding topology. A simple and efficient one is briefed, which comprises:¶
The algorithm is described below, where a variable MaxD with an initial value 3, data structures candidate queue Cq and flooding topology FT are used. Cq and FT comprise elements of form (N, D, PHs), where N represents a Node, D is the Degree of node N, and PHs contains the Previous Hops of node N. The detailed FT computation by the algorithm is illustrated in Appendix A through an example.¶
The algorithm starts from node R0 as root with¶
There may be some constraints on some nodes in a network. For example, in a spine-and-leaf network, there may be a constraint on the degree of every leaf node on the flooding topology, which is that the degree of every leaf node is not greater than a given number ConMaxD of value 2. For each of the other nodes such as the spine nodes, there is no such constraint, that is that ConMaxD is a huge number for each of these nodes.¶
Step 1 of the algorithm described above is updated below to consider this constraint. In addition to checking constraint PH's D < MaxD, step 1 checks another constraint PH's D < PH's ConMaxD.¶
This document does not introduce any new security issue.¶
Under Registry Name: "IGP Algorithm Type For Computing Flooding Topology" under an existing "Interior Gateway Protocol (IGP) Parameters" IANA registries (refer to Section 7.3. IGP [I-D.ietf-lsr-dynamic-flooding]), IANA is requested to assign one value of IGP Algorithm Type For Computing Flooding Topology as follows:¶
+==========+========================================+=============+ |Type Value| Type Name | reference | +==========+========================================+=============+ | 1 | Breadth First Minimum Degree Algorithm |This document| +----------+----------------------------------------+-------------+ | 2 | Breadth First Leaf Constraint Algorithm|This document| +----------+----------------------------------------+-------------+¶
The authors would like to thank Dean Cheng, Acee Lindem, Zhibo Hu, Robin Li, Stephane Litkowski and Alvaro Retana for their valuable suggestions and comments on this draft.¶
This section presents the details on FT computation by the algorithm through an example. The detailed procedure of computing a FT for a network of five nodes with full mess connections is illustrated. Suppose that the network has five nodes R0, R1, R2, R3 and R4; R0's ID < R1's ID < R2's ID < R3's ID < R4's ID. The algorithm starts with MaxD = 3, FT = {(R0, D=0, PH={})}, Cq = { (R1,0,{R0}), (R2,0,{R0}), (R3,0,{R0}), (R4,0,{R0}) }.¶
1. //remove first element (R1,D=0,PHs={R0}) from Cq, R0's D=0 < MaxD Cq = { (R2,0,{R0}), (R3,0,{R0}), (R4,0,{R0}) }; // add (R1,1,{R0}) into FT, increase PH R0's D by one FT = { (R0,1, { }), (R1,1, {R0}) }; // Link R1--R0 on FT ^^^ ^^^^^^^^^^^^ // for Ri connected to R1 (in Cq) not on FT, append R1 to Ri's PHs Cq = { (R2,0, {R0,R1}), (R3,0, {R0,R1}), (R4,0,{R0,R1}) }. ^^ ^^ ^^ R0 ==== Link on FT __//== O ---\__ __// / \ \__ link R1--R0 added to FT __// / \ \__ __// / \ \__ // / \ \ R1 O--\_--------/---------\--------_/--O R4 \ \____ / \ ____/ / \ \/ \/ / \ /\_____ ____/\ / \ / ___\__/___ \ / \ / / \ \ / \/____/ \___\/ R2 O --------------------- O R3¶
2. // remove the first element (R2,0, {R0,R1}) from Cq, R0's D=1 < MaxD Cq = { (R3,0, {R0,R1}), (R4,0,{R0,R1}) } // add (R2,1,{R0}) into FT, increase R0's D by one FT = { (R0,2,{ }), (R1,1,{R0}), (R2,1,{R0}) } //Link R2--R0 on FT ^^^ ^^^^^^^^^^^ // for Ri connected to R2 (in Cq) not on FT, append R2 to Ri's PHs Cq = { (R3,0, {R0,R1,R2}), (R4,0,{R0,R1,R2}) } ^^ ^^ R0 ==== Link on FT __//== O ---\__ __// // \ \__ link R2--R0 added to FT __// // \ \__ __// // \ \__ // // \ \ R1 O--\_-------//---------\--------_/--O R4 \ \____ // \ ____/ / \ \/ \/ / \ //\_____ ____/\ / \ // ___\__/___ \ / \ // / \ \ / \/____/ \___\/ R2 O --------------------- O R3¶
3. //remove the 1st element (R3,0,{R0,R1,R2}) from Cq, R0's D=2 < MaxD Cq = { (R4,0,{R0,R1,R2}) } // add (R3,1,{R0}) into FT, increase R0's D by one FT = { (R0,3,{}), (R1,1,{R0}), (R2,1,{R0}), (R3,1,{R0}) } ^^^ ^^^^^^^^^^^ // for Ri connected to R3 (in Cq) not on FT, append R3 to Ri's PHs Cq = { (R4,0,{R0,R1,R2,R3}) }. ^^ R0 ==== Link on FT __//== O ---\__ __// // \\ \__ link R3--R0 added to FT __// // \\ \__ __// // \\ \__ // // \\ \ R1 O--\_-------//---------\\-------_/--O R4 \ \____ // \\ ____/ / \ \/ \/ / \ //\_____ ____/\\ / \ // ___\__/___ \\ / \ // / \ \\ / \/____/ \___\/ R2 O --------------------- O R3¶
4. //remove the 1st element (R4,0,{R0,R1,R2,R3}) from Cq,R1's D=1 < MaxD Cq = { } // add (R4,1,{R1}) into FT, increase R1's D by one FT = {(R0,3,{}), (R1,2,{R0}), (R2,1,{R0}), (R3,1,{R0}), (R4,1,{R1})} ^^^ ^^^^^^^^^^^ R0 ==== Link on FT __//== O ---\__ __// // \\ \__ link R4--R1 added to FT __// // \\ \__ __// // \\ \__ // // \\ \ R1 O==\_=======//=========\\=======_/==O R4 \ \____ // \\ ____/ / \ \/ \/ / \ //\_____ ____/\\ / \ // ___\__/___ \\ / \ // / \ \\ / \/____/ \___\/ R2 O --------------------- O R3¶
All nodes are on FT now. In the following, for each node on FT whose D = 1 (from minimum to maximum ID), link L attached to it and not on FT is found such that L's remote node has minimum D and ID. L is added into FT.¶
5. // On FT, get node R2 with smallest ID whose D=1 FT = {(R0,3,{}),(R1,2,{R0}),(R2,1,{R0}),(R3,1,{R0}), (R4,1,{R1})} // Add link R2--R3 to FT, ^^^^^^^^^^^ // where R2--R3 is not on FT, R3's D=1 is minimum first and then // R3's ID is minimum (R3 and R4 tie for D), R2's D++ and R3's D++ FT = {(R0,3,{}),(R1,2,{R0}),(R2,2,{R0,R3}),(R3,2,{R0}),(R4,1,{R1})} ^^^ ^^ ^^^ R0 ==== Link on FT __//== O ---\__ __// // \\ \__ link R2--R3 added to FT __// // \\ \__ __// // \\ \__ // // \\ \ R1 O==\_=======//=========\\=======_/==O R4 \ \____ // \\ ____/ / \ \/ \/ / \ //\_____ ____/\\ / \ // ___\__/___ \\ / \ // / \ \\ / \/____/ \___\/ R2 O ===================== O R3¶
6. // On FT, get node R4 with smallest ID whose D=1 FT = {(R0,3,{}),(R1,2,{R0}),(R2,2,{R0,R3}),(R3,2,{R0}),(R4,1,{R1})} // Add link R4--R2 to FT, where ^^^^^^^^^^^ // R4--R2 is not on FT, R2's D=2 is minimum first and then R2's ID is // minimum (R2 and R3 tie for D), increase R2's D and R4's D by one FT = {(R0,3,{}),(R1,2,{R0}),(R2,3,{R0,R3}),(R3,2,{R0}),(R4,2,{R1,R2})} ^^^ ^^^ ^^ R0 ==== Link on FT __//== O ---\__ __// // \\ \__ link R4--R2 added to FT __// // \\ \__ __// // \\ \__ // // \\ \ R1 O==\_=======//=========\\=======//==O R4 \ \____ // \\ ____// / \ \/ \// / \ //\_____ ___//\\ / \ // ___\__//__ \\ / \ // // \ \\ / \/ _// \___\/ R2 O ==//================= O R3¶
FT is computed, which has Degree of 3 and Diameter of 2.¶