RFC 7746
Label Switched Path (LSP) Self-Ping
Label Switched Path (LSP) Self-Ping β¨
okay bestie, let's get into it π this is RFC 7746, and it's a Standards Track document (so it's a real, official Internet protocol spec, not just a vibe π ). It was written by R. Bonica (Juniper Networks), I. Minei (Google, Inc.), M. Conn, D. Pacella, and L. Tomotaki (all Verizon), and it's dated January 2016 π¦. It's published under ISSN 2070-1721. It doesn't obsolete or update any other RFCs, so it's a fresh one, no drama πΈ.
Abstract
okay so the whole point of this doc is that some fancy RSVP-TE optimizations can make ingress Label Switching Routers (LSRs) get RESV messages before forwarding state is installed on every downstream node π. The RSVP-TE spec says the ingress LSR is allowed to start sending traffic down the LSP as soon as that RESV shows up, but if it does that too early, traffic can get lost. yikes π
so this doc introduces LSP Self-ping π§. When an ingress LSR gets a RESV message, it can run LSP Self-ping procedures to make sure forwarding state is actually installed on all the downstream nodes. it's giving safety check, no cap β¨.
LSP Self-ping is its own brand-new protocol, not an extension of LSP Ping. they have similar names but they're built for totally different jobs π. each one listens on its own UDP port and does its own thing.
and the best part: LSP Self-ping is an extremely lightweight mechanism π«Ά. it does not use up control-plane resources on transit or egress LSRs. that's major main character energy π.
Status of This Memo
this is an Internet Standards Track document π₯. it's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community. it got public review and was approved by the Internet Engineering Steering Group (IESG). if you want more info on Internet Standards, check Section 2 of RFC 5741. the current status, any errata, and how to give feedback live at http://www.rfc-editor.org/info/rfc7746 π.
Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved π.
this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they were on the publication date. please read those carefully, because they spell out your rights and restrictions π. any Code Components pulled out of this doc must include the Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in that license π.
Table of Contents
here's the full layout, in order πΈ:
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4
2. Applicability . . . . . . . . . . . . . . . . . . . . . . . . 4
3. The LSP Self-ping Message . . . . . . . . . . . . . . . . . . 6
4. LSP Self-Ping Procedures . . . . . . . . . . . . . . . . . . 7
5. Bidirectional LSP Procedures . . . . . . . . . . . . . . . . 8
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9
7. Security Considerations . . . . . . . . . . . . . . . . . . . 9
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 9
8.1. Normative References . . . . . . . . . . . . . . . . . . 9
8.2. Informative References . . . . . . . . . . . . . . . . . 10
Appendix A. Rejected Approaches . . . . . . . . . . . . . . . . 11
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 11
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12
1. Introduction β¨
okay so ingress LSRs use RSVP-TE [RFC3209] to set up MPLS Label Switched Paths (LSPs) π¦. here's how that dance goes:
the ingress LSR works out a path between itself and an egress LSR πΊοΈ. that path can be strictly or loosely routed. once it has the path, the ingress LSR builds an RSVP PATH message. the PATH message has an Explicit Route Object (ERO) that describes the path between the ingress and egress LSRs.
the ingress LSR sends the PATH message toward the egress LSR, following the ERO. every transit LSR that gets the PATH message runs admission control. if the transit LSR says yes and admits the LSP, it passes the PATH message downstream to the next node in the ERO π .
when the egress LSR gets the PATH message, it binds a label to the LSP. that label can be implicit null, explicit null, or non-null π. then the egress LSR installs forwarding state (if it needs to) and builds an RSVP RESV message. the RESV message has a Label Object with the label bound to the LSP β¨.
the egress LSR sends the RESV message upstream toward the ingress LSR π. it goes through the same transit LSRs the PATH message went through, just in reverse order. each transit LSR binds a label to the LSP, updates its forwarding state, and updates the RESV message. so in the end, the Label Object in the RESV has the most recently bound label π§. finally, the transit LSR sends the RESV upstream along the reverse path of the LSP.
when the ingress LSR finally gets the RESV message, it installs forwarding state. once that's in place, it can forward traffic through the LSP π.
now here's a spicy quote πΆοΈ. RFC 3209 says, "The node SHOULD be prepared to forward packets carrying the assigned label prior to sending the Resv message." but RFC 3209 doesn't strictly require that behavior, so it's not a must π.
some implementations speed things up by letting LSRs send RESV messages before installing forwarding state [RFC6383] β‘. this is nice because LSRs can install forwarding state in parallel, which makes LSP signaling and setup way faster. BUT it creates a race condition π. when the ingress LSR gets a RESV, some downstream LSRs might not have installed forwarding state yet. if the ingress forwards traffic before forwarding state is on every downstream node, traffic can get lost. it's the classic "too early, bestie" moment π.
so this doc describes LSP Self-ping π. when the ingress LSR gets a RESV message, it can run LSP Self-ping procedures to verify that forwarding state is installed on all downstream nodes. by checking that downstream forwarding state is in place, the ingress LSR gets rid of this particular cause of traffic loss π«Ά.
LSP Self-ping is a new protocol, not an extension of LSP Ping [RFC4379] π. like the abstract said, the names are similar but each one is designed for its own purpose. each protocol listens on its own UDP port and runs its own procedures β¨.
and yes, I'm saying it again because it matters: LSP Self-ping is an extremely lightweight mechanism π¦. it does not consume control-plane resources on transit or egress LSRs π.
1.1. Requirements Language π
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 [RFC2119] π. these are the official requirement words, so they're capitalized on purpose π.
2. Applicability πΈ
okay so LSP Self-ping is applicable in the following scenario π§:
- the ingress LSR signals a point-to-point LSP π¦.
- the ingress LSR receives a RESV message π.
- the RESV message indicates that all downstream nodes have begun the process of forwarding state installation π.
- the RESV message does not guarantee that all downstream nodes have completed the process of forwarding state installation π.
- the ingress LSR needs to confirm that all downstream nodes have completed the process for forwarding state installation π.
- the ingress LSR does not need to confirm the correctness of downstream forwarding state, because there is a very high likelihood that downstream forwarding state is correct β¨.
- control-plane resources on the egress LSR may be scarce π.
- the need to conserve control-plane resources on the egress LSR outweighs the need to determine whether downstream forwarding state is correct π.
now, unlike LSP Ping and S-BFD [S-BFD], LSP Self-ping is not a general-purpose MPLS OAM mechanism π ββοΈ. it cannot reliably determine whether downstream forwarding state is correct π¬. for example, if a downstream LSR installs forwarding state that makes an LSP terminate at the wrong node, LSP Self-ping will not detect the error. another example: if a downstream LSR erroneously forwards a packet without an MPLS label, LSP Self-ping will not catch it π.
and LSP Self-ping fails when either of these is true π:
- the LSP under test is signaled by the Label Distribution Protocol (LDP) Independent Mode [RFC5036].
- Reverse Path Forwarding (RPF) [RFC3704] filters are enabled on links that connect the ingress LSR to the egress LSR.
while LSP Ping and S-BFD are general-purpose OAM mechanisms, they're not applicable in the scenario above, because:
- LSP Ping consumes control-plane resources on the egress LSR π©.
- an S-BFD implementation either consumes control-plane resources on the egress LSR, or it requires special support for S-BFD on the forwarding plane π.
by contrast, LSP Self-ping requires nothing from the egress LSR beyond the ability to forward an IP datagram π«Ά. that's the glow-up π.
LSP Self-ping's purpose is to determine whether forwarding state has been installed on all downstream LSRs β¨. its primary constraint is to minimize its impact on egress LSR performance π. this matters a lot during network convergence events that affect a large number of LSPs π₯.
so, LSP Self-ping is applicable in the scenario described above, where the LSP is signaled by RSVP, RPF is not enabled, and the need to conserve control-plane resources on the egress LSR outweighs the need to determine whether downstream forwarding state is correct π π. that's the whole vibe, bestie π¦.
3. The LSP Self-ping Message β¨
okay so the LSP Self-ping Message is a User Datagram Protocol (UDP) [RFC768] packet that carries a session ID π. If the RSVP messages used to set up the LSP under test went over IPv4 [RFC791], the UDP datagram MUST be wrapped in an IPv4 header. If they went over IPv6 [RFC2460], the UDP datagram MUST be wrapped in an IPv6 header. Either way, the vibe is the same π
In either case:
- The IP Source Address MAY be configurable. By default, it MUST be the address of the egress LSR.
- The IP Destination Address MUST be the address of the ingress LSR.
- The IP Time to Live (TTL) / Hop Count MAY be configurable. By default, it MUST be 255.
- The IP DSCP (Differentiated Services Code Point) MAY be configurable. By default, it MUST be CS6 (110000) [RFC4594].
- The UDP Source Port MUST be selected from the dynamic range (49152-65535) [RFC6335].
- The UDP Destination Port MUST be lsp-self-ping (8503) [IANA.PORTS].
UDP packet contents have the following format π¦
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Session-ID |
| (64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
LSP Self-Ping Message
The Session-ID is a 64-bit field that links an LSP Self-ping message to its LSP Self-ping session. It's the main character of this whole thing, honestly π
4. LSP Self-Ping Procedures πΈ
So before an LSP carries real traffic, the ingress LSR is like "wait, is this thing actually ready?" π To find out, it spins up a short-lived LSP Self-ping session. All of the session state stays local on the ingress LSR. The session state includes:
- Session-ID: A 64-bit number that identifies the LSP Self-ping session.
- Retry Counter: The maximum number of times that the ingress LSR probes the LSP before ending the LSP Self-ping session. Its starting value comes from configuration.
- Retry Timer: The number of milliseconds the LSR waits after probing the LSP. Its starting value also comes from configuration.
- Status: A boolean that shows the completion status of the LSP Self-ping session. It starts out as FALSE.
Implementations MAY store the info above in any format that's convenient for them. Do what slays for your codebase π§
The ingress LSR keeps running the following procedure until Status equals TRUE or Retry Counter equals zero:
- Format an LSP Self-ping message.
- Set the Session-ID in the LSP Self-ping message to the Session-ID mentioned above.
- Send the LSP Self-ping message through the LSP under test.
- Set a timer to expire in Retry Timer milliseconds.
- Wait until either an LSP Self-ping message associated with the session comes back or the timer expires. If an LSP Self-ping message associated with the session comes back, set Status to TRUE. Otherwise, decrement the Retry Counter. Optionally, increase the value of Retry Timer according to an appropriate back-off algorithm.
Okay, the plot twist π The ingress LSR addresses an LSP Self-ping message to itself and then forwards it through the LSP under test. If forwarding state has been installed on all downstream LSRs, the egress LSR gets the message and realizes it's addressed to the ingress LSR. So it forwards the message right back to the ingress LSR, exactly the same way it would forward any other IP packet. It's giving boomerang, and I'm obsessed πͺβ¨
The LSP Self-ping message can reach the egress LSR with or without an MPLS header, and that depends on whether the LSP under test uses penultimate hop-popping procedures. If the message shows up at the egress LSR with an MPLS header, the egress LSR removes that header.
If the egress LSR's most preferred route to the ingress LSR goes through an LSP, the egress LSR forwards the LSP Self-ping message through that LSP. But if the egress LSR's most preferred route to the ingress LSR does not go through an LSP, the egress LSR forwards the LSP Self-ping message without MPLS encapsulation. Iconic routing decisions only π
When an LSP Self-ping session ends, it hands its completion status back to whatever invoked it. For example, if RSVP-TE invokes LSP Self-ping as part of the LSP setup procedure, LSP Self-ping returns its completion status to RSVP-TE. Teamwork makes the dream work π«Ά
5. Bidirectional LSP Procedures π¦
A bidirectional LSP has two sides: an active side and a passive side. The active side calculates the ERO and signals the LSP in the forward direction. The passive side reverses the ERO and signals the LSP in the reverse direction. Two roles, one vibe π
When LSP Self-ping is applied to a bidirectional LSP:
- The active side calculates the ERO, signals the LSP, and runs LSP Self-ping.
- The Passive side reverses the ERO, signals the LSP, and runs another instance of LSP Self-ping.
- Neither side forwards traffic through the LSP until local LSP Self-ping returns TRUE.
The two LSP Self-ping sessions mentioned above are independent of one another. They are not required to have the same Session-ID. Each endpoint can start forwarding traffic through the LSP as soon as its own local LSP Self-ping returns TRUE. Endpoints are not required to wait until both LSP Self-ping sessions have returned TRUE. No waiting for your bestie to be ready first, just vibes π
6. IANA Considerations π
IANA has assigned UDP Port Number 8503 [IANA.PORTS] for use by MPLS LSP Self-Ping. That's the port number locked in π
7. Security Considerations π
This section is a whole serious moment, so I'm not gonna sugarcoat it π
LSP Self-ping messages are easily forged. Therefore, an attacker can send the ingress LSR a forged LSP Self-ping message, causing the ingress LSR to end the LSP Self-ping session prematurely. To help mitigate these threats, operators SHOULD filter LSP Self-ping packets at the edges of the MPLS signaling domain. Furthermore, implementations SHOULD NOT assign Session-IDs in a predictable manner. To avoid predictability, implementations can use a Cryptographically Secure Pseudorandom Number Generator (CSPRNG) [NIST-CSPRNG]. Unpredictable IDs are the whole point, bestie π₯
8. References π
8.1. Normative References
[RFC768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
DOI 10.17487/RFC0768, August 1980,
<http://www.rfc-editor.org/info/rfc768>.
[RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791,
DOI 10.17487/RFC0791, September 1981,
<http://www.rfc-editor.org/info/rfc791>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460,
December 1998, <http://www.rfc-editor.org/info/rfc2460>.
[RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V.,
and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP
Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001,
<http://www.rfc-editor.org/info/rfc3209>.
[RFC3704] Baker, F. and P. Savola, "Ingress Filtering for Multihomed
Networks", BCP 84, RFC 3704, DOI 10.17487/RFC3704, March
2004, <http://www.rfc-editor.org/info/rfc3704>.
[RFC4379] Kompella, K. and G. Swallow, "Detecting Multi-Protocol
Label Switched (MPLS) Data Plane Failures", RFC 4379,
DOI 10.17487/RFC4379, February 2006,
<http://www.rfc-editor.org/info/rfc4379>.
[RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed.,
"LDP Specification", RFC 5036, DOI 10.17487/RFC5036,
October 2007, <http://www.rfc-editor.org/info/rfc5036>.
[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S.
Cheshire, "Internet Assigned Numbers Authority (IANA)
Procedures for the Management of the Service Name and
Transport Protocol Port Number Registry", BCP 165,
RFC 6335, DOI 10.17487/RFC6335, August 2011,
<http://www.rfc-editor.org/info/rfc6335>.
8.2. Informative References
[IANA.PORTS]
IANA, "Service Name and Transport Protocol Port Number
Registry", <http://www.iana.org/assignments/
service-names-port-numbers>.
[NIST-CSPRNG]
NIST, "Recommendation for Random Number Generation Using
Deterministic Random Bit Generators", NIST Special
Publication 800-90A, January 2012.
[RFC4594] Babiarz, J., Chan, K., and F. Baker, "Configuration
Guidelines for DiffServ Service Classes", RFC 4594,
DOI 10.17487/RFC4594, August 2006,
<http://www.rfc-editor.org/info/rfc4594>.
[RFC6383] Shiomoto, K. and A. Farrel, "Advice on When It Is Safe to
Start Sending Data on Label Switched Paths Established
Using RSVP-TE", RFC 6383, DOI 10.17487/RFC6383, September
2011, <http://www.rfc-editor.org/info/rfc6383>.
[S-BFD] Akiya, N., Pignataro, C., Ward, D., Bhatia, M., and J.
Networks, "Seamless Bidirectional Forwarding Detection
(S-BFD)", Work in Progress, draft-ietf-bfd-seamless-
base-05, June 2015.
Appendix A. Rejected Approaches π ββοΈ
Okay, tea time β This is where the team looked at the options that didn't make the cut.
In a rejected approach, the ingress LSR uses LSP Ping to verify LSP readiness. This approach was rejected for the following reasons.
While an ingress LSR can control its control-plane overhead due to LSP Ping, an egress LSR has no such control. This is because each ingress LSR can, on its own, control the rate of the LSP Ping originated by that LSR, while an egress LSR must respond to all the LSP Pings originated by various ingresses. Furthermore, when an MPLS Echo Request reaches an egress LSR, it is sent to the control plane of the egress LSR. This makes the egress LSR processing overhead of LSP Ping well above the overhead of its data plane (MPLS/IP forwarding). These factors make LSP Ping problematic as a tool for detecting LSP readiness to carry traffic when dealing with a large number of LSPs. Too much drama for the control plane π©
By contrast, LSP Self-ping does not consume any control-plane resources at the egress LSR, and it relies solely on the data plane of the egress LSR. That makes it more suitable as a tool for checking LSP readiness when dealing with a large number of LSPs. Data plane supremacy π
In another rejected approach, the ingress LSR does not verify LSP readiness. Instead, it sets a timer when it receives an RSVP RESV message and does not forward traffic through the LSP until the timer expires. This approach was rejected because it is impossible to determine the optimal setting for this timer. If the timer value is set too low, it does not prevent black-holing. If the timer value is set too high, it slows down the process of LSP signaling and setup. Lowkey a guessing game nobody wants π²
Moreover, the above-mentioned timer is configured on a per-router basis. However, its optimum value is determined by a network-wide behavior. Therefore, changes in the network could require changes to the value of the timer, making the optimal setting of this timer a moving target. Moving target = not it π―
Acknowledgements π«Ά
Thanks to Yakov Rekhter, Ravi Singh, Eric Rosen, Eric Osborne, Greg Mirsky, and Nobo Akiya for their contributions to this document. You all are literally the best π
Contributors πΈ
Okay bestie, time to give credit where it's due π«Ά These two folks contributed significantly to this doc, so they get the spotlight β¨
- Mark Wygant, Verizon,
mark.wygant@verizon.comπ - Ravi Torvi, Juniper Networks,
rtorvi@juniper.netπ¦
Authors' Addresses π
Meet the authors, the people who actually wrote this thing, and how to reach each of them π
Ron Bonica
Juniper Networks
Email: rbonica@juniper.net
Ina Minei
Google, Inc.
1600 Amphitheatre Parkway
Mountain View, CA 94043
United States
Email: inaminei@google.com
Michael Conn
Verizon
Email: meconn26@gmail.com
Dante Pacella
Verizon
Email: dante.j.pacella@verizon.com
Luis Tomotaki
Verizon
Email: luis.tomotaki@verizon.com
That's the whole RFC, babe! πβ¨ Five authors, two contributors, and a whole lot of LSP self-ping energy ππ
π¦ where this page comes from
- ietf: rfc7746 2016-01
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms