BGP

BGP概述

定义:BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议

   

BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:

  • BGP基于TCP,只要能够建立TCP连接即可建立BGP
  • 只传递路由信息,不会暴露AS内的拓扑信息
  • 触发式更新,而不是进行周期性更新

   

BGP的特点:

  • BGP使用TCP作为其传输层协议(端口号:179),使用触发式更新,而不是周期性更新
  • BGP能承载大批量的路由信息,能够支撑大规模的网络
  • BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由
  • BGP能够支撑MPLS/VPN的应用,传递客户VPN路由
  • BGP提供了路由聚合和路由衰减功能用于防止路由的震荡,通过这两项功能有效地提高了网络稳定性

   

BGP术语

BGP Speaker:运行BGP的路由器称为BGP发言者,或BGP路由器

BGP Peer:两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表

BGP存在两种对等体关系类型

EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系

两台路由器建立EBGP对等体关系的必要条件:

  1. 两个路由器所属AS不同(即AS编号不同)
  2. 在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能正确建立

IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系

   

BGP对等体关系建立

   

BGP建立对等体的对等体都会发起TCP三次握手,所以会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取了对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互(保留Router ID大的发起的TCP连接)

   

BGP报文类型

报文名称

作用

发送时刻

Open

协商BGP对等体参数,建立对等体关系

BGP TCP连接建立成功之后

Update

发送BGP路由更新

BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文

Notification

报告错误信息,中止对等体关系

当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体

Keepalive

标志对等体建立,维持BGP对等体关系

BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定时发送Keepalive报文用于保持连接

Route-refresh

用于在改变路由策略后请求对等体重新发送路由信息,只有支持路由刷新能力的BGP设备会发送和响应此报文

当路由策略发生变化时,触发请求对等体更新通告路由

   

BGP状态机

Peer状态名称

用途

Idle

开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源

Connect

正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则会进入Active状态,反复尝试

Active

TCP连接没有建立成功,反复尝试TCP连接

OpenSent

TCP连接已经建立成功,开始发送Open报文,Open报文携带参数协商对等体的建立

OpenConfirm

参数、能力特性协商成功,自己发送Keepalive报文,等待对方的Keepalive报文

Established

已经收到对方的Keepalive报文,双方能力特性经协商发现一致,开始使用Update报文通告路由信息

BGP路由器工作原理:

1、配置完BGP对等体之后,设备会尝试建立TCP连接,此时如果无法发起TCP连接,设备将会一直处于Idle状态(缺乏去往BGP对等体的路由是导致路由器状态机一直处于Idle状态的常见原因)

2、配置完BGP对等体并成功查找到去往对等体地址路由之后,会发起TCP三次握手,TCP三次握手建立过程中处于Connect状态,如果TCP连接长期无法建立则进入Active状态

3、TCP三次握手建立完成之后,发送Open报文建立对等体关系,此时进入OpenSent状态,当收到对端回应的Open报文后,并且参数检查无误,在发送Keepalive报文之后进入OpenConfirm状态

4、进入OpenConfirm状态之后,BGP路由器如果收到了对端的Keepalive报文,则进入Established状态,对等体关系建立过程就此完成

   

BGP路由的生成

  • Network:Network方式注入的路由必须是已经存在于IP路由表中的路由条目,否则不会成功注入到BGP路由表中
  • import-route:可以将直连路由、静态路由、OSPF路由、IS-IS路由等协议的路由注入到BGP路由表中
  • BGP聚合路由:执行聚合之后,在本地的BGP路由表中除了原本的明细路由条目之外,还会多出一条聚合的路由条目。如果在执行聚合时制定了detail-suppressed,则BGP只会向对等体通告聚合后的路由,而不通告聚合前的明细路由

   

BGP路由通告原则:

  • 只发布最优路由

  • 从EBGP对等体获取的路由,会发布给所有对等体

  • IBGP水平分割:从IBGP对等体获取的BGP路由,不会发送给IBGP对等体

  • BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习来的一条IBGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步同步规则主要用于规避BGP路由黑洞问题

   

BGP路径属性

BGP路径属性分类:

  • 公认必遵:所有BGP路由器都能够识别的属性,必须包括在每个Update消息里
  • 公认任意:所有BGP路由器都能够识别的属性,可能包括在某些Update消息里
  • 可选过渡:BGP设备不识别此类属性依然会接受该类属性并通告给其他对等体
  • 可选非过度:BGP设备不识别此类属性会忽略该属性,并不会通告给其他对等体

   

AS_Path

该属性是公认必遵属性,是前往目标网络的路由经过的AS号列表

AS_Path的作用:

  • 确保路由在EBGP对等体之间传递不产生环路

  • 作为路由优选的衡量标准之一

路由在被通告给EBGP对等体时,路由器会在该路由的AS_Path列表中追加本地AS号;路由在被通告给IBGP对等体时,AS_Path不会改变

在发生路由聚合后,如果需要聚合路由携带所有明细路由中AS_Path属性携带AS号防止环路,则在配置聚合的命令中增加as-set参数

使用Rote-Policy修改BGP路由的AS _Path属性时,可以使用以下三种方式

   

Origin

Origin属性为公认必遵属性,它标识了BGP路由的起源

当去往同一个目的地存在不同Origin属性的路由时,在其他条件都相同的情况下,BGP将按Origin如下顺序优选路由:IGP > EGP > Incomplete

起源名称

标记

描述

IGP

I

使用network命令注入到BGP的,那么该BGP路由的Origin属性为IGP

EGP

E

如果路由是通过EGP学习到的,那么该BGP路由的Origin属性为EGP

Incomplete

通告import-route命令引入的BGP路由,那么该BGP路由的Origin属性为incomplete

   

Next_Hop

Next_Hop属性是一个公认必遵属性,用于指定到达目的网络的下一跳地址

  1. 路由器将BGP路由通告给EBGP对等体时,将该路由的Next_Hop设置为自己的TCP连接源地址

  1. BGP路由器将本地始发的路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
  2. 路由器在收到EBGP对等体所通告的BGP路由后,再将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变

  1. 如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体同属一个网段,那么该条路由的Next_Hop地址保持不变并传递给它的BGP对等体

  1. 使用peer next-hop-local命令可以在设置向IBGP对等体通告路由时,下一跳属性设为自身的TCP连接地址

   

Local_Preference

Local_Preference即本地优先级属性,是公认任意属性,可以用于告诉AS中的路由器,哪条路径是离开本AS的首选路径

Local_Preference属性值越大则BGP路由越优先,缺省的Local_Preference值为100

该属性只能被传递给IBGP对等体,而不能传递给EBGP对等体

Local_Preference注意事项:

  • Local_Preference属性只能在IBGP对等体之间传递(除非做了策略否则Local_Preference值在IBGP对等体间传递过程中不会丢失),而不能在EBGP对等体间传递
  • 可以在AS边界路由器上使用import方向的策略来修改Local_Preference属性值。也就是在收到路由之后,在本地为路由器赋予Local_Preference
  • 使用bgp default local_preference命令修改缺省Local_Preference值,该值缺省为100
  • 路由器在向其EBGP对等体发送路由更新时,不能携带Local_Preference属性,但是对方接受路由之后,会在本地为这条路由赋一个缺省的Local_Preference值(100),然后再将路由传递给自己的BGP对等体
  • 本地使用network命令和import-route命令引入的路由,Local_Preference为缺省值100,并能在AS内向其他IBGP对等体传递。传递过程中除非受到路由策略影响,否则Local_Preference不变

   

Community

Community(团体)属性为可选过渡属性,是一种路由标记,用于简化路由策略的执行

可以将某些路由分配一个特定的Community属性值,之后就可以基于Community值而不是网络前缀/掩码信息来匹配路由并执行相应的策略了

Community属性值长度为32位,也就是4字节。

呈现形式:

  • 十进制整数格式
  • AA:NN格式,其中AA表示AS号,NN表示自定义编号

Community属性分类:

  • 自定义团体属性
  • 公认团体属性

公认Community属性

团体属性名称

团体属性号

说明

Internet

0(0x00000000)

设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。缺省情况下,所有的路由都属于Internet罐体

No_Advertise

4294967042(0xFFFFFF02)

设备收到具有此属性的路由后,就不向任何BGP对等体发送该路由

No_Export

4294967041(0xFFFFFF01)

设备收到具有此属性的路由后,将不会向AS外发送该路由

No_Export_Subconfed

4294967043(0xFFFFFF03)

设备收到具有此属性的路由后,将不会向AS外发送该路由,也不向AS内其他子AS发布此路由

   

MED

MED(Multi-Exit Discriminator,多出口鉴别器),是可选非过渡属性,是一种度量值,用于向外部对等体指出进入本AS的首选路径,即当进入本AS的入口有多个时,AS可以使用MED动态地影响其他AS选项进入的路径

MED属性值越小则BGP路由越优

MED主要用于在AS之间影响BGP的选路,MED被传递给EBGP对等体后,对等体在其AS内传递路由时,携带该MED值,但将路由再次传递给其他EBGP对等体时,缺省不会携带MED属性

关于MED的一些注意事项:

  • 缺省情况下,路由器只比较来自同一个相邻AS的BGP路由的MED值,也就是说如果去往同一个目的地的两条路由来自不同的相邻AS,则不进行MED值的比较
  • 一台BGP路由器将路由通告给EBGP对等体时,是否携带MED属性,需要根据以下条件进行判断
    • 如果该BGP路由是本地始发(本地通过Network或import-route命令引入),则缺省携带MED属性发送给EBGP对等体
    • 如果该BGP路由为从BGP对等体学习到,那么该路由传递给EBGP对等体时缺省不携带MED属性
    • 在IBGP对等体之间传递路由时,MED值会被保留并传递,除非部署了策略,否则MED值在传递过程中不发生改变也不会丢失

MED的默认操作:

  • 如果路由器通过IGP学习到一条路由,并通过network或import-route的方式将路由引入BGP,产生的BGP路由的MED值继承路由在IGP中的metric
  • 如果路由器将本地直连,静态路由通过network或import-route的方式引入BGP,那么这条BGP路由的MED值为0,因为直连、静态路由cost=0

  • 如果路由器通过BGP学习到其他对等体传递过来的路由,那么将路由更新给自己的EBGP对等体时,默认是不携带MED的(MED不会跨AS传递)
  • 可以使用default med命令修改缺省的MED值,default med命令只对本设备上用import-route命令引入的路由和BGP的聚合路由生效

   

Atomic_Aggregate

Atomic_Aggregate是一个公认任意属性,它只相当于一种预警标记,而并不承载任何信息。当路由器收到一条BGP路由更新且发现该条路由携带Atomic_Aggregate属性时,它便知道该条路由可能出现了路径属性的丢失,此时该路由器把这条路由在通告给其他对等体时,需保留路由的Atomic_Aggregate属性。另外,收到该路由更新的路由器不能再将这条路由再度明细化

   

Aggregator

Aggregator是一个可选过渡属性,当路由聚合被执行时,执行路由聚合操作的路由器可以为该聚合路由添加Aggregator属性,并在该属性中记录本地AS号及自己的Router ID。因此,Aggregator属性用于标记路由器聚合行为发生在哪个AS及哪个BGP路由器上

   

Preferred-Value

Preferred-Value(协议首选值)华为设备的特有属性,该属性仅在本地有效。当BGP路由表中存在到相同目的地的路由时,将优先选择Preferred-Value值高的路由

取值范围0-65535,该值越大,则路由越优先

注意:Preferred-Value只能在路由器本地配置,而且只影响本设备的路由优选,该属性不会传递给任何BGP对等体。

   

   

BGP路由反射器

技术背景

由于水平分割的原因,为了保证中转AS200所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联

IBGP全互联存在的短板:

  • 路由器需要维护大量的TCP及BGP连接,尤其在路由器数量较多时
  • AS内BGP网络的可扩展性较差

路由反射器角色

  • RR(Router Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备
  • Client:与RR形成反射邻居关系的IBGP设备
  • Non-Client:既不是RR也不是客户机的IBGP设备
  • Originator:始发者,在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路
  • Cluster:集群,路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生的路由环路

路由反射规则:

  • 从非客户机IBGP对等体学到的路由,发布给此RR的所有客户机

  • 从客户机学到的路由,发布给此RR的所有非客户机和除了该客户机之外的其他所有客户机

  • 从EBGP对等体学到的路由,发布给所有的非客户机和客户机

RR将路由反射时不会修改以下的BGP路径属性:Next_Hop、AS_Path、Local_Preference、MED

RR场景下的路由防环

RR的设定是的IBGP水平分割原则被打破,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路

Originator_ID

  • RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID,其值为本地AS中通告该路由的BGP路由器Router ID
  • 若AS内存在多个RR,则Originator_ID属性由第一个RR创建,并且不被后续的RR所更改
  • 当BGP路由器收到一条携带Originator_ID属性的IBGP路由,并且Originator_ID属性值与自身的Router ID相同,则它会忽略关于该条路由的更新

路由反射簇(Cluster)

  • 路由反射簇包括反射器RR及其Client。一个AS内允许存在多个反射簇

  • 每一个簇都有唯一的簇ID(Cluster_ID,缺省时为RR的BGP Router ID)
  • 当一条路由被反射器反射后,该RR(该簇)的Cluster_ID就会被添加至路由的Cluster_List属性中
  • 当RR收到一条携带Cluster_List属性的BGP路由,且该属性值中包含该簇的Cluster_ID 时,RR认为该条路由存在环路,因此将忽略关于该条路由的更新

   

RR的常见组网方式:

  • 备份RR组网:为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR

   

  • 多集群RR组网:一个AS中可以存在多个集群,各个集群的RR之间建立IBGP对等体

当RR所处的网络层相同时,可以将不同集群的RR全互联,形成同级RR

当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR

  • 单集群RR组网

   

BGP路由优选规则

丢弃下一跳不可达的路由

1、优选Preferred_Value属性值最大的路由

2、优选Local_Preference属性值最大的路由

3、本地始发的BGP路由优于从其他对等体学习来的路由,本地始发路由的优先级:手工汇总 > 自动汇总 > network > import-route

4、优选AS_Path属性值最短的路由

5、优选Origin属性最优的路由,Origin属性的按优先级从高到低依次是:IGP > EGP > Incomplete

6、优选MED属性值最小的路由

7、优选从EBGP对等体学习来的路由(即:EBGP > IBGP)

8、优选到Next-Hop的IGP度量值最小的路由

9、优选Cluster_ID最短的路由

10、优选Router-ID(Originator-ID)最小的设备通告的路由

11、优选具有最小IP地址的对等体通过的路由

   

BGP路由等价负载分担

通过配置BGP负载分担,可以使得设备同时将多条等代价的BGP路由加载到路由表,实现流量负载均衡,减少网络拥塞

尽管配置了BGP负载分担,设备依然只会在多条到达同一目的地的BGP路由中优选一条路由,并只将这条路由通告给其他对等体

在设备上使能BGP负载分担功能后,只有满足条件的多条BGP路由才会成为等价路由,进行负载分担

形成BGP路由等价负载分担的条件

  • Preferred-Value属性值相同
  • Local-Preference属性值相同
  • 都是聚合路由或者非聚合路由
  • AS_Path属性长度相同
  • Origin类型相同
  • MED属性值相同
  • 都是EBGP路由或都是IBGP路由
  • AS内部IGP的Metric值相同
  • AS_Path属性完全相同

   

posted @ 2022-06-22 13:16  hongliang888  阅读(672)  评论(0编辑  收藏  举报