BGP route reflection理论知识

简介:


1.简介

目前在因特网中,BGP部署被配置成在一个单一自治系统中的所有BGP报告者必须全互连,并且任意外部的路由信息必须被重新传输到在此自治系统内的所有的其他的路由器。对于在一个自治系统中的nBGP报告者而言,需要维护n*(n-1)/2个独立的IBGP对话。因为当前许多因特网网络通常存在大量的IBGP报告者,每个报告者间相互交换大容量的路由信息,所以“全互连”的要求明显不好调节。

本文档阐述了另一种用于缓解“全互连”的可选方案叫做“路由反射”。这个方法允许一个BGP报告者(叫做“路由反射器”)广播IBGP学得的路由给某些IBGP对等方。本文档阐述了对通常理解的IBGP概念的一个改变,并且增加了两个新的可选的过渡BGP属性来防止在路由更新中的环回。

本文档是RF1966的一个修订版,并且它包括了基于路由反射的部署经验的编辑修改、阐明和校正。

2设计标准

  路由反射被设计为满足下列标准:

  。简单化

  任何的改变必须既易于理解又易于配置。

  。容易过渡

  必须在不需改变拓扑或自治系统的情况下,能从一个全互连配置过渡到路由反射。这是一项效果不好的对[3]中建议的技术的管理开支。

  。兼容性

  必须在不丢失任何BGP路由信息的情况下,可以使得不兼容RRIBGP对等继续成为原始自治系统或域的一部分。

  这些标准受到有许多外部连接的一个非常大和拓扑复杂的网络的操作经验的驱动。

3.路由反射

路由反射的基本概念非常简单。让我们考虑下面图1中叙述的简单例子。

 

 

                                    1: 全互连IBGP

ASX自治系统中有三个IBGP报告者(路由器RTR-ARTR-BRTR-C)。根据现存的BGP模型,如果A收到一个外部路由且它被选为最佳路径,它必须广播此路由给BCBC(作为IBGP报告者)将不再广播此IBGP学得的路由给其它IBGP报告者。

如果此规则被放宽,C被允许广播IBGP学得的路由给IBGP对等,那么它将可以重播(或反射)这条从A学得得路由给B,反之亦然。这就消除了在AB间存在IBGP对话得必要,如下图2所示。

 

 

                                       2: 路由反射IBGP

          这个路由反射方案就是基于这个基本原理。

4.术语和概念

我们使用术语“路由反射”来叙述一个IBGP报告者广播一条IBGP学得得路由给另一个IBGP对等的过程。这样的一个IBGP报告者被称为一个“路由反射器“,并且这样一条路由被称为一个被反射的路由。

一个路由反射器的内部对等可以被分为两个组:

1)客户对等

2)非客户对等

一个路由反射器不仅反射这些组间的路由,还可以反射客户对等间的路由。一个路由反射器和它的客户对等一起构成一个簇。非客户对等必须全互连而客户对等则不必。图3画出的一个简例概括了使用上述注释的术语的基本路由反射器的构件。

 

 

                        Figure 3: 路由反射器构件

5.操作

    当一个路由反射器收到一条路由时,它基于它的路径选择规则来选择最佳路径。在选择了最佳路径后,它必须根据它接收的最佳路径所来自的对等的类型来进行下列操作:

1)从一个非客户对等来的路由反射到全部的客户对等。

2)从一个客户对等来的路由既反射到全部的非客户对等,也反射到客户对等。(从而客户对等不需要全互连)。

    一个自治系统可以有许多个路由反射器。一个路由反射器将其他的路由反射器作为任意其他的BGP报告者对待。一个路由反射器也可以被配置为其他路由反射器的一个客户组或非客户组。

  在一个简单配置中,主干可以被分为许多个簇。每个路由反射器可以被配置作为其他路由反射器的非客户对等(那么全部路由反射器将是全互连)。客户仅和它们同一簇的路由反射器维持IBGP对话。由于路由反射,全部的BGP报告者将收到被反射的路由信息。

  在一个自治系统中可能存在不理解路由反射器概念的BGP报告者(让我们称之为传统的BGP报告者)。路由反射器方案允许这些传统的BGP报告者共存。传统的BGP报告者可以是非客户组的成员也可以是客户组的成员。这使得易于逐渐从当前IBGP式过渡到路由反射模式。可以通过将单一一个路由器配置为指定的路由反射器、并且配置其他的路由反射器和它们的客户为普通的IBGP对等来开始产生一个簇。另外的簇也可以逐渐产生。

6.冗余的路由反射器

    通常一个簇的客户只有单一一个路由反射器。在次情况下,这个簇将由这个路由反射器的ROUTER_ID来标识。但是,这意味着单点故障将全簇故障,因此同一簇中需要多个路由反射器。在同一簇中的全部路由反射器必须用一个4字节的CLUSTER_ID配置,从而一个路由反射器可以辨认出来自同一簇的其他路由反射器的路由。

7.避免路由信息环回

    当一条路由被反射时,它可能因为不正确的配置导致路由的再传播环回。路由反射方法定义了下列属性来检测和避免路由信息环回:

ORIGINATOR_ID

  ORIGINATOR_ID是一个新的、可选的、非过渡性的类型码为9BGP属性。这个属性有4字节长,将由一个路由反射器在反射一条路由时产生。这个属性将搭载本地自治系统中的路由的原始方的ROUTER_ID。如果一个ORIGINATOR_ID已经存在,BGP报告者将不能产生一个ORIGINATOR_ID属性。可以识别这个属性的路由器将忽略所接收的一条路由的ROUTER_ID,不将它作为ORIGINATOR_ID

CLUSTER_LIST

  CLUSTER_LIST是一个新的、可选的、非过渡性的类型码为10BGP属性。这是一个CLUSTER_ID值的序列表,表示这条路由通过的反射路径。它被如下编码:

 

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Attr. Flags |Attr. Type Code| Length | value ...

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 

此处Length代表字节数。

  当一个路由反射器反射一条路由时,它必须预先附加本地的CLUSTER_ID CLUSTER_LIST。如CLUSTER_LIST是空的,路由反射器就必须产生一个新的CLUSTER_LIST。使用这个属性路由反射器就可以辨认出因为错误配置被环回到同一簇

的路由信息。如果在CLUSTER_LIST中发现本地的CLUSTER_ID,将不再传播此路由信息。

8.实施方面的考虑

  必须注意的是,要确保当在路由反射器和客户及非客户对等之间交换网络路由信息时,不是上述定义的BGP路径属性能通过配置来被修改。这些修改可能潜在的导致路由环回。

此外,当一个路由反射器反射路由时,它将不能修改下列的路径属性:NEXT_HOP,AS_PATH, LOCAL_PREF, MED。它们的修改可能潜在的导致路由环回。

9.配置和执行方面的考虑

  BGP协议没有为一个客户提供用于将自己动态的标识为一个路由反射器的客户的方法。要达到这个目的的最简单的方法是手工配置。

路由反射方法可解决规模问题的一个关键是路由反射器总结了路由信息并且仅反射它的最佳路径。

MEDIGP权值都可以影响BGP路由选择。因为MED通常不可以比较而且IGP权值因每个路由器的不同而不同。对于某个路由反射拓扑,路由反射方法进行路由选择的结果可能和完全IBGP网状连接方法得到的不同。为了保证它们相同,需要保证路由反射器从不强制基于由于它们的客户的IGP权值不同而显著不同的IGP权值、或是基于不可比较的MED来执行BGP路由选择。前者可以通过配置簇内IGP权值而非簇间IGP权值来得到。后者则可以通过:

  。 在一个边界路由器上设置一个路由的本地选择权来反射MED值。

  。 或者确保当此AS_PATH长度值被用作一个路由选择标准时,来自不同的自治

    系统的AS_PATH长度值不同。

  。 或者通过基于这个路由反射器所用于决定最佳路径的策略来配置团体。

  有人会争辩说最后一个要求太严了,在一些情况下不实际。有人会进一步争辩说既然不会有路由环回,那么就不必强迫路由反射的路由选择结果和完全IBGP网状连接方法相同。

  为了防止路由环回和保持一致路由的目的,在设计一个路由反射拓扑时必须仔细考虑该网络的拓扑。通常,当对于一个前缀存在条路径时,此路由反射拓扑应该和这个网络拓扑相一致。一个常用的方法就是基于POP反射,每个POPPOP中维护它自己的路由反射器所服务的客户,并且全部路由反射器时全互连的。此外,为了优化POP路由,在每个POP中的反射器的客户常常全互连,并且POPIGP权值被配置优于POPIGP权值。

