5

BGP 路由协议

 3 years ago
source link: https://blog.51cto.com/lxlaizz/5089879
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

BGP概念

AS指的是在同一个组织管理下,使用统一选路策略的设备集合。

使用BGP传递路由

在AS之间专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:

BGP基于TCP ,只要能够建立TCP连接即可建立BGP。

只传递路由信息,不会暴露AS内的拓扑信息。

触发式更新,而不是进行周期性更新。

BGP的特点:

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

BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。

BGP能够承载大批量的路由信息,能够支撑大规模网络。

BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。

BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。

BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性

BGP 路由协议_路由黑洞

BGP 路由协议_选路规则_02


BGP对等体关系

BGP 路由协议_路由黑洞_03

BGP对等体关系建立

BGP 路由协议_路由黑洞_04

BGP 路由协议_选路规则_05


TCP连接源地址

BGP 路由协议_选路规则_06


BGP报文类型

BGP 路由协议_路由黑洞_07

BGP 路由协议_路由黑洞_08

BGP报文格式 - 报文头格式

BGP 路由协议_路由黑洞_09

BGP 路由协议_路由黑洞_10

BGP 路由协议_选路规则_11

BGP报文格式 – Open

BGP 路由协议_BGP_12

能力参数的协商:1.多协议扩展能力:IPV4,unicast。

                           2.路由刷新能力:手动刷新

​                       3.是否支持4字节AS号能力​

BGP 路由协议_路由黑洞_13

BGP 路由协议_路由黑洞_14

BGP报文格式 – Update

BGP 路由协议_BGP_15

BGP 路由协议_路由黑洞_16

BGP 路由协议_选路规则_17

BGP 路由协议_选路规则_18

BGP 路由协议_路由黑洞_19

BGP报文格式 – Notification

BGP 路由协议_选路规则_20

BGP 路由协议_BGP_21

BGP报文格式 – Keepalive

keepalive 报文60秒一次

BGP 路由协议_路由黑洞_22

BGP 路由协议_路由黑洞_23

BGP报文格式 - Route-refresh

BGP 路由协议_选路规则_24


BGP状态机

BGP 路由协议_选路规则_25

BGP 路由协议_BGP_26

1)ldle状态

ldle(空闲)状态,​BGP拒绝任何进入的连接请求,IdIe状态是BGP的初始状态。在ldle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件(如运行BGP协议)后,BGP才开始尝试和其他BGP对等体进行TCP连接,并转至Connect状态。任何状态中收到NOtification报文或TCP重连通知等Error事件后,BGP都对转至ldle状态。

BGP 路由协议_路由黑洞_27

BGP 路由协议_选路规则_28

2)Connect状态

Connect(连接)状态下,​BGP等待TCP连接的建立完成后再决定后续操作。在Connect状态下,BGP启动连接重传定时器(通常计时器为30s),等待TCP完成连接。如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent(开放)状态;如果TCP连接失败,那么BGP转至Active(活跃)状态;如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其他BGP对等体进行TCP连接,停留在Connect状态。

BGP 路由协议_BGP_29

BGP 路由协议_选路规则_30

3)Active状态

Active(活跃)状态下,BGP​将尝试进行TCP连接的建立,是BGP的中间状态。在Active状态下,BGP总是在试图建立TCP连接,如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态;如果TCP连接失败,那么BGP停留在Active状态;如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。

BGP 路由协议_选路规则_31

BGP 路由协议_路由黑洞_32

4)OpenSent状态

在OpenSent(开放集)状态下,​BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、Holdtime等进行检查。如果收到的Open报正确,那么BGP发送KeepAlive报文,并转至OpenConfirm(打开确认)状态;如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至IdIe状态。

BGP 路由协议_BGP_33

5)OpenConfirm状态

​OpenConfirm(打开确认)状态下,BGP等待KeepAlive或Notification报文。如果收到KeepAlive报文,则转至Established(确认)状态;如果收到Notification报文,则转至ldle状态。

6)Established状态

在Established(确认)状态下,​BGP可以在对等体之间交换Update、KeepAlive、Route-refresh报文和Notification报文。如果收到正确的Update或KeepAlive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接;如果收到错误的Update或KeepAlive报文,那么BGP发送Notification报文通知对端,并转至ldle状态

​在BGP对等体建立的过程中,通常可见的三种状态是ldle、Active、Established。BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方通过Update报文交换路由信息

BGP 路由协议_路由黑洞_34


BGP路由的生成

不同于IGP路由协议,BGP​自身并不会发现并计算产生路由​,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。BGP注入路由的方式有两种:Network   import-route

BGP路由表

BGP 路由协议_选路规则_35


BGP传递路由规则:

​BGP在给邻居传递路由时的下一跳是路由​出接口=​​​更新源​。​

​在EBGP间传递时会修改下一跳为自己的更新源。​

​​EBGP传给IBGP邻居路由,然后IBGP路由器在IBGP间传递时​不会修改​下一跳为自己的更新源(解决方法是将下一跳更改为本地接口peer1.1.1.1 next-hop-local)​​

BGP路由通告原则(传递路由)

​1.只有​明确通告​的网络才会发送给邻居;通告的网络必须能够精确地在路由表中找到;多条路径时,只选择最优的给自己使用;只 把自己使用的最优路由通告给邻居;​

