RFC 9300
The Locator/ID Separation Protocol (LISP)
RFC 9300: The Locator/ID Separation Protocol (LISP) ๐ฆ
Okay bestie, this is RFC 9300, and it's giving "the Internet's glow-up" โจ. It's titled The Locator/ID Separation Protocol (LISP), it's a Standards Track document, and it came out in October 2022. The authors are D. Farinacci of lispers.net, V. Fuller of vaf.net Internet Consulting, D. Meyer of 1-4-5.net, and D. Lewis of Cisco Systems, plus A. Cabellos as editor (Ed.) from Universitat Politecnica de Catalunya ๐ . It's an IETF document with ISSN 2070-1721. It obsoletes RFC 6830, so 6830 is officially retired, periodt ๐. It doesn't list any updates.
Abstract ๐
This document describes the data plane protocol for the Locator/ID Separation Protocol (LISP). LISP defines two namespaces: Endpoint Identifiers (EIDs), which identify end hosts, and Routing Locators (RLOCs), which identify network attachment points. So LISP separates control from data and lets routers build overlay networks ๐ง. LISP-capable routers swap encapsulated packets based on EID-to-RLOC mappings kept in a local Map-Cache.
LISP doesn't need any changes to host protocol stacks or underlay routers, and it offers Traffic Engineering (TE), multihoming, and mobility, among other features ๐.
This document obsoletes RFC 6830.
Status of This Memo ๐
This is an Internet Standards Track document.
It's a product of the Internet Engineering Task Force (IETF), so it represents IETF community consensus. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 7841 ๐.
For the current status of this document, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc9300 โจ.
Copyright Notice ยฉ๏ธ
Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as in effect on the date of publication. Please read these carefully, because they spell out your rights and restrictions for this document ๐ซถ. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Revised BSD License.
Table of Contents ๐
1. Introduction
1.1. Scope of Applicability
2. Requirements Notation
3. Definitions of Terms
4. Basic Overview
4.1. Deployment on the Public Internet
4.2. Packet Flow Sequence
5. LISP Encapsulation Details
5.1. LISP IPv4-in-IPv4 Header Format
5.2. LISP IPv6-in-IPv6 Header Format
5.3. Tunnel Header Field Descriptions
6. LISP EID-to-RLOC Map-Cache
7. Dealing with Large Encapsulated Packets
7.1. A Stateless Solution to MTU Handling
7.2. A Stateful Solution to MTU Handling
8. Using Virtualization and Segmentation with LISP
9. Routing Locator Selection
10. Routing Locator Reachability
10.1. Echo-Nonce Algorithm
11. EID Reachability within a LISP Site
12. Routing Locator Hashing
13. Changing the Contents of EID-to-RLOC Mappings
13.1. Locator-Status-Bits
13.2. Database Map-Versioning
14. Multicast Considerations
15. Router Performance Considerations
16. Security Considerations
17. Network Management Considerations
18. Changes since RFC 6830
19. IANA Considerations
19.1. LISP UDP Port Numbers
20. References
20.1. Normative References
20.2. Informative References
Acknowledgments
Authors' Addresses
1. Introduction โจ
This document describes the Locator/ID Separation Protocol (LISP), and LISP is an encapsulation protocol built on one big idea: separating the topological location of a network attachment point from the node's identity [CHIAPPA]. ๐ Because of that, LISP makes two namespaces. Endpoint Identifiers (EIDs) name end hosts, like nodes or Virtual Machines. Routable Routing Locators (RLOCs) name network attachment points. LISP then defines how to map between the two, and how to encapsulate traffic from devices using non-routable EIDs so it can cross a network infrastructure that routes and forwards using RLOCs. The encapsulation is a dynamic kind of tunneling, so no static provisioning is required or necessary, which is so relieving ๐ญ.
LISP is an overlay protocol that separates control from data. This document specifies the data plane, plus how LISP-capable routers (called Tunnel Routers) exchange packets by encapsulating them to the right location ๐ฆ. Tunnel Routers have a cache called the Map-Cache, which holds EID-to-RLOC mappings. The Map-Cache gets filled in using the LISP control plane protocol [RFC9301].
LISP doesn't change the host protocol stack or the underlay routers either. By separating the EID space from the RLOC space, LISP gets native Traffic Engineering (TE), multihoming, and mobility, among other features ๐ธ.
LISP started with discussions at the IAB-sponsored Routing and Addressing Workshop in Amsterdam in October 2006 (see [RFC4984]) ๐ง.
This document specifies the LISP data plane encapsulation and the rest of the LISP forwarding node functionality, while [RFC9301] specifies the LISP control plane. LISP deployment guidelines are in [RFC7215], and [RFC6835] covers considerations for network operational management. Last but not least, [RFC9299] describes the LISP architecture ๐.
This document obsoletes RFC 6830.
1.1. Scope of Applicability ๐
LISP was first built to tackle the Internet-wide route scaling problem [RFC4984]. There are a bunch of approaches for that problem, but as LISP got developed and refined, people found a huge number of other ways to use it, and those are being implemented now. So the design and development of LISP shifted to focus on those use cases ๐. What these uses have in common is a large set of cooperating entities that want to talk over the public Internet or other large underlay IP infrastructures, while keeping their own addressing and topology separate from the underlay and the Internet's topology, routing, and addressing. Main character energy, honestly ๐ .
2. Requirements Notation ๐
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. So the capital-letter words are the ones with real force, and the lowercase versions are just regular words ๐.
3. Definitions of Terms โจ
okay bestie, let's get into the vocab ๐๐ these terms are the building blocks for everything else in this doc, so pls actually read them ๐ซถ
Address Family Identifier (AFI): "AFI" is the term for describing an address encoding in a packet ๐ง an address family is an address format you'll find in data plane packet headers, like an IPv4 address or an IPv6 address ๐ check out [AFN], [RFC2453], [RFC2677], and [RFC4760] for the full tea. an AFI value of 0 used in this specification means an unspecified encoded address, where the length of the address is 0 octets after the 16-bit AFI value of 0 ๐ธ
Anycast Address: "Anycast address" means the same IPv4 or IPv6 address is configured and used on multiple systems at the same time ๐ฆ an EID or RLOC can be an anycast address in each of their own address spaces ๐
Client-side: "Client-side" is just how this document refers to a connection initiation attempt made by an end-system that's represented by an EID ๐ฑโจ
Egress Tunnel Router (ETR): an ETR is a router that accepts an IP packet where the destination address in the "outer" IP header is one of its own RLOCs ๐ช it strips off the "outer" header and forwards the packet based on the next IP header it finds ๐ generally, an ETR gets LISP-encapsulated IP packets from the Internet on one side, and sends decapsulated IP packets to site end-systems on the other side ๐ and ngl, ETR functionality doesn't have to be a router device, a server host can be the endpoint of a LISP tunnel too ๐โจ
EID-to-RLOC Database: the EID-to-RLOC Database is a distributed database that holds all the known EID-Prefix-to-RLOC mappings ๐๏ธ each potential ETR usually has a small piece of it: the EID-to-RLOC mappings for the EID-Prefixes "behind" the router ๐ those map to one of the router's own IP addresses that are routable on the underlay ๐ท also note that there MAY be transient conditions where the EID-Prefix for the LISP site and the Locator-Set for each EID-Prefix aren't the same on all ETRs ๐ซ and that's totally fine, because a partial set of Locators can still be used ๐
EID-to-RLOC Map-Cache: the EID-to-RLOC Map-Cache is a generally short-lived, on-demand table in an Ingress Tunnel Router (ITR) ๐ง it stores and tracks the EID-to-RLOC mappings, and it's responsible for timing them out and otherwise validating them โณ this cache is different from the full "database" of EID-to-RLOC mappings ๐ซ it's dynamic, local to the ITR(s), and relatively small, while the database is distributed, relatively static, and way more widely scoped to LISP nodes ๐๐
EID-Prefix: an EID-Prefix is a power-of-two block of EIDs that gets allocated to a site by an address allocation authority ๐ EID-Prefixes are associated with a set of RLOC addresses ๐ and EID-Prefix allocations can be broken up into smaller blocks when an RLOC-Set is going to be associated with the bigger EID-Prefix block ๐งฉโจ
End-System: an end-system is an IPv4 or IPv6 device that originates packets with a single IPv4 or IPv6 header ๐ป it supplies an EID value for the destination address field of the IP header when it's communicating outside of its routing domain ๐ฆ an end-system can be a host computer, a switch or router device, or any network appliance ๐ซถ
Endpoint ID (EID): an EID is a 32-bit (for IPv4) or 128-bit (for IPv6) value that identifies a host ๐ชช EIDs are generally only found in the source and destination address fields of the first (innermost) LISP header of a packet ๐ฏ the host gets a destination EID through a Domain Name System (DNS) [RFC1034] lookup or a Session Initiation Protocol (SIP) [RFC3261] exchange ๐ and this doesn't change when LISP is in use ๐ the source EID comes from the existing mechanisms used to set a host's "local" IP address ๐ง
โ ๏ธ bestie, the EID rules are strict: an EID used on the public Internet MUST have the same properties as any other IP address used in that manner, and this means, among other things, that it MUST be unique ๐ญ no duplicates allowed, ever ๐
continuing the EID tea ๐ต an EID is allocated to a host from an EID-Prefix block associated with the site where the host is located ๐ก an EID can also be used by a host to refer to other hosts ๐ฌ also EID blocks MAY be assigned in a hierarchical manner, independent of the network topology, to help the mapping database scale ๐ and an EID block assigned to a site MAY have site-local structure (subnetting) for routing within the site, but that structure isn't visible to the underlay routing system ๐ in theory, the bit string that represents an EID for one device can represent an RLOC for a different device ๐คฏ when discussing other Locator/ID separation proposals, any reference to an EID in this document refers to a LISP EID ๐ธ
Ingress Tunnel Router (ITR): an ITR is a router that lives in a LISP site ๐ฐ packets sent by sources inside the LISP site to destinations outside of it are candidates for encapsulation by the ITR ๐ the ITR treats the IP destination address as an EID and does an EID-to-RLOC mapping lookup ๐ then it prepends an "outer" IP header with one of its routable RLOCs (in the RLOC space) in the source address field, and the result of the mapping lookup in the destination address field ๐ง note that this destination RLOC may be an intermediate, proxy device that has better knowledge of the EID-to-RLOC mapping closer to the destination EID ๐ฆ generally, an ITR gets IP packets from site end-systems on one side, and sends LISP-encapsulated IP packets toward the Internet on the other side ๐
LISP Header: "LISP header" is how this document refers to the outer IPv4 or IPv6 header, a UDP header, and a LISP-specific 8-octet header, all of which follow the UDP header ๐ an ITR prepends LISP headers on packets, and an ETR strips them ๐
LISP Router: a LISP router is a router that performs the functions of any or all of the following: ITRs, ETRs, Re-encapsulating Tunneling Routers (RTRs), Proxy-ITRs (PITRs), or Proxy-ETRs (PETRs) ๐ง โจ
LISP Site: a LISP site is a set of routers in an edge network that are under a single technical administration ๐๏ธ LISP routers that live in the edge network are the demarcation points that separate the edge network from the core network ๐งฑ
Locator-Status-Bits (LSBs): Locator-Status-Bits are present in the LISP header ๐ ITRs use them to tell ETRs about the up/down status of all the ETRs at the local site ๐ก these bits are used as a hint to convey up/down router status, and NOT path reachability status ๐ โโ๏ธ (well, not capitalized here, but the vibe is "not path status, bestie" ๐) the LSBs can be verified by using one of the Locator reachability algorithms described in Section 10 โ and this is a big one: an ETR MUST rate limit the action it takes when it detects changes in the Locator-Status-Bits ๐ฆ no spamming allowed ๐
Proxy-ETR (PETR): a PETR is defined and described in [RFC6832] ๐ซถ a PETR acts like an ETR, but does so on behalf of LISP sites that send packets to destinations at non-LISP sites ๐ท
Proxy-ITR (PITR): a PITR is defined and described in [RFC6832] ๐ฆ a PITR acts like an ITR, but does so on behalf of non-LISP sites that send packets to destinations at LISP sites ๐
Recursive Tunneling: Recursive Tunneling happens when a packet has more than one LISP IP header ๐ช additional layers of tunneling MAY be employed to implement Traffic Engineering or other rerouting as needed ๐ฃ๏ธ when this is done, an additional "outer" LISP header is added, and the original RLOCs are preserved in the "inner" header ๐ซ
Re-encapsulating Tunneling Router (RTR): an RTR acts like an ETR to remove a LISP header, then acts as an ITR to prepend a new LISP header ๐ this is known as Re-encapsulating Tunneling ๐ doing this lets the RTR reroute a packet without adding the overhead of additional tunnel headers ๐ง when using multiple mapping database systems, care must be taken to not create re-encapsulation loops through misconfiguration ๐โ ๏ธ
Route-Returnability: route-returnability is an assumption that the underlying routing system will deliver packets to the destination ๐ฌ when it's combined with a nonce that's provided by a sender and returned by a receiver, it limits off-path data insertion ๐ก๏ธ a route-returnability check is verified when a message is sent with a nonce, another message comes back with the same nonce, and the destination of the original message shows up as the source of the returned message ๐ it's giving security check ๐
Routing Locator (RLOC): an RLOC is an IPv4 address [RFC0791] or IPv6 address [RFC8200] of an Egress Tunnel Router (ETR) ๐ an RLOC is the output of an EID-to-RLOC mapping lookup ๐ฏ an EID maps to zero or more RLOCs ๐งฉ typically, RLOCs are numbered from blocks that are assigned to a site at each point where it attaches to the underlay network, and the topology is defined by the connectivity of provider networks ๐ multiple RLOCs can be assigned to the same ETR device, or to multiple ETR devices at a site ๐ขโจ
Server-side: "Server-side" is how this document says that a connection initiation attempt is being accepted for a destination EID ๐ฅ๏ธ๐ซถ
xTR: an xTR is a reference to an ITR or ETR when the direction of data flow isn't part of the context description ๐ "xTR" refers to the router that is the tunnel endpoint, and it's used synonymously with the term "Tunnel Router" ๐ for example, "An xTR can be located at the Customer Edge (CE) router" means both ITR and ETR functionality at the CE router ๐ธ๐
4. Basic Overview โจ
okay so the big LISP idea is that end-systems act the exact same way whether LISP is in use or not ๐ The IP addresses hosts use for tracking sockets and connections, and for sending and receiving packets, do not change at all ๐ซถ In LISP terminology these are called Endpoint Identifiers (EIDs) ๐
Routers keep forwarding packets based on IP destination addresses ๐ When a packet is LISP encapsulated, those addresses are called RLOCs ๐ฆ Most routers along the path between two hosts won't change, and they keep doing routing/forwarding lookups on the destination addresses ๐ธ For routers between the source host and the ITR, and for routers from the ETR to the destination host, the destination address is an EID. For routers between the ITR and the ETR, the destination address is an RLOC.
Another key LISP concept is the "Tunnel Router" ๐ A Tunnel Router prepends LISP headers on host-originated packets and strips them off before final delivery. The IP addresses in this "outer header" are RLOCs. During end-to-end packet exchange between two Internet hosts, an ITR prepends a new LISP header to each packet, and an ETR strips that new header off. The ITR does EID-to-RLOC lookups to figure out the routing path to the ETR, which has the RLOC as one of its IP addresses ๐ง
Some basic rules governing LISP are:
- End-systems only send to addresses that are EIDs. EIDs are typically IP addresses assigned to hosts (other types of EIDs are supported by LISP; see
[RFC8060]for further information) ๐ End-systems don't know whether an address is an EID or an RLOC, but they assume packets get to their intended destinations ๐ In a system where LISP is deployed, LISP routers intercept EID-addressed packets and help deliver them across the network core, where EIDs cannot be routed. The procedure a host uses to send IP packets does not change. - LISP routers prepend and strip outer headers with RLOC addresses. See Section 4.2 for details ๐
- RLOCs are always IP addresses assigned to routers, preferably topologically oriented addresses from provider Classless Inter-Domain Routing (CIDR) blocks ๐
- When a router originates packets, it MAY use as a source address either an EID or an RLOC. When acting as a host (e.g., when terminating a transport session such as Secure Shell (SSH), TELNET, or the Simple Network Management Protocol (SNMP)), it MAY use an EID that is explicitly assigned for that purpose. An EID that identifies the router as a host MUST NOT be used as an RLOC, because an EID is only routable within the scope of a site ๐ โโ๏ธ A typical BGP configuration might show this "hybrid" EID/RLOC usage: a router could use its "host-like" EID to terminate internal BGP (iBGP) sessions to other routers in a site, while at the same time using RLOCs to terminate external BGP (eBGP) sessions to routers outside the site ๐ฅ
- Packets with EIDs in them are not expected to be delivered end to end without an EID-to-RLOC mapping operation. They are expected to be used locally for intra-site communication, or to be encapsulated for inter-site communication ๐
- EIDs MAY also be structured (subnetted) in a manner suitable for local routing within an Autonomous System (AS) ๐ธ
An additional LISP header MAY be prepended to packets by a TE-ITR when rerouting the path for a packet is desired. A potential use case is an ISP router that needs to do Traffic Engineering for packets flowing through its network. In this situation, termed "Recursive Tunneling," an ISP transit acts as an additional ITR, and the destination RLOC it uses for the new prepended header would be either a TE-ETR within the ISP (along an intra-ISP traffic-engineered path) or a TE-ETR within another ISP (an inter-ISP traffic-engineered path, where an agreement to build such a path exists) ๐
To avoid excessive packet overhead and possible encapsulation loops, it is RECOMMENDED that a maximum of two LISP headers can be prepended to a packet ๐ For initial LISP deployments, two headers are assumed to be sufficient: the first prepended header is used at a site for separation of location and identity, and the second is used inside a service provider for Traffic Engineering purposes ๐
Tunnel Routers can be placed pretty flexibly in a multi-AS topology ๐ฆ For example, the ITR for a particular end-to-end packet exchange might be the first-hop or default router within a site for the source host. Similarly, the ETR might be the last-hop router directly connected to the destination host. As another example, perhaps for a VPN service outsourced to an ISP by a site, the ITR could be the site's border router at the service provider attachment point. Mixing and matching site-operated, ISP-operated, and other Tunnel Routers is allowed for maximum flexibility โจ
4.1. Deployment on the Public Internet ๐
Several of the mechanisms in this document are meant for controlled, trusted environments, and they are insecure for use over the public Internet ๐ญ On the public Internet, xTRs:
- MUST set the N-, L-, E-, and V-bits in the LISP header (Section 5.1) to zero ๐ซ
- MUST NOT use Locator-Status-Bits and Echo-Nonce, as described in Section 10, for RLOC reachability. Instead, they MUST rely solely on control plane methods.
- MUST NOT use gleaning or Locator-Status-Bits and Map-Versioning, as described in Section 13, to update the EID-to-RLOC mappings. Instead, they MUST rely solely on control plane methods.
4.2. Packet Flow Sequence ๐ธ
This section walks through an example of the unicast packet flow, including the control plane information specified in [RFC9301]. The example also assumes the following conditions:
- Source host
host1.abc.example.comis sending a packet tohost2.xyz.example.com, exactly as it would if the site were not using LISP ๐ - Each site is multihomed, so each Tunnel Router has an address (RLOC) assigned from the service provider address block for each provider that particular Tunnel Router is attached to ๐
- The ITR(s) and ETR(s) are directly connected to the source and destination, respectively, but the source and destination can be located anywhere in the LISP site ๐
- A Map-Request is sent for an external destination when the destination is not found in the forwarding table or matches a default route. Map-Requests are sent to the mapping database system using the LISP control plane protocol documented in
[RFC9301]๐ฎ - Map-Replies are sent on the underlying routing system topology, using the control plane protocol
[RFC9301]๐ฌ
Client host1.abc.example.com wants to talk to server host2.xyz.example.com:
host1.abc.example.comwants to open a TCP connection tohost2.xyz.example.com. It does a DNS lookup onhost2.xyz.example.com, and an A/AAAA record comes back. This address is the destination EID. The locally assigned address ofhost1.abc.example.comis used as the source EID. An IPv4 or IPv6 packet is built and forwarded through the LISP site as a normal IP packet until it reaches a LISP ITR ๐- The LISP ITR must be able to map the destination EID to an RLOC of one of the ETRs at the destination site. One method for doing this is to send a LISP Map-Request, as specified in
[RFC9301]๐บ๏ธ - The Mapping System helps forward the Map-Request to the corresponding ETR. When the Map-Request arrives at one of the ETRs at the destination site, it gets processed as a control message ๐ฆ
- The ETR looks at the destination EID of the Map-Request and matches it against the prefixes in the ETR's configured EID-to-RLOC mapping database. This is the list of EID-Prefixes the ETR supports for the site it resides in. If there's no match, the Map-Request is dropped. Otherwise, a LISP Map-Reply is returned to the ITR ๐โโ๏ธ
- The ITR receives the Map-Reply message, parses it, and stores the mapping information from the packet in the ITR's EID-to-RLOC Map-Cache. Note that the Map-Cache is an on-demand cache. An ITR manages its Map-Cache in whatever way optimizes for its resource constraints ๐ง
- Subsequent packets from
host1.abc.example.comtohost2.xyz.example.comget a LISP header prepended by the ITR, using the appropriate RLOC learned from the ETR as the LISP header destination address. Note that the packet MAY be sent to a different ETR than the one that returned the Map-Reply, due to the source site's hashing policy or the destination site's Locator-Set policy ๐ - The ETR receives these packets directly (since the destination address is one of its assigned IP addresses), checks the validity of the addresses, strips the LISP header, and forwards the packets to the attached destination host ๐
- To defer the need for a mapping lookup in the reverse direction, it is OPTIONAL for an ETR to create a cache entry that maps the source EID (inner-header source IP address) to the source RLOC (outer-header source IP address) in a received LISP packet. Such a cache entry is termed a "glean mapping," and it only contains a single RLOC for the EID in question. More complete information about additional RLOCs SHOULD be verified by sending a LISP Map-Request for that EID. Both the ITR and the ETR MAY also influence the decision the other makes when selecting an RLOC ๐ค
5. LISP Encapsulation Details ๐ฆ
Since additional tunnel headers are prepended, the packet gets bigger and can exceed the MTU of any link traversed from the ITR to the ETR ๐ฌ It is RECOMMENDED in IPv4 that packets do not get fragmented as they are encapsulated by the ITR. Instead, the packet is dropped and an ICMPv4 Unreachable / Fragmentation Needed message is returned to the source.
In the case where fragmentation is needed, it is RECOMMENDED that implementations provide support for one of the proposed fragmentation and reassembly schemes. Two existing schemes are detailed in Section 7 ๐งฉ
Since IPv4 or IPv6 addresses can be either EIDs or RLOCs, the LISP architecture supports IPv4 EIDs with IPv6 RLOCs (where the inner header is in IPv4 packet format and the outer header is in IPv6 packet format), or IPv6 EIDs with IPv4 RLOCs (where the inner header is in IPv6 packet format and the outer header is in IPv4 packet format). The next subsections illustrate packet formats for the homogeneous case (IPv4-in-IPv4 and IPv6-in-IPv6), but all 4 combinations MUST be supported. Additional types of EIDs are defined in [RFC8060] ๐
As LISP uses UDP encapsulation to carry traffic between xTRs across the Internet, implementors should be aware of the provisions of [RFC8085], especially those given in its Section 3.1.11 on congestion control for UDP tunneling ๐
Implementors are encouraged to consider UDP checksum usage guidelines in Section 3.4 of [RFC8085] when it is desirable to protect UDP and LISP headers against corruption ๐ก๏ธ
5.1. LISP IPv4-in-IPv4 Header Format โจ
okay so this is the IPv4 version, and it's giving nested dolls ๐ช๐. There's an outer IPv4 header (that's the OH label on the left), then a UDP header with destination port 4341, then a LISP header, then the original inner IPv4 header (labeled IH). The brackets on the left side show which chunk is which, so you can see exactly where each layer starts and stops ๐ฆ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ |Version| IHL | DSCP |ECN| Total Length |
/ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Identification |Flags| Fragment Offset |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
OH | Time to Live | Protocol = 17 | Header Checksum |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Source Routing Locator |
\ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ | Destination Routing Locator |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ | Source Port = xxxx | Dest Port = 4341 |
UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ | UDP Length | UDP Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
L |N|L|E|V|I|R|K|K| Nonce/Map-Version |
I \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
S / | Instance ID/Locator-Status-Bits |
P +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ |Version| IHL | DSCP |ECN| Total Length |
/ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Identification |Flags| Fragment Offset |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IH | Time to Live | Protocol | Header Checksum |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Source EID |
\ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ | Destination EID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IHL = IP-Header-Length
5.2. LISP IPv6-in-IPv6 Header Format ๐
and now the IPv6 twin ๐ same nested-doll energy, just with IPv6 headers instead. The outer one is labeled OHv6, the UDP part is the same deal with destination port 4341, the LISP header sits in the middle, and then the inner IPv6 header (IHv6) comes last. The brackets show where each piece lives, so you can follow the layers top to bottom ๐ธ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ |Version| DSCP |ECN| Flow Label |
/ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Payload Length | Next Header=17| Hop Limit |
v +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
O + +
u | |
t + Source Routing Locator +
e | |
r + +
| |
H +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
d | |
r + +
| |
^ + Destination Routing Locator +
| | |
\ + +
\ | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ | Source Port = xxxx | Dest Port = 4341 |
UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ | UDP Length | UDP Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
L |N|L|E|V|I|R|K|K| Nonce/Map-Version |
I \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
S / | Instance ID/Locator-Status-Bits |
P +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ |Version| DSCP |ECN| Flow Label |
/ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ | Payload Length | Next Header | Hop Limit |
v +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
I + +
n | |
n + Source EID +
e | |
r + +
| |
H +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
d | |
r + +
| |
^ + Destination EID +
\ | |
\ + +
\ | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5.3. Tunnel Header Field Descriptions ๐
okay bestie, this is where the header fields get real, so let's go one by one ๐
- Inner Header (IH): the inner header is the header on the datagram that came in from the originating host [RFC0791] [RFC8200] [RFC2474]. The source and destination IP addresses are EIDs.
- Outer Header (OH): the outer header is a brand new header that an ITR slaps on top ๐
. Its address fields hold RLOCs pulled from the ingress router's EID-to-RLOC Map-Cache. The IP protocol number is
UDP (17)from [RFC0768]. The Don't Fragment (DF) bit in theFlagsfield gets set following the rules in Sections 7.1 and 7.2. - UDP Header: the UDP header carries an ITR-selected source port when a packet is being encapsulated. For how that source port gets picked from the 5-tuple of the inner header, see Section 12 ๐ฅ. The destination port MUST be set to the well-known IANA-assigned port value
4341. - UDP Checksum: an ITR SHOULD transmit the
UDP Checksumfield as zero for either IPv4 [RFC0768] or IPv6 encapsulation [RFC6935] [RFC6936] ๐. When an ETR receives a packet with a zero UDP checksum, the ETR MUST accept that packet for decapsulation. If an ITR does transmit a non-zero UDP checksum, it MUST send a correctly computed value in that field. When an ETR gets a packet with a non-zero UDP checksum, it MAY choose to verify the checksum. If it does verify and the check fails, the packet MUST be silently dropped ๐ญ. If the ETR skips the verification or the verification passes, the packet MUST be accepted for decapsulation. The handling of UDP zero checksums over IPv6 for all tunneling protocols, LISP included, is subject to the applicability statement in [RFC6936]. - UDP Length: for an IPv4-encapsulated packet, the
UDP Lengthfield is the sum of the inner-header IPv4 Total Length plus the UDP and LISP header lengths. For an IPv6-encapsulated packet, theUDP Lengthfield is the sum of the inner-header IPv6 Payload Length, the size of the IPv6 header (40 octets), and the size of the UDP and LISP headers โจ. - N: the N-bit is the nonce-present bit. When this bit is set to 1, the low-order 24 bits of the first 32 bits of the LISP header hold a nonce. See Section 10.1 for details. The N- and V-bits MUST NOT be set in the same packet. If they both are, a decapsulating ETR MUST treat the
Nonce/Map-Versionfield as having a nonce value present. - L: the L-bit is the
Locator-Status-Bitsfield enabled bit. When this bit is set to 1, the Locator-Status-Bits in the second 32 bits of the LISP header are in use ๐ฆ.
Here's the layout for the first flag bits, with the N, L, E, V, I, R, and K bits all in their spots:
x 1 x x 0 x x x
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|L|E|V|I|R|K|K| Nonce/Map-Version |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Locator-Status-Bits |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- E: the E-bit is the Echo-Nonce-request bit. This bit MUST be ignored and has no meaning when the N-bit is set to 0. When the N-bit is set to 1 and this bit is also set to 1, an ITR is asking for the nonce value in the
Noncefield to be echoed back in LISP-encapsulated packets when the ITR is also an ETR. See Section 10.1 for details ๐ธ. - V: the V-bit is the Map-Version present bit. When this bit is set to 1, the N-bit MUST be 0. Refer to [RFC9302] for more details on Database Map-Versioning. In this case, this bit tells you the LISP header is encoded like this:
0 x 0 1 x x x x
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|L|E|V|I|R|K|K| Source Map-Version | Dest Map-Version |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Instance ID/Locator-Status-Bits |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- I: the I-bit is the Instance ID bit. See Section 8 for more details ๐ง. When this bit is set to 1, the
Locator-Status-Bitsfield shrinks to 8 bits and the high-order 24 bits are used as an Instance ID. If the L-bit is set to 0, the low-order 8 bits are transmitted as zero and ignored on receipt. The LISP header then looks like this:
x x x x 1 x x x
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|L|E|V|I|R|K|K| Nonce/Map-Version |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Instance ID | LSBs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- R: the R-bit is a reserved, unassigned bit that's saved for future use ๐. It MUST be set to 0 on transmit and MUST be ignored on receipt.
- KK: the KK-bits are a 2-bit field used when encapsulated packets are encrypted. The field is set to
00when the packet is not encrypted. See [RFC8061] for further information. - LISP Nonce: the LISP
Noncefield is a 24-bit value that an ITR randomly generates when the N-bit is set to 1. How nonces get generated is an implementation matter, but implementations are required to generate different nonces when sending to different RLOCs ๐. The nonce is also used when the E-bit is set to request that the nonce value be echoed by the other side when packets come back. When the E-bit is clear but the N-bit is set, a remote ITR is either echoing a previously requested Echo-Nonce or giving a random nonce. See Section 10.1 for more details. Finally, when both the N- and V-bits are not set (N=0, V=0), both theNonceandMap-Versionfields are set to 0 and ignored on receipt. - LISP Locator-Status-Bits (LSBs): when the L-bit is also set, an ITR sets the
Locator-Status-Bitsfield in the LISP header to tell an ETR the up/down status of the Locators in the source site ๐. Each RLOC in a Map-Reply gets an ordinal value from 0 to n-1 (when there are n RLOCs in a mapping entry). The Locator-Status-Bits are numbered from 0 to n-1, starting from the least significant bit of the field. The field is 32 bits when the I-bit is set to 0 and 8 bits when the I-bit is set to 1. When a Locator-Status-Bit is set to 1, the ITR is telling the ETR that the RLOC linked to that bit's ordinal has up status. See Section 10 for details on how an ITR can work out the status of the ETRs at the same site. When a site has multiple EID-Prefixes that result in multiple mappings (where each one could have a different Locator-Set), the Locator-Status-Bits setting in an encapsulated packet MUST reflect the mapping for the EID-Prefix that the inner-header source EID address matches (longest-match). If the LSB for an anycast Locator is set to 1, then at least one RLOC has that address, and the ETR is considered 'up' โญ.
When doing ITR/PITR encapsulation, here's the vibe:
- The outer-header
Time to Livefield (orHop Limitfield, for IPv6) SHOULD be copied from the inner-headerTime to Livefield. - The outer-header IPv4
Differentiated Services Code Point (DSCP)field (orTraffic Classfield, for IPv6) SHOULD be copied from the inner-header IPv4DSCPfield (orTraffic Classfield, for IPv6) to the outer header. Guidelines for this can be found in [RFC2983] ๐. - The IPv4
Explicit Congestion Notification (ECN)field and bits 6 and 7 of the IPv6Traffic Classfield need special handling so they don't throw away congestion signals, as specified in [RFC6040] ๐.
When doing ETR/PETR decapsulation, it's giving careful copying:
- The inner-header IPv4
Time to Livefield (orHop Limitfield, for IPv6) MUST be copied from the outer-headerTime to Live/Hop Limitfield when the outer header's value is less than the inner header's value. Skipping this check can make the inner header's Time to Live / Hop Limit go up across encapsulation/decapsulation cycles ๐ณ. This check is also done during initial encapsulation, when a packet arrives at an ITR or PITR destined for a LISP site. - The outer-header IPv4
Differentiated Services Code Point (DSCP)field (orTraffic Classfield, for IPv6) SHOULD be copied from the outer-headerIPv4 DSCPfield (orTraffic Classfield, for IPv6) to the inner header. Guidelines for this can be found in [RFC2983]. - The IPv4
Explicit Congestion Notification (ECN)field and bits 6 and 7 of the IPv6Traffic Classfield need special handling so congestion indications aren't discarded, as specified in [RFC6040]. Heads up: implementations exist that copy theECNfield from the outer header to the inner header, even though [RFC6040] does not recommend this behavior. It is RECOMMENDED that implementations change to support the behavior discussed in [RFC6040] ๐ซถ.
Note that if an ETR/PETR is also an ITR/PITR and chooses to re-encapsulate after decapsulating, the net effect is that the new outer header carries the same Time to Live as the old outer header minus 1 โจ.
Copying the Time to Live does two jobs. First, it keeps the distance the host meant the packet to travel. Second, and this is the big one, it suppresses looping packets in case there's a loop of concatenated tunnels because of misconfiguration ๐.
Some xTRs, PETRs, and PITRs do re-encapsulation and have to handle ECN in a special way ๐ . Re-encapsulation is a sequence of two operations, a decapsulation followed by an encapsulation, so the ECN bits MUST be treated as described above for these two operations.
The LISP data plane protocol is not backwards compatible with [RFC6830] and has no explicit support for introducing future protocol changes (for example, an explicit version field). However, the LISP control plane [RFC9301] lets an ETR register data plane capabilities by using new LISP Canonical Address Format (LCAF) types [RFC8060] ๐ฆ. That way, an ITR can learn the data plane capabilities of an ETR and encapsulate accordingly. The specification of the new LCAF types, the new LCAF mechanisms, and their use are out of scope for this document ๐.
6. LISP EID-to-RLOC Map-Cache โจ
okay so ITRs and PITRs keep an on-demand cache called the LISP EID-to-RLOC Map-Cache ๐ง It stores mappings from EID-Prefixes to Locator-Sets, and it's what helps them send packets from the EID space to the right RLOC network attachment point ๐บ๏ธ
When an ITR/PITR gets a packet from inside the LISP site that's headed somewhere outside of it, it does a longest-prefix match lookup of the EID in the Map-Cache ๐
If the lookup works, the Locator-Set from the Map-Cache gets used to send the packet to the EID's topological location. slay ๐
If the lookup fails, the ITR/PITR has to grab the mapping through the LISP control plane protocol [RFC9301]. While it's fetching that mapping, the ITR/PITR can either drop the packets or buffer them ๐ This document doesn't give any specific recommendations about what to do here. It's up to the deployer to decide whether buffering is worth it and to deploy a LISP implementation that behaves the way they want ๐ Once the mapping is resolved, it gets stored in the local Map-Cache so later packets for that same EID-Prefix can be forwarded right away โก
The Map-Cache is a local cache of mappings, so entries expire based on their Time to Live โณ Entries can also be updated with newer information, and you can read more about that in Section 13 ๐ The Map-Cache also holds reachability info about EIDs and RLOCs, and it uses LISP reachability mechanisms to figure out whether RLOCs are reachable. The specific mechanisms are in Section 10 ๐ฆ
7. Dealing with Large Encapsulated Packets ๐ฆ
this section covers two mechanisms for handling packets that go over the Path MTU (PMTU) between the ITR and ETR ๐ซถ
It's left up to the implementor to decide whether the stateless or stateful mechanism SHOULD be implemented ๐ You can use both, or neither, because how an ITR handles MTU issues is a local decision. Sites can also interoperate even if they use different mechanisms, which is so iconic ๐
Both the stateless and stateful mechanisms also apply to Re-encapsulating and Recursive Tunneling. So anything below that talks about an ITR also applies to a TE-ITR ๐ง
7.1. A Stateless Solution to MTU Handling
here's how the stateless ITR solution handles MTU issues:
- Define H as the size, in octets, of the outer header an ITR prepends to a packet. This includes the UDP and LISP header lengths ๐
- Define L as the size, in octets, of the biggest packet an ITR can send to an ETR without the ITR or any intermediate routers needing to fragment it. The network administrator of the LISP deployment has to figure out a suitable value for L so that no MTU issues pop up ๐ญ
- Define an architectural constant S for the maximum size, in octets, of a packet that an ITR MUST receive from the source so the effective MTU can be met. In other words,
L = S + H๐งฎ
When an ITR gets a packet from a site-facing interface and adds H octets of encapsulation, pushing the packet size above L octets (which means the received packet was bigger than S octets from the source), it fixes the MTU issue by first splitting the original packet into 2 equal-sized fragments. Then it prepends a LISP header to each fragment. The encapsulated fragments end up at (S/2 + H), which is less than the ITR's estimate of the PMTU between itself and its correspondent ETR ๐ธ
When an ETR gets encapsulated fragments, it treats each one as its own individually encapsulated packet. It strips the LISP headers and forwards each fragment to the destination host in the destination site. The two fragments get reassembled at the destination host into the single IP datagram the source host originally sent ๐งฉ Reassembly can also happen at the ETR if the encapsulated packet was fragmented at or after the ITR, so keep that in mind ๐
This behavior MUST be implemented by the ITR only when the source host originates a packet with the 'DF' field of the IP header set to 0. If the 'DF' field of the IP header is set to 1, or the packet is an IPv6 packet from the source host, the ITR drops the packet whenever its size (including the encapsulation header) is greater than L. It then sends the source an ICMPv4 Unreachable / Fragmentation Needed or ICMPv6 Packet Too Big (PTB) message with a value of S, where S is (L - H) ๐ซ
When the outer-header encapsulation uses an IPv4 header, an implementation SHOULD set the DF bit to 1, so ETR fragment reassembly can be avoided ๐ An implementation MAY set the DF bit in those headers to 0 if it has good reason to believe there are unresolvable PMTU issues between the sending ITR and the receiving ETR ๐คทโโ๏ธ
It is RECOMMENDED that L be defined as 1500 โจ You can find more info about in-network MTU and fragmentation issues in [RFC4459] ๐
7.2. A Stateful Solution to MTU Handling
here's the stateful ITR solution:
- The ITR keeps state about the effective MTU for each Locator, per Map-Cache entry. The effective MTU is what the core network can deliver along the path between the ITR and ETR ๐ฃ๏ธ
- When an IPv4-encapsulated packet with the DF bit set to 1 is bigger than what the core network can deliver, one of the intermediate routers on the path sends an ICMPv4 Unreachable / Fragmentation Needed message to the ITR. The ITR parses that ICMP message to work out which Locator is affected by the effective MTU change, and then it records the new effective MTU value in the Map-Cache entry ๐ง
- When the ITR gets a packet from a source inside the site, and the packet is bigger than the effective MTU stored with the Map-Cache entry for the destination EID, the ITR sends an ICMPv4 Unreachable / Fragmentation Needed message back to the source. The packet size the ITR advertises in that ICMP message is the effective MTU minus the LISP encapsulation length ๐
Even though this mechanism is stateful, it still has advantages over stateless IP fragmentation, because the destination host doesn't have to get involved with reassembling the ITR's fragmented packets ๐
Please note that using ICMP packets for PMTU discovery, as described in [RFC1191] and [RFC8201], can lead to suboptimal behavior when ICMP packets get lost or when off-path attackers spoof ICMP ๐ฑ Possible mitigations include ITRs and ETRs cooperating on MTU probe packets [RFC4821] [RFC8899], or ITRs storing the beginning of large packets so they can check that the packets match the echoed packet in an ICMP Fragmentation Needed / PTB message ๐ก๏ธ
8. Using Virtualization and Segmentation with LISP ๐
there are a bunch of cases where you need segregation at the EID level ๐ Think deployments with overlapping addresses, traffic isolation policies, or multi-tenant virtualization. For these and any other scenarios that need segregation, Instance IDs come in clutch โจ
An Instance ID can ride along in a LISP-encapsulated packet. When an ITR prepends a LISP header, it copies a 24-bit value that the LISP router uses to uniquely identify the address space. That value goes into the 'Instance ID' field of the LISP header, and the I-bit gets set to 1 ๐ฆ
When an ETR decapsulates a packet, it uses the Instance ID from the LISP header as a table identifier. That tells it which forwarding table to use for the inner destination EID lookup ๐๏ธ
For example, an 802.1Q VLAN tag or a VPN identifier could be used as a 24-bit Instance ID. For more on LISP VPN use cases, check out [LISP-VPN] ๐ Heads up though: the Instance ID is not protected. An on-path attacker can modify the tags and, for instance, let communications happen between VLANs that are supposed to be logically isolated ๐ฌ
Participants in a LISP deployment must agree on what the Instance ID values mean. The source and destination EIDs MUST belong to the same Instance ID ๐ซถ
The Instance ID SHOULD NOT be used with overlapping IPv6 EID addresses ๐ โโ๏ธ
9. Routing Locator Selection โจ
okay bestie, so the Map-Cache is basically the cheat sheet ๐ that ITRs and PITRs use to wrap up packets. when a packet comes from inside the LISP site and is headed somewhere outside, the device does a longest-prefix match lookup of the EID in the Map-Cache (check Section 6 ๐). that lookup hands back ONE Locator-Set, which is a list of RLOCs for where that EID lives topologically. each RLOC in there comes with a Priority and a Weight, and those two numbers decide which RLOC gets picked for encapsulation ๐
so the rule is: lowest Priority wins ๐. a Priority of 255 is basically the "do not touch" sign ๐ซ, so that RLOC MUST NOT be used for forwarding. if a bunch of RLOCs tie on Priority, then the Weight tells you how to split the traffic between them โ๏ธ. the Weight is the relative share of the total packets that match that mapping entry, kinda like slices of pizza ๐
now, the different scenarios for picking RLOCs and who gets the steering wheel ๐ (it's giving shared custody, lowkey ๐ซถ):
- the server-side returns one RLOC. the client-side can only use that one. the server-side has complete control of the selection ๐
- the server-side returns a list of RLOCs where a subset of the list has the same best
Priority. the client can only use the subset according to the weighting the server-side assigned. so the server-side controls both the subset and the load splitting across its members ๐โโ๏ธ. the client-side can use RLOCs outside of the subset if it decides the subset is unreachable (unless those RLOCs are set to aPriorityof 255). it's a little bit of sharing: the server-side picks the destination RLOC list and load distribution, while the client-side gets to use alternatives if the RLOCs in the list are unreachable ๐ฆ - the server-side sets a
Weightof zero for the RLOC subset list. now the client-side can choose how the traffic load is spread across the subset list. see Section 12 for details on load-sharing mechanisms ๐. control is shared here too: the server-side decides the list and the client-side decides the load distribution. and again, the client can use alternative RLOCs if the server-provided list is unreachable ๐ - either side (more likely the server-side ETR) decides to "glean" the RLOCs ๐. like, if the server-side ETR gleans RLOCs, the client-side ITR hands it responsibility for bidirectional RLOC reachability and preferability. server-side ETR gleaning of the client-side ITR RLOC works by caching the inner-header source EID and the outer-header source RLOC of received packets ๐ต๏ธโโ๏ธ. the client-side ITR still controls how traffic comes back, and as an alternative it can use an outer-header source RLOC, which can then be added to the list the server-side ETR uses to return traffic. since no
PriorityorWeightvalues come along with this method, the server-side ETR MUST assume that each client-side ITR RLOC uses the same bestPrioritywith aWeightof zero ๐ญ. and because EID-Prefix encoding can't be carried in data packets, the EID-to-RLOC Map-Cache on Tunnel Routers can grow very large ๐. gleaning has a few important considerations too. a "gleaned" Map-Cache entry is only stored and used for a RECOMMENDED period of 3 seconds, pending verification. verification MUST be performed by sending a Map-Request to the source EID (the inner-header IP source address) of the received encapsulated packet. a reply to this "verifying Map-Request" is used to fully populate the Map-Cache entry for the "gleaned" EID, and it's stored and used for the time indicated in theTime to Livefield of a received Map-Reply โฐ. once a verified Map-Cache entry is stored, data gleaning stops for subsequent packets whose source EID matches the EID-Prefix of that verified entry โ . this "gleaning" mechanism MUST NOT be used over the public Internet, and it SHOULD only be used in trusted and closed deployments ๐. for security issues about this mechanism, refer to Section 16 ๐ก๏ธ
RLOCs that show up in EID-to-RLOC Map-Reply messages are assumed to be reachable when the R-bit [RFC9301] for the Locator record is set to 1 โจ. when the R-bit is set to 0, an ITR or PITR MUST NOT encapsulate to that RLOC ๐ โโ๏ธ. the info in a Map-Reply, and the info stored in the mapping database system, do NOT provide reachability information for RLOCs. reachability isn't part of the Mapping System at all, and it gets determined using one or more of the RLOC reachability algorithms in the next section ๐ซถ
10. Routing Locator Reachability โจ
okay so there are a few data plane mechanisms for figuring out whether an RLOC is reachable ๐. just know that more reachability mechanisms based on the control plane are defined in [RFC9301] ๐
- an ETR MAY examine the
Locator-Status-Bitsin the LISP header of an encapsulated data packet received from an ITR. if the ETR is also acting as an ITR and has traffic to send back to the original ITR site, it can use this status info to help pick an RLOC ๐ - when an ETR receives an encapsulated packet from an ITR, the source RLOC from the outer header of the packet is likely to be reachable ๐ฆ. heads up though: in some scenarios the RLOC from the outer header can be a spoofable field ๐
- an ITR/ETR pair can use the Echo-Noncing Locator reachability algorithms described in this section ๐
when you're determining Locator up/down reachability by looking at the Locator-Status-Bits from the LISP-encapsulated data packet, the ETR gets up-to-date status from an encapsulating ITR about reachability for all ETRs at the site ๐ธ. CE-based ITRs at the source site can figure out reachability relative to each other using the site IGP, like this:
- under normal circumstances, each ITR advertises a default route into the site IGP ๐ฃ๏ธ
- if an ITR fails, or if the upstream link to its Provider Edge fails, its default route will either time out or get withdrawn ๐
so each ITR can observe whether or not it sees a default route from the others, and use that to set the Locator-Status-Bits it sends for them ๐ง
when the ITRs at the site are NOT deployed in CE routers, the IGP can still be used to determine the reachability of Locators, as long as they're injected into the IGP ๐ . this usually happens when a /32 address is configured on a loopback interface ๐ช
RLOCs listed in a Map-Reply are numbered with ordinals 0 to n-1 ๐ข. the Locator-Status-Bits in a LISP-encapsulated packet are numbered from 0 to n-1, starting with the least significant bit. for example, if the RLOC in the 3rd position of the Map-Reply goes down (ordinal value 2), then all ITRs at the site will clear the 3rd least significant bit (xxxx x0xx) of the Locator-Status-Bits field for the packets they encapsulate ๐
when an xTR decides to use Locator-Status-Bits to affect reachability info, here's how it goes ๐ฌ: ETRs decapsulating a packet check for any change in the Locator-Status-Bits field. when a bit goes from 1 to 0, the ETR (if it's also acting as an ITR) will refrain from encapsulating packets to the RLOC that's marked down ๐ซ. it only starts using that RLOC again if the matching Locator-Status-Bit goes back to 1 ๐. Locator-Status-Bits are associated with a Locator-Set per EID-Prefix, so when a Locator becomes unreachable, the bit for that Locator's position in the list from the last Map-Reply gets set to zero for that particular EID-Prefix ๐ซ
Locator-Status-Bits MUST NOT be used over the public Internet, and they SHOULD only be used in trusted and closed deployments ๐. also, Locator-Status-Bits SHOULD be coupled with Map-Versioning [RFC9302] to prevent race conditions where the bits get read as referring to different RLOCs than intended ๐โโ๏ธ๐จ. refer to Section 16 for security issues regarding this mechanism ๐ก๏ธ
if an ITR encapsulates a packet to an ETR, and the ETR receives and decapsulates it, then it's implied (but NOT confirmed by the ITR) that the ETR's RLOC is reachable ๐ค. most of the time the ETR can also reach the ITR, but it can't assume that's true because of possible path asymmetry ๐. in the presence of unidirectional traffic flow from an ITR to an ETR, the ITR SHOULD NOT use the lack of return traffic as an indication that the ETR is unreachable. instead, it MUST use an alternate mechanism to determine reachability ๐ง
the security considerations of Section 16 related to data plane reachability apply to the data plane RLOC reachability mechanisms in this section ๐๐
10.1. Echo-Nonce Algorithm ๐ฆ
okay so when data is flowing both ways between Locators from different sites, there's this data plane trick called "nonce echoing" that can be used to figure out reachability between an ITR and an ETR ๐ซถ. when an ITR wants a nonce echo, it sets the N- and E-bits and drops a 24-bit nonce [RFC4086] into the LISP header of the next encapsulated data packet ๐ .
when that packet hits the ETR, it just gets forwarded as normal โจ. if the ETR is an xTR (co-located as an ITR), it then sends a data packet back to the ITR (the ITR being an xTR co-located as an ETR, lol the roles keep flipping ๐). it includes the nonce it got earlier, with the N-bit set and the E-bit cleared. the ITR sees this "echoed nonce" and knows the path to and from the ETR is up ๐ฅ. iconic.
the ITR sets the E-bit and N-bit on every packet it sends while it's in the Echo-Nonce-request state ๐. how long it waits to process the echoed nonce before deciding the path is unreachable is variable, and that's left up to the implementation ๐.
so if the ITR is receiving packets from the ETR but doesn't see the nonce echoed while it's in the Echo-Nonce-request state, the path to the ETR is unreachable ๐ญ. this decision MAY be overridden by other Locator reachability algorithms. once the ITR decides the path to the ETR is down, it can switch to another Locator for that EID-Prefix ๐.
quick note: "ITR" and "ETR" are relative terms here ๐. both devices MUST be implementing both ITR and ETR functionality for Echo-Nonce to operate at all.
the ITR and ETR MAY both go into the Echo-Nonce-request state at the same time ๐. how many packets get sent, or how long the Echo-Nonce request packets keep going, is an implementation-specific setting. in that case, an xTR that receives the Echo-Nonce request packets suspends the Echo-Nonce state and sets up an 'Echo-Nonce-request-state' timer. once that timer expires, it resumes the Echo-Nonce state ๐ง.
this doesn't completely solve the forward path reachability problem, because traffic can be unidirectional ๐. the ETR receiving traffic at a site MAY not be the same device as the ITR transmitting traffic from that site, or the site-to-site traffic is unidirectional so there's no ITR returning traffic.
the Echo-Nonce algorithm is bilateral, which means if one side sets the E-bit and the other side isn't enabled for Echo-Noncing, the nonce doesn't get echoed. the requesting side might then wrongly consider the Locator unreachable ๐ฌ. an ITR SHOULD set the E-bit in an encapsulated data packet when it knows the ETR is enabled for Echo-Noncing. this is conveyed by the E-bit in the Map-Reply message.
many implementations default to not advertising that they're Echo-Nonce capable in Map-Reply messages, so RLOC-Probing tends to be the go-to for RLOC reachability ๐ .
โ ๏ธ bestie, this one's serious: the Echo-Nonce mechanism MUST NOT be used over the public Internet, and it MUST only be used in trusted and closed deployments. check out Section 16 for the security issues around this mechanism ๐ซฃ.
11. EID Reachability within a LISP Site ๐ธ
a site MAY be multihomed using two or more ETRs โจ. the hosts and infrastructure within a site get addressed using one or more EID-Prefixes that are mapped to the RLOCs of the relevant ETRs in the Mapping System. one possible failure mode is an ETR losing reachability to one or more of the EID-Prefixes within its own site ๐ฉ. when that happens, the ETR can clear the R-bit associated with its own Locator while it sends Map-Replies. and if the ETR is also an ITR, it can clear its Locator-Status-Bit in the encapsulation data header ๐ซถ.
it's recognized that there are no simple solutions to the site partitioning problem, because it's hard to know which part of the EID-Prefix range is partitioned and which Locators can reach any sub-ranges of the EID-Prefixes ๐คฏ. and this isn't a new problem introduced by the LISP architecture. at the time of writing, the same problem exists when a multihomed site uses BGP to advertise its reachability upstream ๐.
12. Routing Locator Hashing ๐
when an ETR provides an EID-to-RLOC mapping in a Map-Reply message that gets stored in the Map-Cache of a requesting ITR, the Locator-Set for the EID-Prefix MAY contain different Priority and Weight values for each Routing Locator Address ๐ . when more than one best Priority Locator exists, the ITR can decide how to load-share traffic across the corresponding Locators โ๏ธ.
the following hash algorithm MAY be used by an ITR to select a Locator for a packet destined to an EID for the EID-to-RLOC mapping ๐ง:
- Either a source and destination address hash or the commonly used 5-tuple hash can be used. the commonly used 5-tuple hash includes the source and destination addresses; source and destination TCP, UDP, or Stream Control Transmission Protocol (SCTP) port numbers; and the IP protocol number field or IPv6 next-protocol fields of a packet that a host originates from within a LISP site ๐. when a packet isn't a TCP, UDP, or SCTP packet, only the source and destination addresses from the header are used to compute the hash.
- Take the hash value and divide it by the number of Locators stored in the Locator-Set for the EID-to-RLOC mapping โ.
- The remainder yields a value from 0 to "number of Locators minus 1". Use the remainder to select the Locator in the Locator-Set ๐ฏ.
the specific hash algorithm the ITR uses for load-sharing is out of scope for this document, and it doesn't prevent interoperability ๐ซถ.
the source port SHOULD be the same for all packets belonging to the same flow ๐ธ. also, when a packet is LISP encapsulated, the source port number in the outer UDP header needs to be set ๐ฆ. selecting a hashed value lets core routers attached to Link Aggregation Groups (LAGs) load-split the encapsulated packets across member links of those LAGs โจ. otherwise, core routers would see a single flow, since packets have a source address of the ITR, for packets originated by different EIDs at the source site ๐ต. a suggested setting for the source port number computed by an ITR is a 5-tuple hash function on the inner header, as described above. the source port SHOULD be the same for all packets belonging to the same flow ๐.
many core router implementations use a 5-tuple hash to decide how to balance packet load across members of a LAG ๐. the 5-tuple hash includes the source and destination addresses of the packet and the source and destination ports when the protocol number in the packet is TCP or UDP. that's why UDP encoding is used for LISP encapsulation ๐ฆ. in this scenario, when the outer header is IPv6, the flow label MAY also be set following the procedures in [RFC6438]. when the inner header is IPv6 and the flow label isn't zero, it MAY be used to compute the hash ๐.
13. Changing the Contents of EID-to-RLOC Mappings ๐ฅ
the LISP architecture uses a caching scheme to retrieve and store EID-to-RLOC mappings, so the only way an ITR can get a more up-to-date mapping is to re-request it ๐. the thing is, ITRs don't know when mappings change, and ETRs don't keep track of which ITRs requested their mappings ๐ฌ. for scalability reasons, it's desirable to keep this approach, but implementors still need a way for ETRs to change their mappings and inform the sites that are currently communicating with the ETR site using those mappings ๐ซถ.
this section defines two data plane mechanisms for updating EID-to-RLOC mappings ๐. additionally, the Solicit-Map-Request (SMR) control plane updating mechanism is specified in [RFC9301] โจ.
13.1. Locator-Status-Bits ๐
Locator-Status-Bits (LSBs) can also be used to keep track of Locator status (up or down) while EID-to-RLOC mappings are changing ๐ก. when LSBs are used in a LISP deployment, all LISP Tunnel Routers MUST implement both ITR and ETR capabilities, which means all Tunnel Routers are effectively xTRs ๐ซก. in this section, "source xTR" refers to the xTR setting the LSB, and "destination xTR" refers to the xTR receiving the LSB. the procedure goes like this:
- When a Locator record is added to or removed from the Locator-Set, the source xTR signals this by sending an SMR control plane message [RFC9301] to the destination xTR ๐จ. at this point, the source xTR MUST NOT use the LSB field when the L-bit is 0, since the destination xTR site has outdated information ๐ . the source xTR sets up a 'use-LSB' timer.
- As defined in [RFC9301], when the destination xTR receives the SMR message, it retrieves the updated EID-to-RLOC mappings by sending a Map-Request ๐.
- When the 'use-LSB' timer expires, the source xTR can use the LSB again with the destination xTR to signal Locator status (up or down) โฐ. the specific value for the 'use-LSB' timer depends on the LISP deployment. the timer needs to be long enough for the destination xTR to retrieve the updated EID-to-RLOC mappings ๐ . a RECOMMENDED value for the 'use-LSB' timer is 5 minutes ๐.
13.2. Database Map-Versioning ๐ง
when there's unidirectional packet flow between an ITR and ETR, and the EID-to-RLOC mappings change on the ETR, the ETR needs to tell the ITR. that way, encapsulation to a removed Locator can stop and start going to a new Locator in the Locator-Set instead ๐ฆ.
an ETR can send Map-Reply messages carrying a Map-Version Number [RFC9302] in an EID-Record. this is known as the Destination Map-Version Number. ITRs include the Destination Map-Version Number in packets they encapsulate to the site ๐ฌ.
an ITR, when it encapsulates packets to ETRs, can convey its own Map-Version Number. this is known as the Source Map-Version Number ๐.
when it's presented in EID-Records of Map-Register messages [RFC9301], a Map-Version Number is a good way for the Map-Server [RFC9301] to make sure all ETRs for a site registering with it are synchronized according to the Map-Version Number ๐ซถ.
for a more detailed analysis and description of Database Map-Versioning, see [RFC9302] ๐โจ
14. Multicast Considerations ๐ฆ
Okay bestie, so a multicast group address (as defined in the original Internet architecture) is an identifier for a grouping of topologically independent receiver host locations. The address encoding itself does NOT tell you where the receivers are ๐. That's decided by the multicast routing protocol and the network-based state it creates.
In LISP, a multicast group address is both an EID and an RLOC ๐. So no specific semantic or action needs to be taken for a destination address, as it would appear in an IP header. A group address that shows up in an inner IP header built by a source host gets used as the destination EID. Then the outer IP header (the destination RLOC address), prepended by a LISP router, can do a few things: reuse the same group address as the destination RLOC, use a multicast or unicast RLOC obtained from a Mapping System lookup, or use other means to figure out the group address mapping. So many options, periodt โจ.
For the source RLOC, the ITR prepends its own IP address as the source address of the outer IP header, just like it would if the destination EID were a unicast address ๐ธ. This source RLOC address, like any other RLOC address, MUST be routable on the underlay. Non-negotiable, bestie ๐ .
There are two approaches for LISP-Multicast [RFC6831]. The first uses native multicast routing in the underlay with no support from the Mapping System. The second uses only unicast routing in the underlay, with support from the Mapping System. See [RFC6831] and [RFC8378], respectively, for details. Details for LISP-Multicast and interworking with non-LISP sites are described in [RFC6831] and [RFC6832], respectively ๐.
15. Router Performance Considerations ๐
LISP is designed to be very "hardware based and forwarding friendly" ๐ญ๐ซถ. A few implementation techniques can be used to incrementally implement LISP:
- When a tunnel-encapsulated packet is received by an ETR, the outer destination address may not be the address of the router. That makes it challenging for the control plane to get packets from the hardware ๐. This may be mitigated by creating special Forwarding Information Base (FIB) entries for the EID-Prefixes of EIDs served by the ETR (those for which the router provides an RLOC translation). These FIB entries are marked with a flag indicating that control plane processing SHOULD be performed. The forwarding logic of testing for particular IP protocol number values is not necessary. There are a few proven cases where no changes to existing deployed hardware were needed to support the LISP data plane ๐ง.
- On an ITR, prepending a new IP header consists of adding more octets to a Message Authentication Code (MAC) rewrite string and prepending the string as part of the outgoing encapsulation procedure. Routers that support Generic Routing Encapsulation (GRE) tunneling [RFC2784] or 6to4 tunneling [RFC3056] may already support this action ๐.
- A packet's source address or the interface on which the packet was received can be used to select Virtual Routing and Forwarding (VRF). The VRF system's routing table can be used to find EID-to-RLOC mappings ๐.
For performance issues related to Map-Cache management, see Section 16 โจ.
16. Security Considerations ๐
Okay this section is SERIOUS, so pay attention ๐. In what follows, we highlight security considerations that apply when LISP is deployed in environments such as those specified in Section 1.1.
The optional gleaning mechanism is offered to directly obtain a mapping from the LISP-encapsulated packets. Specifically, an xTR can learn the EID-to-RLOC mapping by inspecting the source RLOC and source EID of an encapsulated packet, and then insert this new mapping into its Map-Cache. An off-path attacker can spoof the source EID address to divert the traffic sent to the victim's spoofed EID. If the attacker spoofs the source RLOC, it can mount a DoS attack by redirecting traffic to the spoofed victim's RLOC, potentially overloading it ๐ญ.
The LISP data plane defines several mechanisms to monitor RLOC data plane reachability. In this context, Locator-Status-Bits, nonce-present bits, and Echo-Nonce bits of the LISP encapsulation header can be manipulated by an attacker to mount a DoS attack. An off-path attacker able to spoof the RLOC and/or nonce of a victim's xTR can manipulate such mechanisms to declare false information about the RLOC's reachability status ๐.
One example of such an attack: an off-path attacker can exploit the Echo-Nonce mechanism by sending data packets to an ITR with a random nonce from an ETR's spoofed RLOC. Note that the attacker only has a small window of time within which to guess a valid nonce that the ITR is requesting to be echoed. The goal is to convince the ITR that the ETR's RLOC is reachable even when it may not be. If the attack is successful, the ITR believes the wrong reachability status of the ETR's RLOC until RLOC-Probing detects the correct status. This time frame is on the order of tens of seconds. This specific attack can be mitigated by preventing RLOC spoofing in the network by deploying Unicast Reverse Path Forwarding (uRPF) per BCP 84 [RFC8704]. In order to exploit this vulnerability, the off-path attacker must also send Echo-Nonce packets at a high rate. If the nonces have never been requested by the ITR, it can protect itself from erroneous reachability attacks ๐ก๏ธ.
A LISP-specific uRPF check is also possible. When decapsulating, an ETR can check that the source EID and RLOC are valid EID-to-RLOC mappings by checking the Mapping System ๐.
Map-Versioning is a data plane mechanism used to signal to a peering xTR that a local EID-to-RLOC mapping has been updated, so that the peering xTR uses a LISP control plane signaling message to retrieve a fresh mapping. This can be used by an attacker to forge the 'Map-Version' field of a LISP-encapsulated header and force an excessive amount of signaling between xTRs that may overload them. Further security considerations on Map-Versioning can be found in [RFC9302] ๐จ.
Locator-Status-Bits, the Echo-Nonce mechanism, and Map-Versioning MUST NOT be used over the public Internet, and they SHOULD only be used in trusted and closed deployments. In addition, Locator-Status-Bits SHOULD be coupled with Map-Versioning to prevent race conditions where Locator-Status-Bits are interpreted as referring to different RLOCs than intended ๐.
LISP implementations and deployments that permit outer header fragments of IPv6 LISP-encapsulated packets as a means of dealing with MTU issues should also use implementation techniques in ETRs to prevent this from becoming a DoS attack vector. Limits on the number of fragments awaiting reassembly at an ETR, RTR, or PETR, and the rate of admitting such fragments, may be used ๐งฉ.
17. Network Management Considerations ๐ท
Considerations for network management tools exist so the LISP protocol suite can be operationally managed. These mechanisms can be found in [RFC7052] and [RFC6835] ๐.
18. Changes since RFC 6830 ๐ฐ
For implementation considerations, the following changes have been made to this document since [RFC6830] was published ๐:
- It is no longer mandated that a maximum number of 2 LISP headers be prepended to a packet. If there is an application need for more than 2 LISP headers, an implementation can support more. However, it is RECOMMENDED that a maximum of 2 LISP headers can be prepended to a packet ๐ง.
- The 3 reserved flag bits in the LISP header have been allocated for [RFC8061]. The low-order 2 bits of the 3-bit field (now named the KK-bits) are used as a key identifier. The 1 remaining bit is still documented as reserved and unassigned ๐.
- Data plane gleaning for creating Map-Cache entries has been made optional. Any ITR implementations that depend on or assume that the remote ETR is gleaning should not do so. This does not create any interoperability problems, since the control plane Map-Cache population procedures are unilateral and are the typical method for populating the Map-Cache ๐ธ.
- Most of the changes to this document, which reduce its length, are due to moving the LISP control plane messaging and procedures to [RFC9301] ๐ฆ.
19. IANA Considerations ๐
This section provides guidance to the Internet Assigned Numbers Authority (IANA) regarding registration of values related to this data plane LISP specification, in accordance with BCP 26 [RFC8126] ๐ .
19.1. LISP UDP Port Numbers ๐
IANA has allocated UDP port number 4341 for the LISP data plane. IANA has updated the description for UDP port 4341 as follows:
+==============+=============+===========+=============+===========+
| Service Name | Port Number | Transport | Description | Reference |
| | | Protocol | | |
+==============+=============+===========+=============+===========+
| lisp-data | 4341 | udp | LISP Data | RFC 9300 |
| | | | Packets | |
+--------------+-------------+-----------+-------------+-----------+
Table 1
20. References ๐
The original text has nothing listed under this heading, so there are no references to copy over here, bestie ๐ซถ.
20.1. Normative References
okay bestie, here's the must-read list ๐๐ these are the normative references, the docs this spec leans on so hard that you really need them in your back pocket ๐ซถ
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
DOI 10.17487/RFC0768, August 1980,
<https://www.rfc-editor.org/info/rfc768>.
[RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791,
DOI 10.17487/RFC0791, September 1981,
<https://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,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black,
"Definition of the Differentiated Services Field (DS
Field) in the IPv4 and IPv6 Headers", RFC 2474,
DOI 10.17487/RFC2474, December 1998,
<https://www.rfc-editor.org/info/rfc2474>.
[RFC2983] Black, D., "Differentiated Services and Tunnels",
RFC 2983, DOI 10.17487/RFC2983, October 2000,
<https://www.rfc-editor.org/info/rfc2983>.
[RFC6040] Briscoe, B., "Tunnelling of Explicit Congestion
Notification", RFC 6040, DOI 10.17487/RFC6040, November
2010, <https://www.rfc-editor.org/info/rfc6040>.
[RFC6438] Carpenter, B. and S. Amante, "Using the IPv6 Flow Label
for Equal Cost Multipath Routing and Link Aggregation in
Tunnels", RFC 6438, DOI 10.17487/RFC6438, November 2011,
<https://www.rfc-editor.org/info/rfc6438>.
[RFC6830] Farinacci, D., Fuller, V., Meyer, D., and D. Lewis, "The
Locator/ID Separation Protocol (LISP)", RFC 6830,
DOI 10.17487/RFC6830, January 2013,
<https://www.rfc-editor.org/info/rfc6830>.
[RFC6831] Farinacci, D., Meyer, D., Zwiebel, J., and S. Venaas, "The
Locator/ID Separation Protocol (LISP) for Multicast
Environments", RFC 6831, DOI 10.17487/RFC6831, January
2013, <https://www.rfc-editor.org/info/rfc6831>.
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
Writing an IANA Considerations Section in RFCs", BCP 26,
RFC 8126, DOI 10.17487/RFC8126, June 2017,
<https://www.rfc-editor.org/info/rfc8126>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", STD 86, RFC 8200,
DOI 10.17487/RFC8200, July 2017,
<https://www.rfc-editor.org/info/rfc8200>.
[RFC8378] Moreno, V. and D. Farinacci, "Signal-Free Locator/ID
Separation Protocol (LISP) Multicast", RFC 8378,
DOI 10.17487/RFC8378, May 2018,
<https://www.rfc-editor.org/info/rfc8378>.
[RFC8704] Sriram, K., Montgomery, D., and J. Haas, "Enhanced
Feasible-Path Unicast Reverse Path Forwarding", BCP 84,
RFC 8704, DOI 10.17487/RFC8704, February 2020,
<https://www.rfc-editor.org/info/rfc8704>.
[RFC9301] Farinacci, D., Maino, F., Fuller, V., and A. Cabellos,
Ed., "Locator/ID Separation Protocol (LISP) Control
Plane", RFC 9301, DOI 10.17487/RFC9301, October 2022,
<https://www.rfc-editor.org/info/rfc9301>.
[RFC9302] Iannone, L., Saucez, D., and O. Bonaventure, "Locator/ID
Separation Protocol (LISP) Map-Versioning", RFC 9302,
DOI 10.17487/RFC9302, October 2022,
<https://www.rfc-editor.org/info/rfc9302>.
20.2. Informative References
and now the bonus reading list ๐ธ informative references are the background lore: super helpful for context, but they're not the core rules of the spec โจ
[AFN] IANA, "Address Family Numbers",
<http://www.iana.org/assignments/address-family-numbers>.
[CHIAPPA] Chiappa, J., "Endpoints and Endpoint Names: A Proposed
Enhancement to the Internet Architecture", 1999,
<http://mercury.lcs.mit.edu/~jnc/tech/endpoints.txt>.
[LISP-VPN] Moreno, V. and D. Farinacci, "LISP Virtual Private
Networks (VPNs)", Work in Progress, Internet-Draft, draft-
ietf-lisp-vpn-10, 3 October 2022,
<https://datatracker.ietf.org/doc/html/draft-ietf-lisp-
vpn-10>.
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
<https://www.rfc-editor.org/info/rfc1034>.
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191,
DOI 10.17487/RFC1191, November 1990,
<https://www.rfc-editor.org/info/rfc1191>.
[RFC2453] Malkin, G., "RIP Version 2", STD 56, RFC 2453,
DOI 10.17487/RFC2453, November 1998,
<https://www.rfc-editor.org/info/rfc2453>.
[RFC2677] Greene, M., Cucchiara, J., and J. Luciani, "Definitions of
Managed Objects for the NBMA Next Hop Resolution Protocol
(NHRP)", RFC 2677, DOI 10.17487/RFC2677, August 1999,
<https://www.rfc-editor.org/info/rfc2677>.
[RFC2784] Farinacci, D., Li, T., Hanks, S., Meyer, D., and P.
Traina, "Generic Routing Encapsulation (GRE)", RFC 2784,
DOI 10.17487/RFC2784, March 2000,
<https://www.rfc-editor.org/info/rfc2784>.
[RFC3056] Carpenter, B. and K. Moore, "Connection of IPv6 Domains
via IPv4 Clouds", RFC 3056, DOI 10.17487/RFC3056, February
2001, <https://www.rfc-editor.org/info/rfc3056>.
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
A., Peterson, J., Sparks, R., Handley, M., and E.
Schooler, "SIP: Session Initiation Protocol", RFC 3261,
DOI 10.17487/RFC3261, June 2002,
<https://www.rfc-editor.org/info/rfc3261>.
[RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker,
"Randomness Requirements for Security", BCP 106, RFC 4086,
DOI 10.17487/RFC4086, June 2005,
<https://www.rfc-editor.org/info/rfc4086>.
[RFC4459] Savola, P., "MTU and Fragmentation Issues with In-the-
Network Tunneling", RFC 4459, DOI 10.17487/RFC4459, April
2006, <https://www.rfc-editor.org/info/rfc4459>.
[RFC4760] Bates, T., Chandra, R., Katz, D., and Y. Rekhter,
"Multiprotocol Extensions for BGP-4", RFC 4760,
DOI 10.17487/RFC4760, January 2007,
<https://www.rfc-editor.org/info/rfc4760>.
[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU
Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007,
<https://www.rfc-editor.org/info/rfc4821>.
[RFC4984] Meyer, D., Ed., Zhang, L., Ed., and K. Fall, Ed., "Report
from the IAB Workshop on Routing and Addressing",
RFC 4984, DOI 10.17487/RFC4984, September 2007,
<https://www.rfc-editor.org/info/rfc4984>.
[RFC6832] Lewis, D., Meyer, D., Farinacci, D., and V. Fuller,
"Interworking between Locator/ID Separation Protocol
(LISP) and Non-LISP Sites", RFC 6832,
DOI 10.17487/RFC6832, January 2013,
<https://www.rfc-editor.org/info/rfc6832>.
[RFC6835] Farinacci, D. and D. Meyer, "The Locator/ID Separation
Protocol Internet Groper (LIG)", RFC 6835,
DOI 10.17487/RFC6835, January 2013,
<https://www.rfc-editor.org/info/rfc6835>.
[RFC6935] Eubanks, M., Chimento, P., and M. Westerlund, "IPv6 and
UDP Checksums for Tunneled Packets", RFC 6935,
DOI 10.17487/RFC6935, April 2013,
<https://www.rfc-editor.org/info/rfc6935>.
[RFC6936] Fairhurst, G. and M. Westerlund, "Applicability Statement
for the Use of IPv6 UDP Datagrams with Zero Checksums",
RFC 6936, DOI 10.17487/RFC6936, April 2013,
<https://www.rfc-editor.org/info/rfc6936>.
[RFC7052] Schudel, G., Jain, A., and V. Moreno, "Locator/ID
Separation Protocol (LISP) MIB", RFC 7052,
DOI 10.17487/RFC7052, October 2013,
<https://www.rfc-editor.org/info/rfc7052>.
[RFC7215] Jakab, L., Cabellos-Aparicio, A., Coras, F., Domingo-
Pascual, J., and D. Lewis, "Locator/Identifier Separation
Protocol (LISP) Network Element Deployment
Considerations", RFC 7215, DOI 10.17487/RFC7215, April
2014, <https://www.rfc-editor.org/info/rfc7215>.
[RFC8060] Farinacci, D., Meyer, D., and J. Snijders, "LISP Canonical
Address Format (LCAF)", RFC 8060, DOI 10.17487/RFC8060,
February 2017, <https://www.rfc-editor.org/info/rfc8060>.
[RFC8061] Farinacci, D. and B. Weis, "Locator/ID Separation Protocol
(LISP) Data-Plane Confidentiality", RFC 8061,
DOI 10.17487/RFC8061, February 2017,
<https://www.rfc-editor.org/info/rfc8061>.
[RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage
Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085,
March 2017, <https://www.rfc-editor.org/info/rfc8085>.
[RFC8201] McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed.,
"Path MTU Discovery for IP version 6", STD 87, RFC 8201,
DOI 10.17487/RFC8201, July 2017,
<https://www.rfc-editor.org/info/rfc8201>.
[RFC8899] Fairhurst, G., Jones, T., Tรผxen, M., Rรผngeler, I., and T.
Vรถlker, "Packetization Layer Path MTU Discovery for
Datagram Transports", RFC 8899, DOI 10.17487/RFC8899,
September 2020, <https://www.rfc-editor.org/info/rfc8899>.
[RFC9299] Cabellos, A. and D. Saucez, Ed., "An Architectural
Introduction to the Locator/ID Separation Protocol
(LISP)", RFC 9299, DOI 10.17487/RFC9299, October 2022,
<https://www.rfc-editor.org/info/rfc9299>.
Acknowledgments โจ
An initial thank you goes to Dave Oran for planting the seeds for the initial ideas for LISP ๐ฑ. His consultation keeps giving value to the LISP authors ๐.
A special and appreciative thank you goes to Noel Chiappa ๐ซถ. He gave architectural impetus over the past decades on separating location and identity, did detailed reviews of the LISP architecture and documents, and was super enthusiastic about making LISP a practical, incremental transition for the Internet ๐ฅ.
The original authors want to gratefully acknowledge the many people who contributed discussions and ideas to this proposal ๐. They include Scott Brim, Andrew Partan, John Zwiebel, Jason Schiller, Lixia Zhang, Dorian Kim, Peter Schoenmaker, Vijay Gill, Geoff Huston, David Conrad, Mark Handley, Ron Bonica, Ted Seely, Mark Townsley, Chris Morrow, Brian Weis, Dave McGrew, Peter Lothberg, Dave Thaler, Eliot Lear, Shane Amante, Ved Kafle, Olivier Bonaventure, Luigi Iannone, Robin Whittle, Brian Carpenter, Joel Halpern, Terry Manderson, Roger Jorgensen, Ran Atkinson, Stig Venaas, Iljitsch van Beijnum, Roland Bless, Dana Blair, Bill Lynch, Marc Woolward, Damien Saucez, Damian Lezama, Attilla De Groot, Parantap Lahiri, David Black, Roque Gagliano, Isidor Kouvelas, Jesper Skriver, Fred Templin, Margaret Wasserman, Sam Hartman, Michael Hofling, Pedro Marques, Jari Arkko, Gregg Schudel, Srinivas Subramanian, Amit Jain, Xu Xiaohu, Dhirendra Trivedi, Yakov Rekhter, John Scudder, John Drake, Dimitri Papadimitriou, Ross Callon, Selina Heimlich, Job Snijders, Vina Ermagan, Fabio Maino, Victor Moreno, Chris White, Clarence Filsfils, Alia Atlas, Florin Coras, and Alberto Rodriguez. Iykyk, and they're all absolutely iconic ๐.
This work started in the Routing Research Group (RRG) of the IRTF ๐ง. An individual submission was then converted into the IETF LISP Working Group document that became this RFC.
The LISP Working Group wants to give a special thanks to Jari Arkko ๐, the Internet Area AD at the time the set of LISP documents was being prepared for IESG Last Call. He gave meticulous reviews and detailed commentaries on the 7 Working Group Last Call documents that were progressing toward Standards Track RFCs. Main character energy ๐.
The current authors give a sincere thank you to the people who helped put LISP on the Standards Track in the IETF ๐ฆ. They include Joel Halpern, Luigi Iannone, Deborah Brungard, Fabio Maino, Scott Bradner, Kyle Rose, Takeshi Takahashi, Sarah Banks, Pete Resnick, Colin Perkins, Mirja Kรผhlewind, Francis Dupont, Benjamin Kaduk, Eric Rescorla, Alvaro Retana, Alexey Melnikov, Alissa Cooper, Suresh Krishnan, Alberto Rodriguez-Natal, Vina Ermagan, Mohamed Boucadair, Brian Trammell, Sabrina Tanamal, and John Drake. Their contributions literally made the security, scale, and robustness of the LISP architecture and protocols so much better ๐๐.
Authors' Addresses ๐
Dino Farinacci
lispers.net
San Jose, CA
United States of America
Email: farinacci@gmail.com
Vince Fuller
vaf.net Internet Consulting
Email: vince.fuller@gmail.com
Dave Meyer
1-4-5.net
Email: dmm@1-4-5.net
Darrel Lewis
Cisco Systems
San Jose, CA
United States of America
Email: darlewis@cisco.com
Albert Cabellos (editor)
Universitat Politecnica de Catalunya
c/ Jordi Girona s/n
08034 Barcelona
Spain
Email: acabello@ac.upc.edu
๐ฆ where this page comes from
- ietf: rfc9300 2022-10
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms