- Home
- RFC 9079
RFC 9079: Source-Specific Routing in the Babel Routing Protocol
- M. Boutier,
- J. Chroboczek
Abstract
Source-
Status of This Memo
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
https://
Copyright Notice
Copyright (c) 2021 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://
1. Introduction and Background
The Babel routing protocol [RFC8966] is a distance vector
routing protocol for next-hop routing. In next-hop routing, each node
maintains a forwarding table that maps destination prefixes to next hops.
The forwarding decision is a per-packet operation that depends on the
destination address of the packets and on the entries of the forwarding
table. When a packet is about to be routed, its destination address is
compared to the prefixes of the routing table: the entry with the most
specific prefix containing the destination address of the packet is
chosen, and the packet is forwarded to the associated next hop. Next-hop
routing is a simple, well-
The use of next-hop routing limits the flexibility of the routing system in two ways. First, since the routing decision is local to each router, a router A can only select a route ABC...Z if its neighbouring router B has selected the route BC...Z. Second, the only criterion used by a router to choose a route is the destination address: two packets with the same destination follow the same route. Yet, there are other data in the IP header that could conceivably be used to guide the routing decision -- the Type of Service (ToS) octet and, of course, the source address.¶
Source-
This document describes a source-
1.1. Application to Multihoming
Multihoming is the practice of connecting a single network to two or
more transit networks. The main application of source-
Classical multihoming consists of assigning a provider-
In multihoming with multiple addresses, every host in the multihomed network is assigned multiple addresses, one for each transit provider. Additional mechanisms are needed in order (i) to choose, for each packet, a source address that is associated with a provider that is currently up, and (ii) to route each packet towards the router connected to the provider associated with its source address. One might argue that multihoming with multiple addresses splits the difficult problem of multihoming into two simpler sub-problems.¶
The issue of choosing a suitable source address is a decision local to
the sending host and is an area of active research. The simplest solution
is to use a traditional transport-
Source-
1.2. Other Applications
In addition to multihoming with multiple addresses, we are aware of two applications of source-
When source-
The third application of source-
In many applications of anycast, such as DNS root servers, the
nondeterminism of anycast is acceptable; some applications, however,
require finer control. For example, in some Content Distribution Networks
(CDNs), every endpoint is expected to handle a well-defined subset of the
client population. With source-
1.3. Specificity of Prefix Pairs
In ordinary next-hop routing, when multiple routing table entries match the destination of a packet, the "longest prefix rule" mandates that the most specific entry applies. The reason why this rule makes sense is that the set of prefixes has the following "tree property":¶
- For any prefixes P and P', either P and P' are disjoint, or one is more specific than the other.¶
It would be a natural proposition to order pairs of prefixes pointwise: to define that (D,S) is more specific than (D',S') when D is more specific than D and S is more specific than S'. Unfortunately, the set of pairs of prefixes with the pointwise ordering doesn't satisfy the tree property. Indeed, consider the following two pairs:¶
(2001
These two pairs are not disjoint (a packet with destination
2001
destination source next-hop
2001:db8:0:1::/64 ::/0 A
::/0 2001:db8:0:2::/64 B
A finer ordering of pairs of prefixes is required in order to
avoid all ambiguities. There are two natural choices: destination-
and, symmetrically, source-first ordering, in which sources are compared first and destinations second.¶
Expedient as it would be to leave the choice to the implementation, this is not possible: all routers in a routing domain must use the same ordering lest persistent routing loops occur. Indeed, consider the following topology:¶
A --- B --- C --- D
Suppose that A announces a route for (::/0, 2001
This document mandates (Section 4) that all routers
use destination-
(::/0, S) (D, ::/0) Internet --- A --- B --- N
A announces a source-
2. Specification of Requirements
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.¶
3. Data Structures
A number of the conceptual data structures described in Section 3.2 of [RFC8966] contain a destination prefix. This specification
extends these data structures with a source prefix. Data from the
original protocol, which do not specify a source prefix, are stored with
a zero-length source prefix, which matches the exact same set of packets
as the original, non-
3.1. The Source Table
Every Babel node maintains a source table, as described in [RFC8966], Section 3.2.5. A source-
- The source prefix (sprefix, splen) specifying the source address of packets to which this entry applies.¶
The source table is now indexed by 5-tuples of the form (prefix, plen, sprefix, splen, router-id).¶
Note that the route entry contains a source (see Sections 2 and 3.2.5 of [RFC8966]) that itself contains both destination and source prefixes. These are two different concepts and must not be confused.¶
3.2. The Route Table
Every Babel node maintains a route table, as described in [RFC8966], Section 3.2.6. Each route table entry contains, among other data, a source, which this specification extends with a source prefix as described above. The route table is now indexed by 5-tuples of the form (prefix, plen, sprefix, splen, neighbour), where the first four components are obtained from the source.¶
3.3. The Table of Pending Seqno Requests
Every Babel node maintains a table of pending seqno requests, as
described in [RFC8966], Section 3.2.7. A
source-
- The source prefix (sprefix, splen) being requested.¶
The table of pending seqno requests is now indexed by 5-tuples of the form (prefix, plen, sprefix, splen, router-id).¶
4. Data Forwarding
As noted in Section 1.3, source-
In practice, this means that a source-
- if the lower layers implement destination-
first ordering, then the Babel implementation SHOULD use them directly;¶ - if the lower layers can hold source-
specific routes but not with the right semantics, then the Babel implementation MUST either silently ignore any source- specific routes or disambiguate the routing table by using a suitable disambiguation algorithm (see Section V.B of [SS-ROUTING] for such an algorithm);¶ - if the lower layers cannot hold source-
specific routes, then a Babel implementation MUST silently ignore any source- specific routes.¶
5. Protocol Operation
This extension does not fundamentally change the operation of the Babel protocol, and we therefore only describe differences between the original protocol and the extended protocol.¶
In the original protocol, three TLVs carry a destination prefix: Update, Route Request, and Seqno Request TLVs. This specification extends these messages so that they may carry a Source Prefix sub-TLV, as described in Section 7. The sub-TLV is marked as mandatory so that an unextended implementation will silently ignore the whole enclosing TLV. A node obeying this specification MUST NOT send a TLV with a zero-length source prefix; instead, it sends a TLV with no Source Prefix sub-TLV. Conversely, an extended implementation MUST interpret an unextended TLV as carrying a source prefix of zero length. Taken together, these properties ensure interoperability between the original and extended protocols (see Section 6).¶
5.1. Protocol Messages
This extension allows three TLVs of the original Babel protocol to carry a source prefix: Update TLVs, Route Request TLVs, and Seqno Request TLVs.¶
In order to advertise a route with a non-zero length source prefix,
a node sends a source-
Similarly, when a node needs to send a request of either kind that
applies to a route with a non-zero length source prefix, it sends
a source-
5.2. Wildcard Messages
In the original protocol, the address encoding (AE) value 0 is used for wildcard messages: messages that apply to all routes of any address family and with any destination prefix. Wildcard messages are allowed in two places in the protocol: wildcard retractions are used to retract all of the routes previously advertised by a node on a given interface, and wildcard route requests are used to request a full dump of the route table from a given node. Wildcard messages are intended to apply to all routes, including routes decorated with additional data and AE values to be defined by future extensions; hence, this specification extends wildcard operations to apply to all routes, whatever the value of the source prefix.¶
More precisely, a node receiving an update with the AE field set to 0 and the Metric field set to infinity (a wildcard retraction) MUST apply the route acquisition procedure described in Section 3.5.3 of [RFC8966] to all of the routes that it has learned from the sending node, whatever the value of the source prefix. A node MUST NOT send a wildcard retraction with an attached source prefix, and a node that receives a wildcard retraction with a source prefix MUST ignore the retraction.¶
Similarly, a node that receives a route request with the AE field set to 0 (a wildcard route request) SHOULD send a full routing table dump, including routes with a non-zero length source prefix. A node MUST NOT send a wildcard request that carries a source prefix, and a node receiving a wildcard request with a source prefix MUST ignore the request.¶
6. Compatibility with the Base Protocol
The protocol extension defined in this document is, to a great extent,
interoperable with the base protocol defined in [RFC8966]
(and all previously standardised extensions). More precisely, if
non-
However, this extension is encoded using mandatory sub-TLVs, introduced in [RFC8966], and therefore is not compatible with the older version of the Babel routing protocol [RFC6126], which does not support mandatory sub-TLVs. Consequently, this extension MUST NOT be used in a routing domain in which some routers implement [RFC6126]; otherwise, persistent routing loops may occur.¶
6.1. Starvation and Blackholes
In general, the discarding of source-
In the common case where all source-
7. Protocol Encoding
This extension defines a new sub-TLV used to carry a source prefix: the
Source Prefix sub-TLV. It can be used within an Update, Route Request,
or Seqno Request TLV to match a source-
Since a source-
7.1. Source Prefix Sub-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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 128 | Length | Source Plen | Source Prefix... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Fields:¶
- Type
- Set to 128 to indicate a Source Prefix sub-TLV.¶
- Length
- The length of the body, in octets, exclusive of the Type and Length fields.¶
- Source Plen
- The length of the advertised source prefix, in bits. This MUST NOT be 0.¶
- Source Prefix
- The source prefix being advertised. This field's size is (Source Plen)/8 octets rounded upwards.¶
The length of the body TLV is normally of size 1+(Source Plen)/8 rounded upwards. If the Length field indicates a length smaller than that, then the sub-TLV is corrupt, and the whole enclosing TLV must be ignored; if the Length field indicates a length that is larger, then the extra octets contained in the sub-TLV MUST be silently ignored.¶
The contents of the Source Prefix sub-TLV are interpreted according to the AE of the enclosing TLV. If a TLV with AE equal to 0 contains a Source Prefix sub-TLV, then the whole enclosing TLV MUST be ignored. If a TLV contains multiple Source Prefix sub-TLVs, then the whole TLV MUST be ignored.¶
Note that this sub-TLV is a mandatory sub-TLV. Therefore, as described in Section 4.4 of [RFC8966], the whole TLV MUST be ignored if that sub-TLV is not understood (or malformed).¶
7.2. Source-Specific Update
The source-
Babel uses a stateful compression scheme to reduce the size taken by
destination prefixes in Update TLVs (see Section 4.5 of [RFC8966]). The source prefix defined by this extension is not
compressed. On the other hand, compression is allowed for the destination
prefixes carried by source-
7.3. Source-Specific Route Request
A source-
7.4. Source-Specific Seqno Request
A source-
8. IANA Considerations
IANA has allocated sub-TLV number 128 for the Source Prefix sub-TLV in the "Babel Sub-TLV Types" registry.¶
9. Security Considerations
The extension defined in this document adds a new sub-TLV to three
sub-TLVs already present in the original Babel protocol and does not
change the security properties of the protocol itself. However, the
additional flexibility provided by source-
For example, a network administrator might be tempted to abuse route
filtering (Appendix C of [RFC8966]) as a security mechanism.
Unless the filtering rules are designed to take source-
10. References
10.1. Normative References
- [BCP84]
-
Baker, F. and P. Savola, "Ingress Filtering for Multihomed Networks", BCP 84, RFC 3704, .Sriram, K., Montgomery, D., and J. Haas, "Enhanced Feasible-Path Unicast Reverse Path Forwarding", BCP 84, RFC 8704, .<https://
www >.rfc- editor .org /info /bcp84 - [RFC2119]
-
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487
/RFC2119 , , <https://www >..rfc- editor .org /info /rfc2119 - [RFC8174]
-
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487
/RFC8174 , , <https://www >..rfc- editor .org /info /rfc8174 - [RFC8966]
-
Chroboczek, J. and D. Schinazi, "The Babel Routing Protocol", RFC 8966, DOI 10.17487
/RFC8966 , , <https://www >..rfc- editor .org /info /rfc8966
10.2. Informative References
- [RFC4960]
-
Stewart, R., Ed., "Stream Control Transmission Protocol", RFC 4960, DOI 10.17487
/RFC4960 , , <https://www >..rfc- editor .org /info /rfc4960 - [RFC6126]
-
Chroboczek, J., "The Babel Routing Protocol", RFC 6126, DOI 10.17487
/RFC6126 , , <https://www >..rfc- editor .org /info /rfc6126 - [RFC6724]
-
Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown, "Default Address Selection for Internet Protocol Version 6 (IPv6)", RFC 6724, DOI 10.17487
/RFC6724 , , <https://www >..rfc- editor .org /info /rfc6724 - [RFC8305]
-
Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: Better Connectivity Using Concurrency", RFC 8305, DOI 10.17487
/RFC8305 , , <https://www >..rfc- editor .org /info /rfc8305 - [RFC8445]
-
Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal", RFC 8445, DOI 10.17487
/RFC8445 , , <https://www >..rfc- editor .org /info /rfc8445 - [RFC8684]
-
Ford, A., Raiciu, C., Handley, M., Bonaventure, O., and C. Paasch, "TCP Extensions for Multipath Operation with Multiple Addresses", RFC 8684, DOI 10.17487
/RFC8684 , , <https://www >..rfc- editor .org /info /rfc8684 - [SS-ROUTING]
-
Boutier, M. and J. Chroboczek, "Source-
Specific Routing" , IFIP Networking Conference, DOI 10.1109/IFIPNetworking , , <http://.2015 .7145305 arxiv >..org /pdf /1403 .0445
Acknowledgments
The authors are indebted to Donald Eastlake, Joel Halpern, and Toke Hoiland-