BGP详解

BGP基本概念及原理

AS的概念

    AS(autonomous system)一个自治系统就是处于一个管理机构控制之下的路由器或者网络群组。在一个自治系统中的所有路由必须相互连接,运行相同的路由协议,同时分配一个同一个自治系统编号。自治系统之间的链路使用外部路由协议,如BGP。

什么是BGP

一般动态路由协议分为两种:
    IGP协议(内部网关协议):运行在一个AS内部的路由协议。如:RIP、OSPF。
    EGP协议(外部网关协议):运行在自治系统间或路由选择域之间进行路由选择。如:BGP。

BGP 边界网关协议全称(border gateway protocol):
    主要用于互联网AS(自治系统)之间的互联,BGP的最主要功能在于控制路由的传播和选择最好也就是最优的路由。
    AS号的范围1-65535,公共是1-64511;私有自治号是64511-65535。 监听tcp 179端口。

什么时候使用BGP

    1、一个AS允许数据包经过他传输到另一个AS(如一个服务提供商)。
    2、一个AS到其他AS的多条连接。
    3、需要对进入和流出你的AS流量进行操作。

什么时候不建议使用BGP

    1、到internet或者其他的AS域中只有一条链路 。
    2、你的AS不关系路由的选路和策略路由的实施。
    3、BGP路由器的CPU和内存资源不足。
    4、对BGP选路和路由过滤不熟悉。
    5、在两个自治系统之间是狭窄链路。
    6、可以是用静态路由来替代BGP。

BGP的邻居关系及其消息类型

BGP的邻居关系

BGP的邻居是建立在任意两个可以建立TCP连接的路由器之上(不一定直连,也不一定在同一个AS中,tcp179可达)。

在一个AS内部路由器BGP邻居关系叫做IBGP(管理距离200)。

在不同AS之间建立的邻居关系叫做EBGP(管理距离20)。

虽然BGP的邻居可以建立任意两个可以建立tcp连接的路由器上,但一般要求两个AS之间的
对等体(EBGP)要物理连接,除非有特殊要求。

BGP和IGP的区分

    一般是先配置完IGP协议之后再开始配置BGP。

    启动BGP的路由器有一个存放大量的BGP路由条目的BGP的转发表,BGP会把最优路径加入路由表中。

BGP的路由表来源:
    1、同时BGP协议的路由器运行了IGP路由协议,通过IGP路由重分发进BGP路由表中的方式。
    2、将路由表中存在的路由手动宣告一条网络进BGP。

IBGP-peer和EBGP-peer如下图所示:
BGP详解

BGP消息类型

OPEN报文 协商BGP邻居的各项参数,建立邻居关系使用。Tcp三次握手后第一个包。
UPDATE报文 协商BGP邻居的各项参数,建立邻居关系使用。Tcp三次握手后第一个包。
NOTIFICATION报文 用户BGP出现故障向对等体发送后,BGP立即断开连接。
KEEPALIVE报文 维持邻居关系。另一个作用为回复OPEN消息。
ROUTE_REFRESH报文 要求对等体从新发送指定地址簇的路由信息。策略变化时候触发。

    BGP建立对等体的三次握手报文,目标端口179。
BGP详解
    三次握手后,第一个Open报文,携带BGP各项参数,建立BGP邻居体。
BGP详解
    Keepalive报文维护邻居关系,也作为Open报文回复,认知Open报文内容。
BGP详解
    Update报文宣告路由,撤销路由。
BGP详解
BGP详解
    NOTIFICATION报文是BGP对等体出现故障,通知对等体立即断开。
BGP详解

BGP的邻居状态机

Idle状态 尝试建立TCP连接,开始准备TCP连接并监视对等体启动TCP连接。
Connect状态 发送TCP包,等待建立连接完成。如果建立不成功,反复尝试进入Active状态。
Active状态 反复发送TCP建立,TCP建立未成功,反复尝试。
Open send状态 TCP建立成功,发送Open报文携带协商参数。
Open confirm状态 发送Keep alive,协商成功啦,自己开始发保活包,也等待对方保活包。
Establish状态 收到keep alive报文,开始通过update报文通告路由信息。

BGP的属性

BGP协议有哪些不足

    下图场景,在F去访问A宣告的路由时,只能通过F->E->C/D->B-A路径访问。当数据包到达C/D时,由于C/D没有运行BGP协议,故而会把去往A宣告的路由丢弃。
    解决方法:将IGP路由重分发到BGP中、在IGP中全网运行BGP 。全网BPG又会有有哪些问题?
BGP详解
BGP协议是如何防止环路
    AS path属性在不同AS直接传递追加。当BGP路由学到了一条包含自己AS的路由, 就认为出现了环路。
    当AS path在IBGP直接传递时候。不会发上改变。解决方法EBGP水平分割。意思就是当IBGP学到的路由,就不会传送给自己的BGP对等体。导致E对等体学习不到B发布的BGP路由面对水平分割问题。解决办法:反射器、联邦。
BGP详解

BGP的属性分类

公认的必选属性 所有的BGP都认识并且遵循。在Update报文中携带该属性。包括:Origin、As Path、Next Hop。
公认的自选属性 所有BGP认识,不一定必须包含在Update报文中。包括:Local-Preference、ATOMIC_Aggregate。
任选可透明传输属性 如果我不认识,但我会传给下一个可不支持此属性,但是你要传给其他对等体。包括:Community、Aggregate
任选非可透明传输属性 我不认识我要扔掉。BGP进程收到这样的属性不识别。包括:MED、Originator ID、Cluster list。

BGP的属性详解

    Preferred value属性:
        从EBGP多条链路学习到了同一个地址,只是本地路由有效,也不会传递给其他路由。
        华为BGP私有路由属性,范围0-65535,越大越优先。
        在路由本地配置,只针对本路由有效,不会传播给任何BGP对等体。
        本地始发的路由默认Preferred_value为0,从其他对等体学到的路由缺省值也为0。
        可以使用display bgp routing-table 查看prefVal对应值。
BGP详解
    Local Preference(本地优先级)属性:
        在同一个AS中从两个不同的IBGP邻居学到同一个目的的路由,可传递给IBGP邻居,不能传
给EBGP邻居。
        本地优先级,公认的自决属性,用于告诉AS中的路由器,那条路是离开AS的首选路径。
        Local Preference越大越优先,缺省值100
        只能发给IBGP对等体,不能传递给EBGP对等体。
        EBGP收到对等体携带了LP,则会触发 Notifacation报文
        路由使用network命令和重分发到BGP中LP缺省100 可以使用 bgp default local-preference命令修改LP的值。
BGP详解
    AS Path(AS 路径)属性:
        防环路,优选路由,在IBGP之间传递不修改path,在EBGP之间修改。同一个AS中path传递会引发环路,使用水平分割防止环路,是BGP路由传递过程中所经历过的AS号的列表。
        AS path可以保证EBGP对等体下的无环,可以作为路由优选的依据之一。
        BGP路由通告给EBGP对等体会在AS_PATH中追加本地AS号,通告给IBGP邻居时候不修改AS Path。
BGP详解
    AS path的四种类型:

AS_SET 一个去往特定目的所经路径上无序AS号列表。
AS_SEQENCE 一个有序的As列表。
AS_CONFED_SEQENCE 有序的AS,联邦AS中使用。
AS_CONFED_SET 无序的AS,联邦AS中使用。

BGP详解
    ORIGIN(起源)属性:
    路由优选顺序:igp>egp>incomplete
        igp i 通过BGP network的路由,也就是去医院IGP的路由,因为BGP的network必须保证该网络在路由表中。
        egp E 是由EGP这样早期协议来重分发布而来。
        incomplete ? 从其他渠道学到的,路由来源不完全。
BGP详解

    MED(multi exit discriminator)属性
        MED是可选非传递属性,是一种度量值。MED属性值越小越优先。
        用于外部对等体指入进入AS的首选路径,当入口多个时,AS使用MED动态影响其他其他AS如何选择路径。
        MED注要用于在AS之间影响BGP选路,MED传给EBGP对等体后,不携带这参数,传给IBGP时携带该参数。
BGP详解
    MED 使用注意事项及默认操作:
        缺省情况下,只比较来自同一个对等体AS的BGP路由,就是如果去往同一个目的地两条路由来自不同的AS就不进行比较咯。
        MED只在直接相邻的AS间影响业务量,不会跨越AS传输。什么时候将MED通告给EBGP对等体分为:
                1、如果BGP路由是本地始发的通告network或者import-route命令引入的,则缺省携带MED属性发给EBGP对等体。
                2、如果该BGP路由是从其他BGP对等体学习,通告给EBGP对等体不携带MED属性。
        在IBGP直接传输的时候MED,会携带该参数,除非做策略,否正在传输时候不会改变也不会丢失。
        默认操作,IGP学习到的路由,并通告network或者import引入bgp,产生bgp路由中MED默认是BGP的metric值,
        如果本地直连或者静态路由通过network或者import引入,MED默认是0
BGP详解
    Next_Hop属性:
        公共必遵属性。指到达目的网络的下一跳地址。(查询是递归查询)
        当路由器学习到BGP路由后,需要对BGP的Next_hop属性进行检测,该ip必须可达, 不可以达的话BGP路由不可用。
        在EBGP及IGBP对等的场景中,Next_Hop的缺省操作存在差异。
        路由将BGP路由通告给自己的EBGP对等体时,将路由的Next_Hop设置为自己更新源地址。
        当通告给IBGP路由时候,Next_Hop表示不变。由问题就是会产生路由黑洞,在bgp配置时候指定peer 地址 next-hop-local
        缺省操作,不同的AS中路由路由对等体在同一个网段,默认下,Next_Hop地址将保持不变并传给BGP对等体。
BGP详解
BGP详解
    Community(团体属性):
        该属性为可选传递属性,是一种路由标记用于简化路由策略的执行。策略可以根据不同的community做相应的动作。
        string:格式为32bit,也就是4byte,通常两种形式呈现,一是十进制的整数格式, 二是十六进制的格式AA:NN,AA表示AS号,NN是自定义编号。
        no-advertise:收到携带此属性的路由,该路由不能传递给任何BGP对等体
        no-export:收到携带此属性的路由,只能在本域内使用(不 包括联邦AS),不能传给任何EBGP对等体。
        no-export-subconfed:收到携带此属性的路由,只能在本区域内使用,包括联邦AS。
BGP详解
    Atomic_Aggregate及aggregator:
        汇总其他不通AS中的路由,但是汇总成功后会丢失明细路由的路径属性,需要给下BGP对等体告知并提示汇总点,及其汇总点AS
BGP详解

BGP的路由反射器

    解决路由黑洞问题,不得不在该AS中每台路由器上运行BGP并建立全互联的对等关系。解决IBGP在传输过程中不修改AS号,会导致环路问题,出现水平分割。
    水平分割,当IBGP对等体收到路由后就不能再次传个自己的IBGP路由对等体。不得不全网各个路由运行BGP。

    全网BGP会产生以下短板:
        需要维护大量TCP链接和BGP链接,在路由数量较多时。
        AS内的BGP网络可扩展性较差。
        出现了路由反射器和联邦的概念。
    反射器的相关角色:
        路由反射器
        客户端
    RR的路由反射规则:
        路由学习来自非 client IBGP对等体,则反射给自己所有的client。
        路由学习来自client,则反射给所有非client IBGP对等体和除了该Client之外的所有Client。
        如果路由学习通告EBGP对等体,则发送给所有的client和非client IBGP对等体。
BGP详解
BGP详解
    RR场景下的BGP防环路机制:
        通过Originator_ID和Cluster_List可选属性防止环路。
        originator:
            是RR在将一条路由尽心反射时,会将originator设为该路由器的BGP Route id。
            如果路由为本地AS始发,则originator id被设置为BGP路由宣告的BGP Route id。
            如果路由为非本地AS始发,则originator id被设置为本地AS的边界路由器的 Route id。
            当一个As中出现多个RR时候,orginnator id是第一个RR创建的,并且其他RR不能修改。
            当bgp路由收到一条携带Orginnator id的属性路由,发现其id和本身路由id一致,则忽略更新。origintor 和Cluster_list 属性影响BGP路径决策。
        Cluster(反射簇):
            包括RR和client。一个AS中可以出现多个反射簇。缺省反射簇有唯一id,即为RRroute id。
            当一条路由反射后,会携带RR该簇的cluster_id 会被添加到路由的cluster_list中。
            当收到携带cluster list属性的BGP路由,且属性中包含自己的cluster id时候,该出现环路,忽略此更新。
