RFC 3988

Maximum Transmission Unit Signalling Extensions for the Label Distribution Protocol

πŸ“… published February 2005, from ietf

RFC 3988: Maximum Transmission Unit Signalling Extensions for the Label Distribution Protocol πŸŽ€

okay bestie, this is RFC 3988, and it's all about getting MTU info to the right LSR so packets stop getting dropped 🫢

  • Network Working Group
  • Request for Comments: 3988
  • Category: Experimental πŸ§ͺ
  • Authors: B. Black (Layer8 Networks) and K. Kompella (Juniper Networks) πŸ’…
  • Date: January 2005
  • Obsoletes / Updates: the title block doesn't list anything here, so nothing is obsoleted or updated 🌸

Status of This Memo ✨

This memo defines an Experimental Protocol for the Internet community. It does not specify an Internet standard of any kind. Discussion and suggestions for improvement are requested. Distribution of this memo is unlimited.

Copyright (C) The Internet Society (2005).

Abstract πŸ¦‹

Okay so, proper RFC 1191 path MTU discovery needs IP routers to know the MTU of every link they're plugged into πŸ”Œ. The catch is that LDP can't currently tell the ingress LSR what the MTU is for an LSP 😭. Without that info, operators have to manually configure the MTU for each LSP, or use an equivalent offline method. Major pain.

This document specifies experimental extensions to LDP that support LSP MTU discovery 🧚

1. Introduction ✨

As it stands in [2], the LDP protocol for MPLS can't signal the MTU for LSPs to ingress LSRs πŸ™ˆ. This matters a LOT for RFC 1191 path MTU detection [3]. If an edge LSR doesn't know the LSP's MTU, it might send packets down that LSP that are, according to [4], too big πŸ’€. Those packets can get silently dropped by LSRs along the way, and suddenly certain end hosts can't talk to each other. Not it.

The fix in this document is to automatically work out the MTU for an LSP. It adds a Type-Length-Value triplet (TLV) that carries MTU info for a Forwarding Equivalence Class (FEC) between adjacent LSRs, inside LDP Label Mapping messages πŸ“. With that, the LSRs along the path can figure out either the exact MTU for the LSP, or an approximation that's no worse than what the ingress LSR could come up with using only its own local info. Slay πŸ‘‘