10.安全方面的考虑

这里对BGP属性的扩展不改变现存的IBGP内在的基本安全结论。



本文转自zcm8483 51CTO博客,原文链接:http://blog.51cto.com/haolun/992830

相关文章
|
Linux
Linux下安装curl
Linux下安装curl
1661 0
|
监控 Kubernetes Cloud Native
浅谈基于 OpenStack 和 k8s 建设云原生研发基础设施
建设公司云原生研发基础设施,为研发部门提供安全、可靠、高效的基础资源、数据存储服务、DevOps 流水线以及运维自动化服务等。
5093 4
浅谈基于 OpenStack 和 k8s 建设云原生研发基础设施
网络数据包收发流程(三):e1000网卡和DMA
一、硬件布局每个网卡(MAC)都有自己的专用DMA Engine,如上图的 TSEC 和 e1000 网卡intel82546。上图中的红色线就是以太网数据流,DMA与DDR打交道需要其他模块的协助,如TSEC,PCI controller以太网数据在 TSECDDR  PCI_Co...
5775 1
|
Ubuntu Python
pip3 执行错误 No module named 'distutils.cmd'
pip3 执行错误 No module named 'distutils.cmd'
2036 0
|
移动开发 JavaScript 前端开发
HTML5 Web Workers详解
HTML5 Web Workers 允许在后台线程中运行 JavaScript,实现复杂计算而不影响用户界面,提升应用性能。其主要特性包括并行处理、异步通信、独立作用域及多数据类型支持。通过创建和使用 Worker 文件,如 `worker.js`,可执行后台任务,并与主线程通过消息传递机制通信。适用于数据处理、图像处理、复杂计算及网络请求并行等场景。需要注意的是,Web Workers 在浏览器兼容性、安全性限制、调试及资源消耗方面需特别关注。合理利用 Web Workers 可显著增强 Web 应用的流畅度和响应速度。
|
10月前
|
人工智能
阿里云领跑生成式AI工程领域,两大维度排名Gartner®生成式AI工程Market Quadrant全球第二
阿里云凭借强劲实力入选Gartner 《Innovation Guide for Generative AI Technologies》所有领域的新兴领导者象限。
|
11月前
|
消息中间件 Linux iOS开发
.NET 高性能异步套接字库,支持多协议、跨平台、高并发
【11月更文挑战第3天】本文介绍了高性能异步套接字库在网络编程中的重要性,特别是在处理大量并发连接的应用中。重点讨论了 .NET 中的 Socket.IO 和 SuperSocket 两个库,它们分别在多协议支持、跨平台特性和高并发处理方面表现出色。Socket.IO 基于 WebSocket 协议,支持多种通信协议和跨平台运行,适用于实时通信应用。SuperSocket 则通过事件驱动的异步编程模型,实现了高效的高并发处理,适用于需要自定义协议的场景。这些库各有特点,可根据具体需求选择合适的库。
243 6
|
安全 Linux 虚拟化
minos 2.1 中断虚拟化——ARMv8 异常处理
越往后,交叉的越多,大多都绕不开 ARMv8 的异常处理,所以必须得先了解了解 ARMv8 的异常处理流程 先说一下术语,从手册中的用词来看,在 x86 平台,一般将异常和中断统称为中断,在 ARM 平台,一般将中断和异常统称为异常
309 3
minos 2.1 中断虚拟化——ARMv8 异常处理
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
机器学习/深度学习 算法
LSTM时间序列预测中的一个常见错误以及如何修正
在使用LSTM进行时间序列预测时,常见错误是混淆回归和预测问题。LSTM需将时间序列转化为回归问题,通常使用窗口或多步方法。然而,窗口方法中,模型在预测未来值时依赖已知的未来值,导致误差累积。为解决此问题,应采用迭代预测和替换输入值的方法,或者在多步骤方法中选择合适的样本数量和训练大小以保持时间结构。编码器/解码器模型能更好地处理时间数据。
807 1