HCIP——BGP基础

BGP

  • 一、BGP基础
  • 二、BGP的发展历史
  • 三、BGP在企业中的应用
  • 四、距离矢量型协议和路径矢量型协议
  • 五、BGP的特征
  • 六、BGP的对等关系
  • 七、BGP的数据包
  • 八、BGP的状态机
  • 九、BGP的工作过程
  • 十、BGP的路由黑洞
  • 十一、BGP的环路问题
    • EBGP水平分割
    • IBGP水平分割
  • 十二、BGP的基本配置
    • 1、BGP的对等体建立
    • 2、BGP的路由发布
    • 3、BGP的路由聚合
      • 自动聚合
      • 手工聚合

一、BGP基础

我们之前所学的RIP也好,OSPF也好,都属于IGP协议- 内部网关协议(Interior Gateway Protocol),而我们本章要学习的BGP协议,则属于EGP协议— 外部网关协议(Exterior Gateway Protocol)。虽然都属于动态路由协议的范畴,但二者其实是存在本质的差别的,这个我们需要通过后续的课程,慢慢的研究清楚。
当然,我们首先需要搞清楚的,就是这个IGP协议和EGP协议是如何划分的。
这个划分依据其实我们在IA阶段去了解动态路由协议的时候,就已经提及到了,那就是依据工作范围来进行划分:

  • 内部网关协议IGP(Interior Gateway Protocol) :在一个自治系统内部运行。RIP、OSPF、ISIS为常见的IGP协议。
  • 外部网关协议EGP (ExteriorGateway Protocol): 运行于不同自治系统之间。BGP 是目前最常用的EGP协议。

而这里提到的自治系统,就是我们范围的划分依据,我们英文称为AS (Autonomous system)

  • OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不断增长GP已无法管理大规模网络,AS的概念由此诞生。
    • AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。— 自治
      整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。— 范围太大,协议跑不过来
      (以上两点是需要进行AS划分的主要原因。)
  • AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
  • 不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。
    • 我们通常使用的16位的AS号,其取值范围为1-65534(0和65535保留),而其中64512-65534为私有0的AS号,即可以自行使用,所以,真正公有可用的AS号取值为1-64511。其数量相对较少,故有了32位拓展版的AS号。
  • 为此在AS之间专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:
    • BGP基于TCP,只要能够建立TCP连接即可建立BGP0
    • 只传递路由信息,不会暴露AS内的拓扑信息。
    • 触发式更新,而不是进行周期性更新。

二、BGP的发展历史

在这里插入图片描述
这里我们只需要知道,我们目前在IPV4环境下,主要使用的是BGPV4版本,而目前,市场上也存在BGPV4+版本,即MP-BGP(Muti-protocol-BGP),可以支持多种地址族,能应用在IPV6环境下。之后,我们在MPLS VPN中,也需要用到。

三、BGP在企业中的应用

在这里插入图片描述
这里可以思考一个问题,那就是我们BGP在完成AS之间路由共享的时候,需要采用哪种形式来进行共享?

  • 共享路由
  • 共享拓扑

BGP共享AS之间的路由信息的方式应该是直接传递路由信息而不是共享拓扑信息,因为拓扑信息一方面更新量—更大,其次将暴露本AS的拓扑情况,所以,传递路由信息更加合理
这种做法显然有点类似我们之前接触的距离矢量型协议,但是,BGP并不属于距离矢量型协议,而我们通常称他为—“路径失灵型协议”

四、距离矢量型协议和路径矢量型协议

路径矢量距离矢量
一个AS为一跳一个路由器为一跳
不是算法概念仅将IGP协议算好的路由信息传递出去,仅完成搬运工是一个算法的概念,用来计算到达未知网段作的路由信息

所以,我们发现,BGP和我们之前学习的IGP是存在本质的区别的,IGP协议的主要任务是将AS内部的未知网信息计算获取到,而BGP则主要是将IGP协议计算出来的路由信息进行搬运和传递,并不去计算路由。

五、BGP的特征

这里列举些BGP相比于IGP而言,不一样的关注点及其特征
可控性

  • 因为BGP需要传递大量的路由信息,所以,需要强大的可控性,更方便对路由信息进行管理和配置策略。
  • 为此,BGP舍弃了开销值,取而代之的是设计了很多路径属性。
  • 每条BGP路由都携带多种路径属性 (Path attribute),BGP可以通过这些路径属性控制路径选择,而不像lS-S、OSPF只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式。

在这里插入图片描述
可靠性

  • BGP因为只有触发更新,而不存再周期更新(因为更新路由数量过大)。所以,需要确保可靠性。
  • BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
  • 两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表。

AS-BY-AS

  • BGP是将一个AS看作是一个整体

六、BGP的对等关系

  • 与OSPF、IS-IS等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。
  • 缺省情况下,BGP使用报文出接口作为TCP连接的本地接口
  • BGP存在两种对等体关系类型:EBGP及IBGP:
  • EBGP(ExternalBGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建0立EBGP对等体关系,必须满足两个条件:
  • 两个路由器所属AS不同(即AS号不同)。
  • 在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立
  • 在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用Lopback接口建立EBGP对等体关系,则应注意EBGP多跳问题。 — 发送的数据包中的TTL值将被设置为1

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

  • 在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。
  • 一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建IBGP邻居关系那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于余链路的存在,R1与R3之间的IP连通性其实并没有DOWN(仍然可以通过R4到达彼此)

在这里插入图片描述

七、BGP的数据包

BGP存在5种数据包类型。(常用的是前四种)

报文名称作用发送时刻
Open协商BGP对等体参数,建立对等体关系BGPTCP连接建立成功之后
Update发送BGP路由更新BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文
Notification报告错误信息,中止对等体关系当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体
Keepalive标志对等体建立,维持BGP对等体关系BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接
Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文当路由策略发生变化时,触发请求对等体重新通告路由
  • open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系
    需要比对协商的参数如下:
    • AS号—BGP的open报文会携带本地的AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS。**另外,如果对方的AS号和本地建邻时写的AS号不同,则将导致邻居关系无法建立。
    • RID—在这里可以被称为BGP Identifier (BGP标识符),和OSPF中的RID相同,也是由32位二进制构成,按照IP地址的格式来写。这个值在数据包中也会携带,将对比两边该值是否相同,相同则表示存在冲突,将导致建邻失败。
    • BGP也可以进行认证,认证口令不同,则也将导致建邻失败
    • open报文中还会携带Hold Time — 保活时间。p在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive报文或Update报文,则认为BGP连接中断。–.该时间默认是180S。双方保活时间不一致,则将按照小的执行。
  • Keepalive报文主要用来周期保活
    • 周期保活时间默认是保活时间的1/3,默认60S。
    • 该报文还将在open报文协商参数时,临时充当确认报文— 确认open报文中的参数是否认可。
  • Update报文用于在对等体之间传递路由信息,可以用于发布、撤销路由。
    • 一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRL(Network LayerReachablelnformation,网络层可达信息)中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
  • Notification 报文是当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发生),就会向对等体发送Notification,告知对端错误原因。之后BGP连接将会立即中断。
  • Route-refresh报文用来要求对等体重新发送指定地址族的路由信息一般为本端修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。

八、BGP的状态机

BGP的状态机和OSPF的状态机不同之处在于 — BGP的状态机仅描述的是对等体关系建立过程的状态变化。主要是因为BGP可以将邻居建立过程和BGP路由收发过程分开
BGP一共存在六种状态机。

Peer状态名称用途
dle开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源
Connect正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接
ActiveTCP连接没建立成功,反复尝试TCP连接
OpenSentTCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立
OpenConfirm参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包
Established已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息

在这里插入图片描述
在这里插入图片描述
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状态。
以下是BGP状态机变化的过程图:
在这里插入图片描述

九、BGP的工作过程

根据我们之前对BGP基础的了解,我们下面总结以下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报进行触发更新。

十、BGP的路由黑洞

在这里插入图片描述
由于BGP协议可以非直连建邻,所以导致BGP协议可能出现跨越未运行BGP协议的设备,导致BGP路由传递后,控制层面显示可达,但是,数据层面,流量流经未运行BGP协议的设备时,无法通过,形成路由黑洞。
解决方案

  • 1,让未运行BGP协议的设备运行BGP协议— 问题,所有设备都需要运行BGP则都将承载大量的路由信息,造成设备成本增加。
  • 2,在IGP协议中,重发布BGP协议的路由信息2 .
  • 3,MPLS