​2.从EBGP学习到的最优的路由会通告给所有BGP邻居;*强调内容*

​3.从IBGP邻居学习到路由默认不会通告给IBGP邻居(BGP水平分割原则);

​4.从IBGP学习的路由同步检测IGP是否存在此路由,然后在决定是否传给EBGP邻居​

​5.同步功能关闭,从IBGP学习的路由只有下一跳可达并最优,传递给EBGP邻居。​

BGP 路由协议_选路规则_36


BGP路由黑洞:

IBGP单播建立邻居,可以跨路由建立邻居,被跨的路由无法获取BGP路由,导致数据报文无法通过路由转发。​

它会默默的将数据包丢弃,使所有数据包有去无回。我们知道传统的IP路由查找,它是逐跳查找的,通俗一点就是当数据包到达路由设备的时候,每一台设备都要查找路由表,并且在路由设备有路由的前提下才能转发报文。对BGP来说由于存在iBGP水平分割规则,只把路由传递一跳,这是一种防环机制,所以在BGP的设计上有些设备就不会运行BGP。BGP是一种TCP的连接或者说是一种host-to-host的连接(可以跨越设备进行连接),所以路由传递是没有问题的,但是数据包的路由却是有问题的。通常我们可以看到的现像是iBGP邻居关系可以正常建立,也就是说控制平面看起来是正常的,但是数据平面确不可达

解决路由黑洞方法:

1.将BGP路由引入IGP协议,

让没有BGP路由的路由器学习到目标网络。

BGP路由引入防环:在做路由引入时从IBGP学习到的路由不会引入到IGP协议.

BGP 路由协议_BGP_37

IGP(ospf)引入bgp路由后,由于优先级的原因,会使用IGP路由进行转发

BGP 路由协议_选路规则_38BGP 路由协议_路由黑洞_39

2.IBGP邻居全互联。

​路由黑洞的原因,为了保证所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联。然而实现IBGP全互联存在诸多短板:路由器需维护大量的TCP及BGP连接,尤其在路由器数量较多时;AS内BGP网络的可扩展性较差。​

为此可以采用路由反射器技术。​

2.1 简化IBGP全互连:反射器和联盟

BGP 路由协议_选路规则_40BGP 路由协议_BGP_41BGP 路由协议_选路规则_42BGP 路由协议_选路规则_43BGP 路由协议_选路规则_44BGP 路由协议_选路规则_45BGP 路由协议_BGP_46BGP 路由协议_选路规则_47BGP 路由协议_路由黑洞_48BGP 路由协议_路由黑洞_49

​3.MPLS 多协议标签交换

BGP 路由协议_选路规则_50BGP 路由协议_路由黑洞_51BGP 路由协议_BGP_52BGP 路由协议_路由黑洞_53

​MPLS LDP ​

​  运行LDP动态协议,在全局和接口开启MPLS和MPLS LDP​


BGP的基本配置

BGP 路由协议_选路规则_54BGP 路由协议_路由黑洞_55BGP 路由协议_路由黑洞_56BGP 路由协议_选路规则_57

Display bgp peer verbose 查看邻居信息

Display bgp routing-table 查看bgp路由表


BGP路由属性(Path Attribute)

BGP 路由协议_BGP_58

​​1.next-hop​​

BGP 路由协议_选路规则_59

2.MED (相当于IGP协议COST)

BGP 路由协议_BGP_60

3.Community 团体属性

BGP 路由协议_BGP_61

BGP 路由协议_BGP_62BGP 路由协议_BGP_63


BGP的选路原则如下:

BGP 路由协议_BGP_64BGP 路由协议_BGP_65

(0)若去往目的网络的路由下一跳不可达,则可以忽略此路由;

(1)Preferred-Value优先级以数值高的路由优先;

BGP 路由协议_路由黑洞_66BGP 路由协议_BGP_67

BGP 路由协议_选路规则_68

BGP 路由协议_选路规则_69

(2)Local-Preference优先级以数值高的路由优先;

BGP 路由协议_BGP_70BGP 路由协议_选路规则_71

BGP 路由协议_BGP_72

BGP 路由协议_选路规则_73

BGP 路由协议_选路规则_74

(3)聚合路由优先级高于非聚合路由;

本地始发手动聚合路由的优先级高于本地自动聚合的路由;

本地始发通过Network命令引入的路由的优先级高于本地通过Import-route命令引入的路由;

BGP 路由协议_路由黑洞_75

BGP 路由协议_BGP_76

(4)AS路径长度最短(最少个数)的路径优先级高;

(5) 比较Origin属性,IGP优先级高于EGP,EGP优先级高于Incomplete;

(6)选择MED优先级较小的路由;

          MED规则:始发可以发给EBGP对等体,然后在发给IBGP对等体。

           收到MED值不能发给EBGP对等体,只能传给IBGP邻居

(7)EBGP路由优先级高于IBGP路由;

(8)BGP优先选择到BGP下一跳的IGP度量低的路径;

(9)负载均衡

当以上全部相同,则为等价路由,可以负载分担(注:AS-PATH必须一致),当负载分担时,以下3条原则无效

(10)比较Cluster-List长度,短者优先;

(11)比较Originator_ID(如果没有Originator_ID,则用Router ID比较),选择数值较小的路径;

(12)比较对等体的IP地址,选择IP地址数值最小的路径;


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK