BGP 与EBGP

Posted 奈何一笑相离别

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BGP 与EBGP相关的知识,希望对你有一定的参考价值。

BGP --- 边界网关协议

AS --- 自治系统 --- 由单一机构或者组织所管理的一些列IP网络及其设备所构成的集合原因:1,范围大,需要划分;2,自治管理

AS号 --- 由16位二进制构成 --- 0 - 65535,其中0和65535保留,1 - 65534;其中 64512 - 65534被称为私有AS号 --- 目前也存在扩展版的AS号 --- 32位二进制构成

目前市场上针对IPV4环境使用的BGP协议版本为BGPV4,目前市场上也已经存在BGPV4

+(MP - BGP --- 可以支持多种地址族)协议。

AS之间不使用重发布获取路由信息的原因:1,选路不佳;2,ASBR设备的归属问题

BGP共享AS之间的路由信息的方式应该是直接传递路由信息而不是共享拓扑信息,因为拓扑信息一方面更新量更大,其次将暴露本AS的拓扑情况,所以,传递路由信息更加合理。

BGP被称为 --- 无类别的路径矢量型协议无类别 --- 传递的路由信息携带子网掩码

路径矢量

距离矢量

一个AS为一跳

一个路由器为一跳

 

 

不是算法概念,仅将IGP协议算好的路由信息传递出去,仅完成搬运工作。

是一个算法的概念,用来计算到达未知网段的路由信息

IGP --- 选路佳,收敛快,占用资源小

EGP协议的关注点:

1,可控性 --- AS之间需要传递大量的路由信息,所谓可控,就是可以方便的干涉选路,更容易做策略。

BGP为了保证可控性,直接舍弃了开销值。取而代之的是BGP定义了很多路径属性

注意:BGP协议存在触发更新,但是,不存在周期更新,因为BGP需要更新的路由信息量太大,周期更新太浪费资源。

2,可靠性 --- BGP协议为了保证可靠性,传输层直接选择使用TCP协议,使用179 号端口。

在IGP当中,没有使用TCP协议,主要是因为TCP协议传输效率较低,占用资源较大,只能实现单播,不能自动发线邻居关系。而在BGP中,为了保证可靠性,选择使用TCP。

在BGP中,是可以实现非直连建邻,BGP的非直连建邻是承载在IGP之上的。

AS内部 --- IBGP对等体关系 --- 如果建立对等体的路由器位于相同的AS中,则建立的是IBGP对等体关系

AS外部 --- EBGP对等体关系 --- 如果建立对等体的路由器位于不同的AS中,则建立的是EBGP对等体关系

注意:为了保证EBGP对等体关系之间使用直连建邻,我们将他们之间传递的数据报中TTL值设置为1,若EBGP对等体之间需要非直连建邻,则需要修改TTL IBGP对等体之间,一般使用非直连建邻,所以TTL值设置为255

3,AS-BY-AS --- 将一个AS看作是一个单位。 --- bgp不支持负载均衡,如果到达同一个目标网络存在多条路由信息时,则将只选择其中一条。

 

1BGP的数据包在BGP中,因为使用TCP协议,需要建立点到点的连接,所以,无法通过组播或者广播来自动发现邻居,只能手工指定邻居关系

Open报文 --- 主要完成BGP对等体关系的建立,协商参数。

AS--- 在创建邻居关系时,需要指定对等体设备所在的AS号,之后,将该参数通过OPEN报文携带,对端收到后,将该参数和本地所在AS号进行比对,一致,则可以正常建立对等体关系,不一致则对等体关系建立失败。

认证 --- BGP也可以做认证,则认证口令将成为邻居关系建立的核查条件。

Router ID --- 用于区分和标定不同的路由设备。OPEN报文中将携带本地的RID,之后对等体将核查该参数,需要确保RID不冲突,则需要保证和本地的RID不一致,一致则无法建立邻居关系。

BGP中的RID其生成方法和OSPF中的相同,可以手工配置,也可以自动生成。(自动生成规则 --- 先,在本地环回接口的IP地址中取最大的最为RID,如果本地没有环回接口,则在所有物理接口的IP地址中取最大的作为RID。)