十一、BGP的环路问题

BGP在解决路由环路问题是采取的方法我们也称为— 水平分割
BGP的水平分割又分为两种,一种是专门针对EBGP对等体的EBGP水平分割,以及一个专门针对IBGP对等体的IBGP水平分割

EBGP水平分割

EBGP的水平分割—针对EBGP对等体之间可能出现的环路问题所提供的解决方案
在这里插入图片描述
所谓EBGP的水平分割,主要用于防止EBGP环境路由回传而形成环路—BGP协议在路由条目中将经过的AS号进行记录,生成一个属性— AS_PATH(记载所有经过的AS的AS号),之后,在接收到的路由条目中的AS_PATH属性中,如果存在本地的AS号,则将拒绝学习该路由信息,防止路由回传,形成环路。 — AS PATH属性也可以用于选路,其可以反应经过AS的数量。

路由在EBGP对等体之间传递时,AS_Path还用于防止出现路由环路。R4从R3收到10.1.1.024路由后,如果它与R2之间存在EBGP对等体关系,那么它会将该路由通告给R2,此时路由的AS_Path为 300 100 200,如上图所示,R2从R4收到该路由后,会忽略这条路由更新,因为它在收到的路由中看到了自己本地的AS号码便意识到网络中出现了环路。

IBGP水平分割

IBGP的水平分割— 针对IBGP对等体之间可能出现的环路问题所提供的解决方案
在这里插入图片描述

注意:因为BGP的AS-BY-AS的特性,要求其将一个AS看作是一个整体,所以,在默认情况下,AS内部传递的路由信息的路径属性是不会发生变化的。也就是说当BGP路由在一个AS内传递时,是无法依赖AS Path 提供的防环能力的,那么此时路由环路就有可能发生,IBGP水平分割规则就是用于解决这个问题的。

上图所示的网络中,R1与R2和R3分别建立EBGP对等体关系,而AS 64513内的三台路由器则两两建立IBGP对等体关系。现在R1将AS 64512内的10.1.1.0/24路由发布到BGP。R1将这条路由通过BGP通告给自己的EBGP对等体R2,当然,我们并不担心这条路由在AS 64512及AS 64513之间传递时会发生环路,因为ASPath能够起到防环的作用。但是在AS内部的路由防环呢?当R2收到R1通告的10.1.1.0/24路由后,它将这条路由通告给自己的IBGP对等体R3及R4,R4会将该路由通告给IBGP对等体R3,而R3又会将该路由通告给R2,这就极有可能引发路由环路。
所以,BGP规定,当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体,这就是IBGP水平分割规则。在本例中,R4从IBGP对等体R2学习到的路由将不能再通告给R3,因为R3也是它的IBGP对等体。同理,R3从R2学习到的BGP路由也不能通告给R4。

在这里插入图片描述
IBGP水平分割规则是一个非常重要的设计,它可以在极大程度上规避AS内 BGP路由传递时可能引发的路由环路问题。然而在某些场景中,它也会带来一些新的问题。
上图展示了一个示例,在这个网络中,R4增加了一个IBGP对等体R5。由于IBGP水平分割规则的限制,R4是无法将学习自IBGP对等体R2的10.1.1.0/24路由再通告给另一个BGP对等体R5的,因此这将造成R5无法学习到去往AS64512的路由。实际上我们不可能放弃1BGP水平分割规则,因为它确实非常重要,但是在许多场景下又必须解决IBGP路由传递的问题。
解决方案:
这个问题有多种解决办法,例如可以在AS内部建立IBGP对等体关系的全互联模型。以AS 64513为例,需在该AS中所有的BGP路由器两两之间建立IBGP对等体关系。— 当然,这样做会造成资源消耗增加,网络的可扩展性降低。
所以,我们后面还会专门学习BGP里面的两个技术— 路由反射器和联邦。都是为了解决IBGP水平分割所造成的通讯障碍的。

十二、BGP的基本配置

