One document matched: draft-ohba-mpls-loop-prevention-01.txt
Differences from draft-ohba-mpls-loop-prevention-00.txt
Multi-Protocol Label Switching WG Yoshihiro Ohba
Internet-Draft Yasuhiro Katsube
Expiration Date: January 1999 Toshiba
Eric Rosen
Cisco Systems
Paul Doolan
Ennovate Networks
July 1998
MPLS Loop Prevention Mechanism
<draft-ohba-mpls-loop-prevention-01.txt>
Status of this Memo
This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas,
and its working groups. Note that other groups may also distribute
working documents as Internet-Drafts.
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."
To learn the current status of any Internet-Draft, please check the
"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
munnari.oz.au (Pacific Rim), ftp.ietf.org (US East Coast), or
ftp.isi.edu (US West Coast).
Abstract
This paper presents a simple mechanism, based on 'threads', which
can be used to prevent MPLS from setting up label switched path
(LSPs) which have loops. The mechanism is compatible with, but does
not require, VC merge. The mechanism can be used with either the
ingress-initiated ordered control or the egress-initiated ordered
control. The amount of information that must be passed in a
protocol message is tightly bounded (i.e., no path-vector is used).
When a node needs to change its next hop, a distributed procedure is
executed, but only nodes which are downstream of the change are
involved.
Ohba, et al. [Page 1]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
Table of contents
1 Introduction ........................................ 2
2 Definitions ......................................... 3
3 Thread mechanism .................................... 4
3.1 Thread ............................................. 4
3.2 Loop prevention algorithm ........................... 5
3.3 Why this works ...................................... 6
3.4 Using old path while looping on new path ............ 7
3.5 How to deal with egress-initiated ordered control ... 7
3.6 How to realize load splitting from the ingress node . 8
4 Modification to LDP specification ................... 8
4.1 LDP objects ......................................... 8
4.2 Advertisement class messages ........................ 10
5 Examples ............................................ 12
5.1 First example ....................................... 12
5.2 Second example ...................................... 16
6 Comparison with path-vector/diffusion method ........ 16
7 Security considerations ............................. 17
8 Intellectual property considerations ................ 17
9 References .......................................... 17
1. Introduction
This paper presents a simple mechanism, based on "threads", which
can be used to prevent MPLS from setting up label switched paths
(LSPs) which have loops. The thread mechanism is a generalization
of [1].
When an LSR finds that it has a new next hop for a particular FEC,
it creates a thread and extends it downstream. Each such thread is
assigned a unique "color", such that no two threads in the network
can have the same color.
Only a single thread for an LSP is ever extended to a particular
next hop as long as the thread length does not change. The only
state information that needs to be associated with a particular next
hop for a particular LSP is the thread color and length.
The procedures for determining just how far downstream a thread must
be extended are given in section 3.
If there is a loop, then some thread will arrive back at an LSR
through which it has already passed. This is easily detected, since
each thread has a unique color.
Section 3 provides procedures for determining that there is no loop.
When this is determined, the threads are "rewound" back to the point
of creation. As they are rewound, labels get assigned. Thus labels
are NOT assigned until loop freedom is guaranteed.
While a thread is extended, the LSRs through which it passes must
remember its color and length, but when the thread has been rewound,
Ohba, et al. [Page 2]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
they need only remember its length.
The thread mechanism works if some, all, or none of the LSRs in the
LSP support VC-merge. It can also be used with either the
ingress-initiated ordered control or the egress-initiated ordered
control [2,3].
The state information which must be carried in protocol messages,
and which must be maintained internally in state tables, is of fixed
size, independent of the length of the LSP. Thus the thread
mechanism is more scalable than alternatives which require that
path-vectors be carried.
To set up a new LSP after a routing change, the thread mechanism
requires communication only between nodes which are downstream of
the point of change. There is no need to communicate with nodes
that are upstream of the point of change. Thus the thread mechanism
is more robust than alternatives which require that a diffusion
computation be performed.
The thread mechanism contains a number of significant improvements
when compared to the mechanism described in the previous version of
this internet draft. In particular:
o The thread mechanism allows a node whose next hop changes to
continue using the old LSP while setting up the new LSP (or
while waiting for the L3 routing to stabilize, so that a new
loop-free LSP can be set up)
o When a loop is detected, path setup is delayed, but it is
automatically resumed when the L3 routing stabilizes and the
loop disappears. No retry timers are needed.
o "Color" only has to be remembered while a path is being set up.
Once it is set up, the "color" (though not the length) can be
forgotten.
In this paper, we assume unicast LSPs. The loop prevention for
multicast LSPs is for further study.
2. Definitions
An LSP for a particular Forwarding Equivalence Class (FEC) [4] can
be thought of as a tree whose root is the egress LSR for that FEC.
With respect to a given node in the tree, we can speak of its
"downstream link" as the link which is closest to the root; the
node's other edges are "upstream links".
The term "link", as used here, refers to a particular relationship
on the tree, rather than to a particular physical relationship. In
the remainder of this section, when we will speak of the upstream
and downstream links of a node, we are speaking with reference to a
single LSP tree for a single FEC.
Ohba, et al. [Page 3]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
In the case of non-VC-merging, multiple links of the same FEC
between the neighboring nodes must be identified by identifiers that
are locally assigned by the upstream node of the links.
A leaf node is a node which has no upstream links.
A "trigger node" is any node which (a) acquires a new next hop
(i.e., either changes its next hop, or gets a next hop when it
previously had none) for a particular FEC, and (b) needs to have an
LSP for that FEC.
An LSP length at a node is represented by a hop count from the
furthest leaf node to that node. The LSP length at a leaf node is
zero.
In the remainder of the paper, we assume the "downstream-on-demand"
is used as the label allocation method between neighboring nodes,
although the thread mechanism is applicable to the upstream
allocation method.
3. Thread mechanism
3.1. Thread
A thread is an object used for representing a loop-prevention
process which extends downstream. The downstream end of a thread is
referred to as the "thread head".
A thread has a color that is assigned at the node that creates the
thread. The color is globally unique in the FEC.
A thread is always associated with a particular LSP (for a
particular FEC). The "length" of a thread is the number of hops
from the thread head to the node which is furthest upstream of it on
the LSP. An "unknown" length which is greater than any other known
length is used in a certain situation (see section 3.2).
A thread has a TTL which is decremented by one (except for a special
"infinity" value, see section 4) as the thread is extended without
changing its color.
For a given LSP, at a given LSR, there can be one "incoming thread"
for each upstream neighbor, and one "outgoing thread" to the
downstream neighbor. That is, one of the incoming threads is
extended downstream. If a node is the creator of a thread, the
thread becomes a "virtual incoming thread" whose upstream neighbor
is the node itself. A non-virtual incoming thread is referred to as
an "actual incoming thread".
When a thread is extended, it retains its color, but its length
becomes the maximum incoming thread length plus 1.
Ohba, et al. [Page 4]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
If a thread head of a given color reaches a node which already has a
thread of that color, then a loop has been detected.
When a node changes the color of its outgoing thread, it notifies
its downstream neighbor by means of LDP messages. The downstream
neighbor must process these messages in order.
3.2. Loop prevention algorithm
The ingress-initiated ordered control is assumed here, however, the
algorithm can be adapted to egress-initiated ordered control (see
section 3.4).
When a trigger node requests a label assignment to its downstream
neighbor, it creates a thread and extends it downstream.
The thread is given an initial length corresponding to the number of
hops between the trigger node and the furthest upstream leaf. It is
given a color which consists of the trigger node's IP address,
prepended to an event identifier which is assigned by the trigger
node. The trigger node will never reuse an event identifier until
sufficient time has passed so that we can be sure that no other node
in the network has any memory of the corresponding color.
A colored thread is extended downstream until one of the following
events occurs:
(i) the thread head reaches an egress node;
(ii) the thread head reaches a node where there is already an
ESTABLISHED LSP for the thread, with a KNOWN length which is no
less than the thread length;
(iii) the thread head reaches a node which already has an actual or
a virtual incoming thread of that color;
(iv) the thread TTL becomes zero;
(v) the thread head reaches a node where the maximum incoming thread
length is not updated and there is another actual incoming
thread.
o In the case of (i) or (ii), the thread is assured to reach the
egress node without forming a loop. Therefore the thread is
"rewound". When a thread is rewound, each node takes the
following actions. For each upstream link, it assigns a label
to the LSP and distributes that label LSP upstream, if needed.
It resets all incoming and outgoing thread colors to
"transparent". It sets the longest length among actual incoming
threads to the LSP length. If the outgoing thread length is
"unknown" and the obtained LSP length becomes known, it notifies
downstream of the LSP length (by using a "transparent" thread).
Ohba, et al. [Page 5]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
When the thread is rewound back to the trigger node, the LSP
setup completes.
o In the case of (iii) and (iv), the thread is neither extended
nor rewound. It is blocked at the node. In the case of (iii),
the following actions are taken. If the node is not the creator
of the thread, it creates a new thread with "unknown" length and
extends it downstream. Otherwise, if it is not a leaf node and
there is no other actual incoming thread, it withdraws the
outgoing thread (this will cause a thread reconstruction, see
section 3.3).
o In the case of (v), the received thread is "merged" into the
outgoing thread and no message is sent to the downstream
neighbor.
When a trigger node is attempting to set up a new LSP, it also tells
its old next hop that it is withdrawing the thread that goes through
it to the old next hop. This will cause the old next hop to
withdraw one of its incoming threads.
When an incoming thread is withdrawn, if there is no actual incoming
thread, the outgoing thread is also withdrawn unless the node
becomes a new leaf node. Otherwise, if it is the one currently
being extended, a new thread is created and extended.
A transparent thread is extended when a node notifies the downstream
neighbor on an established LSP of an LSP length update or a thread
withdrawal without releasing the LSP. No rewinding is needed for
transparent threads.
A virtual incoming thread is removed when the corresponding outgoing
thread is replaced or withdrawn.
3.3. Why this works
The above procedures ensure that once a looping thread is detected,
path setup along the LSRs in that thread is effectively stalled
until the L3 routing changes so as to remove the loop.
How can we be sure that the any L3 loop will be detected by these
procedures when a thread length is NOT "unknown"?
Consider a sequence of LSRs <R1, ..., Rn>, such that there is a loop
traversing the LSRs in the sequence. (I.e., packets from R1 go to
R2, then to R3, etc., then to Rn, and then from Rn to R1.)
Remember that after a routing change, a path cannot be set up (i.e.,
labels cannot be assigned) until the thread resulting from the
routing change is rewound, and the act of rewinding the thread
causes the thread lengths to be set consistently along the path.
Suppose that the thread length of the link between R1 and R2 is k.
Ohba, et al. [Page 6]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
Then by the above procedures, the length of the link between Rn and
R1 must be k+n-1. But the above procedures also ensure that if a
node has an incoming thread of length j, its outgoing thread must be
at least of length j+1. Hence, if we assume that the loop is not
detected by the above procedure, the thread length of the link
between R1 and R2 must be at least k+n. From this we may derive the
absurd conclusion that n=0, and we may therefore conclude that there
is no such sequence of LSRs.
When a thread of "unknown" length gets into an L3 loop, however,
there is a situation in which the thread is merged into another
thread of "unknown" length. In this case, the L3 loop would not be
explicitly detected, but the thread is effectively stalled in the
loop until the L3 routing changes so as to remove the loop.
Inversely, how can we be sure that no loop detection occurs when
there is no loop?
Since every new path setup or release attempt that changes an LSP
length causes the use of a new color, condition (iii) cannot obtain
unless there actually is an L3 routing loop.
Next, why thread reconstructions are needed?
When a thread loop is detected, imagine a thread tree whose root is
the thread head. If there is a leaf which is not an LSP leaf in
that tree, then the thread will not disappear even after all LSP
leaf node withdraw their threads. The thread reconstruction is
performed to change the location of the thread head to the proper
node where any leaf of the thread tree is an LSP leaf node.
In the above procedure, multiple thread updates may happen if
several leaf nodes start extending threads at the same time. How
can we prevent multiple threads from looping unlimitedly?
In the procedure, when a node detects a thread loop by condition
(iii), it creates a new thread of "unknown" length. All the looping
threads which later arrive at the node would be merged into this
thread. Such a thread of "unknown" length behaves like a thread
absorber. Furthermore, the thread TTL mechanism can eliminate any
kind of thread looping.
3.4. Using old path while looping on new path
When a route changes, one might want to continue to use the old path
if the new route is looping. This is archived simply by holding the
label assigned to the downstream link on the old path until the
thread head on the new route returns. This is an implementation
choice.
3.5. How to deal with egress-initiated ordered control
Ohba, et al. [Page 7]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
The thread mechanism can be also adapted to the egress-initiated
ordered control by originating a thread when a node newly receives
an advertisement message [5] from the downstream node.
Note that a node which has no upstream link for the LSP yet behaves
as a leaf. In the case where the tree is being initially built up
(e.g., the egress node has just come up), each node in turn will
behave as a leaf for a short period of time.
3.6. How to realize load splitting from the ingress node
The load splitting from the ingress node can be easily realized by
assigning a different colored thread to each downstream link.
4. Modification to LDP specification
A new advertisement class message, Update is added to the current
specification [5]. In addition, two new objects, Thread object and
Request ID object are defined.
When a thread of a particular LSP is extended on a downstream link,
if a label is not still allocated for that link, a Request message
is used for carrying the thread as well as for requesting a label,
otherwise, an Update message is used for extending the thread on the
downstream link where a label already exists.
When a node wants to withdraw an outgoing thread as well as
the downstream link, a Release message is used.
When a Mapping message is returned to an upstream node in response
to a Request message, it is treated as an indication of thread
rewinding (i.e., acknowledgments for loop-prevention check).
For an Update message, an ACK message is returned and treated as an
indication of thread rewinding, except for an Update containing a
special "transparent" thread. (See section 4.1.2.)
4.1. LDP objects
4.1.1. Request ID object
The object type of Request ID object is TBA.
+-----------------------+-------+--------------------------+----------+
| OBJECT | Type | Subtype(s) | Length |
+-----------------------+-------+--------------------------+----------+
| Request ID | TBA | 0x01 Default | 4 |
+-------------------------------+--------------------------+----------+
The Request ID object contains the information for identifying
multiple LSPs of the same SMD.
Ohba, et al. [Page 8]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
SubType = 0x01 Default
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Request ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Request ID
This four-octet quantity contains a request-id which is
locally assigned by an upstream neighbor of a link.
4.1.2. Thread object
The object type of Loop Prevention object is TBA.
+-----------------------+-------+--------------------------+----------+
| OBJECT | Type | Subtype(s) | Length |
+-----------------------+-------+--------------------------+----------+
| Thread | TBA | 0x01 Default | 12 |
+-------------------------------+--------------------------+----------+
The Thread object contains the information required for the thread
mechanism.
SubType = 0x01 Default
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Color |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | TTL | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Color
This eight-octet quantity contains a color of the thread. The
first four-octet is the thread creator's IP address. The last
four-octet is the local-id which is unique within the thread
creator's IP address.
If a node does not require a loop prevention check but only
requires an LSP length update, the special color "transparent"
is defined by setting all zero's to the Color field. No
acknowledgment is needed for transparent threads.
Length
This one octet quantity contains a thread length which is
represented by a hop count from the furthest leaf node to the
thread head. The value 0xff is assigned for "unknown" thread
Ohba, et al. [Page 9]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
length.
TTL (Time To Live)
This one octet quantity contains a thread TTL which is
decremented by one (except for TTL="infinity") when a thread is
extended without changing its color. When the TTL becomes zero,
the extending procedure must be stopped. The value 0xff is
assigned for "infinity" which is never decremented.
4.2 Advertisement class messages
4.2.1. Request message
Mandatory Objects
At least one of each mandatory object with associated object headers.
+-----------------------+----------+
| MANDATORY OBJECT | Type |
+-----------------------+----------+
| SMD | 0x02 |
+-----------------------+----------+
| Class of Service | 0x04 |
+-----------------------+----------+
Optional Objects
Zero or more optional objects with associated object headers.
+-----------------------+----------+
| OPTIONAL OBJECT | Type |
+-----------------------+----------+
| Request ID | TBA |
+-----------------------+----------+
| Thread | TBA |
+-----------------------+----------+
4.2.2. Mapping message
Mandatory Objects
At least one of each mandatory object with associated object headers.
+-----------------------+----------+
| MANDATORY OBJECT | Type |
+-----------------------+----------+
| SMD | 0x02 |
+-----------------------+----------+
| Label | 0x03 |
+-----------------------+----------+
Optional Objects
Zero or more optional objects with associated object headers.
Ohba, et al. [Page 10]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
+-----------------------+----------+
| OPTIONAL OBJECT | Type |
+-----------------------+----------+
| Class of Service | 0x04 |
+-----------------------+----------+
| Hop Count | 0x06 |
+-----------------------+----------+
| MTU | 0x07 |
+-----------------------+----------+
| Stack | 0x08 |
+-----------------------+----------+
| Request ID | TBA |
+-----------------------+----------+
4.2.3. Update message
The message type of Update message is TBA.
Mandatory Objects
At least one of each mandatory object with associated object headers.
+-----------------------+----------+
| MANDATORY OBJECT | Type |
+-----------------------+----------+
| SMD | 0x02 |
+-----------------------+----------+
| Class of Service | 0x04 |
+-----------------------+----------+
| Thread | TBA |
+-----------------------+----------+
Optional Objects
Zero or more optional objects with associated object headers.
+-----------------------+----------+
| OPTIONAL OBJECT | Type |
+-----------------------+----------+
| Request ID | TBA |
+-----------------------+----------+
4.2.4. Release message
Mandatory Objects
At least one of each mandatory object with associated object headers.
+-----------------------+----------+
| MANDATORY OBJECT | Type |
+-----------------------+----------+
| SMD | 0x02 |
+-----------------------+----------+
Ohba, et al. [Page 11]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
Optional Objects
Zero or more optional objects with associated object headers.
+-----------------------+----------+
| OPTIONAL OBJECT | Type |
+-----------------------+----------+
| Label | 0x03 |
+-----------------------+----------+
| Request ID | TBA |
+-----------------------+----------+
4.2.5. Ack/Nak message
Mandatory Objects
At least one of each mandatory object with associated object headers.
+-----------------------+----------+
| MANDATORY OBJECT | Type |
+-----------------------+----------+
| SMD | 0x02 |
+-----------------------+----------+
| Error | 0x01 |
+-----------------------+----------+
Optional Objects
Zero or more optional objects with associated object headers.
+-----------------------+----------+
| OPTIONAL OBJECT | Type |
+-----------------------+----------+
| Label | 0x03 |
+-----------------------+----------+
| Request ID | TBA |
+-----------------------+----------+
5. Examples
In the following examples, we assume that the ingress-initiated
ordered control is employed, that all the LSPs are with regard to
the same FEC, and that all nodes are VC-merge capable.
5.1. First example
Consider an MPLS network shown in Fig. 1 in which an L3 loop exists.
Each directed link represents the current next hop of the FEC at
each node. Now leaf nodes R1 and R6 initiate creation of an LSP.
Ohba, et al. [Page 12]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
R11 -------- R10 <-------------------- R9
| | ^
| | |
v v |
R1 -------> R2 --------> R3 --------> R4 ---------- R5
(leaf) ^
|
|
R6 -------> R7 --------> R8
(leaf)
Fig. 1 Example MPLS network (1)
Assume that R1 and R6 sends Request messages at the same time, and
that the initial thread TTL is 254 (255 represents "infinity").
First we show an example of how to prevent LSP loops before thread
TTL becomes zero.
The Request message from R1 contains a thread of (red,1,254), where
a thread is identified by (color,length,TTL). The Request message
from R6 contains a thread of (blue,1,254).
Assume that R3 receives the Request originated from R1 before the
Request originated from R6. Then R3 forwards the Request with the
thread of (red,3,252) and then the Request with (blue,4,251) in this
order.
When R2 receives the Request from R10 with the thread of
(red,6,249), it detects a loop of the red thread. In this case, R2
creates a new purple thread of "unknown" length and extends it
downstream by sending a Request with (purple,?,254) to R3, where "?"
represents "unknown".
After that, R2 receives another Request for the same LSP from R10
with (blue,7,248). The blue thread is merged into the purple thread
since the purple thread length (="unknown") is longer than the blue
thread length (=7). R2 sends nothing to R3.
On the other hand, the purple thread goes round and R2 detects
the loop of its own purple thread.
In this case, neither a thread is rewound nor a Mapping is returned.
The current state of the network is shown in Fig. 2. Note that
thread TTL information is not shown here.
Ohba, et al. [Page 13]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
Bl(L): blue thread with length L
Re(L): red thread with length L
Pu(L): purple thread with length L
*: position of thread head
Pu(?)
R11 -------- R10 <------------------- R9
| | ^
| | Pu*(?) | Pu(?)
v v |
R1 -------> R2 -------> R3 --------> R4 --------- R5
(leaf) Re(1) Pu(?) ^ Pu(?)
| Bl(3)
|
R6 -------> R7 -------> R8
(leaf) Bl(1) Bl(2)
Fig. 2 The network state
Then R10 changes its next hop from R2 to R11.
Since R10 has a purple thread on the old downstream link, it first
sends a Release message to the old next hop R2 for removing the
purple thread. Next, it creates a new green thread for which the
purple thread length(="unknown") is used, and sends a Request with
(green,?,254) to R11.
When R2 receives the Release from R10, the upstream link between R10
and R2 is removed.
On the other hand, the green thread goes round to R10 without
being merged.
When R10 receives the green thread, it sends a Release message to
R11 to withdraw the green thread, since it is the creator of the
green thread and there is no other actual incoming thread.
When R1 removes the green thread, it creates a new orange thread and
resends a Request with (orange,0,254) to R2. The orange thread goes
round to R1, replacing the green thread on the path. Finally, R1
detects the loop of its own orange thread.
The state of the network is now shown in Fig. 3.
Ohba, et al. [Page 14]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
Or(L): orange thread with length L
Bl(L): blue thread with length L
*: position of thread head
Or(7) Or(6)
R11 <------- R10 <------------------- R9
| | ^
| Or*(8) | | Or(5)
v | |
R1 -------> R2 -------> R3 --------> R4 --------- R5
(leaf) Or(1) Or(2) ^ Or(4)
| Bl(3)
|
R6 -------> R7 -------> R8
(leaf) Bl(1) Bl(2)
Fig. 3 The network state
Then R4 changes its next hop from R9 to R5.
Since R4 has the orange thread, it first sends a Release message to
the old next hop R9 to withdraw the orange thread on the old route.
Next, it creates a yellow thread of length 4, and sends a Request
with (yellow,5,254) to R5.
Since R5 is the egress node, the received thread is assured to be
loop-free, and R5 returns a Mapping message with a label. R5 sets
the LSP length to 5.
The thread rewiding procedure is performed at each node, as the
Mapping is returned upstream hop-by-hop.
Finally, when each of R1 and R6 receives a Mapping message, a merged
LSP ((R1->R2),(R6->R7->R8))->R3->R4->R5) is established and all the
colored threads disappear from the network.
Ohba, et al. [Page 15]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
5.2. Second example
+----- R6----> R7-----+
| |
| v
R1---->R2 R4----->R5
| ^
| |
+--------->R3---------+
Fig. 4. Example MPLS network (2)
Assume that in Fig. 4, there is an established LSP
R1->R2->R3->R4->R5, and the next hop changes at R2 from R3 to R6.
R2 sends a Request to R6 with (red,2,254). When the Request with
(red,4,252) reaches R4, it sends an Update message to R5 with
(red,5,251) since the received thread length (=4) is longer than the
current LSP length (=3).
When R5 receives the Update, it updates the LSP length to 5 and
returns an ACK for the Update. When R4 receives the ACK for the
Update, it returns an Mapping to R7.
When R2 receives the Mapping on the new route, it sends a Release to
R3. When R4 receives the Release, it does not sends an Update to R5
since the LSP length does not change. Now an established LSP
R1->R2->R6->R7->R4->R5 is obtained.
Then, the next hop changes again at R2 from R6 to R3.
R1 sends a Request with (blue,2,254) to R3. R3 forwards the Request
with (blue,3,253) to R4.
When R4 receives the Request, it immediately returns a Mapping to R3
since the received thread length (=3) is not longer than the current
LSP length (=4).
When R2 receives the Mapping on the new route, it sends a Release to
R6. The Release reaches R4, triggering an Update message with a
transparent thread (0,4,255) to R5, since the LSP length at R4
decreases from 4 to 3. R5 updates the LSP length to 4 without
returning an ACK.
6. Comparison with path-vector/diffusion method
o Whereas the size of the path-vector increases with the length of
the LSP, the sizes of the threads are constant. Thus the size
of messages used by the thread algorithm are unaffected by the
network size or topology. In addition, the thread merging
Ohba, et al. [Page 16]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
capability reduces the number of outstanding messages. These
lead to improved scalability.
o In the thread algorithm, a node which is changing its next hop
for a particular LSP must interact only with nodes that are
between it and the LSP egress on the new path. In the
path-vector algorithm, however, it is necessary for the node to
initiate a diffusion computation that involves nodes which do
not lie between it and the LSP egress.
This characteristic makes the thread algorithm more robust. If
a diffusion computation is used, misbehaving nodes which aren't
even in the path can delay the path setup. In the thread
algorithm, the only nodes which can delay the path setup are
those nodes which are actually in the path.
o The thread algorithm is well suited for use with both the
ingress-initiated ordered control and the egress-initiated
ordered control. The path-vector/diffusion algorithm, however,
is tightly coupled with the egress-initiated ordered control.
o The thread algorithm is retry-free, achieving quick path
(re)configuration. The diffusion algorithm tends to delay the
path reconfiguration time, since a node at the route change
point must to consult all its upstream nodes.
o In the thread algorithm, the node can continue to use the old
path if there is an L3 loop on the new path, as in the
path-vector algorithm.
7. Security considerations
Security considerations are not discussed in this document.
8. Intellectual property considerations
Toshiba and/or Cisco may seek patent or other intellectual property
protection for some of the technologies disclosed in this document.
If any standards arising from this document are or become protected
by one or more patents assigned to Toshiba and/or Cisco, Toshiba
and/or Cisco intend to disclose those patents and license them on
reasonable and non-discriminatory terms.
9. References
[1] Y. Ohba, et al., "Flow Attribute Notification Protocol Version 2
(FANPv2) Ingress Control Mode," Internet Draft,
draft-ohba-csr-fanpv2-icmode-00.txt, Dec. 1997.
[2] B. Davie, et al., "Use of Label Switching With ATM," Internet Draft,
draft-davie-mpls-atm-01.txt, July 1998.
Ohba, et al. [Page 17]
Internet-Draft draft-ohba-mpls-loop-prevention-01.txt July 1998
[3] E. Rosen, et al., "A Proposed Architecture for MPLS,"
Internet Draft, draft-ietf-mpls-arch-01.txt, July 1998.
[4] R. Callon, et al., "A Framework for Multiprotocol Label
Switching," Internet Draft, draft-ietf-mpls-framework-02.txt,
Nov. 1997.
[5] L. Andersson, et al., "Label Distribution Protocol," Internet Draft,
draft-mpls-ldp-spec-00.txt, March 1998.
Authors' Addresses
Yoshihiro Ohba
R&D Center, Toshiba Corp.
1, Komukai-Toshiba-cho, Saiwai-ku
Kawasaki, 210, Japan
Email: ohba@csl.rdc.toshiba.co.jp
Yasuhiro Katsube
R&D Center, Toshiba Corp.
1, Komukai-Toshiba-cho, Saiwai-ku
Kawasaki, 210, Japan
Email: katsube@isl.rdc.toshiba.co.jp
Eric Rosen
Cisco Systems, Inc.
250 Apollo Drive
Chelmsford, MA, 01824
Email: erosen@cisco.com
Paul Doolan
Ennovate Networks
330 Codman Hill Road
Boxborough, MA
Email: pdoolan@ennovatenetworks.com
Ohba, et al. [Page 18]
| PAFTECH AB 2003-2026 | 2026-04-21 22:16:45 |