11、BGP基础
BGP概述
AS的概念:
- AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
- 不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。
BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:
- BGP基于TCP,只要能够建立TCP连接即可建立BGP。
- 只传递路由信息,不会暴露AS内的拓扑信息。
- 触发式更新,而不是进行周期性更新。
BGP的特点:
- BGP使用TCP协议(端口号为179),使用触发式路由更新。
- BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。
- BGP能够承载大批量的路由信息(70W+),能够支撑大规模网络。
- BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。
- BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
- BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。
BGP对等体关系
BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。
BGP有两种对等体关系:
- EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。
- IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。
BGP对等体建立过程:
- 先启动BGP的一端先发起TCP连接,如左图所示,R1先启动BGP,R1使用随机端口号向R2的179端口发起TCP连接,完成TCP连接的建立。
- R1、R2之间相互发送Open报文进行参数协商
- 参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功
- 同时双方定期发送Keepalive报文用于保持连接。
- BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体。

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

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

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

BGP状态切换

BGP状态机详解


对等体表和路由表
对等体表
display bgp peer

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

重要字段解释:
-
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}

路由生成
BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。
BGP注入路由的方式有两种:Network、import-route
Network注入路由
Network方式注入的路由必须是已经存在于IP路由表中的路由条目,否则不会被成功注入到BGP路由表中。


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

路由聚合
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,无法看到聚合前的明细路由。

通告原则
BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体。
BGP通告遵循以下原则:
- 只发布最优且有效(即下一跳地址可达)路由。
- 从EBGP对等体获取的路由,会发布给所有EBGP、IBGP对等体。
- IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
- BGP同步规则指的是:从IBGP邻居学到的路由不会发布给EBGP对等体,除非从IGP协议中也学习到了这条路由,也就是,只有当BGP和IGP中都有这条路由时,才会发布给EBGP对等体。主要作用时规避BGP路由黑洞。
水平分割
IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
水平分割为了防止出现路由环路

使用水平分割后可能会带来一个问题,如下图所示,当BGP路由器R2将路由传递给BGP路由器R1时,由于水平分割的限制,R1无法将BGP路由传递给R3,R3将无法学习到路由。
可以采用AS内IBGP全互联的方式来解决该问题。
全互联后,R1和R3都是R2的邻居,都会收到R1传递的路由。

同步原则
当一台路由器从自己的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,没有学习到该条路由),将包丢弃,出现了路由黑洞。

解决该问题(使R5能够访问到10.0.4.0)的方式有:
- 将BGP路由重分发到IGP中,基本不会使用该方式。
- 建立全互联的IBGP对等体关系,让全网所有路由器都拥有BGP路由。
BGP基本配置
- 启动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
- 配置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邻居
- 配置建立对等体使用的源地址、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。

接口配置和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状态

思考题
-
(简答题)BGP使用的TCP目的端口号是多少?
197
-
(简答题)BGP对等体关系有哪几种?划分的依据是什么?
两种,IBGP和EBGP。划分依据是,同一个AS内的BGP对等体为IBGP,不同AS的为EBGP对等体关系。
-
(多选题)BGP对等体关系建立、更新路由分别使用( B)、( D)报文。
-
A. Route-refresh
-
B. Open
-
C. Notification
-
D. Update
-

浙公网安备 33010602011771号