BGP特性(8)

Posted

tags:

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

参考技术A 一、MP-BGP

传统的BGP-4只能管理IPv4单播路由信息,MP-BGP对BGP-4进行了扩展,提供对多种网络层协议的支持;

MP-BGP使用 扩展属性 和 地址族 来实现对IPv6、组播和VPN相关内容的支持,BGP协议原有的报文机制和路由机制并没有改变;

BGP4+,指MP-BGP对IPv6单播网络的支持特性;

MBGP,指MP-BGP对IPv4组播网络的支持特性;

MP-BGP为IPv6单播网络和IPv4组播网络建立独立的拓扑结构,并将路由信息存储在独立的路由表中,保持单播IPv4网络、单播IPv6网络和组播网络之间的路由信息相互隔离,实现用单独的路由策略维护各自网络的路由;

MP-BGP扩展属性

为实现对多种网络层协议的支持,BGP需要将网络层协议的信息反映到NLRI及Next-hop,因此MP-BGP引入了两个新的可选非过渡路径属性:

1、MP_REACH_NLRI    多协议可达NLRI

用于发布可达路由信息和下一跳信息;

内容含义:

(1)Flag标志位:可选非过渡属性;

(2)AFI为IPv6,SAFI为单播;

(3)可达路由信息为2000:10:1:1::/64,下一跳地址为fe80::2;

2、MP_REACH_NLRI    多协议不可达NLRI

用于撤销不可达的路由信息;

内容含义:

(1)Flag标志位为可选非过渡属性;

(2)AFI是IPv6,NAFI为单播;

(3)需要撤销的路由为2000:10.1:4::/64 , 2000:10:1:5::/64;

二、BGP ORF     Outbound Route Filtering出口路由过滤

能将本端设备配置的基于前缀的入口策略通过路由刷新报文发送给BGP邻居;

BGP邻居根据这些策略构造出口策略,在路由发送时对路由进行过滤;

这样不仅避免了本端设备接收大量的无用路由,降低了本端设备的CPU使用率,还降低了链路带宽利用率;

需要两端同时配置,否则不生效,配置命令如下:

peer x.x.x.x capability-advertise orf ip-prefix both

三、路由衰减 dampening         只对EBGP路由起作用

路由振荡指路由表中添加一条路由后,该路由又被撤销的过程;

当发生路由振荡时,设备就会向邻居发布路由更新,收到更新报文的设备需要重新计算路由并修改路由表,所以频繁的路由振荡会消耗大量的带宽资源和CPU资源;

为了防止频繁的路由振荡带来的不利影响,BGP使用路由衰减来抑制不稳定的路由;

1、惩罚值penalty value     

用来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定;

路由每发生一次振荡,路由就会增加1000的惩罚值;

2、抑制阀值suppress value    

当惩罚值达到或超过抑制阀值时(缺省为2000),路由被抑制(不加表,不通告给邻居);

3、半衰期half-life

被抑制的路由每经过一段时间(半衰期,缺省为15min),惩罚值会减少一半;

4、使用阀值reuse value

当被抑制的路由经过半衰期减少到可用的阀值(缺省为750),路由恢复可用(加表,通告给邻居);

5、最大上限值ceiling

惩罚值增加到一定程度后(惩罚上限值,缺省为16000),不会再增加;

6、抑制时间suppress time

从路由被抑制到路由恢复可用的时间;

路由衰减配置示例:

配置半衰期10分钟、使用阀值1000、抑制阀值2000、最大惩罚值5000;

bgp 100

dampening 10 1000 2000 5000

四、对等体组

在大型BGP网络中,对等体的数量会很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令,邻居越多配置量越大;

对等体组是一些具有某些相同策略的对等体的集合,对等体组中的对等体可以继承对等体组的配置,当对等体组的配置改变时,组内成员的配置也相应改变;

利用对等体组可以实现批量配置,简化管理的难度,并提高路由通告效率;

对等体组配置示例:

group ttt external

peer ttt as-number 200

peer ttt connect-interface loopback0

peer ttt ebgp-max-hop

peer 10.1.2.2 group ttt

peer 10.1.3.3 group ttt

五、BGP认证

BGP认证分为md5认证和keychain认证;

md5认证只能为TCP连接设置认证密码;

keychain认证除了可以为TCP连接设置认证密码外,还可以对BGP协议报文进行认证;

BGP使用TCP作为传输层协议,可以在建立TCP连接时进行md5认证,认证由TCP来提供;

peer x.x.x.x passward cipher xxx

md5认证配置后生成单一密码,需要人为干预才可以切换密码;

配置BGP keychain认证前,必须配置keychain-name对应的keychain认证;

peer x.x.x.x keychain xxx

keychain具有一组密码,可以根据配置自动切换,适用于对安全性要求比较高的网络;

六、BGP GTSM    Generalized TTL Security Mechanism

开启BGP GTSM功能,设备对所有BGP报文的TTL值进行检查,丢弃TTL值小于阀值的攻击报文,避免网络攻击报文占用CPU;

peer x.x.x.x valid-ttl-hops xxx

gtsm default-action drop

GTSM是对称的,需要在对等体双方都配置;

BGP基础知识

文章目录

BGP介绍

边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4+,BGPV4+在BGPV4的基础上支持多个地址族,如IPv6。

BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路

AS-自治系统

  • AS(自治系统),由单一的机构或组织所管理的一系列IP网络及设备所构成集合。
  • 划分AS的原因:1.整个地球上的网络范围太大,单个网络收敛很慢且网络延迟大;2.每个网络可能是某个组织或公司组建的,他们并不想将自己辛苦组建的网络交给别人管理,所以需要自治管理
  • 为了方便对自治系统进行管理,给每一个自治系统设计了一个号,即AS号。AS号由16位二进制构成,取值范围:0 - 65535,其中1 - 64511号为公有AS号, 64512 - 65534被设定为私有AS号。
  • 因为传统的AS号存在不够用的情况,所以,目前大部分设备均支持拓展的AS号,由32位二进制构成。中国由于加入互联网较晚,所以中国的AS号大多都是扩展AS号。

BGP原理概述

想要AS之间互相通信,我们可以使用重发布,通过重发布将AS的路由信息导入到其他AS以达到AS间的互通,和重发布类似,BGP也是通过发送AS的路由信息以实现全网可达。那为什么AS间更多的是使用BGP而不是重发布呢?

BGP和重发布的区别

  • 重发布要求AS间需要有ASBR,ASBR同时具有两个AS的路由信息,通过ASBR实现路由共享;而BGP是没有ASBR的,由于AS是自治系统,如果有ASBR,那这个ASBR归谁管理?如果只归一方管理,那他可以通过路由策略提高自己AS的流量的转发速度,所以BGP是AS间各出一个或多个运行BGP的路由器,让这些运行BGP的路由器建立邻居关系后交换路由信息。

  • 重发布在导入路由时会洗掉开销值,会造成选路不佳的问题,而BGP具备强大的路由策略,BGP为路由信息设计了路径属性,通过属性进行选路,是的选路过程更加灵活,可控性更高。

BGP特性

  • BGP协议是无类别路径矢量协议。无类别即BGP在传递路由时会携带子网掩码;路径矢量,不同与距离矢量,路径矢量是以一个AS为单位,而距离矢量是以一个路由为单位,距离矢量是一种路由算法,而BGP不需要计算路由,它只需将以计算好的路由传递给了邻居即可。

  • 我们对IGP(内部网关协议)和EGP(外部网关协议)的要求不同,IGP需要在一个AS内计算路由,所以我们要求IGP选路佳、收敛快、占用资源少;而EGP不同,EGP协议只需传递AS以计算好的路由,所以我们对EGP的可控性、可靠性要求更高

  • EGP的追求:可控性: AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更容易做策略,以弥补重发布的不足。为了保证路由传递的可控性,更方便干涉选路,BGP协议舍弃了开销值,取而代之的是他为路由信息设计了很多路径属性。可以通过属性进行选路,是的选路过程更加灵活,可控性更高。

  • EGP的追求:可靠性:BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;又为了保证传输的可靠性,直接选择TCP协议作为传输层的协议来完成数据收发,使用的是TCP 179号端口。但使用TCP协议通讯也会造成一些问题,传输效率降低,只能单播通讯(TCP需要去建立会话),占用资源会加大 ,用TCP之后,便不能通过广播或者组播去自动发现邻居进行通信了。

  • 由于BGP依靠TCP协议传输数据,BGP协议可以实现非直连建邻,非直连建邻的前提条件是邻居双方网络可达, BGP的非直连建邻是建立在IGP的基础上。

  • BGP的邻居更准确的说是BGP的对等体,我们可以根据邻居关系的建立情况,将BGP的邻居关系分为两种:

  • 因为EBGP对等体之间一般采用直连建邻的方法,所以,我们将EBGP对等体之间的数据包中的TTL值设置为1;而IBGP对等体之间往往需要非直连建邻,所以,IBGP对等体之间的数据报中的TTL值我们设置为255;当然,如果EBGP对等体之间需要非直连建邻,则需要手工修改TTL值

  • EGP的追求::AS-BY-AS:BGP将一个AS作为一个单位来看待,以一个AS为一跳,

BGP特点总结

  • 无类别路径矢量 -----距离矢量的升级版—AS–BY–AS
  • 使用单播更新来发送所有信息;基于TCP 179端口工作
  • 增量更新,仅触发更新,无周期更新
  • 具有丰富的属性来取代IGP中度量进行选路,有多个参数控制协议
  • 可以在进项和出项对流量实施强大的策略,可控性非常强大
  • 默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
  • BGP支持认证和聚合(将现有的IP地址合并成较大的、具有更多主机地址的路由域)

BGP的数据包

BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障。

Open包

Open包主要用来建立邻居关系,正常进收发一次即可,Open包会携带一些建邻需要协商的参数,邻居互相认同对方的参数才可以建立邻居关系。以下为Open包会携带的一些参数:

  • AS号:在手工建立邻居关系需要时声明邻居的AS号。对端收到后会检查声明的AS号是否和本地的AS号一致,一致才可以建立邻居关系。
  • 认证:BGP在建邻时如果做认证的话,需要比对双方认证口令,不一致则无法建立邻居关系。
  • Router-ID:主要区分和标定路由器。OPEN报文中携带RID的目的是为了确保双方的RID不一致。确保其唯一性,如果相同,则无法正常建立邻居关系。

这里的RID和OPSF的格式一致,也是由32位二进制构成,并且遵循IP地址的格式。也可以通过两种方法获取,一种是手工配置;另一种是自动获取(先在自己路由器的环回接口中选择最大的IP地址作为RID,如果没有环回接口,则在自己物理接口中选择IP地址最大的作为RID)。
注意:在接收邻居数据包时,其中的源IP地址手工指定的邻居的IP地址一致才可以正常建立邻居关系。

  • holdtime:保活时间, 这个参数默认值为 180S,即180S内若收不到对方发送的keeplive或者UPdate包则将判定BGP链接中断。双方建邻时携带这个值,但是并不要求必须相同。但是,执行时必须相同,所以,将会选择二者中较小的作为执行时间

keeplive包

  • 用来保活邻居关系,默认周期1min查询邻居关系是否存在;实际保活TCP会话
  • Keeplive报文的发送周期为保活时间(hold time)的1/3,保活时间默认为180S,则周期发送时间默认为60S。
  • KeepLive包还有一个作用:在收到对方发送的OPEN报文后,临时充当确认包的作用。

TCP本身具有确认机制,可以确保传输的可靠性,这里的确认主要是确认OPEN报文中携带的参数,如果认同对方的参数,则将回复Keeplive包进行确认。

Update包

  • BGP中的更新包,用来携带路由条目,包括目标网段,子网掩码信息以及BGP的各种属性
  • 在UPdate包中存在撤销路由字段,我们可以直接将不可达的路由信息放在该字段下进行通告,以达到传递失效信息的目的。而不需要像RIP那样采用带毒传输的方式。

Notification包

  • BGP设计的一个告警机制,出现错误数据时收发,当BGP检测到一个错误的时候,将会用这个包进行告警,告知对端错误点在哪

Route-refresh包

  • 用于改变路由策略后请求对等体重新发送路由信息,前提是对等体双方均支持路由刷新

BGP的状态机

BGP的状态机仅描述BGP对等体建立过程中的状态变化。因为BGP可以做到建立邻居关系和发布路由分开完成。

  • idle状态:空闲状态,一旦指定邻居,就处于idle状态,然后BGP会首先检查指定的IP地址在本地路由表中是否可达,如果可达,则开始尝试建立TCP会话,进入下一个状态;如果不可达,则将停留在idle状态
  • connect状态: 进行TCP会话连接的状态。如果TCP会话建立成功,则进入下一个状态;如果TCP会话建立失败,则进入Active状态,该状态会反复尝试TCP连接,如果尝试超时,则放弃重连,退回到idle状态。

注意:在建立TCP会话连接时,双方都会尝试建立连接,一方建立成功,则将创建一个双向的TCP会话通道;双方都建立成功,则将会出现两个双向通道。则需要关闭一个TCP通道。后面开始发送OPEN报文,其中会携带RID,双方将比较RID,仅保留RID大的一端发起的TCP连接,RID小的一端发起的TCP连接通道将被断开。

  • OpenSent: 开始发送OPEN报文,报文中携带建立邻居关系所需的参数。当收到对端发送的OPEN报文后,并且报文里的参数没有问题,则将回复一个keeplive作为确认,进入下一个状态;
  • OPENConfirm:在该状态,本段在等待对端keeplive包,当对端收到本端的Open报文且确认参数无误,发送keeplive包进行确认进入下一个状态。
  • Established : 建立完成状态 ,标志着对等体关系的建立

BGP的工作过程

  • 配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输
  • 会话建立后,邻居间正常收发一次open报文,并互发keeplive包进行确认建立BGP的邻居关系,并生成邻居表
  • 邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系,周期保活TCP会话
  • 邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表;
  • 本地对BGP表中的路由进行选择,默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)
  • 若出现错误信息,邻居间将使用Notification报文进行报错操作
  • 收敛完成,仅keeplive周期保活即可,默认保活时间为180S,周期发送时间为60S。
  • 若发生结构突变,则将直接发送UPdate报文进行触发更新。

BGP的路由黑洞

  • AS间通过EBGP对等体交换路由信息,然后通过单播将获取到的路由信息发送给IBGP对等体,使AS所有运行BGP的设备拥有了所有AS的路由信息,如下:R3从R1学到AS100的1.0.0.0/8的路由信息,然后通过单播传给R7,R7传给R2,所有AS内运行BGP的路由器都学到了1.0.0.0/8的路由信息
  • 矢量协议的特点是谁发给我这条路由,我到这条路由就找谁,如果R7想ping1.0.0.0/8,那R7就会将ping包发送给R3,由R3转发。在R7发送ping包时,它首先查看路由表查找R3的位置,假设R7通过R4找R3,那R7就会将ping包发给R4,当这个ping包来到R4上,R4看二层是找自己的,解封装看三层,发现这个ping包的DIP为1.0.0.0/8网段的,但R4上没有运行BGP,没有收到关于1.0.0.0/8网段的路由信息,所以R4就会把这个ping包丢弃,虽然R7上有1.0.0.0/8的网段路由信息,但无法与R1通信,这就是BGP的路由黑洞。
  • BGP的路由黑洞:由于BGP协议可以非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器,导致BGP路由传递后,显示控制层面可达,但是,数据层面,流量经过未运行BGP协议的路由器时,无法通过,形成路由黑洞。

解决路由黑洞

  • AS内的设备全部运行BGP:既然路由黑洞是未运行BGP协议的路由器导致的,那就让AS内所有的设备都运行BGP获取路由信息。但这个方法是不现实的,可以承载越多路由信息的路由器其价格也就越昂贵,每一台运行BGP的路由器需要承载所有AS的路由信息,可以承载世界上几万几十万的路由信息的路由器价格也是上百万的,所以,是不可能让AS内的设备拥有全部路由信息的。

  • AS内运行BGP的设备将从BGP重发布到AS内运行的IGP协议里:通过重发布将BGP所有路由导入到IGP协议里,同样需要AS内所有设备可以承载所有AS的路由信息,同第一条一样不现实。

  • 物理、逻辑拓扑全连:直接让AS内运行BGP协议的所有设备互相连接,使IBGP间通信不需要经过未运行BGP协议的设备,但由一个AS地理范围可能很大,IBGP间距离较远,所以使用真实链路连接IBGP也不现实,所以我们可以用GRE/MGRE等vpn技术,通过虚拟链路连接IBGP对等体

  • MPLS:当前工程中主要使用的解决BGP路由黑洞方案,MPLS后续会讲。

BGP为了防止BGP路由黑洞的产生,提出了BGP同步机制:即当一台路由器从自己IBGP对等体学习到一条BGP路由时,他不能将这条路由通告给自己的EBGP对等体,除非他又从IGP协议中(包含静态路由)学习到这条路由。也就是要求IBGP路由和IGP路由同步
同步要求将BGP路由重发布到IGP协议中,但我们已经说过这种方法并不现实,所以华为设备默认关闭同步机制

注意:在目前我们的学习情况下,我们在做BGP实验时都是用第一种方法解决路由黑洞

BGP的防环机制—水平分割

