BGP路由协议

一:BGP的概念

BGP全称:边界路由网关协议,属于EGP、距离矢量路由协议、无类
EGP:工作在AS与AS之间的路由协议,主要是用于传递与选择路由,无周期性更新,收敛较慢。

BGP协议的开发是为了解决多个AS之间的路由传递与选择的过程,并且保证BGP传递的路由信息可以聚合、过滤、防环等功能。

BGP的本质:不是用于实现路由的计算与发现,而是用于选择和传递路由,具体怎么访问,则根据IGP进行决定;

BGP特点如下:
1.底层基于TCP协议(目的端口号为179)进行承载,可靠性强,在建立邻居传递路由过程中基本无确认机制
2.可以实现跨设备建立邻居关系
3.BGP路由都需要网络管理员手工宣告或者引入
4.BGP路由无周期性更新,只存在触发式更新
5.BGP是一个无环的路由协议
6.BGP具有丰富的选路规则,可以选出最优的路径

AS概念:AS(Autonomous System,自治系统)
路由器只能添加进一个AS内部。

AS存在编号:0-64511:公有AS号 64512-65535:私有AS号
华为独有的AS号机制:4字节AS号为X:Y,路由器上创建时只能X.Y格式

二:BGP的邻居关系

IBGP:如果是AS号相同,在AS内部建立的BGP邻居关系
EBGP:AS号不同,在AS与AS之间建立的BGP邻居关系

EBGP邻居关系建立:手工指定的方式进行建立。规则如下:
(1)以直连接口建立(推荐):peer 对端IP as 对端的AS号

(2)以loopback接口建立:
1、peer 对端的loopback接口 AS 对端的AS号
2、需要指定更新源地址:peer 对端loopback接口 connect-interface LoopBack 0 指定为loopback0接口
3、需要修改EBGP的最大跳数:默认情况下,EBGP的报文的跳数为1。
peer 对端的IP ebgp-max-hop X(大于或者等于2)

IBGP邻居关系建立,规则如下:
(1)以直连接口建立:peer 对端接口IP地址
(2)以loopback接口建立(推荐):
1、peer 对端的loopback接口 AS 对端的AS号
2、需要指定更新源地址:peer 对端loopback接口 connect-interface LoopBack 0 指定为loopback0接口

扩展:IBGP中推荐使用loopback接口建立原因是1.稳定性强 2.有冗余性效果

三:BGP的邻居关系建立过程

  1. open报文
    初始报文,用于建立BGP邻居关系时协商参数

  2. keepalive报文
    保活报文,用于确认与维护会话的功能

默认情况下,周期性每60s发送keepalive报文,如果180s内未收到keepalive,则认为BGP的邻居关系会断开。

  1. update报文
    更新报文,用于携带BGP的路由信息和BGP的路由属性

  2. notification报文
    报错报文,用于在邻居关系建立过程中或者传递报文中如果出现错误,使用此报文携带错误信息;

  3. route-refresh报文:
    路由刷新报文,用于刷新路由器入接口的策略时发出,对方收到后发送update报文刷新策略,使其生效。

注意:1、holdtime不影响邻居关系的建立,进行协商以小为准。
2、route-refresh报文需要手工触发
在用户视图下:refresh bgp all import ,朝着邻居泛洪route-refresh报文,对方收到后,根据里面的地址簇信息泛洪update报文。
refresh bgp all export :直接朝着邻居泛洪本身的update报文。

四:关于BGP的router id

选举规则如下:
(1)优先选择loopback接口最大的IP地址
(2)选择物理接口IP地址最大

作用:(1)用于标记报文的通告者
(2)用于实现防环机制
能力属性:
BGP路由协议

1.可支持的地址簇
2.是否支持路由刷新能力
3.是否支持4字节AS号的能力

五:影响BGP邻居关系建立的因素

(1)version需要保持一致
(2)收到的报文中包含的MY AS号必须与本端指向的AS号保持一致
(3)BGP的router id需要保持不一致
(4)BGP的能力属性中的可支持地址簇和4字节AS号有关系

六:BGP的状态机

1、IDLE:初始化状态,会拒绝所有的TCP连接请求;当路由器收到start事件后发出TCP连接请求后,进入connect状态。

BGP邻居只需要建立一条TCP连接,默认情况下,谁先发出TCP连接请求,保留TCP连接。
如果两端同时开机建立TCP会话,则TCP请求发现IP地址大的为主,小的IP地址则进行拆链,保持一条TCP连接

注意:路由表上无对端的路由信息或者为默认路由,则会卡在IDLE状态。
如果主动端设备上只有默认路由,那么TCP连接会建立失败。如果主动端是明细路由,被动端无所谓,则TCP连接会建立成功。

2、Connect状态:连接建立状态,等待TCP连接建立成功的过程
(1)如果TCP三次握手建立成功,发送open报文之后进行opensent状态

(2)如果在32s内时间未收到任何的TCP响应报文,则会进行active状态,在active状态下32s内时间未收到任何的TCP响应报文,则会进行connect状态,每次跳转状态,都会发送TCP连接请求

(3)如果收到TCP的RST置位的报文,则认为TCP连接建立失败,则直接进入active状态,每过32s发送TCP连接请求,状态不跳转

3、active状态:激活状态,TCP连接建立失败的状态,如果TCP三次握手建立成功,则直接发送open报文后进入opensent状态。

停留在active状态原因:1.TCP建立失败 2.存在单通故障或者过滤路由
4、Opensent状态:协商与建立BGP邻居关系的状态
如果open报文协商成功,发送keepalive报文之后,进入OpenComfirm
如果open报文协商失败,触发not报文,直接进入idle状态

5、OpenComfirm状态:等待对方的keepalive报文进行确认的状态
如果在5s内收到keepalive报文,则进入est状态
如果在5s内没收到keepalive报文,则触发notification报文,则进入IDLE状态。
如果进入IDLE状态,则重新发送start事件(指的是peer 对方 ip +AS),重置配置或者重启设备或者链路。

七:生成BGP路由的方式

1.宣告:需要网络管理员在确认路由表上存在相关的路由信息时,才能完全精确地进行宣告。
Origin(起源):i

2.引入:直接在BGP视图下引入相关协议
Origin(起源):?

总结:优选规则是i>?
BGP通过Network和Import两种方式生成BGP路由,BGP路由封装在Update报文中通告给邻居。BGP在邻居关系建立后才开始通告路由信息。
Update消息主要用来公布可用路由和撤销路由,Update中包含以下信息:
 网络层可达信息(NLRI):用来公布IP前缀和前缀长度。
 路径属性:为BGP提供环路检测,控制路由优选。
 撤销路由:用来描述无法到达且从业务中撤销的路由前缀和前缀长度。

BGP的update报文在增加路由时,BGP路由属性完全一致时,才可以携带多条BGP路由,一旦不一致,则分开携带。BGP添加某条路由会携带路径属性等信息,删除某条路由则删除路由前缀和掩码

八:BGP的通告原则

BGP通告原则之一:仅将自己有效最优的路由发布给邻居
规则:手工聚合>自动聚合>network>import

BGP通告原则之二:通过EBGP获得的最优路由发布给所有BGP邻居

BGP通告原则之三:通过IBGP获得的最优路由不会发布给其他的IBGP邻居(这是IBGP水平分割原则)

关于IBGP水平分割:防止AS内部出现环路的机制之一
BGP的环路影响:1.出现环路隐患,一旦选路规则被修改,环路有可能发生
2.可能会出现误删除路由的情况

BGP路由黑洞:BGP跨设备建立BGP邻居关系,导致数据包在经过未启用BGP协议的设备时,会出现丢包的情况。

解决路由黑洞有哪些方法:
(1)联盟
(2)IBGP邻居全互联
优点:原理简单
缺点:需要配置N(N-1)/2的邻居关系,配置复杂,维护复杂

(3)启用BGP路由反射器
角色:路由反射器、客户机、非客户机
反射规则:
(1)从EBGP邻居收到的路由,会反射给所有的邻居
(2)从客户机收到的IBGP路由,会反射给所有的客户机与非客户机
(3)从非客户机收到的IBGP路由,只会反射给所有的客户机;

BGP路由反射器原则如下:
1,RR需要指定所有的路由器都为客户机
2,RR与RR之间需要启用全互联的邻居关系
问:路由反射器为什么可以打破IBGP水平分割的原则?
路由反射器存在本身的防环机制(cluster-list和origin-id)。
注意:在路由反射器反射路由时,不会修改BGP路由的任何属性,只会增加防环的属性。
(1)cluster-list:簇列表
当路由反射器将路由反射出去时,将本身的router id添加进cluster list之中,当路由反射器收到cluster list之后进行检查,如果包含本身的router id,则直接丢弃

(2)origin-id:起源ID
当路由反射器第一次反射BGP路由时,会将客户机的router id添加进origin id之中,在后续反射过程中不添加也不修改,当路由器收到BGP路由时都会检查origin id,如果与本身的router id,则直接丢弃。

BGP通告原则之四:BGP与IGP同步
BGP同步机制:默认情况下,关闭状态。
一旦开启同步机制,路由器传递IBGP路由给EBGP邻居时,会将IBGP路由与本身的IGP路由表进行对比,如果IGP表项中包含IBGP路由,则正常传递;如果IGP表项中不包含IBGP路由,则抑制传递。

开启同步机制后,为了保障所有BGP路由不缺失,需要选择性将部分BGP导入到相应的IGP协议中。
有效路由的条件:
(1)如果开启BGP同步,满足同步条件的路由;
(2)路由条目的下一跳是IGP可达(实验配置)如果不可达则认为无效路由
(3)路由前缀与BGP路由的下一跳不能一致;

九:BGP属性的分类

公认必遵:所有的BGP路由器都可以识别,update报文一定要携带
公认任意:所有的BGP路由器都可以识别,update报文不一定携带

可选过渡:BGP路由器不一定能识别,如果存在不识别属性,可以继续传递给BGP路由器。
可选非过渡:BGP路由器不一定能识别,如果存在不识别属性,则剥离该属性后再进行传递。

  1. origin:定义路径信息的来源,标记一条路由是怎么成为BGP路由的。
    作用:用于选路;i>?

  2. AS_Path:AS路径
    作用:(1)描述BGP路由传递的路径
    (2)用于实现AS与AS之间的防环
    (3)用于选路
    当路由器将BGP路由传递给EBGP邻居时,将本身的AS号添加到as-path的左侧,当路由器收到路由时,进行as-path的检查,如果里面包含本身的AS号,则直接丢弃。

fake-as:AS号欺骗机制
作用:用于隐藏本身的AS号,保密作用。只能用于EBGP的邻居关系。
命令:peer X.X.X.X fake-as ‘’number‘’欺骗对端认为本端AS号为number

修改as-path的属性,如下:
route-policy 1 permit node 10
if-match ip-prefix 1
apply as-path 500 300 500 100 overwrite
peer X.X.X.X route-policy 1 import

3.next-hop:下一跳
作用:用于指导访问BGP路由的数据转发;

BGP下一跳规则,如下:
(1)当路由器宣告或者引入路由,在本地查看时,下一跳为0.0.0.0;(在本身进行聚合时,聚合路由的下一跳为127.0.0.1)

(2)当路由器将本身引入或者宣告的路由传递给IBGP邻居时,会将路由的下一跳修改为本地更新源。

(3)当路由器将IBGP路由传递给EBGP邻居时,下一跳修改为建立EBGP邻居的更新源地址。

(4)当路由器将EBGP路由传递给IBGP邻居时,下一跳不修改。(防止共享式网络中存在次优路径)

问:如何修改无效路由的下一跳?
(1)通过路由策略进行修改
(2)peer x.x.x.x next-hop-local
将EBGP路由传递给IBGP邻居时才会生效,将下一跳修改为本身的更新源地址。

4.local-pre:本地优先级
作用:用于选路
默认情况下,本地优先级为100,数值越大越优先
范围:AS内部都生效
场景:用于影响本AS内部设备去访问外部AS的路径
命令:route-policy 1 permit node 10
apply local-preference 1000

5.MED值:也就是cost值
作用:用于选路

规则:默认为0,数值越小越优先,可以通过路由策略进行修改(cost)
场景:用于影响其他AS访问本端AS的路径
特点:1.生效范围为两个AS之间
2.需要保证相邻AS号一致,否则直接跳过该选路原则

6.Community:团体属性
公有团体属性:限制路由传递的范围
私有团体属性:方便路由进行标记,方便后续的路由分类

默认情况下:需要使用命令去通告团体属性
peer x.x.x.x advertise-community

十:BGP的选路原则

前提:BGP需要收到2条或者2条以上相同IP地址但是下一跳不同的有效路由。

1、首选值(华为独有):默认情况下,默认为0,数值越大越优先,生效范围为本地路由器

策略需要使用于入方向:
route-policy 1 permit node 10
apply preferred-value X
2、本地优先级,默认为100,越大越优先
3、本地优选(不是用于选路,用于选择通告给邻居最优的BGP路由)
手工聚合>自动聚合>network>import

4、as-path:优先选择长度短
5、origin:优选origin属性较优(network>import)
6、MED值
7、ebgp>ibgp
8、优选BGP路由下一跳的IGP开销较小的路径

9、是否开启负载均衡,默认不开启
条件:(1)路由器上需要开启负载均衡的功能
(2)前面8条选路规则无法优选路径
(3)as-path的长度与内容都需要保持一致

特点:1.在开启负载均衡的条件下,如果前面8条无法比较出最优路径,则后面选路规则被放弃

 2.如果有多条路径符合条件,但是负载均衡的数量设置较少,则随机选择路径成为负载均衡的路径。

10、优选cluster list较短
11、优选origin id较小
12、优选BGP邻居的router id较小
13、优选BGP邻居更新源IP地址较小

十一:BGP路由聚合

好处:减少设备开销和路由表规模的大小
增强网络的稳定性

缺点:会丢失掉很多BGP属性

自动聚合特点,如下:
(1)只针对在本端设备引入的路由实现聚合
(2)抑制所有明细路由
(3)起源属性为?
(4)只能基于主类进行汇总

手工聚合特点,如下:
(1)可以在任意的设备上针对所有的路由实现聚合
(2)默认不抑制明细路由
(3)起源属性为明细路由中最差的起源属性
(4)可以实现不基于主类的掩码进行汇总
(5)可以灵活地选择需要汇总的明细路由等

手工聚合命令,如下:
aggregate 汇总路由 掩码

aggregate 192.168.1.0 24 ?
as-set 用于继承明细路由的属性,特别是 as-path
attribute-policy 修改聚合路由的属性
detail-suppressed 抑制所有明细路由
origin-policy 符合策略的明细路由才会被聚合
suppress-policy 符合策略的明细路由会被抑制

上一篇:BGP/MPLS 虚拟专用网络 Option B


下一篇:计算机网络知识点————BGP(边界网关协议)