在指定邻居关系时,指定的IP地址作为后续的更新源IP,如果对等体发送的数据报中的源IP地址和给定的地址不同,则也将影响邻居关系的建立。

Holdtime --- 保活时间 --- 周期保活的失效判定时间 --- 默认180S --- 如果在保活时间内,没有收到Keeplive报文或者Update报文,则判定对方失效,将中断

BGP会话连接。 --- 双方在发送OPEN报文中都需要携带保活时间,这个时间可以不同,但执行时必须相同,所以,如果双方的保活时间不同,则按照时间较短的执行。

包括设备是否支持路由刷新功能,也需要在OPEN报文中进行协商。

Keeplive报文 --- 仅完成周期保活即可,周期发送时间为保活时间的1/3。默认为

60S --- 除了保活之外,keeplive报文在收到对方发送的open报文时,将临时充当确认包的作用。 --- BGP协议所有数据包传输的可靠性由TCP协议来保障,而此时的确

认,指的是确认对方OPEN报文中的参数,如果认可对方所携带的参数,则将发送 keeplive报文进行确认。

Update报文 --- 真正携带路由信息的数据报。主要携带目标网络号及掩码信息和路径属性。 --- UPDATE报文中,存在一个撤销路由条目的参数,可以将失效的路由信息放置其中,则对端将会删除失效的路由信息,而不需要带毒传输。

Notification报文 --- BGP协议设计的一个告警机制 --- BGP协议运行的全过程中,如果发生错误导致对等体关系断开,则设备将在断开之前,发送该报文来报告错误原因。 Route-refresh报文 --- 用于改变路由策略后请求对等体重新发送路由信息。改报文使用存在前置要求,即对等体双方路由设备必须都支持路由刷新功能。

2,BGP的状态机

BGP的状态机仅描述的是BGP对等体建立过程中的状态变化,而不包含数据收发过程。因为BGP中建立邻居关系和收发数据可以分开完成。

IDLE --- 空闲状态 --- 所有设备启动BGP进城后将首先进入空闲状态。

当手工指定邻居关系后,将会进入到一个检查环节,需要检查手工指定的IP地址在本地

路由表中是否可达,只有可达,才可以正常建立TCP的会话,如果不可达,则邻居关系建立失败,停留在IDLE状态。

如果检查成功,则将进入到Connect状态 --- 连接状态 ---- 建立TCP会话连接的状态。

(注意,对等体关系指定是双向的,双方都将发起TCP会话连接请求,最终将会建立两个双向的TCP会话通道,只需要保留一个即可。所以,在之后发送的open报文中,将比较其中的RID参数,RID大的设备发起的TCP会话连接将被保留,RID小的发起的连接将被关闭。)

如果TCP会话连接失败,则将进入到Active状态 --- 尝试重新建立TCP会连接(多次失败后,将超时,回退到空闲状态,如果成功,则进入到opensent状态。)

如果TCP会话连接成功,则将直接进入到opensent状态 --- 发送open报文来协商参数,

建立对等体关系。同时,也将收到对方发来的open报文,则将查看其中的参数,如果参数没问题,则将发送keeplive报文进行确认。则将进入到openconfirm状态 --- 等待对方发送keeplive报文,确认本地参数。

如果,收到对方发送的keeplive报文,则代表双方open报文中的参数协商完成,则邻居关系建立成功,将进入到最终状态 --- Established状态

3,BGP的工作过程

1,基于IGP实现IP可达

2,指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道。BGP之后所有的通信都将基于TCP会话通道来传输。包括提供传输的可靠性。

3,使用OPEN报文和Keeplive报文进行邻居关系的建立。OPEN报文用来携带建邻使用的参数,keeplive报文用于参数的确认。最终完成对等体关系的建立。生成邻居表

4,使用update报文来共享路由信息。信息中将携带目标网络号,掩码及路径属性;之后,将发送以及收集到的路由信息记录在一张表中 --- BGP

5,之后,将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。

6,收敛完成后,将使用keeplive报文进行周期保活,默认的保活时间为180S,发送周期为60S。