BGP详解

BGP的联邦

    水平分割导致IBGP邻居不能更更新。
    通告给联邦的BGP路由,Next_Hop、MED、LP属性在整个联邦范围内缺省不会发生改变。
    BGP路由在联邦内的EBGP对等体间传递时,路由将成员AS号插入ASpath,使用特色AS_path储存【(联邦as)外部AS】,成员间的AS不会公布到联邦外,也对联邦外AS而言,联邦as是不可见的。
    AS_path中的成员AS用于联邦内避免环路,联邦内成员AS号不参与ASpath长度计算。
BGP详解
BGP详解

BGP路由策略

BGP的路由汇总

    BGP路由汇总之自动汇总:
        BGP支持路由汇总,默认此功能关闭。通过summary automatic开启。
        BGP路由汇总功能只对本地import-route导入的路由生效。
        汇总的路由会按照主类网络进行汇总。无法精细化到掩码进行汇总。
BGP详解
    BGP路由汇总之手动汇总:
        在汇总路由上手动添加一条静态,重分发到BGP协议中。
        使用Aggregate命令进行汇总(推荐使用)。
BGP详解
        使用 aggregate172.16.0.0 16 命令效果。
BGP详解
        使用 aggregate 172.16.0.0 16 detail-suppressed 命令效果。
BGP详解
        使用 aggregate 172.16.0.0 16 detail-suppressed as-set 命令效果。
BGP详解
BGP详解
        使用 aggregate 172.16.0.0 16 as-set suppress-policy supp 命令效果。
BGP详解
        使用 aggregate 172.16.0.0 16 as-set attribute-policy attmap 命令效果。
BGP详解
        使用 aggregate 172.16.0.0 16 detail-suppressed origin-policy ori 命令效果。
BGP详解

正则表达式及其AS-Path-Filter

    按照一定的模板来匹配字符串的公式。常见字符如下:
        .         匹配任意单个字符
        ^         一个字符串开始
        $         一个字符串结尾
        _         匹配任意一个分割符如:^、逗号、空格、Tab、等
        |         管道符,逻辑或的意思
        \         将特殊字符转义成普通字符
        .         匹配任意单个字符
        ^         一个字符串开始
        $         一个字符串结尾
    AS-Path-Filter是根据正则表达式配置匹配对于AS的的路由,进行策略。
BGP详解
BGP详解

使用community执行策略

    Community是一种路由标记,根据BGP路由中的community来进行相应的路由策略。
BGP详解
BGP详解
    为BGP的路由追加Community。
BGP详解
    使用ip community filter 来匹配BGP路由的community属性。之后使用route-policy做相应动作。
BGP详解

IP-Prefix

    BGP使用IP-frefix命令来进行路由过滤。
         在出方向进行过滤:
BGP详解
         在入方向进行过滤:
BGP详解

Filter-Policy

    BGP使用Filter-policy命令来进行路由过滤。
          使用ACL加Filter-policy进行过滤:
BGP详解
          使用Ip-prefix加Filter-policy进行过滤:
BGP详解

Route-Policy

    BGP使用Route-policy命令增加路由community属性。
          使用Route-policy在network宣告路由时候增加community属性:
BGP详解

BGP的选路原则

去往同一个目的的多条路由,会根据BGP路由属性由上到下进行PK。PK胜负区分后,将胜利一方写入路由表中。

1、优选具有最大的Preferred-value的路由(华为特有)思科( weight)。
2、优选具有Local_preference的路由。
3、优选起源于本地的路由。
4、优选AS_PATH最短的路由。
5、Origin(IGP>EGP>Incomplete)。6、优选MED最小的路由。
7、优选EBGP对等体所通告的路由。
8、优选到Next_Hop的IGP度量值小的路由。
9、BGP路由负载分担。
10、优选Cluster_List最短的路由。
11、优选Route-ID最小的BGP对等体发来的路由。
12、优选Peer-ip地址修小的对等体发来的路由。
一个具有注脚的文本。

注:文中选路原则参照华为VRP v8版本,其他版本或厂商可能会略有不同。