BGP路由协议
路由协议被分为EGP和IGP两个层次,没有EGP就不可能有世界上各个不同组织机构之间的通信,没有IGP机构内部也就不可能进行通信。下面我们就来看看EGP协议中的BGP协议是做什么的。
image.pngBGP表示边界网关协议,如同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从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性:
- BGP采用认证和GTSM的方式,保证了网络的安全性。
- BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由。
- 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
- EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。
- IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器和BGP联盟。
BGP报文交互中的角色:
BGP报文交互中分为Speaker和Peer两种角色。
- Speaker:发送BGP报文的设备称为BGP发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其它BGP Speaker。
- Peer:相互交换报文的Speaker之间互称对等体(Peer)。若干相关的对等体可以构成对等体组(Peer Group)。
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的报文:
BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送: - Open报文:用于建立BGP对等体连接。
- Update报文:用于在对等体之间交换路由信息。
- Notification报文:用于中断BGP连接。
- Keepalive报文:用于保持BGP连接。
- Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
BGP状态机:
如图1所示,BGP对等体的交互过程中存在6种状态机:空闲(Idle)、连接(Connect)、活跃(Active)、Open报文已发送(OpenSent)、Open报文已确认(OpenConfirm)和连接已建立(Established)。在BGP对等体建立的过程中,通常可见的3个状态是:Idle、Active和Established。
图1 BGP对等体交互过程:
image.png
- Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
- Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
- 任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
- 在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
- 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
- 如果TCP连接失败,那么BGP转至Active状态。
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
- 在Active状态下,BGP总是在试图建立TCP连接。
- 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
- 如果TCP连接失败,那么BGP停留在Active状态。
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
- 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
- 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。
- 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
- 在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
- 如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
- 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
Route-refresh报文不会改变BGP状态。 - 如果收到Notification报文,那么BGP转至Idle状态。
- 如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态。
BGP对等体之间的交互原则:
BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:
- 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。
- 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。
- 当存在多条到达同一目的地址的有效路由时,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两种方式:
- Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
- Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。
IGP引入BGP路由:
当一个AS需要引入其他AS的路由时,AS边缘路由器会在IGP路由表中引入BGP的路由。为了避免大量BGP路由对AS内设备造成影响,当IGP引入BGP路由时,可以使用路由策略,进行路由过滤和路由属性设置。
BGP的路由优选规则和负载分担:
在BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。
BGP属性
路由属性是对路由的特定描述,所有的BGP路由属性都可以分为以下4类,常见BGP属性类型如表1所示:
- 公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
- 公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
- 可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。
- 可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。
表1 BGP常见属性类型
属性名 | 类型 |
---|---|
Origin属性 | 公认必须遵循 |
AS_Path属性 | 公认必须遵循 |
Next_Hop属性 | 公认必须遵循 |
Local_Pref属性 | 公认任意 |
MED属性 | 可选非过渡 |
团体属性 | 可选过渡 |
Originator_ID属性 | 可选非过渡 |
Cluster_List属性 | 可选非过渡 |
下面介绍几种常用的BGP路由属性:
Origin属性
- Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
- IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
- EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。
AS_Path属性
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
- 当BGP Speaker传播自身引入的路由时:
- 当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。
- 当BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。
- 当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:
当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属性遵循下面的规则:
- BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
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依次对比下列属性来选择路由:
- 优选协议首选值(PrefVal)最高的路由。
- 协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。
-优选本地优先级(Local_Pref)最高的路由。如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。 - 依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。
- 优选AS路径(AS_Path)最短的路由。
- 依次优选Origin类型为IGP、EGP、Incomplete的路由。
- 对于来自同一AS的路由,优选MED值最低的路由。
- 依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。PE上某个VPN实例的VPNv4路由的ERT匹配其他VPN实例的IRT后复制到该VPN实例,称为LocalCross;从远端PE学习到的VPNv4路由的ERT匹配某个VPN实例的IRT后复制到该VPN实例,称为RemoteCross。
- 优选到BGP下一跳IGP度量值(metric)最小的路由。在IGP中,对到达同一目的地址的不同路由,IGP根据本身的路由算法计算路由的度量值。
- 优选Cluster_List最短的路由。
- 优选Router ID最小的设备发布的路由。
- 如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由。
- 优选从具有最小IP Address的对等体学来的路由。
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。
- 客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
- 非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。
- 始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
- 集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。
路由反射器原理
同一集群内的客户机只需要与该集群的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邻居发布路由规则如下:
- 从非客户机学到的路由,发布给所有客户机。
- 从客户机学到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)。
- 从EBGP对等体学到的路由,发布给所有的非客户机和客户机。
Cluster_List属性:
路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。
- 当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。
- 当RR接收到一条更新路由时,RR会检查Cluster List。如果Cluster List中已经有本地Cluster ID,丢弃该路由;如果没有本地Cluster ID,将其加入Cluster List,然后反射该更新路由。
Originator_ID属性:
Originator ID由RR产生,使用的Router ID的值标识路由的始发者,用于防止集群内产生路由环路。
- 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。
- 当设备接收到这条路由的时候,将比较收到的Originator ID和本地的Router ID,如果两个ID相同,则不接收此路由。
备份路由反射器
为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。
图2 备份路由反射器
image.png如图2,路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster ID。
- 当客户机Client1从EBGP对等体接收到一条更新路由,它将通过IBGP向RR1和RR2通告这条路由。
- RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster List前面,然后向其他的客户机(Client2、Client3)反射,同时相互反射。
- RR1和RR2在接收到该反射路由后,检查Cluster List,发现自己的Cluster ID已经包含在Cluster List中。于是RR1和RR2丢弃该更新路由,从而避免了路由环路。
多集群路由反射器:
一个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引入的路由进行聚合。配置自动聚合后,BGP将按照自然网段聚合路由(例如非自然网段A类地址10.1.1.1/24和10.2.1.1/24将聚合为自然网段A类地址10.0.0.0/8),并且BGP向对等体只发送聚合后的路由。
- 手动聚合:对BGP本地路由表中存在的路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。
为了避免路由聚合可能引起的路由环路,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-IPv4单播地址族视图
- BGP-IPv4组播地址族视图
- BGP-VPN实例IPv4地址族视图
- BGP-VPNv4地址族视图
- BGP-IPv6单播地址族视图
- BGP-VPN实例IPv6地址族视图
BGP缺省配置:
介绍BGP的缺省配置,实际应用的配置可以基于缺省配置进行修改。
BGP的缺省配置如表1所示。
表1 BGP缺省配置
|参数 |缺省值|
|BGP |未使能|
|Keepalive消息发送间隔| 60秒|
|对等体邻接关系保持时间| 180秒|