7,如果出现错误,将使用notification报文进行告警。

8,若出现结构突变,则将使用update报进行触发更新。

4,BGP的路由黑洞问题

    由于BGP协议可以非直连建邻,所以导致BGP协议可能出现跨越未运行BGP协议的设

备,导致BGP路由传递后,控制层面显示可达,但是,数据层面,流量流经未运行BGP协议的设备时,无法通过,形成路由黑洞。

解决方案:

1,让未运行BGP协议的设备运行BGP协议 --- 问题,所有设备都需要运行BGP则都将承载大量的路由信息,造成设备成本增加。

2,在IGP协议中,重发布BGP协议的路由信息

3,MPLS

为了避免路由黑洞的情况,BGP提出了同步机制 --- 即当一台路由器从自己的

IBGP对等体处学到一条BGP路由时,他将不能将该路由通告给自己的EBGP对等体关系。除非,他从自己IGP协议中也学习到这条路由信息。 --- 华为设备默认关闭同步机制。

5,BGP的防环问题

BGP使用的防环手段 --- 水平分割机制

EBGP的水平分割 --- 针对EBGP对等体之间可能出现的环路问题所提供的解决方案

AS_PATH --- 专门记录AS路径信息的一个属性。

所谓EBGP的水平分割,主要用于防止EBGP环境下的环路问题 --- BGP协议在路由条目中将经过的AS号进行记录,生成一个属性 --- AS_PATH(记载所有经过的AS 的AS号),之后,在接收到的路由条目中的AS_PATH属性中,如果存在本地的AS 号,则将拒绝学习该路由信息,防止路由回传,形成环路。 --- AS_PATH属性也可以用于选路,其可以反应经过AS的数量。

IBGP的水平分割 --- 针对IBGP对等体之间可能出现的环路问题所提供的解决方案

注意:因为BGP的AS-BY-AS的特性,要求其将一个AS看作是一个整体,所以,在默认情况下,AS内部传递的路由信息的路径属性是不会发生变化的。

 

所以,IBGP水平分割的做法是 --- 要求当路由器从一个IBGP对等体出学习到某条BGP路由时,他将不再把这条路由信息通告给其他的IBGP对等体。

因为IBGP水平分割的限制,导致在IBGP对等体内部,BGP的路由信息只能传递一次,这样将会造成通信障碍。

可以通过建立全联的IBGP对等体关系来解决通信障碍。 --- 1,资源占用将变大;2,将降低网络的可拓展性。

1,路由反射器;2,联邦 --- 专门用来解决IBGP水平分割机制造成的通信障碍。

6,BGP的基本配置

对等体关系建立

1,启动BGP进程

[R1]bgp 1  --- AS号 --- 因为BGP设备只能存在在一个AS中,所以,BGP一台设备上只能启动一个进程

[R1-bgp]

2,配置RID

[R1-bgp]router-id 1.1.1.1

3,手动指定邻居关系

[R1-bgp]peer 12.0.0.2 as-number 2 --- 注意,手工指定一定是双向的

[R2-bgp]peer 12.0.0.1 as-number 1

[R1]display bgp peer --- 查看BGP邻居表

[r2-bgp]peer 3.3.3.3 as-number 2