BGP的基本配置可以分为对等体关系建立和发布路由两个部分来看。BGP可以实现邻居关系建立和发布路由分开实现)

1、BGP的对等体建立

1、启动BGP进程

[Huawei] bgp {as-number-plain / as-numberdot}
[Huawei-bgp] routerid ipv4-address

启动BGP,指定本地AS编号,并进入BGP视图。使用router-id命令配置BGP的Router D,建议将BGP Router D配置为设备Loopback接口的地址。
2、配置BGP对等体

[Huawei-bgp] peer (ipv4-address / ipv6-address ) as-number {as-number-plain / as-number-dot }

创建BGP对等体,指定对等体地址以及AS号。

3、配置建立对等体使用的源地址、EBGP对等体最大跳数

[Huawei-bgp] peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-address]
[Huawei-bgp] peer ipv4-address eb-max-hop [hop-count ]

指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。指定建立EBGP连接允许的最大跳数。缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。
配置实例
在这里插入图片描述
R1的配置如下

[R1] bgp 100
[R1-bgp]router-id 10.0.1.1
[R1-bgp]peer10.0.3.3as-number 100
[R1-bgp]peer10.0.3.3connect-interface LoopBack1

R3的配置如下:

[R3] bgp 100
[R3-bgp]router-id 10.0.3.3
(R3-bgp]peer 10.0.1.1as-number 100
[R3-bgp]peer 10.0.1.1 connect-interface LoopBack1
[R3-bgp]peer10.0.34.4as-number 200
  • BGP对等体关系、AS号、设备互联地址如图所示
  • 所有设备的Loopback1接口地址为10.0.xx/32,其中x为设备编号所有设备都使用Loopback1地址作为RouterID。
  • R1、R3之间使用Loopback1地址作为更新源地址建立IBGP对等体关系,R3、R4之间使用互联接口地址作为更新源地址建立EBGP对等体关系。

在这里插入图片描述
R4的配置如下:

[R4] bgp 200
[R4-bgp]router-id 10.0.4.4
[R4-bgp] peer 10.0.34.3 as-number 100
  • BGP对等体关系、AS号、设备互联地址如图所示
  • 所有设备的Loopback1接口地址为10.0.x.x/32,其中x为设备编号所有设备都使用Loopback1地址作为RouterID。
  • R1、R3之间使用Loopbaq1地址作为更新源地址建立IBGP对等体关系,R3、R4之间使用互联接口地址作为更新源地址建立EBGP对等体关系。

在R3上查看BGP对等体状态:
在这里插入图片描述

2、BGP的路由发布

这里我们搭建如下拓扑来完成之前邻居建立和路由发布的演示。
在这里插入图片描述
路由发布 — 对于BGP而言,只要是路由表中存在的路由信息,都可以发布
通过network命令发布路由
[R1-bgp]network 1.1.1024 — 后面跟目标网络号及掩码信息

发布路由后,我们就会使用update包将路由信息传递出去,当然,也会将发布的路由信息记录在BGP路由表中。我们前面说了,BGP路由表是将所有BGP发布及收集到的路由信息记录的表。
那下来我们可以先看下R1的BGP表。 — 我们可以通过命令:[r1]display bgp routing-table 来查看

目前表中只存在一条路信息,因为我们R1本身就只发布了一条1.0网段的路由,其他路由器也并没有发布路由信息。

  • network — 目标网段及掩码信息
  • NextHop — 谁发送的路由信息,则下一跳就写谁,如果是自己始发的,则下一跳写0.0.0.0 — 包括下一跳及后面的都是BGP设计的路径属性

状态码 — 路由条目最前面的符号,不同的状态码表示了该路由信息的不同状态

  • *-- 代表可用。— 所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果,本地路由表中可达,则代表该路由信息可用,如果不可达,则该路由信息将不可用。 — 如果该路由条目不可用,则将不会参与路由信息的优选。
  • >--代表优选。 — 当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的进行加表及传递。
  • i — 状态码为1,代表该路由信息是通过IBGP对等体学到的。

我们这条因为是自己发布出去的,证明这条路由本身就在我们的路由表中,所以,可用性自然是得到保证的。而且,目前我们只有这一条1.0网段的路由信息,所以,我们肯定会让他优选的。那么这条路由就可以进行传递和加表了。
之后,我们可以看下R2的路由表,查到加表信息的路由信息如下。

1.1.1.0/24 EBGP 255 0D 12.0.0.1GigabitEthernet0/0/0址,我们将直接使用下一跳属性中的地址,我们将BGP的路由信息的优先级设置为255。
当然,该路由信息在R2上也是可用且优的,则可以传递给R2的邻居— R3。(则查看R3的BGP表)
在这里插入图片描述

我们发现,该路由信息不可用且不优。为啥不可,我们知道,BGP接收到路由信息之后,将尽心可用检查,这条路由的下一跳是12.0.0.1,所以,R3会基于自己的路由表去递归查找12.0.0.1。但是,因为这个网段,我们并没有宣告到OSPF中,所以,R3将检查失败,认定该路由不可用。所以没有。既然不可用,那自然也没有优选符号了。

这里主要是因为AS-BY-AS的规则,导致R2在给R3传递时并没有修改下一跳,所以,R3检查失败

解决方案:
我们需要到R2上做如下配置。
[r2-bgp]peer3.3.3.3 next-hop-local (这个命令只是把外面传进来的路由的下一跳改成自己)之后我们的路由信息将可以正常传递了。

注意:这里如果R2和R4之间没有建立IBGP对等体关系的话,则R4将无法收到路由信息,主要原因是因为IBGP的水平分割导致。所以,需要保证整个AS 2内部,建立全联接的IBGP对等体关系

通过重发布发布路由
Network宣告的方式,是BGP协议最基本的通告路由的方法。当然,这样做也存在一定的缺点,就是当需要通告的路由量比较大的时候,使用这种方法就会十分的低效。
所以,我们还有另一种通告路由的方式,也就是批量通告的方式。那就是重发布。我们可以直接在BGP中将其他协议生成的路由重发布进来,以达到批量通告的目的。
[r2-bgp]import-route ospf 1
在这里插入图片描述
这里执行完成后,可以观察一下路由信息中最后一列的属性 — Ogn — 起源码
起源码一共存在三种

  • I—代表这条路由信息起源于AS内部使用network通告出来的
  • e—代表来自于EGP协议
  • ?—除了以上两种方式,其他方式获取的路由信息都是?

3、BGP的路由聚合

BGP的聚合分为自动聚合和手工聚合,我们分别来进行讲解。

自动聚合

  • 自动聚合的缺点:
    • 自动聚合功能只能针对重发布的路由条目生效o
    • 自动聚合只能将明细路由直接汇总到主类。-.- 样将会产生巨大的路由黑洞。所以,华为设备默认是关闭o自动汇总功能的。
  • 配置命令
    • [r1-bgp]summaryautomatic — 自动聚合的开启命令
      Info: Automatic summarization is valid only for the routes imported through theimport-route command — 命令执行后会出现信息提示,说明只能针对重发布的路由条目生效。
    • 汇总完之后,我们在BGP表中发现会多一条汇总网段的路由信息,下一跳是127.0.0.1。
      在这里插入图片描述
      汇总之后,也会在BGP中发布路由信息,下一跳指向本地环回地址,最终也会加表,出接口将递归到空接口。效果就是将在黑洞路由器上自动生成一条到达汇总的空接口路由用来防环。
  • 面两个明细路由不再可用,状态码多了一个S。这个S代表的是suppressed— 抑制 — 被抑制的路由信息将不再加表和传递

手工聚合

因为自动聚合存在上述的两个缺点,所以,想要对路由信息进行精准的汇总,则需要使用到手工聚合
手工聚合所使用的命令为— Aggregate
在这里插入图片描述
在上图中,路由器按图示的要求建立EBGP对等体关系。R3向BGP发布了172.16.1.0/24及172.16.2.0/24路由(当然,在实际的情况中R3发布的子网路由可能更多,简单起见此处只取了两个子网做代表)。R1及R2能够通过BGP学习到这两条路由。我们便可以在次场景下进行手工聚合。
1.使用aggregate命令配置路由汇总
首先在R1为172.16.1.0/24及172.16.2.0/24这两条子网路由生成汇总路由。R1的关键配置如下:

