RFC 3443 PROPOSED STANDARD MPLS · ROUTING · TTL

MPLS TTL processing: Time To Live (TTL) Processing in Multi-Protocol Label Switching (MPLS) Networks

How the hop counter in an MPLS packet is handled when label-switched paths are stacked inside one another.

On rfc-editor.org ↗
PUBLISHED
January 2003
AUTHORS
P. Agarwal, B. Akyol
STREAM
IETF
BUILDS ON
RFC 3032 — MPLS Label Stack
UPDATED BY
RFC 5462 — MPLS Traffic Class
MPLS LABEL FIELD
20 bits
TTL FIELD
8 bits
BOTTOM-OF-STACK FLAG
1 bit
EXPERIMENTAL BITS
3 bits
TYPICAL PIPE LABEL TTL DEFAULT
255
TUNNELED TTL DROP OVER A PIPE LSP
2
DOI
10.17487/RFC3443

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                         P. Agarwal
Request for Comments: 3443                                       Brocade
Updates: 3032                                                   B. Akyol
Category: Standards Track                                  Cisco Systems
                                                            January 2003


                   Time To Live (TTL) Processing in
             Multi-Protocol Label Switching (MPLS) Networks

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2003).  All Rights Reserved.

Abstract

   This document describes Time To Live (TTL) processing in hierarchical
   Multi-Protocol Label Switching (MPLS) networks and is motivated by
   the need to formalize a TTL-transparent mode of operation for an MPLS
   label-switched path.  It updates RFC 3032, "MPLS Label Stack
   Encoding".  TTL processing in both Pipe and Uniform Model
   hierarchical tunnels are specified with examples for both "push" and
   "pop" cases.  The document also complements RFC 3270, "MPLS Support
   of Differentiated Services" and ties together the terminology
   introduced in that document with TTL processing in hierarchical MPLS
   networks.

Conventions used in this document

   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].

1. Introduction and Motivation

   This document describes Time To Live (TTL) processing in hierarchical
   MPLS networks.  We believe that this document adds details that have
   not been addressed in [MPLS-ARCH, MPLS-ENCAPS], and that the methods
   presented in this document complement [MPLS-DS].

   In particular, a new mode of operation (referred to as the Pipe
   Model) is introduced to support the practice of configuring MPLS LSPs
   such that packets transiting the LSP see the tunnel as a single hop
   regardless of the number of intermediary label switch routers (LSR).
   The Pipe Model for TTL is currently being used in multiple networks
   and is provided as an option configurable by the network operator by
   several vendors.

   This document formalizes the TTL processing in MPLS networks and ties
   it with the terminology introduced in [MPLS-DS].

2. TTL Processing in MPLS Networks

2.1. Changes to RFC 3032 [MPLS-ENCAPS]

   a) [MPLS-ENCAPS] only covers the Uniform Model and does NOT address
      the Pipe Model or the Short Pipe Model.  This document addresses
      these two models and for completeness will also address the
      Uniform Model.

   b) [MPLS-ENCAPS] does not cover hierarchical LSPs.  This document
      addresses this issue.

   c) [MPLS-ENCAPS] does not define TTL processing in the presence of
      Penultimate Hop Popping (PHP).  This document addresses this
      issue.

2.2. Terminology and Background

   As defined in [MPLS-ENCAPS], MPLS packets use a MPLS shim header that
   indicates the following information about a packet:

   a) MPLS Label (20 bits)
   b) TTL (8 bits)
   c) Bottom of stack (1 bit)
   d) Experimental bits (3 bits)

   The experimental bits were later redefined in [MPLS-DS] to indicate
   the scheduling and shaping behavior that could be associated with an
   MPLS packet.

   [MPLS-DS] also defined two models for MPLS tunnel operation: Pipe and
   Uniform Models.  In the Pipe Model, a MPLS network acts like a
   circuit when MPLS packets traverse the network such that only the LSP
   ingress and egress points are visible to nodes that are outside the
   tunnel.  A Short variation of the Pipe Model is also defined in
   [MPLS-DS] to differentiate between different egress forwarding and
   QoS treatments.  On the other hand, the Uniform Model makes all the
   nodes that a LSP traverses visible to nodes outside the tunnel.  We
   will extend the Pipe and Uniform Models to include TTL processing in
   the following sections.  Furthermore, TTL processing, when performing
   PHP, is also described in this document.  For a detailed description
   of Pipe and Uniform Models, please see [MPLS-DS].

   TTL processing in MPLS networks can be broken down into two logical
   blocks: (i) the incoming TTL determination to take into account any
   tunnel egress due to MPLS Pop operations; (ii) packet processing of
   (possibly) exposed packets and outgoing TTLs.

   We also note here that signaling the LSP type (Pipe, Short Pipe or
   Uniform Model) is out of the scope of this document, and that is also
   not addressed in the current versions of the label distribution
   protocols, e.g. LDP [MPLS-LDP] and RSVP-TE [MPLS-RSVP].  Currently,
   the LSP type is configured by the network operator manually by means
   of either a command line or network management interface.