[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 --- 3.3.3.3发消息使用环回接口

的IP地址。 --- 使用环回接口建立对等体关系一定需要执行这个命令,否则邻居关系将建立失败。

[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 --- 修改EBGP对等体之间发送数据报中的TTL

[r5-bgp]peer 4.4.4.4 ebgp-max-hop --- 直接将ttl值修改为255

路由发布 --- 对于BGP而言,只要是路由表中存在的路由信息,都可以发布 1)通过network命令发布路由

[R1-bgp]network 1.1.1.0 24 --- 后面跟目标网络号及掩码信息

[R1]display bgp routing-table --- 查看BGP

NextHop --- 谁发送的路由信息,则下一跳就写谁;如果是自己始发的,则下一跳写0.0.0.0

状态码

*-- 代表可用。 --- 所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果,本地路由表中可达,则代表该路由信息可用;如果不可达,则该路由信息将不可用。 ---- 如果该路由条目不可用,则将不会参与路由信息的优选。

>--代表优选。 ---- 当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的进行加表及传递。

1.1.1.0/24  EBGP    255  0           D   12.0.0.1        GigabitEthernet0/0/0  --- 下一跳字段将直接使用下一跳属性中的地址,我们将BGP的路由信息的优先级设置为255。

i-- 状态码为I,代表该路由信息是通过IBGP对等体学到的。

[r2-bgp]peer 3.3.3.3 next-hop-local --- 将下一跳属性修改为自身

[r2-bgp]import-route ospf 1

Ogn --- 起源码

一共存在三种 --- I --- 代表这条路由信息起源于AS内部使用network通告出来的。

    --- e --- 代表来自于EGP协议。

    --- ? --- 除了以上两种方式,其他方式获取的路由信息都是?

 

  • 通过汇总发布 --- 在BGP中我们将这样的操作成为路由聚合
  • 重发布
  • EBGP对等体之间的非直连建邻前提条件:建邻的IP之间必须可达,可以使用静态路由来保证。
  • IBGP对等体之间环回接口建邻由于IBGP对等体之间处于同一个AS中,正常一个AS内部将存在大量的备份路径,若使用物理接口建立邻居关系,将浪费备份资源,所以建议使用环回接口来建立IBGP 对等体关系。
  • EBGP直连邻居建立

BGP-路由汇总实验

技术图片

路由汇总:AR1与AR3建立EBGP对等体关系,AR2与AR3EBGP建立对等体,AR4与AR3建立EBGP对等体,AR1通过Network命令宣告Loopback接口路由给AR3对等体,AR2通过Network命令宣告Loopback接口路由给AR3对等体,AR3把AR1与AR2传递过来的路由直接传递给AR4。

一配置思路:
1.配置路由器地址(IP地址,Loopback地址,)
2.配置路由器进程,建立对等体(命令如下)
配置BGP进程:BGP xxx(x:本地BGP进程号)
指定邻居地址及邻居AS号:peer x.x.x.x as-number x
宣告Loopback地址:Network x.x.x.x Network x.x.x.x
3.查看BGP邻居关系是否正常:Display bgp peer 状态为:Established 交互路由更新的状态
4.查看BGP路由表:Display bgp routing table

要求1:在AR3上对AR1与AR2的路由进行汇总进行手工路由汇总
1.配置路由器进程,建立对等体(命令如下)
2.进入BGP进程:BGP xxx(x:本地BGP进程号)
3.在AR3上的BGP进程配置手工的路由汇总,aggregate 172.16.0.0 16
4.在AR4上可以看到BGP路由汇总的路由。

可以看出汇总路由传递过来后,明细路由也相继传递过来,那么路由还是会匹配明细。

要求2:在AR4上只收到汇总路由,不要收到明细路由。
1.配置路由器进程,建立对等体(命令如下)
2.进入BGP进程:BGP xxx(x:本地BGP进程号)
3.在AR3上的BGP进程配置手工的路由汇总,aggregate 172.16.0.0 16 detail-suppressed(抑制明细)
4.在AR4上可以看到BGP路由汇总的路由。

可以看出只有汇总路由,明细路由已经抑制住了

要求3:在AR1上也学到了BGP路由汇总条目,可能会引发路由环路。汇总路由加上AS-PATH属性,避免路由环路。

1.配置路由器进程,建立对等体(命令如下)
2.进入BGP进程:BGP xxx(x:本地BGP进程号)
3.在AR3上的BGP进程配置手工的路由汇总,aggregate 172.16.0.0 16 detail-suppressed(抑制明细) as-set (继承明细路由的AS-PATH属性值)
4.在R1上可以看到汇总路由消失,因为携带了AS-PATH属性值,R1收到R3对等体传递过来的路由时,发现汇总路由条目携带了AS-PATH号,发现自己的AS-PATH号在里面就会认为这是从自己设备出去的路由,默认处置为丢弃路由(认为路由有环路)

条目。

要求4在R4路由器上只收到172.16.10.0及172.16.11.0的路由明细,在R3上用策略路由过滤掉。
1.配置路由器进程,建立对等体(命令如下)
2.用前缀列表工具去匹配路由(IP IP-Prefix 1 permit)这里的前缀列表必须是允许,因为这是允许过滤掉哪些路由。
3.新建一个策略路由列表(Route-Policy subb permit note10 )
4.在策略路由列表中调用前缀匹配列表 (if-mauch ip-prefix 1)
5.进入BGP进程:BGP xxx(x:本地BGP进程号)
6.在AR3上的BGP进程配置手工的路由汇总,aggregate 172.16.0.0 16 detail-suppressed(抑制明细) as-set (继承明细路由的AS-PATH属性值) suppress-policy subb(之前配置的路由策略在这里调用)
7.在R4上只能看到汇总路由和172.16.10.0/172.16.11.0 的明细路由。

也就是说这个汇总路由是为172.16.1.0/172.16.2.0/172.16.10.0/172.16.11.0/这四条路由明细服务的,如果使用Suppress-Policy关键字,只能过滤部分的路由明细,汇总一直存在。如果这四个接口都关闭了,那么汇总路由消失。

要求5更改这个手工汇总路由的COST值属性。
1.首先建立一个路由策略 route-policy COST premit note 10
2.在策略列表中使用 Apply cost 999
3.在BGP进程中使用aggregate 172.16.0.0 16 detail-suppressed suppress-policy subb as-se
t attribute-policy COST (这个是调整属性的关键字)

要求6只针对172.16.1.0及172.16.10.0产生汇总路由。如果这两个接口关闭路由汇总条目就会消失。
1.用前缀列表工具去匹配路由(IP IP-Prefix 2 permit)172.16.2.0 172.16.11.0
2.新建一个策略路由列表(Route-Policy or permit note10 )
3.在策略路由列表中调用前缀匹配列表 (if-mauch ip-prefix 2)
4.进入BGP进程:BGP xxx(x:本地BGP进程号).
5.在汇总路由上添加origin-policy关键字:是指为他们产生汇总路由[Huawei-bgp]aggregate 172.16.0.0 16 detail-suppressed as-set origin-policy or

这里用策略路由匹配上需要为哪些路由条目产生汇总路由。剩下1.0/10.0 跟汇总路由没关系了所以跟汇总路由一起传递给邻居了。

                                      过滤AS100传递的路由

要求7在R4上过滤掉AS号为100传递过来的路由,其他AS传递过来的路由要学习到
1.首先使用IP As-path-Faliter 工具去用正则表达式去匹配AS100的路由
ip as-path-filter 1 deny _100$ 匹配100区域过来的路由,规则是拒绝
ip as-path-filter 1 permit .* 匹配所有路由
2.在BGP进程中对邻居直接调用 peer XXXX As-path-faliter 1 import 入方向

可以看出path属性里面包含AS100的属性已经被干掉了。

要求8在给起源与AS100的区域路由中加上Local—preference改成100.
1.首先使用IP As-path-Faliter 工具用正则表达式去 匹配AS100的路由
2.使用路由策略去调用As-path-Faliter 匹配上的AS区域,在node20中允许所有 因为NODE10 匹配了AS100D的路由,所以node20必须放行剩下的路由,不然路由默认会被干掉
3.使用If-match ip as-path-faliter 去调用
4.使用apply local-prefence去更改数值
5.在BGP进程中对邻居直接调用 peer XXXX route-porliy xx import 入方向

可以看出AS100过来的路由的Local prefence的值被改变了。
如果route-porliy 1 permit note 10 匹配上了AS100,那么还需要放行剩下的区域路由 就是建立note20 默认就是放行。

以上是关于BGP 与EBGP的主要内容,如果未能解决你的问题,请参考以下文章

使用IGP和BGP的配合达到降低路由容量目的的实验与总结

华为设备BGP路由技术

BGP2

BGP是什么?BGP用于哪些地方?

BGP路由配置实验演示(Huawei路由器设备配置)

BGP 与EBGP