抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

BGP基本概念

BGP全称是Border Gateway Protocol, 对应中文是边界网关协议,是互联网上一个核心的去中心化自治路由协议。

先看看几个相关的概念:

  • AS(Autonomous system):自治系统,指在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体,它们对互联网执行共同的路由策略。也就是说,对于互联网来说,一个AS是一个独立的整体网络。而BGP实现的网络自治也是指各个AS自治。每个AS有自己唯一的编号。
  • IGP(Interior Gateway Protocol):内部网关协议,在一个AS内部所使用的一种路由协议。一个AS内部也可以有多个路由器管理多个网络。各个路由器之间需要路由信息以知道子网络的可达信息。IGP就是用来管理这些路由。代表的实现有RIP和OSPF。
  • EGP(Exterior Gateway Protocol):外部网关协议,在多个AS之间使用的一种路由协议,现在已经淘汰,被BGP取而代之。

由于BGP就是为了替换EGP而创建,它的地位与EGP相似。但是BGP也可以应用在一个AS内部。

因此BGP又可以分为IBGP(Interior BGP :同一个AS之间的连接)和EBGP(Exterior BGP:不同AS之间的BGP连接):

  • EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。
  • IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。

为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器和BGP联盟。

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

  • Speaker:发送BGP报文的设备称为BGP发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其它BGP Speaker。
  • Peer:相互交换报文的Speaker之间互称对等体(Peer)。若干相关的对等体可以构成对等体组(Peer Group)。

BGP的路由器号(Router ID):

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

BGP作用优势

为方便管理规模不断扩大的网络,网络被分成了不同的自治系统。
1982年,外部网关协议EGP(Exterior Gateway Protocol)被用于实现在AS之间动态交换路由信息。
但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。

BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。

虽然BGP用于在AS之间传递路由信息,但并不是所有AS之间传递路由信息都需要运行BGP。比如在数据中心上行的连入Internet的出口上,为了避免Internet海量路由对数据中心内部网络的影响,设备采用静态路由代替BGP与外部网络通信。

BGP的优点:

BGP从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性。

  • BGP采用认证和GTSM的方式,保证了网络的安全性。
  • BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由。
  • BGP提供了路由聚合和路由衰减功能由于防止路由震荡,有效提高了网络的稳定性。
  • BGP使用TCP作为其传输层协议(目的端口号179),并支持与BGP与BFD联动、BGP Tracking和BGP GR和NSR,提高了网络的可靠性。
  • 在邻居数目多、路由量大且大部分邻居具有相同出口的策略的场景下,BGP使用按组打包技术极大的提高了BGP打包发包性能。

BGP工作原理

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

BGP的报文

BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:

  • Open报文:用于建立BGP对等体连接。
  • Update报文:用于在对等体之间交换路由信息。
  • Notification报文:用于中断BGP连接。
  • Keepalive报文:用于保持BGP连接。
  • Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。

BGP状态机

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

bgp-state

  1. Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
  2. 在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
    • 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
    • 如果TCP连接失败,那么BGP转至Active状态。
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
  3. 在Active状态下,BGP总是在试图建立TCP连接。
    • 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
    • 如果TCP连接失败,那么BGP停留在Active状态。
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
  4. 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
    • 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。
    • 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
  5. 在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
  6. 在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状态。

路由反射器

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

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

  • 路由反射器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连接数量。
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之间的路由环路。

如上图,路由反射器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。

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

同级路由反射器:

如上图,一个骨干网被分成多个集群。各集群的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号等信息的操作。

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

路由反射器和联盟的比较:

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

BGP对等体之间的交互原则

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

  • 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。
  • 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。
  • 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。
  • 路由更新时,BGP设备只发送更新的BGP路由。
  • 所有对等体发送的路由,BGP设备都会接收。

BGP路由优选规则

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

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

  • 公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
  • 公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
  • 可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。
  • 可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。

BGP常见属性类型

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

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路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。

Originator_ID属性和Cluster_List属性:
Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题。

BGP选择路由的策略

  1. 丢弃下一跳不可达的路由
  2. 优选Preference_Value值最高的路由(私有属性,仅本地有效)———P
  3. 优选本地优先级(Local_Preference)最高的路由——————–L
  4. 优选手动聚合->自动聚合->network->import->从对等体学到的———-L
  5. 优选AS_Path短的路由——————————————–A
  6. 起源类型IGP->EGP->Incomplete———————————–O
  7. 对于来自同一AS的路由,优选MED值小的——————————M
  8. 优选从EBGP学来的路由(EBGP>IBGP)——————————-E
  9. 优选AS内部下一跳的IGP的Metric最小的路由————————–N
  10. 优选Cluster_List最短的路由(有RR的环境)
  11. 优选OrGinator_ID最小的路由(有RR的环境)
  12. 优选Router_ID最小的路由器发布的路由(同时是IBGP或EBGP邻居)
  13. 优选具有较小IP地址的邻居学来的路由(同时是IBGP或EBGP)

BGP负载分担

作用:多条BGP等价路由形成负载分担,实现负载均衡。

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

通过口诀漂亮老男人(P L LAO MEN)来快速记忆

PPreference_Value(越大约优,仅限路由器本地)
LLocal_Preference,本地优先级 (越大越优,同一AS内的路由器)
L手动聚合->自动聚合->network->import,为本地始发
AAS_Path(短的优先)
OOrigin,起源 i(network)>e(EBGP)>?(import-route)
MMED(值越小越优,本AS内或上游AS内所有路由器,EBGP邻居上设置)
EEBGP优于IBGP(前面都一样,比不出最优路径时)
NNext-Hop,下一跳(BGP选择IGP下一跳cost值最小的)

BGP ADD-PATH

产生原因
在路由反射器场景中,如果反射器的路由表中存在多条到达同一目的地址的相同前缀的路由,根据BGP发布路由的策略,反射器只将最优路由发布给客户机。这可能造成数据传输过程中,到达同一目的地址的链路只有一条,当链路故障时路由收敛需要较长时间,无法满足数据传输高可靠性的需要。

为了解决上述问题,可以在路由反射器上部署BGP ADD-PATH特性,部署该特性后路由器可同时发布多条(两条或两条以上)相同前缀的路由给邻居,形成到达同一目的地址的多条链路,多条链路之间可以形成负载分担或路由备份,从而保证了数据传输的可靠性。

ADD-PATH路由:由于部署了BGP ADD-PATH特性,BGP优选出的路由。

如下图所示,RR为路由反射器,DeviceA、DeviceB、DeviceC为RR的客户机。DeviceB、DeviceC从其EBGP对等体DeviceD学到一条相同前缀的路由1.1.1.1/32。
DeviceB和DeviceC分别把路由1.1.1.1/32传递到RR上,这两条路由的目的地址相同但下一跳属性不同,RR会根据BGP选路规则优选出一条路由(如DeviceB传来的路由)发布给DeviceA。这时DeviceA到达目的地址1.1.1.1/32只有一条链路。

通过在RR上部署BGP ADD-PATH特性,可以控制RR优选并发布给DeviceA的相同前缀的路由的条数(如配置允许RR向DeviceA发布两条相同前缀的路由)。配置BGP ADD-PATH前后路由传递与链路故障时的收敛情况如表9-6所示。

部署BGP ADD-PATH特性前后路由传递与链路故障时的收敛情况:

场景 路由传递情况 链路故障时路由收敛情况
部署BGP ADD-PATH特性前 RR发布一条路由给DeviceA,该路由的目的地址为1.1.1.1/32,下一跳地址为9.1.1.1/24 只有一条链路,链路故障时路由需要进行重新收敛
部署BGP ADD-PATH特性后 RR发布两条路由给DeviceA,这两条路由的目的地址均为1.1.1.1/32,下一跳地址分别为9.1.1.1/24和9.1.2.1/24。 两条链路形成路由备份时:链路故障时流量可以快速切换到备用链路;两条链路形成负载分担时:一条链路故障时流量全部转移到另一条链路。

适用场景
BGP ADD-PATH特性主要应用在存在路由反射器,需要向客户机发送多条相同前缀的路由来保证数据传输可靠性的场景。

BGP ADD-PATH特性应用在调优场景应用可以向控制器发多条路由。

使用价值
部署BGP ADD-PATH特性有助于提高网络可靠性。

参考资料

[1] BGP基础知识

评论