RFC 2796

BGP Route Reflection - An Alternative to Full Mesh IBGP

πŸ“… published April 2000, from ietf

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 (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:

  1. Client Peers
  2. 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 🧐:

  1. A Route from a Non-Client IBGP peer

Reflect to all the Clients. 🫢

  1. 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 πŸŽ€.

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