EBGP水平分割

  • 下图中有三个AS,其中AS:1的一条路由信息传给了AS:2,AS:2将这条路由信息传给AS:3,如果AS:3又将这条路由信息传回给AS:1且AS:1将这条路由信息加表,就会导致路由环路。

  • BGP协议在路由条目中有一条专门记录所经过的AS编号路径属性,在上图中AS:1发出的路由信息会携带编号1,AS:2将这条路由信息转发给R3时,添加编号2;AS:3将这条路由信息转发给AS:1时,也会添加编号3;最终AS:1收到这条路由信息的AS_PATH属性记录了1、2、3,R1发现该属性中有自己的编号则拒绝接受这条路由信息,避免环路产出。

IBGP水平分割

  • 下图在AS:64513内,R2、R3、R4两两建邻,如果R2发布一条路由信息由R4到R3,再到R2,并且R3转发给R2的路由信息改变了R2的路由表,则会形成环路。

  • 因为BGP的AS-BY-AS的特性,导致AS内部被认为是一个整体,在默认情况下,路由的属性是不会发生变化的,所以,无法通过属性来进行防环。

  • IBGP水平分割:当一个路由器从一个IBGP对等体出学习到某一条BGP路由时,他将不再把这条路由信息通告给其他的IBGP对等体。

  • IBGP水平分割可以有效的解决IBGP对等体之间路由回传造成的环路问题,但是,也会引发路由信息传递障碍问题。如下图中,如果R1学到其他AS的路由信息,它会将这些路由信息传递给R2,但由于IBGP水平分割,R2不能将这些路由信息传递给R3,R3就无法获取R1收集到的路由信息。

  • 想要避免IBGP水平分割带来的问题,可以让所有AS内部运行BGP的路由器均建立IBGP对等体关系, 这种建立全连的IBGP对等体的方案并不是最佳解决方案,因为,当一个AS内运行BGP协议的路由器数量较多时,建立全连的邻居关系,将造成大量的资源浪费,并且降低网络的可扩展性。

  • BGP存在两个技术专门用于解决IBGP水平分割带来的问题:1.路由反射器,2.联邦。

BGP基本配置

EBGP对等体直连建邻

  • 启动BGP进程,1 指的时该路由器所在的AS号;因为一个路由只能属于一个AS中,所以一个路由器只能启动一个BGP进程
[r1]bgp 1
[r1-bgp]
  • 配置RID,BGP要求邻居间的RID不能相同,可以手工配置,也可以自动获取
[r1-bgp]router-id 1.1.1.1
  • 指定建邻的IP地址和邻居所在的AS的编号,指定邻居IP后,如果该邻居可达,则尝试建立TCP会话。
[r1-bgp]peer 12.0.0.2 as-number 2 -- #邻居关系指定是双向的

IBGP对等体环回建邻

  • 由于,IBGP邻居处于同一个AS中,正常一个AS中存在大量的备份路径,若使用物理接口建立邻居关系,将浪费这些备份或者负载均衡的路径;故建议使用环回接口来进行IBGP对等体关系的建立
[r2-bgp]peer 3.3.3.3 as-number 2 --- #指定建邻的IP地址和邻居所在的AS的编号
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 ---- #指定发送给邻居的数据包的源IP为该接口的IP
  • 由于邻居在收到数据包时,会检测该包的源IP和本地指定的邻居IP是否相同,不同则无法建邻。所以一旦使用环回地址作为建邻地址,同时需要修改源IP地址未本地环回地址

EBGP对等体环回建邻

  • EBGP间使用环回建邻首先要有一条路由可以去往邻居的环回,一般我们使用静态路由
[r1]ip route-static 2.2.2.2 32 12.1.1.2
  • 因为EBGP对等体之间一般采用直连建邻的方法,所以,EBGP对等体之间的数据包中的TTL值设置为1,这意味着R1只能与R2的g 0/0/0口通信而不能与R2的环回通信,所以使用EBGP对等体环回建邻时需要修改数据报的TTL值
[r1-bgp]peer 2.2.2.2 ebgp-max-hop 2 --- #将发往该邻居的数据包的ttl值修改为2
[r1-bgp]peer 2.2.2.2 ebgp-max-hop ---- #后面不加数字,相当于将TTL值改为最大值,255。

总结:再建立对等体关系时,建议EBGP对等体间直连建邻IBGP对等体间建议使用环回接口进行建邻

以上是关于BGP特性(8)的主要内容,如果未能解决你的问题,请参考以下文章

BGP 路由属性

BGP基础知识

BGP惩罚机制

BGP小结

BGP协议

暑期项目特训学习