1.1. 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 BCP 14, RFC 2119 [1]. (bookmark this, it's the decoder ring for the whole doc πŸ—οΈ)

2. MTU Signalling πŸŽ€

The signalling procedure here is pretty simple: it adds one TLV to LDP Label Mapping messages, plus a straightforward algorithm for calculating the LSP MTU πŸ’–

2.1. Definitions πŸ“š

Link MTU: The MTU of a given link. This size includes the IP header and data (or other payload) and the label stack, but NOT any lower-layer headers. A link can be an interface (like Ethernet or Packet-over-SONET), a tunnel (like GRE or IPsec), or an LSP.

Peer LSRs: For LSR A and FEC F, this is the set of LSRs that sent a Label Mapping for FEC F to A.

Downstream LSRs: For LSR A and FEC F, this is the subset of A's peer LSRs for FEC F that A will forward packets to for that FEC. Usually this subset gets figured out from the routing table πŸ—ΊοΈ.

Hop MTU: The MTU of an LSP hop between an upstream LSR, A, and a downstream LSR, B. This size includes the IP header and data (or other payload) and the part of the label stack that counts as payload as far as this LSP is concerned. It doesn't include any lower-level headers. (Heads up: if there are multiple links between A and B, the Hop MTU is the minimum of the Hop MTUs of the links actually used for forwarding ⚠️.)

LSP MTU: The MTU of an LSP from a given LSR to the egress(es), over each valid (forwarding) path. This size includes the IP header and data (or other payload), plus any part of the label stack that the ingress LSR received before it put the packet into the LSP (that part of the label stack counts as payload for this LSP). It doesn't include any lower-layer headers.

2.2. Example πŸ¦‹

Let's picture LSRs A through F, all wired up like this:

                     M       P
                   _____ C =====
                  /      |      \
         A ~~~~~ B ===== D ----- E ----- F
             L       N       Q       R

Say the link MTU for link L is 9216. For links M, Q, and R, it's 4470. For N and P, it's 1500 🀏.

Now think about an FEC X where F is the egress, and say all the LSRs advertise X to their neighbors πŸ“£.

Heads up: LDP might be running on the C - D link, but it isn't used for forwarding (maybe because it has a high metric). D is an LDP neighbor of C, but D is NOT one of C's downstream LSRs for FEC X πŸ™….

E's peers for FEC X are C, D, and F. Say E picks F as its downstream LSR for X. E's Hop MTU for link R is 4466. If F advertised an implicit null label to E, then E MAY set the Hop MTU for R to 4470. (very optional, very cute πŸŽ€)

C's peers for FEC X are B, D, and E. Say C picks E as its downstream LSR for X. Similarly, A picks B, B picks C and D (equal cost multi-path), D picks E, and E picks F as their downstream LSRs.

C's Hop MTU to E for FEC X is 1496. B's Hop MTU to C is 4466, and to D it's 1496. A's LSP MTU for FEC X is 1496. If A has another LSP for FEC Y to F (learned via targeted LDP) that rides over the LSP for FEC X, the MTU for that LSP would be 1492 πŸ₯Ή.

Now, if B had a targeted LDP session to E (say, over an RSVP-TE tunnel T), and B got a Mapping for FEC X over that targeted LDP session, then E would also be B's peer, and E may be chosen as a downstream LSR for B. In that case, B's LSP MTU for FEC X would be the smaller of {(T's MTU - 4), E's LSP MTU for X} πŸ’….

This memo describes how A works out its LSP MTUs for FECs X and Y ✨.

2.3. Signalling Procedure πŸ”

The MTU gets signalled hop by hop. Each LSR L along an LSP for a given FEC, F, does the following steps 🧢:

  1. First, L computes its LSP MTU for FEC F:
    • A. If L is the egress for F, L sets the LSP MTU for F to 65535. πŸ‘‘
    • B. [OPTIONAL] If L's only downstream LSR is the egress for F (so L is a penultimate hop for F) AND L receives an implicit null label as its Mapping for F, then L can set the Hop MTU for its downstream link to the link MTU, instead of (link MTU - 4 octets). L's LSP MTU for F is the Hop MTU. 🌈
    • C. Otherwise (L is not the egress LSR), L computes the LSP MTU for F like this:
      • a) L figures out its downstream LSRs for FEC F.
      • b) For each downstream LSR Z, L computes the minimum of the Hop MTU to Z and the LSP MTU in the MTU TLV that Z advertised to L. If Z didn't include the MTU TLV in its Label Mapping, then Z's LSP MTU is set to 65535.
      • c) L sets its LSP MTU to the minimum of the MTUs it computed for its downstream LSRs.
  2. For each LDP neighbor (direct or targeted) of L that L decides to send a Mapping for FEC F to, L attaches an MTU TLV carrying the LSP MTU it computed for this FEC. L MAY (because of policy or for other reasons) advertise a smaller MTU than it has computed, but L MUST NOT advertise a larger MTU. πŸ™…β€β™€οΈ
  3. When a new MTU comes in for FEC F from a downstream LSR, or the set of downstream LSRs for F changes, L goes back to step 1. If the newly computed LSP MTU is unchanged, L SHOULD NOT advertise new info to its neighbors. Otherwise, L readvertises its Mappings for F to all its peers with an updated MTU TLV.

This behaviour is standard for attributes like path vector and hop count, and the same rules apply, as specified in [2].

If the LSP MTU decreases, L SHOULD readvertise the new MTU immediately. If the LSP MTU increases, L MAY hold down the readvertisement πŸ•°οΈ.

2.4. MTU TLV πŸŽ€

The MTU TLV carries info about the maximum transmission unit for an LSP, going from the advertising LSR to the egress(es) over all valid paths.

Here's the encoding for the MTU TLV 🧩:

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |1|1|      MTU TLV (0x0601)     |            Length             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |              MTU              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

MTU

This is a 16-bit unsigned integer that represents the MTU, in octets, for an LSP or a segment of an LSP πŸ”’.

Note that the U and F bits are set 🚩. An LSR that doesn't recognize the MTU TLV MUST ignore it when it processes the Label Mapping message, and forward the TLV to its peers. This might lead to an incorrect computation of the LSP MTU. Still, silently forwarding the MTU TLV keeps the most info about the LSP MTU, so it's worth it 🫢.

3. Example of Operation 🌸

Let's go back to the network from Section 2.2. For each LSR, Table 1 lists the links to its downstream LSRs, the Hop MTU for the peer, the LSP MTU received from the peer, and the LSR's computed LSP MTU πŸ“Š.

Now picture the same network with a few changes: there's an LSP T from B to E, plus a targeted LDP session from B to E. B's peer LSRs are A, C, D, and E. B's downstream LSRs are D and E. To reach E, B chooses to go over T. The LSP MTU for LSP T is 1496. Table 2 shows this 🧁.

      LSR  |  Link  |  Hop MTU  |  Recvd MTU  |  LSP MTU
      --------------------------------------------------
       F   |    -   |    65535  |      -      |    65535
      --------------------------------------------------
       E   |    R   |     4466  |  F:  65535  |     4466
      --------------------------------------------------
       D   |    Q   |     4466  |  E:   4466  |     4466
      --------------------------------------------------
       C   |    P   |     1496  |  E:   4466  |     1496
      --------------------------------------------------
       B   |    M   |     4466  |  C:   1496  |
           |    N   |     1496  |  D:   4466  |     1496
      --------------------------------------------------
       A   |    L   |     9212  |  B:   1496  |     1496
      --------------------------------------------------
                           Table 1

      LSR  |  Link  |  Hop MTU  |  Recvd MTU  |  LSP MTU
      --------------------------------------------------
       F   |    -   |    65535  |      -      |    65535
      --------------------------------------------------
       E   |    R   |     4466  |  F:  65535  |     4466
      --------------------------------------------------
       D   |    Q   |     4466  |  E:   4466  |     4466
      --------------------------------------------------
       C   |    P   |     1496  |  E:   4466  |     1496
      --------------------------------------------------
       B   |    T   |     1492  |  E:   4466  |
           |    N   |     1496  |  D:   4466  |     1492
      --------------------------------------------------
       A   |    L   |     9212  |  B:   1492  |     1492
      --------------------------------------------------
                           Table 2

4. Using the LSP MTU ✨

okay so, an ingress LSR (the router where the packet first enters the LSP) that forwards an IP packet into an LSP whose MTU it knows MUST either fragment the IP packet down to the LSP's MTU (if the Don't Fragment bit is clear) or drop the packet. If it drops the packet, it responds with an ICMP Destination Unreachable message to the packet's source. The Code is "fragmentation needed and DF set" and the Next-Hop MTU is set to the LSP MTU. 🫢 In other words, the LSR behaves the way RFC 1191 says, except it treats the LSP as the next hop "network" 🧚

if the payload for the LSP isn't an IP packet, the LSR MUST forward the packet if it fits (size <= LSP MTU) and SHOULD drop it if it doesn't. πŸ’…


5. Protocol Interaction 🌈

5.1. Interaction with LSRs that Do Not Support MTU Signalling πŸ™ˆ

okay this part is lowkey important 😭 changes in MTU for sections of an LSP can make intermediate LSRs send unsolicited label Mapping messages to advertise the new MTU. LSRs that don't support MTU signalling will still accept the messages carrying the MTU TLV, because of the message and TLV processing rules in RFC3036 [2]. But they'll ignore the TLV and forward it to the upstream nodes (see Section 2.4). not me being impressed by how the old boxes just keep passing it along πŸ’œ

5.2. Interaction with CR-LDP and RSVP-TE πŸ¦‹

the MTU TLV can be used to discover the Path MTU of both LDP LSPs and CR-LDP LSPs. this proposal isn't affected when LSPs are created with CR-LDP, as specified in [5] ✨

also, LDP/CR-LDP LSPs can tunnel through other LSPs signalled using LDP, CR-LDP, or RSVP-TE [6]. the mechanism here applies in all of these cases, basically by treating the tunnel LSPs as links. main character energy for sure πŸ‘‘


6. References πŸ“š

6.1. Normative References πŸŽ€

  • [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [2] Andersson, L., Doolan, P., Feldman, N., Fredette, A., and B. Thomas, "LDP Specification", RFC 3036, January 2001.
  • [3] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, November 1990.
  • [4] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack Encoding", RFC 3032, January 2001.
  • [6] 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.

6.2. Informative References πŸ’–

  • [5] Jamoussi, B., Andersson, L., Callon, R., Dantu, R., Wu, L., Doolan, P., Worster, T., Feldman, N., Fredette, A., Girish, M., Gray, E., Heinanen, J., Kilty, T., and A. Malis, "Constraint-Based LSP Setup using LDP", RFC 3212, January 2002.

7. Security Considerations πŸ’€

okay, serious moment, so pls read this bit πŸ₯Ί this mechanism does not introduce any new weaknesses in LDP. it is possible to spoof TCP packets belonging to an LDP session to manipulate the LSP MTU. however, LDP has mechanisms to thwart these types of attacks. see Section 5 of [2] for more information on the security aspects of LDP πŸ”₯


8. IANA Considerations 🧚

IANA has allocated 0x0601 as a new LDP TLV Type, defined in Section 2.4. πŸ“ see: http://www.iana.org/assignments/ldp-namespaces


9. Acknowledgements 🫢

we would like to thank Andre Fredette for a number of detailed comments on earlier versions of the signalling mechanism. Eric Gray, Giles Heron, and Mark Duffy also contributed numerous useful suggestions. the people in the back row deserve flowers too 🌸


Authors' Addresses πŸŽ€

Benjamin Black
Layer8 Networks

EMail: ben@layer8.net


Kireeti Kompella
Juniper Networks
1194 N. Mathilda Ave
Sunnyvale, CA  94089
US

EMail: kireeti@juniper.net

Copyright (C) The Internet Society (2005).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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.


Intellectual Property 🧚

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document, or the extent to which any license under such rights might or might not be available. nor does it represent that it has made any independent effort to identify any such rights. Information on the IETF's procedures with respect to rights in IETF Documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification, can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.

Acknowledgement πŸ’–

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

πŸ“¦ where this page comes from