BGP路由协议

2023-03-17  本文已影响0人  程序员札记

路由协议被分为EGP和IGP两个层次,没有EGP就不可能有世界上各个不同组织机构之间的通信,没有IGP机构内部也就不可能进行通信。下面我们就来看看EGP协议中的BGP协议是做什么的。

image.png

BGP表示边界网关协议,如同RIP、OSPF等IGP协议一样,也是一种路由协议。但与IGP所不同的是,但是它是自治系统AS之间的路由协议。那么什么是自治系统 (AS) ?

让我们设想一个场景,你和你的的朋友计划到张家界旅游。现在有两种出行的方式:你可以乘坐公共汽车或自驾前往。如果你打算乘高铁,那么就必须同意高铁的一些规则,比如说例如车费、停站次数、到达目的地的路线等。但是如果你选择自驾,就可以定义自己的行程。如下图所示。


image.png

如上图所描述的,高铁和自驾小车的驾驶者都定义了他们自己的路由策略。在这里,我们就可以将高铁和小车看作为两个自治系统AS,它们拥有自己的Policy、管理条款,只要同意这些政策的任何用户都能成为该 AS 的一部分。因此,自治系统是受共同管理权限的设备的集合。因此,在 Internet 中,我们可以说一个电信服务商提供商 (ISP)下的客户创建一个 AS。

接下来,我们假设你的一位朋友决定在乘坐两站高铁后加入搭乘你的小车。在这种情况下,你就必须知道高铁所走的路线、第3次停靠的时间以及停留多长时间,以便可以顺利的接上你的朋友,这就需要你与处于高铁自治系统AS里的朋友进行互动,这样跨域通信就来了。


image.png

如上图所示,我们的BGP就可以帮助你与你的朋友进行联系。可以认为你的朋友充分利用你的小车和高铁所定义Policy的优点。

因此,BGP是AS之间协议(在AS自治系统内则使用IGP 协议)。与IGP 路由协议不同,BGP不提供有关度量Metric或链路状态的路由,但它会选择涉及较少AS数量的一条路径。众所周知,互联网都是关于ISP的,BGP在这些ISP之间建立连接,并基于AS的策略Policy,通过BGP来选择控制路由。因此,BGP就是互联网协议。

通过上面的简单介绍,我们知道了BGP 是自治系统间AS协议,我们也知道什么是自治系统AS,下面我们继续看BGP协议的其他方面。如下图所示。

image.png

从上面的网络拓扑可以看出,BGP分为内部BGP(iBGP)和外部 BGP( eBGP)协议两种类型。连接两个AS间的路由器使用的是eBGP协议。而AS内部连接的路由器使用的是iBGP协议。AS域内的所有路由器都使用IGP协议,它们不知道运行iBGP的路由器。

另外,我们知道,在路由协议中,邻居的重要性也不言而喻,远亲不如近邻。在BGP网络中,当我们需要传递信息时。就需要识别邻居。以便对转发路由进行更新。在这里,我们需要知道,BGP中的邻居是必须手动配置的,但是它们之间并不要求必须是直接相连的。只要没有被识别定义为邻居,那么它们之间就不能传递信息。这就是为什么AS内的所有iBGP路由器都必须配置为彼此的邻居(如同全网Mesh连接),否则路由更新将不会发送给这些路由器。

在这里,来自邻居的路由更新将存储在本地BGP表中,来自该表的最佳路由被录入到路由表中。当然我们也可以假设与某个AS所有者正在进行冷战,不希望在我们的AS内允许通过那个AS的任何数据流。那么,就可以配置所属我们AS的属性、权重、本地优先级、AS 路径等来达成这个目的。并且还可以根据这些属性值,选择一条路由作为最佳路径。此外,如果有多个路径到达目的地,在这种情况下,属性也用于决定选择哪条路径。如下图所示。

image.png

综上,BGP协议是一个非常重要的协议。它属于外部网关路由协议,可以实现自治系统间无环路的域间路由。BGP是沟通Internet广域网的主用路由协议。还是那句话:没有EGP就不可能有世界上各个不同组织机构之间的通信,只有BGP、IGP共同进行路由控制,才能够进行整个互联网的路由控制。

定义:

边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。早期发布的三个版本分别是BGP-1、BGP-2和BGP-3,1994年开始使用BGP-4,2006年之后单播IPv4网络使用的版本是BGP-4,其他网络(如IPv6等)使用的版本是MP-BGP。

MP-BGP是对BGP-4进行了扩展,来达到在不同网络中应用的目的,BGP-4原有的消息机制和路由机制并没有改变。MP-BGP在IPv6单播网络上的应用称为BGP4+,在IPv4组播网络上的应用称为MBGP(Multicast BGP)。

特点:

BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP TrackingBGP GR和NSR,提高了网络的可靠性。

在邻居数目多、路由量大且大部分邻居具有相同出口策略的场景下,BGP使用按组打包技术极大的提高了BGP打包发包性能。

自治系统AS(Autonomous System):

