BGP基础

边界网关协议
用于在自治系统之间传递路由

自治系统

一组被统一管理,运行同一个IGP协议的路由器组成的网络范围

自治系统编号

  • 公有AS
    • 1-64511
  • 私有AS

    • 64512-65534

      BGP协议特性

  • BGP只负责把路由从一个AS传递到另外一个AS;从其他AS传递过来的路由在本AS内部的扩散要依靠IGP

  • BGP是路径矢量协议,一跳是一个自治系统;当一条路由传入某个AS,该路由的下一跳会变为上个AS的出接口的IP地址;当一条路由在某个AS内部的路由器之间传递时,下一跳不变
  • AS防环机制:当一条路由每从一个AS传出,会把该AS的编号按照从右至左的顺序依次记录在AS_PATH属性中;一个路由器从其他AS收到一条路由通告,会检查本路由器的AS编号是否出现在该路由条目的AS_PATH属性中,出现了则该路由条目不学习
  • BGP基于TCP协议传输,必须手动配置邻居关系;源端口1024以上随机;目的端口179
  • BGP第一次发送完整的路由表,后续只发送增量更新
  • BGP有多种属性可以控制路由选择

    BGP相关术语

    BGP - 图1
    BGP发言者(BGP Speaker):发送BGP消息的路由器称为BGP发言者,它接收或者产生新的路由信息,并发布给其他BGP发言者。
    Router ID(RID):Router ID是一个32位比特无符号的整数,用来在自治系统中唯一标识一台路由器。路由器如果运行BGP协议,则必须存在Router ID。Router ID可以是手工配置或这是路由协议自动选举。
    BGP对等体(BGP Peer):相互交换消息的BGP发言者之间互称对等体(Peer)。
    IBGP对等体(Internal BGP Peer):如果BGP对等体处于同一自治系统内,被称为IBGP对等体。
    EBGP对等体(External BGP Peer):BGP对等体处于不同自治系统时,被称为EBGP对等体。
    说明:
    有时,BGP对等体也称为BGP邻居,EBGP对等体也称为EBGP邻居,IBGP对等体也称为IBGP邻居。

  • EBGP对等体

    • 处于不同AS的BGP对等体为EBGP对等体,通常情况下EBGP对等体是物理上直连
    • BGP Speaker从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP);同时为了防止环路,他不会将学习到的路由再向原发布者发布。
  • IBGP对等体
    • 处于同一个AS的BGP对等体为IBGP对等体(或者是IBGP邻居)
      • IBGP对等体不一定是物理直连,但是一定要TCP可达。
    • 从IBGP对等体获得的路由不向它的IBGP对等体发布
      • 为了防止环路,BGP协议规定BGP发言者从IBGP获得的路由不向它的IBGP对等体发布。
    • 从IBGP对等体获得的路由是否发布给它的EBGP对等体与BGP是否同步相关。
      • 另外为了防止路由黑洞的产生,协议还规定BGP发言者从IBGP获得的路由是否发布给它的EBGP对等体与BGP是否同步相关。
  • IBGP的全连接
    • BGP会话是基于TCP的点到点的单播链接
      • TCP的可靠传输机制和滑动窗口机制可以确保承载与TCP之上的BGP可以可靠传递大量路由。但是TCP链接是点到点的单播方式来进行报文传输的,因此BGP链接只能是基于点到点的链接。同时BGP是一种距离矢量路由协议,为了防止产生路由环路,协议规定BGP发言者从IBGP对等体获得的路由不能向其他的IBGP对等体发布。这样,在运行了BGP协议的AS内,为了确保所有BGP路由器的路由信息向,则需要使所有的IBGP路由器保持全连接。
  • BGP发言者从IBGP对等体获得的路由不向其他的IBGP对等体发布

    BGP路由黑洞问题

    BGP - 图2

    BGP报文

    BGP - 图3

    BGP状态机

    BGP对等体的建立、更新和删除等交互过程主要有5种报文、6种状态机和5个原则。
    BGP - 图4

  • Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。

  • 在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
    • 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
    • 如果TCP连接失败,那么BGP转至Active状态。
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
  • 在Active状态下,BGP总是在试图建立TCP连接。
    • 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
    • 如果TCP连接失败,那么BGP停留在Active状态。
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
  • 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
    • 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。
    • 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
  • 在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
  • 在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
    • 如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
    • 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
    • Route-refresh报文不会改变BGP状态。
    • 如果收到Notification报文,那么BGP转至Idle状态。
    • 如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态。

      BGP邻居建立条件

      BGP - 图5

      BGP路由优选规则

  1. 丢弃下一跳不可达的路由
  2. 优选Preferred-value最大的路由
  3. 优选Local-pref最大的路由
  4. 依次优选network产生的路由、Import-route引入的路由、聚合路由
  5. 优选AS-path最短的路由
  6. 依次优选Origin属性为IGP、EGP、Incomplete的路由
  7. 优选MED最小的路由
  8. 依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学习的路由
  9. 优选下一跳度量值最低的路由
  10. 优选Cluster_list最短的路由
  11. 优选Originator_id最小的路由
  12. 优选Router-id最小的路由器发布的路由
  13. 优选IP地址最小的邻居发布的路由

    BGP路由发布规则

  • 只将本机最优路由发布给邻居
    • 配置了advertise-rib-action命令则发布IP路由表中的最优路由(优先级比BGP高)
  • 只将自己使用的路由发布给邻居
  • 从IBGP学习的路由不向其他IBGP邻居发布

    BGP负载分担

  • BGP无法产生等价路由

  • 可通过路由策略手动对不同流量实现负载分担

    常用命令

    | 命令 | 作用 | | —- | —- | | [h3c]bgp ‘as-number’ | 创建BGP进程,进入BGP协议视图 | | [h3c-bgp]router-id ‘router-id’ | 配置Router-id | | [h3c-bgp]peer ‘ip-address’ as-number ‘as-number’ | 配置邻居 | | [h3c-bgp]peer ‘ip-address’ connect-interface ‘interface’ | 修改更新源
    指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。
    缺省情况下,BGP使用报文的出接口作为BGP报文的源接口。 | | [h3c-bgp]address-family ipv4 unicast | 进入IPv4单播地址族视图 | | [h3c-bgp-ipv4]peer ‘ip-address’ enable | 启用邻居 | | [h3c-bgp-ipv4]peer ‘ip-address’ next-hop-local | 变更下一跳为本机 | | [h3c-bgp-ipv4]network ‘network’ ‘mask’ | 宣告路由BGP会在本机路由表中对宣告的网段和掩码进行精确匹配,被匹配的路由会放入BGP路由表并向邻居发布可以宣告任意来源的路由 | | [h3c]display bgp peer ipv4 | 查看BGP邻居 | | [h3c]display bgp routing ipv4 | 查看BGP路由表 | | ebgp-max-hop | 指定建立EBGP连接允许的最大跳数。
    缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。 |

怎样理解 peer next-hop-local命令仅对标签路由有效

“标签路由”指的是什么路由? BGP/MPLS VPN 里的vpnv4 路由算是标签路由吗?

BGP对于vpnv4路由,默认会分配标签,对ipv4路由,默认不分配标签。
但在某些场景下,跨域vpn Option C,以及运营商的运营商等特殊方案下,需要BGP建立mpls lsp,这时候就要使能bgp对ipv4路由分配标签,这个就叫做标签路由。
如果没有语境的话,楼主这个描述是不正确的,产品文档上是这么描述的,跟标签ipv4路由没啥关系:
peer next-hop-local命令一般在ASBR(Autonomous System Boundary Router)上配置。当设备通过EBGP邻居学到路由再转发给其他IBGP邻居时,默认不修改下一跳,但其EBGP邻居发来的路由的下一跳都是其EBGP邻居的Peer地址,本端对等体所属AS域内的IBGP邻居收到这样的路由后,由于下一跳不可达导致路由无法活跃。因此,需要在ASBR上对IBGP邻居配置peer next-hop-local命令,使得发给IBGP邻居的路由的下一跳是其自身的地址,IBGP邻居收到这样的路由后(由于域内都配置了IGP)发现下一跳可达,路由即为活跃路由。

执行peer next-hop-local命令后,设备向IBGP对等体(组)通告路由时,把下一跳属性设为自身的IP地址。

BGP属性控制

属性分类

BGP - 图6

AS_path

BGP - 图7

Next-hop

BGP - 图8

Origin

BGP - 图9

Local-preference

BGP - 图10

MED

BGP - 图11

Preferred-value

BGP - 图12

属性控制的选择建议

  1. 如果希望影响下游所有路由器的路由选择,建议使用AS-Path
  2. 如果希望只影响本As内部路由器的路由选择,建议使用Local-Preference
  3. 如果希望只影响下游某一台AS的路由器的路由选择,建议使用MED
  4. 如果希望只影响某一台路由器的路由选择,建议使用Pewferred-value

    属性控制方法

    BGP - 图13

    AS路径列表

    BGP - 图14

    常用命令

    | [h3c-bgp-default]peer ‘ip-address’ route-policy ‘policy-name’ ‘import/export’ | | 对邻居调用路由策略 | | —- | —- | —- | | [h3c-bgp-default-ipv4]network ‘network’ ‘mask’ route-policy ‘policy-name’ | | 宣告路由时调用路由策略 | | [h3c-bgp-default]import-route ‘protocol’ route-policy ‘policy-name’ | | 引入路由时调用路由策略 |
  1. acl basic 2000
  2. rule 0 permit source 192.168.2.0 0.0.0.255
  3. #
  4. address-family ipv4 unicast
  5. network 2.2.2.2 255.255.255.255
  6. peer 4.4.4.4 enable
  7. peer 4.4.4.4 next-hop-local
  8. peer 10.1.1.1 enable
  9. peer 10.1.1.1 route-policy x2 export
  10. #
  11. route-policy x2 permit node 10
  12. if-match ip address acl 2000
  13. apply cost 100
  14. #
  15. route-policy x2 permit node 20