2.3. New Terminology

   iTTL: The TTL value to use as the incoming TTL.  No checks are
   performed on the iTTL.

   oTTL: This is the TTL value used as the outgoing TTL value (see
   section 3.5 for exception).  It is always (iTTL - 1) unless otherwise
   stated.

   oTTL Check: Check if oTTL is greater than 0.  If the oTTL Check is
   false, then the packet is not forwarded.  Note that the oTTL check is
   performed only if any outgoing TTL (either IP or MPLS) is set to oTTL
   (see section 3.5 for exception).

3. TTL Processing in different Models

   This section describes the TTL processing for LSPs conforming to each
   of the 3 models  (Uniform, Short Pipe and Pipe) in the
   presence/absence of PHP (where applicable).

3.1. TTL Processing for Uniform Model LSPs (with or without PHP)

      (consistent with [MPLS-ENCAPS]):

             ========== LSP =============================>

                 +--Swap--(n-2)-...-swap--(n-i)---+
                /        (outer header)            \
              (n-1)                                (n-i)
              /                                      \
   >--(n)--Push...............(x).....................Pop--(n-i-1)->
            (I)           (inner header)            (E or P)

   (n) represents the TTL value in the corresponding header
   (x) represents non-meaningful TTL information
   (I) represents the LSP ingress node
   (P) represents the LSP penultimate node
   (E) represents the LSP Egress node

   This picture shows TTL processing for a Uniform Model MPLS LSP.  Note
   that the inner and outer TTLs of the packets are synchronized at
   tunnel ingress and egress.

3.2. TTL Processing for Short Pipe Model LSPs

3.2.1.     TTL Processing for Short Pipe Model LSPs without PHP

             ========== LSP =============================>

                 +--Swap--(N-1)-...-swap--(N-i)-----+
                /        (outer header)              \
              (N)                                  (N-i)
              /                                        \
   >--(n)--Push...............(n-1).....................Pop--(n-2)->
            (I)           (inner header)                (E)

   (N) represents the TTL value (may have no relationship to n)
   (n) represents the tunneled TTL value in the encapsulated header
   (I) represents the LSP ingress node
   (E) represents the LSP Egress node

   The Short Pipe Model was introduced in [MPLS-DS].  In the Short Pipe
   Model, the forwarding treatment at the egress LSR is based on the
   tunneled packet, as opposed to the encapsulating packet.

3.2.2.     TTL Processing for Short Pipe Model with PHP:

             ========== LSP =====================================>
                 +-Swap-(N-1)-...-swap-(N-i)-+
                /       (outer header)        \
              (N)                            (N-i)
              /                                \
   >--(n)--Push.............(n-1)............Pop-(n-1)-Decr.-(n-2)->
            (I)           (inner header)       (P)      (E)

   (N) represents the TTL value (may have no relationship to n)
   (n) represents the tunneled TTL value in the encapsulated header
   (I) represents the LSP ingress node
   (P) represents the LSP penultimate node
   (E) represents the LSP egress node.

   Since the label has already been popped by the LSP's penultimate
   node, the LSP egress node just decrements the header TTL.

   Also note that at the end of the Short Pipe Model LSP, the TTL of the
   tunneled packet has been decremented by two, with or without PHP.

3.3. TTL Processing for Pipe Model LSPs (without PHP only):

             ========== LSP =============================>

                 +--Swap--(N-1)-...-swap--(N-i)-----+
                /        (outer header)              \
              (N)                                  (N-i)
              /                                        \
   >--(n)--Push...............(n-1)....................Pop--(n-2)->
            (I)           (inner header)               (E)

   (N) represents the TTL value (may have no relationship to n)
   (n) represents the tunneled TTL value in the encapsulated header
   (I) represents the LSP ingress node
   (E) represents the LSP Egress node

   From the TTL perspective, the treatment for a Pipe Model LSP is
   identical to the Short Pipe Model without PHP.