AS是指在一个实体管辖下的拥有相同选路策略的IP网络。BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS。AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,4字节AS号的范围为1至4294967295。支持4字节AS号的设备能够与支持2字节AS号的设备兼容。

BGP邻居类型:

如图1所示,BGP邻居类型按照运行方式分为EBGP(External/Exterior BGP)和IBGP(Internal/Interior BGP)。

图1 BGP的运行方式:


image.png

BGP报文交互中的角色:

BGP报文交互中分为Speaker和Peer两种角色。

BGP的路由器号(Router ID):

BGP的Router ID是一个用于标识BGP设备的32位值,通常是IPv4地址的形式,在BGP会话建立时发送的Open报文中携带。对等体之间建立BGP会话时,每个BGP设备都必须有唯一的Router ID,否则对等体之间不能建立BGP连接。

BGP的Router ID在BGP网络中必须是唯一的,可以采用手工配置,也可以让设备自动选取。缺省情况下,BGP选择设备上的Loopback接口的IPv4地址作为BGP的Router ID。如果设备上没有配置Loopback接口,系统会选择接口中最大的IPv4地址作为BGP的Router ID。一旦选出Router ID,除非发生接口地址删除等事件,否则即使配置了更大的地址,也保持原来的Router ID。

BGP工作原理:

BGP对等体的建立、更新和删除等交互过程主要有5种报文、6种状态机和5个原则。

BGP状态机:

如图1所示,BGP对等体的交互过程中存在6种状态机:空闲(Idle)、连接(Connect)、活跃(Active)、Open报文已发送(OpenSent)、Open报文已确认(OpenConfirm)和连接已建立(Established)。在BGP对等体建立的过程中,通常可见的3个状态是:Idle、Active和Established。

图1 BGP对等体交互过程:


image.png
  1. Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
  1. 在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
  1. 在Active状态下,BGP总是在试图建立TCP连接。
  1. 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
  1. 在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。

BGP对等体之间的交互原则:

BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:

BGP与IGP交互:

BGP与IGP在设备中使用不同的路由表,为了实现不同AS间相互通讯,BGP需要与IGP进行交互,即BGP路由表和IGP路由表相互引入。

BGP引入IGP路由:

BGP协议本身不发现路由,因此需要将其他路由引入到BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为了更好的规划网络,BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路。

BGP引入路由时支持Import和Network两种方式:

IGP引入BGP路由:

当一个AS需要引入其他AS的路由时,AS边缘路由器会在IGP路由表中引入BGP的路由。为了避免大量BGP路由对AS内设备造成影响,当IGP引入BGP路由时,可以使用路由策略,进行路由过滤和路由属性设置。

BGP的路由优选规则和负载分担:
在BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。

BGP属性
路由属性是对路由的特定描述,所有的BGP路由属性都可以分为以下4类,常见BGP属性类型如表1所示:

表1 BGP常见属性类型

属性名 类型
Origin属性 公认必须遵循
AS_Path属性 公认必须遵循
Next_Hop属性 公认必须遵循
Local_Pref属性 公认任意
MED属性 可选非过渡
团体属性 可选过渡
Originator_ID属性 可选非过渡
Cluster_List属性 可选非过渡

下面介绍几种常用的BGP路由属性:

Origin属性

Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。

AS_Path属性

AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。

当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。

当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。

Next_Hop属性

Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:

Local_Pref属性

Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS。Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。

MED属性

MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。

团体属性

团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。

团体属性分为自定义团体属性和公认团体属性。公认团体属性如表2所示。

表2 公认团体属性

团体属性名称 团体属性号 说明
Internet 0(0x00000000) 设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。
No_Advertise 4294967042(0xFFFFFF02) 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。
No_Export 4294967041(0xFFFFFF01) 设备收到具有此属性的路由后,将不向AS外发送该路由。
No_Export_Subconfed 4294967043(0xFFFFFF03) 设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。

Originator_ID属性和Cluster_List属性

Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题,详细描述请参见路由反射器。

BGP选择路由的策略:

当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由:

BGP负载分担:

当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。形成BGP等价负载分担的条件是“BGP选择路由的策略”的1至8条规则中需要比较的属性完全相同。

路由反射器:

为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台设备,那么建立的IBGP连接数就为n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源的消耗都很大。在IBGP对等体间使用路由反射器可以解决以上问题。

路由反射器相关角色:
如图1,在一个AS内部关于路由反射器有以下几种角色:

图1 路由反射器示意图:


image.png

路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。

路由反射器原理

同一集群内的客户机只需要与该集群的RR直接交换路由信息,因此客户机只需要与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少了IBGP连接数量。如图1所示,在AS65000内一台设备作为RR,三台设备作为客户机,形成Cluster1。此时AS65000中IBGP的连接数从配置RR前的10条减少到4条,不仅简化了设备的配置,也减轻了网络和CPU的负担。

RR突破了“从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。”的限制,并采用独有的Cluster_List属性和Originator_ID属性防止路由环路。RR向IBGP邻居发布路由规则如下:

Cluster_List属性:

路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。

Originator_ID属性:

Originator ID由RR产生,使用的Router ID的值标识路由的始发者,用于防止集群内产生路由环路。

备份路由反射器

为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。

图2 备份路由反射器

image.png

如图2,路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster ID。

多集群路由反射器:

一个AS中可以存在多个集群,各个集群的RR之间建立IBGP对等体。当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR。当RR所处的网络层相同时,可以将不同集群的RR全连接,形成同级RR。

分级路由反射器

图3 分级路由反射器:


image.png

在实际的RR部署中,常用的是分级RR的场景。如图3,ISP为AS100提供Internet路由。AS100内部分为两个集群,其中Cluster1内的四台设备是核心路由器,采用备份RR的形式保证可靠性。

同级路由反射器

图4 同级路由反射器:

image.png

如图4,一个骨干网被分成多个集群。各集群的RR互为非客户机关系,并建立全连接。此时虽然每个客户机只与所在集群的RR建立IBGP连接,但所有RR和客户机都能收到全部路由信息。

BGP联盟:
解决AS内部的IBGP网络连接激增问题,除了使用路由反射器之外,还可以使用联盟(Confederation)。联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS仍认为联盟是一个AS。配置联盟后,原AS号将作为每个路由器的联盟ID。这样有两个好处:一是可以保留原有的IBGP属性,包括Local Preference属性、MED属性和NEXT_HOP属性等;二是联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子AS号等信息的操作。

图1 联盟示意图:

image.png

如图1所示,AS100使用联盟后被划分为3个子AS:AS65001、AS65002和AS65003,使用AS100作为联盟ID。此时IBGP的连接数量从10条减少到4条,不仅简化了设备的配置,也减轻了网络和CPU的负担。而AS100外的BGP设备因为仅知道AS100的存在,并不知道AS100内部的联盟关系,所以不会增加CPU的负担。

路由反射器和联盟的比较
表1从配置、设备连接和应用方面对比了路由反射器和联盟。

表1 路由反射器和联盟的比较

路由反射器 联盟
不需要更改现有的网络拓扑,兼容性好。 需要改变逻辑拓扑。
配置方便,只需要对作为反射器的设备进行配置,客户机并不需要知道自己是客户机。 所有设备需要重新进行配置。
集群与集群之间仍然需要全连接。 联盟的子AS之间是特殊的EBGP连接,不需要全连接。
适用于中、大规模网络。 适用于大规模网络。

路由聚合:
在大规模的网络中,BGP路由表十分庞大,给设备造成了很大的负担,同时使发生路由振荡的几率也大大增加,影响网络的稳定性。

路由聚合是将多条路由合并的机制,它通过只向对等体发送聚合后的路由而不发送所有的具体路由的方法,减小路由表的规模。并且被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

BGP在IPv4网络中支持自动聚合和手动聚合两种方式,而IPv6网络中仅支持手动聚合方式:

为了避免路由聚合可能引起的路由环路,BGP设计了AS_Set属性。AS_Set属性是一种无序的AS_Path属性,标明聚合路由所经过的AS号。当聚合路由重新进入AS_Set属性中列出的任何一个AS时,BGP将会检测到自己的AS号在聚合路由的AS_Set属性中,于是会丢弃该聚合路由,从而避免了路由环路的形成。

MP-BGP:

传统的BGP-4只能管理IPv4单播路由信息,对于使用其它网络层协议(如IPv6、组播等)的应用,在跨AS传播时就受到一定限制。BGP多协议扩展MP-BGP(MultiProtocol BGP)就是为了提供对多种网络层协议的支持,对BGP-4进行的扩展。目前的MP-BGP,使用扩展属性和地址族来实现对IPv6、组播和VPN相关内容的支持,BGP协议原有的报文机制和路由机制并没有改变。

MP-BGP对IPv6单播网络的支持特性称为BGP4+,对IPv4组播网络的支持特性称为MBGP(Multicast BGP)。MP-BGP为IPv6单播网络和IPv4组播网络建立独立的拓扑结构,并将路由信息储存在独立的路由表中,保持单播IPv4网络、单播IPv6网络和组播网络之间路由信息相互隔离,也就实现了用单独的路由策略维护各自网络的路由。

扩展属性

BGP使用的报文中,与IPv4相关的三处信息都由Update报文携带,这三处信息分别是:NLRI字段、Next_Hop属性、Aggregator属性。

为实现对多种网络层协议的支持,BGP需要将网络层协议的信息反映到NLRI及Next_Hop。因此MP-BGP引入了两个新的可选非过渡路径属性:

MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。

MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。

地址族

MP-BGP采用地址族(Address Family)来区分不同的网络层协议,目前支持的地址族视图包括:

BGP缺省配置:

介绍BGP的缺省配置,实际应用的配置可以基于缺省配置进行修改。

BGP的缺省配置如表1所示。

表1 BGP缺省配置
|参数 |缺省值|
|BGP |未使能|
|Keepalive消息发送间隔| 60秒|
|对等体邻接关系保持时间| 180秒|

上一篇下一篇

猜你喜欢

热点阅读