[R1jbgp 100
[R1-bgplaggregate 172.16.0.016

使用aggregate命令,用户可以灵活地指定汇总路由的目的网络掩码长度,而且不受网络地址类别的限制。
此处为了简单起见,我们直接将汇总路由配置为172.16.0.0/16。

完成上述配置后,如果R1的BGP路由表中存在172.16.0.0/16这个网络下的子网路由,它便会产生BGP汇总路由172.16.0.0/16,并目将这条汇总路由通告给所有的BGP对等体,包括R3及R2,如图7-34所示。这里实际上存在两个问题第一个问题是配置aggregate 17216.0.016命令后,虽然R1的确产生了汇总路由,但是该汇总路由下的明细路由依然会被通告,也就是说R2将会学习172.16.1.0/24、172.16.2.0/24路由以及汇总路由172.16.0.0/16,因此实际上在R1上所做的路由汇总配置意义并不大,R1所通告的路由前缀数量并未减少,R2的路由表规模也并未减小。另一个问题是,R1所产生的这条汇总路由,由于丢失了明细路由的路径信息(尤其是 ASPath属性),因此它们会被通告给R3并被它接收,而且加载到路由表,这样就产生了路由环路的隐患。
在这里插入图片描述
2.使用aggregate detail-suppressed命令配置路由汇总
现在我们修改R1上的配置将aggregate命令修改为

[R1]bgp 100
[R1-bgplaggregate 172.16.0.0 16 detail-suppressed

在这里插入图片描述
使用aggregate 172.16.0.0 16命令,R1将产生汇总路由172.16.0.0/16并且将汇总及明细路由都通告给R2,如果在这条命令中增加detail-suppressed关键字,R1将只通告汇总路由,而抑制明细路由,如上图所示。完成上述配置后,R1的BGP路由表如下:
在这里插入图片描述
在R1的BGP路由表中,明细路由172.16.1.0/24及172.16.2.0/24在行首都有“s”标记,这意味着这些明细路由已经被抑制,不再被通告给其他 BGP对等体。
3.使用aggregate detail-suppressed as-set命令配置路由汇总
当使用aggregate命令配置BGP路由汇总时,如果增加 as-set 关键字,则产生的汇总路由将会继承明细路由的路径属性,其中ASPath属性的继承最为关键。现在将R1的配置修改为如下:

[R1]bgp 100
[R1-bgp]aggrogate 172.16.0.0 16 deuail-suppressed as-set

完成上述配置后,R1将抑制明细路由172.16.1.0/24及172.16.2.0/24,只通告汇总路由172.16.0.0/16(这得益于detail-suppresse关键字),而且由于命令中使用了as-set关键字,因此该条汇总路由将继承172.16.1.0/24及172.16.10.0/24这两条明细路由的路径属性。我们重点关注AS Path属性的继承。首先查看一下R2的 BGP路由表:
在这里插入图片描述
从R2的BGP路由表可以看出,它从R1收到的这条汇总路由的AS_Path 属性有了明显的变化,在使用as-set关键字之后,R1产生的汇总路由将会继承明细路由172.16.1.0/24及172.16.2.0/24的 AS_Path属性值,因此300这个AS号被写入汇总路由的AS Path,然后R1将汇总路由通告给EBGP对等体R2时,在该AS Path之前插入本地AS号100,这条汇总路由最终被加载到R2的BGP表中时,ASPath为100 300,如下图所示。另一方面,由于R1所产生的这条汇总路由继承了明细路由的 AS Path 属性,因此R3从R1收到关于该路由的更新后在路由的AS Path中将看到自己本地的AS号,于是它将忽略这个更新。如此一来,路由环路的隐患也就可以得到规避。
在这里插入图片描述
4、在aggregate命令中使用suppress-policy关键字
在这里插入图片描述
在使用aggregate命令配置路由汇总时,还可以搭配suppress-policy关键字,这个关键字用于通告汇总路由以及被选定的明细路由(换句话说,就是有选择性地抑制明细路由)。以上图为例,如果要求R1将汇总路由172.16.0.0/16以及除了172.16.1.0/24之外的其他明细路由都通告给R2,使用suppress-policy便可以轻松实现这个需求,R1的配置如下:
在这里插入图片描述
在上述配置中,我们首先定义了一个名称为no-subnet-1的IP前缀列表,并使用这个IP前缀列表允许了路由172.16.1.0/24。接着创建了一个名称为hcnp1的 Route-Policy,并在这个Route-Policy 的节点10中调用已经定义好的IP前缀列表no-subnet-1。最后,在BGP的配置视图下,使用aggregate 172.16.0.0 16 suppress-policy hcnp1命令通告汇总路由172.16.0.0/16 以及被选定的明细路由(抑制172.16.1.0/24路由,放行其他明细路由)。

suppress-policy关键字意为”抑制策略”因此该关键字所指定的Route-Policy 中,被允许(Permit)的路由将会被抑制。留意到IP前缀列表no-subnet-1的这条语句的匹配模式为Permit,而且 Route-Policy hcnp1的节点10的匹配模式也为Permit,所以只172.16.1.0/24路由被“允许”。

因此最终R2将学习到汇总路由172.16.0.0/16 以及除了172.16.1.0/24之外的其他明细路由。值得注意的是suppress-policy虽然调用了 Route-Policy,但是被调用的Route-Policy 只能用于路由匹配(只能使用if-match命令),不能用于设置路由属性 (不能配置apply命令)。此时,R1的BGP表如下:
在这里插入图片描述
172.16.1.0/24路由有“s”标记表明该条路由被抑制。R2的BGP表如下:
在这里插入图片描述
Atomic_Aggregate及Aggregator
这是和链路聚合相关的两个路径属性。
在这里插入图片描述
在这里插入图片描述
在BGP路由详细信息中可与看到Aggregator属性记录了聚合设备的AS号、Router ID,同时通过Atomic-Aggregate属性标明该路由为聚合路由。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/55210.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】Classification using Logistic Regression

Classification using Logistic Regression 1. 分类问题2. 线性回归方法3. 逻辑函数(sigmod)4.逻辑回归5. 决策边界5.1 数据集5.2 数据绘图5.3 逻辑回归与决策边界的刷新5.4 绘制决策边界 附录 导入所需的库 import numpy as np %matplotlib widget imp…

开源代码分享(9)—面向100%清洁能源的发输电系统扩展规划(附matlab代码)

1.背景介绍 1.1摘要 本文提出了一种新颖的建模框架和基于分解的解决策略,将随机规划(SP)和鲁棒优化(RO)相结合,以应对协调中长期电力系统规划中的多重不确定性。从独立系统运营商(ISO&#xff…

测试|性能测试相关理论

测试|性能测试相关理论(了解) 文章目录 测试|性能测试相关理论(了解)1.什么是性能测试生活中遇到的软件性能问题:性能测试定义:性能测试和功能测试有什么区别:性能好坏的评价指标影响一个软件性…

Redis安装部署(基于windows平台)

redis简介 键值对存储数据库是NoSQL数据库的一种类型,也是最简单的NoSQL数据库。顾名思义,键值对存储数据库中的数据是以键值对的形式来存储的。常见的键值对存储数据库有Redis、Tokyo Cabinet/Tyrant、Voldemort以及Oracle BDB数据库。 Remote Diction…

一起学算法(二维数组篇)

1.概念定义 1.矩阵的定义 矩阵A(nm)的定义时按照长方形排列的复数或实数集合,其中n代表的是行数,m代表的是列数。如下所示,代表的是一个4x3的矩阵 在Java中,我们可以用A[n][m]来代表一个n*m的矩阵,其中A[i][j]代表的是…

2023年的深度学习入门指南(23) - ChatGLM2

2023年的深度学习入门指南(23) - ChatGLM2 在《在你的电脑上运行大模型》这一节,我们曾经介绍过ChatGLM模型,它是当时最好的中文大模型之一。现在,它又更新到了第二代,即ChatGLM2。 当时,我们的技术储备还不足&#…

upload-labs详解------持续更新

目录 注: 搭建: pass-01(前端绕过) pass-02(后缀绕过) pass-03(黑名单绕过) pass-04(Apache解析漏洞\.htaccess文件绕过) 注: 本项目提供的…

Halcon学习之一维测量实战之测量矩形(一)

一、采集图像 (1)测量充电器 测量充电器的引脚,然后每次旋转充电器,让测量矩形都跟着它转,这就是定位+测量, (2)测量钥匙 (3)测量瓶盖 我们后面还会涉及到拟合的问

【Python】Web学习笔记_flask(1)——模拟登录

安装flask pip3 install flask 第一部分内容&#xff1a; 1、主页面输出hello world 2、根据不同用户名参数输出用户信息 3、模拟登录 from flask import Flask,url_for,redirectappFlask(__name__)app.route(/) def index():return hello worldapp.route(/user/<uname…

IDEA中连接虚拟机 管理Docker

IDEA中连接虚拟机 管理Docker &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮…

阻塞队列BlockingQueue详解

一、阻塞队列介绍 1、队列 队列入队从队首开始添加&#xff0c;直至队尾&#xff1b;出队从队首出队&#xff0c;直至队尾&#xff0c;所以入队和出队的顺序是一样的 Queue接口 add(E) &#xff1a;在指定队列容量条件下添加元素&#xff0c;若成功返回true&#xff0c;若当前…

Flask简介与基础入门

一、了解框架 Flask作为Web框架&#xff0c;它的作用主要是为了开发Web应用程序。那么我们首先来了解下Web应用程序。Web应用程序 (World Wide Web)诞生最初的目的&#xff0c;是为了利用互联网交流工作文档。 1、一切从客户端发起请求开始。 所有Flask程序都必须创建一个程序…

webScoket

webScoket是什么&#xff1f; 支持端对端通讯可以由客户端发起&#xff0c;也可以有服务端发起用于消息通知、直播间讨论区、聊天室、协同编辑等 做一个简单的webScoket 客户端配置&#xff1a; 1、新建一个页面叫web-scoket.html <!DOCTYPE html> <html lang"…

【CSS】ios上fixed固定定位的input输入框兼容问题

需求 &#xff1a; 实现一个简单的需求&#xff0c;上方是搜索框并且固定顶部&#xff0c;下方是滚动的内容list 问题 : 若如图上方使用固定定位, 下方用scroll-view, 在安卓上是没有问题的, 但是发现ios上会出现兼容问题 : 问题1: 当content list滚动到中间时再去搜索, 展…

maven引入本地jar包的简单方式【IDEA】【SpringBoot】

前言 想必点进来看这篇文章的各位&#xff0c;都是已经习惯了Maven从中央仓库或者阿里仓库直接拉取jar包进行使用。我也是&#x1f921;&#x1f921;。 前两天遇到一个工作场景&#xff0c;对接三方平台&#xff0c;结果对方就是提供的一个jar包下载链接&#xff0c;可给我整…

明明已经安装字体,但IDEA、CLION无法找到思源黑体/Source Hans Sans的问题解决

IDEA、CLION的Jetbrain系列软件不支持非TrueType的中文字体&#xff0c;而Adobe官方给出的字体却不是TrueType的&#xff0c;所以便会导致Jetbrain系软件无法找到已安装的中文字体&#xff0c;因此我们需要安装TrueType的字体 请在以下Github链接中下载&#xff1a; TrueType思…

java实现钉钉群机器人@机器人获取信息后,机器人回复

1.需求 鉴于需要使用钉钉群机器人回复&#xff0c;人们提出的问题&#xff0c;需要识别提出的问题中的关键词&#xff0c;后端进行处理实现对应的业务逻辑 2.实现方式 用户群机器人&#xff0c;附带提出的问题&#xff0c;后端接收消息后识别消息内容&#xff0c;读取到关键…

使用Three.js创建旋转的立方体

使用Three.js创建旋转的立方体 在本篇技术博客中&#xff0c;我们将介绍如何使用Three.js创建一个简单的场景&#xff0c;其中包含一个旋转的立方体。我们将学习如何设置场景、摄像机、立方体和渲染器&#xff0c;以及如何使用OrbitControls和gsap库来实现立方体的旋转动画和交…

基于Spring Boot的美食分享网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的美食分享网站设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springboot…