3.4. Incoming TTL (iTTL) determination

   If the incoming packet is an IP packet, then the iTTL is the TTL
   value of the incoming IP packet.

   If the incoming packet is an MPLS packet and we are performing a
   Push/Swap/PHP, then the iTTL is the TTL of the topmost incoming
   label.

   If the incoming packet is an MPLS packet and we are performing a Pop
   (tunnel termination), the iTTL is based on the tunnel type (Pipe or
   Uniform) of the LSP that was popped.  If the popped label belonged to
   a Pipe Model LSP, then the iTTL is the value of the TTL field of the
   header, exposed after the label was popped (note that for the purpose
   of this document, the exposed header may be either an IP header or an
   MPLS label).  If the popped label belonged to a Uniform Model LSP,
   then the iTTL is equal to the TTL of the popped label.  If multiple
   Pop operations are performed sequentially, then the procedure given
   above is repeated with one exception: the iTTL computed during the
   previous Pop is used as the TTL of subsequent labels being popped;
   i.e. the TTL contained in the subsequent label is essentially ignored
   and replaced with the iTTL computed during the previous pop.

3.5. Outgoing TTL Determination and Packet Processing

   After the iTTL computation is performed, the oTTL check is performed.
   If the oTTL check succeeds, then the outgoing TTL of the
   (labeled/unlabeled) packet is calculated and packet headers are
   updated as defined below.

   If the packet was routed as an IP packet, the TTL value of the IP
   packet is set to oTTL (iTTL - 1).  The TTL value(s) for any pushed
   label(s) is determined as described in section 3.6.

   For packets that are routed as MPLS, we have four cases:

   1) Swap-only: The routed label is swapped with another label and the
      TTL field of the outgoing label is set to oTTL.

   2) Swap followed by a Push: The swapped operation is performed as
      described in (1).  The TTL value(s) of any pushed label(s) is
      determined as described in section 3.6.

   3) Penultimate Hop Pop (PHP): The routed label is popped.  The oTTL
      check should be performed irrespective of whether the oTTL is used
      to update the TTL field of the outgoing header.  If the PHPed
      label belonged to a Short Pipe Model LSP, then the TTL field of
      the PHP exposed header is neither checked nor updated.  If the
      PHPed label was a Uniform Model LSP, then the TTL field of the PHP
      exposed header is set to the oTTL.  The TTL value(s) of additional
      labels are determined as described in section 3.6

   4) Pop: The pop operation happens before routing and hence it is not
      considered here.

3.6. Tunnel Ingress Processing (Push)

   For each pushed Uniform Model label, the TTL is copied from the
   label/IP-packet immediately underneath it.

   For each pushed Pipe Model or Short Pipe Model label, the TTL field
   is set to a value configured by the network operator.  In most
   implementations, this value is set to 255 by default.

3.7. Implementation Remarks

   1) Although iTTL can be decremented by a value larger than 1 while it
      is being updated or oTTL is being determined, this feature should
      be only used for compensating for network nodes that are not
      capable of decrementing TTL values.

   2) Whenever iTTL is decremented, the implementer must make sure that
      the value does not become negative.

   3) In the Short Pipe Model with PHP enabled, the TTL of the tunneled
      packet is unchanged after the PHP operation.

4. Conclusion

   This Internet Document describes how the TTL field can be processed
   in an MPLS network.  We clarified the various methods that are
   applied in the presence of hierarchical tunnels and completed the
   integration of Pipe and Uniform Models with TTL processing.

5. Security Considerations

   This document does not add any new security issues other than the
   ones defined in [MPLS-ENCAPS, MPLS-DS].  In particular, the document
   does not define a new protocol or expand an existing one and does not
   introduce security problems into the existing protocols.  The authors
   believe that clarification of TTL handling in MPLS networks benefits
   service providers and their customers since troubleshooting is
   simplified.

6. References

6.1. Normative References

   [RFC-2119]    Bradner, S. "Key words for use in RFC's to Indicate
                 Requirement Levels", BCP 14, RFC 2119, March 1997.

   [MPLS-ARCH]   Rosen, E., Viswanathan, A. and  R. Callon,
                 "Multiprotocol Label Switching Architecture", RFC 3031,
                 January 2001.

   [MPLS-ENCAPS] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y.,
                 Farinacci, D., Li, T. and A. Conta, "MPLS Label Stack
                 Encoding", RFC 3032, January 2001.

   [MPLS-DS]     Le Faucheur, F., Wu, L., Davie, B., Davari, S.,
                 Vaananen, P., Krishnan, R., Cheval, P. and J. Heinanen,
                 "Multi-Protocol Label Switching (MPLS) Support of
                 Differentiated Services", RFC 3270, May 2002.

6.2. Informative References

   [MPLS-LDP]    Andersson, L., Doolan, P., Feldman, N., Fredette, A.
                 and B. Thomas, "LDP Specification", RFC 3036, January
                 2001.

   [MPLS-RSVP]   Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan,
                 V. and  G. Swallow, "RSVP-TE: Extensions to RSVP for
                 LSP Tunnels", RFC 3209, December 2001.

7. Acknowledgements

   The authors would like to thank the members of the MPLS working group
   for their feedback.  We would especially like to thank Shahram Davari
   and Loa Andersson for their careful review of the document and their
   comments.

8. Author's Addresses

   Puneet Agarwal
   Brocade Communications Systems, Inc.
   1745 Technology Drive
   San Jose, CA 95110

   EMail: puneet@acm.org

   Bora Akyol
   Cisco Systems
   170 W. Tasman Drive
   San Jose, CA 95134

   EMail: bora@cisco.com

9.  Full Copyright Statement

   Copyright (C) The Internet Society (2003).  All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works.  However, this
   document itself may not be modified in any way, such as by removing
   the copyright notice or references to the Internet Society or other
   Internet organizations, except as needed for the purpose of
   developing Internet standards in which case the procedures for
   copyrights defined in the Internet Standards process must be
   followed, or as required to translate it into languages other than
   English.

   The limited permissions granted above are perpetual and will not be
   revoked by the Internet Society or its successors or assigns.

   This document and the information contained herein is provided on an
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

   Funding for the RFC Editor function is currently provided by the
   Internet Society.

AI ELI5

On this page
PROBLEMRFC 3032 only covers the Uniform Model and says nothing about hierarchical LSPs, the Pipe Model or Penultimate Hop Popping, so TTL handling in tunnels was left undefined.
MECHANISMThe RFC defines an incoming TTL (iTTL) and an outgoing TTL (oTTL) for every router and explains how they are set for Uniform, Short Pipe and Pipe Model LSPs, including push, swap, pop and PHP.
WHY IT MATTERSOperators can make a tunnel look like a single hop (Pipe) or show every router (Uniform). The RFC is a Proposed Standard that updates RFC 3032 and has itself been updated by RFC 5462.

§1Why TTL in MPLS Needed a Rewrite

RFC 3443 describes Time To Live (TTL) processing in hierarchical Multi-Protocol Label Switching (MPLS) networks. It was motivated by the need to formalize a TTL-transparent mode of operation for a label-switched path (LSP). It updates RFC 3032 (MPLS Label Stack Encoding) and complements RFC 3270 (MPLS Support of Differentiated Services).

The RFC lists three gaps in RFC 3032. It covers only the Uniform Model and does not address the Pipe Model or the Short Pipe Model. It does not cover hierarchical LSPs. And it does not define TTL processing in the presence of Penultimate Hop Popping (PHP).

The new Pipe Model supports the practice of configuring LSPs so that packets crossing the LSP see the tunnel as a single hop, however many label switch routers (LSRs) are inside it. The RFC says several vendors already provided this as an operator-configurable option.

Old rules only said how to count when every stop on a trip is counted. People also wanted trips where the whole tunnel counts as one stop, so this note writes down both ways.

§2Shim Header Fields and New Terms

An MPLS packet carries a shim header with four pieces of information: the MPLS label (20 bits), the TTL (8 bits), the bottom-of-stack flag (1 bit) and the experimental bits (3 bits). The experimental bits were later redefined in RFC 3270 to indicate scheduling and shaping behavior.

RFC 3443 adds three terms. iTTL is the TTL value to use as the incoming TTL, and no checks are performed on it. oTTL is the outgoing TTL, which is always iTTL - 1 unless stated otherwise. The oTTL check tests whether oTTL is greater than 0; if it is false, the packet is not forwarded. The check is only performed if an outgoing TTL (IP or MPLS) is set to oTTL.

The RFC splits TTL processing into two logical blocks: working out the incoming TTL, taking into account any tunnel exit caused by a Pop, and then processing the possibly exposed packet and its outgoing TTLs.

Signaling the LSP type (Pipe, Short Pipe or Uniform) is out of scope. LDP and RSVP-TE do not carry it, so the operator configures it manually, through a command line or a network management interface.

Each router works out the countdown number that arrived, subtracts one, and throws the packet away if nothing is left. The tunnel type is chosen by a person, not announced by the network.

§3The Uniform, Short Pipe and Pipe Models

In the Uniform Model, every node the LSP crosses is visible to nodes outside the tunnel. The inner and outer TTLs are synchronized at tunnel ingress and egress, so the tunnel behaves as if it were not there. This is consistent with RFC 3032 and applies with or without PHP.

In the Pipe Model, the MPLS network acts like a circuit and only the ingress and egress points are visible from outside. The outer TTL (N) may have no relationship to the tunneled TTL (n). The tunneled packet is decremented once on the way in and once at the egress, so its TTL ends at n-2. The RFC specifies the Pipe Model without PHP only.

The Short Pipe Model is a variation from RFC 3270 where the egress LSR bases its forwarding treatment on the tunneled packet rather than the encapsulating one. For TTL, it matches the Pipe Model without PHP. With PHP, the penultimate node pops the label and the egress node just decrements the header TTL. Either way, the tunneled packet's TTL has been decremented by two at the end of the LSP.

Imagine a trip through a long hallway with a guard at every door. In the Uniform way, each guard stamps your card. In the Pipe way, you get one stamp going in and one coming out, and the doors inside are not counted.

TTL TREATMENT BY LSP MODEL (SUMMARIZED FROM RFC 3443)
ModelPushed label TTLSeen from outsidePHP covered
UniformCopied from the header beneathEvery node the LSP crossesYes, with or without
Short PipeOperator-configured (often 255)Only ingress and egressYes, with or without
PipeOperator-configured (often 255)Only ingress and egressNo, without PHP only

§4Computing iTTL and oTTL at Each Router

The incoming TTL depends on what arrives. For an IP packet, iTTL is the packet's TTL. For an MPLS packet that is being pushed, swapped or PHP-popped, iTTL is the TTL of the topmost incoming label.

When the router pops a label to end a tunnel, iTTL depends on the type of the LSP that was popped. For a Pipe Model LSP, iTTL is the TTL of the header exposed after the pop, which may be an IP header or another MPLS label. For a Uniform Model LSP, iTTL equals the TTL of the popped label. If several Pops happen in a row, the iTTL from the previous Pop replaces the TTL of each later label.

After iTTL, the oTTL check runs. If it passes, an IP-routed packet gets TTL oTTL (iTTL - 1). For packets routed as MPLS there are four cases: Swap-only sets the outgoing label's TTL to oTTL; Swap followed by Push does the swap the same way and sets pushed labels as in the next section; PHP pops the label; and a plain Pop happens before routing and is not considered here.

For PHP, the oTTL check is done regardless of whether oTTL is used. If the PHPed label belonged to a Short Pipe LSP, the exposed header's TTL is neither checked nor updated. If it belonged to a Uniform LSP, the exposed header's TTL is set to oTTL.

When a packet arrives, the router first decides which countdown number to trust, then subtracts one. If the number would hit zero, the packet stops there.

§5Pushing Labels at the Tunnel Entrance

At tunnel ingress, the TTL of each pushed label depends on the model. For each pushed Uniform Model label, the TTL is copied from the label or IP packet immediately underneath it. For each pushed Pipe Model or Short Pipe Model label, the TTL field is set to a value configured by the network operator. In most implementations, the default is 255.

This is why a Pipe tunnel hides its interior: the outer TTL starts from a fixed configured value and has no relationship to the tunneled packet's TTL, which is left untouched while the packet is inside.

When a packet enters the tunnel, it gets a fresh outer ticket. In the Uniform way the ticket copies your number. In the Pipe way the ticket starts at a big preset number, usually 255.

§6Implementation Remarks

The RFC adds three remarks for implementers. First, iTTL can be decremented by a value larger than 1 while it is being updated or oTTL is being determined, but this should only be used to compensate for network nodes that cannot decrement TTL values.

Second, whenever iTTL is decremented, the implementer must make sure the value does not become negative. Third, in the Short Pipe Model with PHP enabled, the TTL of the tunneled packet is unchanged after the PHP operation.

Normally you take away exactly one. Never let the number go below zero, and do not take away more than one unless a router on the path cannot count for itself.

§7Security Considerations

The RFC adds no new security issues beyond those in RFC 3032 and RFC 3270. It does not define a new protocol or expand an existing one. The authors believe that clarifying TTL handling in MPLS networks benefits service providers and their customers because troubleshooting is simplified.

This note only explains how an existing counter works, so it brings no new dangers. Clear rules make problems easier to find.

§8References