RFC 2796
BGP Route Reflection - An Alternative to Full Mesh IBGP
RFC 2796 πβ¨
BGP Route Reflection - An Alternative to Full Mesh IBGP π
Okay bestie, this one's from April 2000 and it's a Standards Track doc π. It's written by T. Bates, R. Chandra and E. Chen, with the authors from Cisco Systems and Redback Networks. It updates RFC 1966 (the original route reflection doc) and doesn't list anything it obsoletes π§. Fair warning: the original is kinda dense, so I'm keeping every single detail, just wearing a cuter outfit π .
Status of This Memo π
This document is a standards track protocol spec for the Internet community. It's asking people to discuss it and suggest improvements π«Ά. If you want to know where it stands officially, check the current "Internet Official Protocol Standards" (STD 1). Distribution is unlimited, so share it with everyone πΈ.
Copyright Notice Β©οΈ
Copyright (C) The Internet Society (2000). All Rights Reserved. π
Abstract π
Okay so, BGP ([1]) is the inter-autonomous system routing protocol for TCP/IP internets π. Right now, BGP deployments are set up so that every BGP speaker inside one AS has to be fully meshed, meaning any external routing info has to get re-distributed to every other router in that AS. Honestly? That's a serious scaling problem, and people have already written about it with a few alternatives proposed [2,3] π.
This doc describes a method called "Route Reflection" that totally helps with the need for "full mesh" IBGP π¦.
1. Introduction β¨
Right now on the Internet, BGP deployments are set up so that all BGP speakers in a single AS must be fully meshed, and external routing info has to be re-distributed to every other router in that AS π. With n BGP speakers in one AS, you need n*(n-1)/2 unique IBGP sessions. That's a LOT, bestie π. The "full mesh" thing clearly doesn't scale once you've got lots of IBGP speakers swapping big piles of routing info, which is super common in today's internet networks π₯.
This scaling problem is well documented, and people have proposed a bunch of fixes [2,3]. This doc is another option for getting rid of the need for a "full mesh," and it's called "Route Reflection" π§. It lets a BGP speaker (called a "Route Reflector") advertise IBGP learned routes to certain IBGP peers. It's kind of a glow-up of the usual IBGP concept, and it adds two new optional transitive BGP attributes to stop loops in routing updates π.
This doc is a revision of RFC1966 [4]. It has editorial changes, clarifications and corrections based on real deployment experience with route reflection. All of those revisions are summarized in the Appendix π.
2. Design Criteria π
Route Reflection was designed to hit these criteria:
- Simplicity
Any alternative must be simple to configure and simple to understand. π§
- Easy Transition
It must be possible to move over from a full mesh config without changing the topology or the AS. This is an annoying management overhead of the technique proposed in [3] π€.
- Compatibility
It must be possible for non compliant IBGP peers to stay part of the original AS or domain without losing any BGP routing information π«Ά.
These criteria came from the operational experiences of a very large, topology-rich network with lots of external connections π.
3. Route Reflection π¦
The basic idea of Route Reflection is super simple. Check out the example in Figure 1 below π.
+-------+ +-------+
| | IBGP | |
| RTR-A |--------| RTR-B |
| | | |
+-------+ +-------+
\ /
IBGP \ ASX / IBGP
\ /
+-------+
| |
| RTR-C |
| |
+-------+
Figure 1: Full Mesh IBGP
ASX has three IBGP speakers: RTR-A, RTR-B and RTR-C. With the existing BGP model, if RTR-A gets an external route and picks it as the best path, it has to advertise that external route to both RTR-B and RTR-C. RTR-B and RTR-C (as IBGP speakers) won't re-advertise these IBGP learned routes to other IBGP speakers π ββοΈ.
If we relax this rule and let RTR-C advertise IBGP learned routes to IBGP peers, then it can re-advertise (or "reflect") the IBGP routes it learned from RTR-A over to RTR-B, and vice versa. This gets rid of the need for the IBGP session between RTR-A and RTR-B, as shown in Figure 2 below β¨.
+-------+ +-------+
| | | |
| RTR-A | | RTR-B |
| | | |
+-------+ +-------+
\ /
IBGP \ ASX / IBGP
\ /
+-------+
| |
| RTR-C |
| |
+-------+
Figure 2: Route Reflection IBGP
The whole Route Reflection scheme is built on this one principle π.
4. Terminology and Concepts π§
We use the term "Route Reflection" to describe a BGP speaker advertising an IBGP learned route to another IBGP peer. That speaker is called a "Route Reflector" (RR), and the route it passes along is called a reflected route π.
The internal peers of an RR fall into two groups:
- Client Peers
- Non-Client Peers
An RR reflects routes between these groups, and it may also reflect routes among client peers. An RR together with its client peers forms a Cluster πΈ. The Non-Client peers must be fully meshed, but the Client peers don't need to be fully meshed π. Figure 3 is a simple example that shows the basic RR components using the terms above.
/ - - - - - - - - - - - - - -
| Cluster |
+-------+ +-------+
| | | | | |
| RTR-A | | RTR-B |
| |Client | |Client | |
+-------+ +-------+
| \ / |
IBGP \ / IBGP
| \ / |
+-------+
| | | |
| RTR-C |
| | RR | |
+-------+
| / \ |
- - - - - /- - -\- - - - - - /
IBGP / \ IBGP
+-------+ +-------+
| RTR-D | IBGP | RTR-E |
| Non- |---------| Non- |
|Client | |Client |
+-------+ +-------+
Figure 3: RR Components
5. Operation π₯
When an RR gets a route from an IBGP peer, it picks the best path based on its path selection rule. Once the best path is picked, it must do the following, depending on the type of peer the best path came from π§:
- A Route from a Non-Client IBGP peer
Reflect to all the Clients. π«Ά
- A Route from a Client peer
Reflect to all the Non-Client peers and also to the Client peers. (So the Client peers don't have to be fully meshed. Iconic, right? π )
An Autonomous System can have lots of RRs. An RR treats other RRs just like any other internal BGP speakers. An RR can be configured to have other RRs in a Client group or a Non-Client group π.
In a simple setup, the backbone can be split into lots of clusters. Each RR would be configured with the other RRs as Non-Client peers, so all the RRs end up fully meshed. The Clients are configured to keep an IBGP session only with the RR in their cluster. Thanks to route reflection, every IBGP speaker gets reflected routing info π¦.
An Autonomous System can also have BGP speakers that don't understand Route Reflectors at all. Let's call these conventional BGP speakers π. The Route-Reflector scheme lets conventional BGP speakers co-exist with RRs. They can be members of either a Non-Client group or a Client group. This makes the move from the current IBGP model to the Route Reflection model easy and gradual π. You can start a cluster by setting up one router as the designated RR, and configuring the other RRs and their clients as normal IBGP peers. More clusters can be added over time β¨.
6. Redundant RRs π
Usually a cluster of clients has a single RR. In that case, the cluster is identified by the ROUTER_ID of the RR. But that's a single point of failure π¬. So, to allow multiple RRs in the same cluster, all of the RRs in one cluster can be configured with a 4-byte CLUSTER_ID. That way an RR can discard routes from other RRs in the same cluster π‘οΈ.
Heads up, bestie: having more than one RR per cluster is the fix for that single point of failure, so keep your CLUSTER_IDs consistent across the cluster π.
8. Implementation Considerations β¨
okay bestie, this part is lowkey a safety check π«Ά. Make sure none of the BGP path attributes described above can be changed through configuration when internal routing info gets swapped between RRs and Clients and Non-Clients. If you change them, you could potentially cause routing loops π.
Also, when an RR reflects a route, it should not modify NEXT_HOP, AS_PATH, LOCAL_PREF, or MED π
ββοΈ. Changing those could potentially cause routing loops too. Protect those attributes like they're your phone passcode ππ
.
9. Configuration and Deployment Considerations π
ngl this section is where it gets spicy πΆοΈ. BGP has no way for a Client to dynamically identify itself as a Client of an RR. The simplest fix is manual configuration π οΈ.
One of the key components of the route reflection approach for handling scaling is that the RR summarizes routing information and only reflects its best path π¦.
Both MEDs and IGP metrics can affect BGP route selection π€. MEDs aren't always comparable, and the IGP metric can be different for every router. So in some route reflection topologies, route reflection might not pick the same route as a full IBGP mesh would π. To make route selection match the full IBGP mesh, make sure route reflectors are never forced to do BGP route selection based on IGP metrics that are wildly different from their clients' IGP metrics, or based on incomparable MEDs. The first part can be done by making the intra-cluster IGP metrics better than the inter-cluster IGP metrics, and keeping a full mesh inside the cluster. The second part can be handled in any of these ways:
- set the local preference of a route at the border router so it reflects the MED values.
- or make sure the AS-path lengths from different ASs are different, if AS-path length is used as a route selection criterion.
- or configure community-based policies so the reflector can decide on the best route.
Okay, one could argue that the last requirement is overly restrictive, and maybe impractical in some cases π. One could also argue that as long as there are no routing loops, there's no compelling reason to force route selection with route reflectors to match what a full IBGP mesh would pick β¨.
To prevent routing loops and keep a consistent routing view, you have to think carefully about the network topology when designing a route reflection topology π§ . In general, the route reflection topology should be congruent with the network topology when there are multiple paths for a prefix πΊοΈ. One popular approach is POP-based reflection, where each POP has its own route reflectors serving the clients in that POP, and all the route reflectors are fully meshed π. The clients of the reflectors in each POP are often fully meshed too, for optimal intra-POP routing, and the intra-POP IGP metrics are set to be better than the inter-POP IGP metrics π.
10. Security Considerations π
β οΈ Serious bestie moment: this extension to BGP does not change the underlying security issues that already exist in the current IBGP [5]. Those issues are still very much there, so keep your sessions protected ππ¨.
11. Acknowledgments π«Ά
the authors want to thank Dennis Ferguson, John Scudder, Paul Traina, and Tony Li for the many discussions that led to this work π. This idea grew out of an earlier discussion between Tony Li and Dimitri Haskin πΈ.
They also want to acknowledge the valuable review and suggestions from Yakov Rekhter on this document π§. Thanks as well to Tony Li, Rohit Dube, and John Scudder for their helpful comments on Section 9, and to Bruce Cole π.
13. References π
- [1] Rekhter, Y. and T. Li, "A Border Gateway Protocol 4 (BGP-4)", RFC 1771, March 1995.
- [2] Haskin, D., "A BGP/IDRP Route Server alternative to a full mesh routing", RFC 1863, October 1995.
- [3] Traina, P., "Limited Autonomous System Confederations for BGP", RFC 1965, June 1996.
- [4] Bates, T. and R. Chandra, "BGP Route Reflection An alternative to full mesh IBGP", RFC 1966, June 1996.
- [5] Heffernan, A., "Protection of BGP Sessions via the TCP MD5 Signature Option", RFC 2385, August 1998.
14. Authors' Addresses π
Tony Bates
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA 95134
EMail: tbates@cisco.com
Ravi Chandra
Redback Networks Inc.
350 Holger Way.
San Jose, CA 95134
EMail: rchandra@redback.com
Enke Chen
Redback Networks Inc.
350 Holger Way.
San Jose, CA 95134
EMail: enke@redback.com
Appendix Comparison with RFC 1966 πΈ
here's what changed from RFC 1966 π¦. Several route reflection terminologies got clarified, and the reference to EBGP routes/peers was removed π§Ό.
The way a receiver handles a routing information loop (caused by route reflection) was clarified and made more consistent π.
Adding a CLUSTER_ID to the CLUSTER_LIST changed from "append" to "prepend", to match the code that's actually deployed π.
The "Configuration and Deployment Considerations" section got expanded to cover several operational issues π.
Full Copyright Statement βοΈ
Copyright (C) The Internet Society (2000). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement π
Funding for the RFC Editor function is currently provided by the Internet Society β¨.
π¦ where this page comes from
- ietf: rfc2796 2000-04
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms