11、BGP基础

BGP概述

AS的概念

  • AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
  • 不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。

BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:

  • BGP基于TCP,只要能够建立TCP连接即可建立BGP。
  • 只传递路由信息,不会暴露AS内的拓扑信息。
  • 触发式更新,而不是进行周期性更新。

BGP的特点

  1. BGP使用TCP协议(端口号为179),使用触发式路由更新。
  2. BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。
  3. BGP能够承载大批量的路由信息(70W+),能够支撑大规模网络。
  4. BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。
  5. BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
  6. BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。

BGP对等体关系

BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连

BGP有两种对等体关系:

  • EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。
  • IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。

BGP对等体建立过程:

  1. 先启动BGP的一端先发起TCP连接,如左图所示,R1先启动BGP,R1使用随机端口号向R2的179端口发起TCP连接,完成TCP连接的建立。
  2. R1、R2之间相互发送Open报文进行参数协商
  3. 参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功
  4. 同时双方定期发送Keepalive报文用于保持连接。
  5. BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体。

image-20250217100209945

TCP连接源地址

缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。

IBGP之间,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。

EBGP之间,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题。

一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于冗余链路的存在,R1与R3之间的IP连通性其实并没有DOWN(仍然可以通过R4到达彼此)。

image-20250217100533810

BGP报文类型

BGP存在5种类型的报文,不同类型的报文拥有相同的头部(header)。

image-20250217100716486

各报文重要字段

  1. BGP报头:
    • Marker:16Byte,用于标明BGP报文边界,所有bit均为“1”。
    • Length:2Byte,BGP报文总长度(包括报文头在内)。
    • Type:1Byte,BGP报文的类型。其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh 报文。
  2. Open报文:
    • My AS(autonomous system):本地AS号。
    • Hold Time:保持时间。通常为Keepalive发送时间的3倍(180s)。
    • BGP Identifier:BGP标识符,即BGP ID以IP地址的形式表示,用来识别BGP路由器。
  3. Update报文:
    • Withdrawn routes:不可达路由的列表。
    • Path attributes:与NLRI相关的所有路径属性列表,每个路径属性由一个TLV(Type-Length-Value)三元组构成。
    • NLRI(Network Layer Reachable Information,网络层可达信息):可达路由的前缀和前缀长度二元组。
  4. Notification报文:
    1. Error Code、Error subcode:差错码、差错子码,用于告知对端具体的错误类型。
    2. Data:用于辅助描述详细的错误内容,长度并不固定。
  5. Keepalive报文:
    • Keepalive报文格式中只包含报文头,没有附加其他任何字段。
  6. Route-refresh报文:
    • AFI:Address Family Identifier,地址族标识,如IPv4。
    • Res.:保留,8个bit必须置0。
    • SAFI:Subsequent Address Family Identifier,子地址族标识。

BGP状态机

image-20250217102439688

BGP状态切换

image-20250226081105190

BGP状态机详解

image-20250226081311199

image-20250226081348091

对等体表和路由表

对等体表

display bgp peer

image-20250226082517358

主要参数含义:

  • Peer:对等体地址
  • V:version,版本号
  • AS:对等体AS号
  • Up/Down:该对等体已经存在up或者down的时间
  • State:对等体状态,这里显示的为BGP状态机的状态
  • PrefRcv:prefix received,从该对等体收到的路由前缀数目

路由表

display bgp routing-table

image-20250226082637111

重要字段解释:

  • LocPrf:本地优先级,用于在 AS(自治系统)内部选择最优路径。本地优先级值越大,路径越优。

  • PreVal:协议优先级值,用于在不同路由协议之间选择最优路径。优先级值越小,路径越优。

  • Path/Ogn:路径属性和路由来源。

    • Path:AS 路径(AS Path),表示路由经过的 AS 列表。

    • Ogn:路由来源(Origin),表示路由是如何被引入 BGP 的。

      • i:通过 IGP(内部网关协议)引入。
      • e:通过 EGP(外部网关协议)引入。
      • ?:通过其他方式引入(如手动配置)。

查看某条路由的详细信息

display bgp routing-table ipv4-address { mask | mask-length}

image-20250226083320878

路由生成

BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。

BGP注入路由的方式有两种:Network、import-route

Network注入路由

Network方式注入的路由必须是已经存在于IP路由表中的路由条目,否则不会被成功注入到BGP路由表中。

image-20250226092319090

image-20250226092333522

import-route方式注入路由

通过import-route可以直接将某种IGP协议的全部路由注入到BGP中。

image-20250226092445962

路由聚合

bgp 200
aggregate 10.1.0.0 22 detail-suppressed

执行聚合之后,在本地的BGP路由表中除了原本的明细路由条目之外,还会多出一条聚合的路由条目(如下图中的10.1.0.0/22)。

如果执行了聚合时指定了detail-suppressed,则BGP只会向对等体通告聚合后的路由,而不通告聚合前的明细路由。

在聚合时配置了抑制明细路由的参数,R3上查看路由表,将只能看到BGP路由:10.1.0.0/22,无法看到聚合前的明细路由。

image-20250226092615896

通告原则

BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体。

BGP通告遵循以下原则:

  1. 只发布最优且有效(即下一跳地址可达)路由。
  2. 从EBGP对等体获取的路由,会发布给所有EBGP、IBGP对等体。
  3. IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
  4. BGP同步规则指的是:从IBGP邻居学到的路由不会发布给EBGP对等体,除非从IGP协议中也学习到了这条路由,也就是,只有当BGP和IGP中都有这条路由时,才会发布给EBGP对等体。主要作用时规避BGP路由黑洞。

水平分割

IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。

水平分割为了防止出现路由环路

image-20250226220621279

使用水平分割后可能会带来一个问题,如下图所示,当BGP路由器R2将路由传递给BGP路由器R1时,由于水平分割的限制,R1无法将BGP路由传递给R3,R3将无法学习到路由。

可以采用AS内IBGP全互联的方式来解决该问题。

全互联后,R1和R3都是R2的邻居,都会收到R1传递的路由。

image-20250226220817435

同步原则

当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步,该条规则也被称为BGP同步原则。同步规则主要用于规避BGP路由黑洞问题。

下图中,如果没有同步原则,R5学习到了10.0.4.0/24的路由,当R5发起访问时,下一跳指向R3,将包发给R3;R3也运行了BGP协议,知道这条路由是从R2学来的,所以需要将包发给R2;因为R1、2、3之间运行ospf,所以R3知道前往R2需要通过R1,所以将包发给R1;R1收到包后,查询路由表,没有找到10.0.4.0/24的路由(因为R1没有运行BGP,没有学习到该条路由),将包丢弃,出现了路由黑洞。

image-20250226221632268

解决该问题(使R5能够访问到10.0.4.0)的方式有:

  • 将BGP路由重分发到IGP中,基本不会使用该方式。
  • 建立全互联的IBGP对等体关系,让全网所有路由器都拥有BGP路由。

BGP基本配置

  1. 启动BGP进程

启动BGP,指定本地AS编号,并进入BGP视图。

[Huawei] bgp { as-number-plain | as-number-dot }
[Huawei-bgp] router-id ipv4-address
# 示例(100为本地AS号,而不是进程号)
bgp 100
router-id 1.1.1.1
  1. 配置BGP对等体

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

[Huawei-bgp] peer { ipv4-address | ipv6-address } as-number { as-number-plain | as-number-dot }
# 示例
peer 2.2.2.2 as-number 100
# 2.2.2.2为对等体的IP,可能是物理接口接口IP也可能是环回口IP。
# 100为对等体的AS号,当对等体的AS号与自己的相同时,建立的是IBGP邻居,反之则是EBGP邻居
  1. 配置建立对等体使用的源地址、EBGP对等体最大跳数

指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。

[Huawei-bgp] peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-address ]
# 示例(使用环回口loopback 0来与2.2.2.2建立邻居)
peer 2.2.2.2 connect-interface loopback 0

指定建立EBGP连接允许的最大跳数。缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。

[Huawei-bgp] peer ipv4-address ebgp-max-hop [ hop-count ]
# 示例
peer 3.3.3.3 ebgp-max-hop 2

实验

实验要求:
1、各路由器使用loop back0作为routerID,X.X.X.X
2、R1与R3之间建立IBGP peer;R3与R4建立EBGP peer。
3、R1、2、3之间运行ospf。

image-20250227205722984

接口配置和ospf配置省略。

R1的配置:

bgp 100
router-id 1.1.1.1
peer 3.3.3.3 as-number 100
peer 3.3.3.3 connect-interface loopback 0

R3的配置:

bgp 100
router-id 3.3.3.3
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface loopback 0
# 与R4建立EBGP邻居,使用出接口作为TCP连接源地址来建立邻居
peer 34.1.1.4 as-number 200

R4的配置:

bgp 200
router-id 4.4.4.4
peer 34.1.1.4 as-number 100

查看bgp peer状态

image-20250227210441926

思考题

  1. (简答题)BGP使用的TCP目的端口号是多少?

    197

  2. (简答题)BGP对等体关系有哪几种?划分的依据是什么?

    两种,IBGP和EBGP。划分依据是,同一个AS内的BGP对等体为IBGP,不同AS的为EBGP对等体关系。

  3. (多选题)BGP对等体关系建立、更新路由分别使用( B)、( D)报文。

    • A. Route-refresh

    • B. Open

    • C. Notification

    • D. Update

posted @ 2025-05-28 11:55  最爱喝开水  阅读(105)  评论(0)    收藏  举报