华为 BGP协议基础配置与总结

艺博东

共 9323字,需浏览 19分钟

 · 2021-03-17

哈喽,大家好!我是艺博东 ,一个思科出身专注于华为的网工;好了,话不多说,我们直接进入正题。

点击上方“蓝字”关注我们

文章目录


    • 一、BGP概述

    • 二、拓扑

    • 三、基础配置

    • 四、BGP与IGP比较

    • 五、BGP的数据包

    • 六、BGP的邻居状态机

    • 七、BGP计时器

    • 八、BGP的更新源

    • 九、BGP的路由生成

    • 十、BGP的路由通告



BGP的邻居建立很关键,涉及环回口地址建立bgp邻居就需要指定更新源,单一的直连物理接口建立bgp邻居时不需要指定更新源的。
BGP的防环属性是影响路由更新传的重要因素,一定要牢记BGP的防环策略。
IBGP防环是从IBGP邻居学到的路由不再传递给其他的IBGP邻居注意这里是IBGP邻居,EBGP邻居不受影响。
IBGP之间路由传递时要更改下一跳属性,使得从EBGP邻居学到的路由可以顺利在IBGP邻居之间传递。



一、BGP概述




1、简介:

BGP-Border Gateway Protocol边界网关协议,是一种在自治系统AS(Autononmous System)之间传递并选择最佳路由的高级矢量路由协议。

路由协议通常分为内部网关协议(IGP)和外部网关协议(EGP)两大类。

BGP虽然是一种动态路由协议,但它实际上本身并不产生路由、不发现路由、不计算路由,其主要功能是完成最佳路由的选择并在BGP邻居之间进行最佳路由的传递。BGP选择了TCP作为其传输协议,端口号是179。

BGP的邻居关系分为IBGP和EBGP两种:两台BGP路由器位于同一AS时,它们的邻居关系为IBGP邻居关系;两台BGP路由器位于不同的AS时,它们的邻居关系为EBGP邻居关系。BGP没有自动建立邻居关系的能力,邻居关系必须通过手动配置来建立。

2、版本:

(1)BGP-1(RFC1105);
(2)BGP-2(RFC1163);
(3)BGP-3(RFC1267);
(4)BGP-4(RFC1771,1994年开始使用);
(5)BGP-4(RFC4271,2006年后单播IPv4网络使用),这个版本是当前的BGP版本;
(6)MP-BGP(RFC4760)供其他网络使用;
(7)BGP-4+提供对IPv6单播网络的支持;

注意:

华为路由器运行的BGP特性同时支持BGP-4,BGP-4+和MP-BGP。即在BGP下的配置同时对这三个版本生效。默认情况在BGP IPv4单播地址族视图下的配置可以在BGP视图配置,但只对BGP-4生效。

3、特性:

(1)BGP拥有丰富的选路参考属性,灵活组合可以实现路由的优选和避免路由环路,能够高效率的传递路由和维护大量的路由信息;
(2)BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由;
(3)BGP提供了路由聚合和路由衰减功能,用于防止路由振荡,有效提高网络的稳定性;
(4)BGP是一种距离矢量协议,将AS作为一个节点来计算;IGP协议以一个路由器为节点;
(5)BGP使用TCP(端口号179)作为底层传输协议,与每个BGP对等体形成独特的基于单播的连接 并支持BGP于BFD联动,提高了网络的可靠性。

4、AS

(1)BGP的AS是指在一个组织机构管辖下拥有相同选路策略的IP网络,BGP网络中的每个AS都被分配了一个唯一的AS号,用于区域不同的AS。
(2)BGP的AS号分为2字节和4字节的AS号,
2字节AS号范围1----65535的整数,
4字节AS号范围2----4 294 967 295的整数(可以有不同的表示格式)
RFC 5389规定在2字节的AS号中;1–64511是公网AS,64512—65534为私网AS,65535保留用于特殊用途。



二、拓扑





三、基础配置




AR-1:

<Huawei>system-view
[Huawei]sysname AR-1
[AR-1]int g0/0/0
[AR-1-GigabitEthernet0/0/0]ip add 12.1.1.1 24
[AR-1-GigabitEthernet0/0/0]quit
[AR-1]int LoopBack 0
[AR-1-LoopBack0]ip add 1.1.1.1 32
[AR-1-LoopBack0]quit
[AR-1]ospf 1 router-id 1.1.1.1
[AR-1-ospf-1]area 0
[AR-1-ospf-1-area-0.0.0.0]network 12.1.1.1 0.0.0.0
[AR-1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0

**AR-2;AR-3同上!**
**AR-1与AR-3通过环回口建立IBGP的邻居;**

**AR-1基础配置:**

[AR-1]bgp 100 //本设备创建BGP AS,所属AS 100
[AR-1-bgp]router-id 1.1.1.1 //设置本设备的BGP的R-ID为1.1.1.1
[AR-1-bgp]peer 3.3.3.3 as-number 100 //手动指定与对等体的接口地址3.3.3.3建立IBGP邻居
[AR-1-bgp]peer 3.3.3.3 connect-interface LoopBack 0 //指定与3.3.3.3建立邻居时更新源地址为本设备的环回口0
[AR-1-bgp]peer 3.3.3.3 next-hop-local //指定发往邻居12.1.1.1的条目下一跳地址为本设备自身

**AR-3基础配置:**

[AR-3]bgp 100
[AR-3-bgp]router-id 3.3.3.3
[AR-3-bgp]peer 1.1.1.1 as-number 100
[AR-3-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[AR-3-bgp]peer 1.1.1.1 next-hop-local


AR-3与AR-4通过直连地址建立EBGP邻居;

**AR-3设备配置:**

[AR-3]bgp 100
[AR-3-bgp]peer 34.1.1.2 as-number 200

**AR-4设备配置:**

[AR-4]bgp 200
[AR-4-bgp]router-id 4.4.4.4
[AR-4-bgp]peer 34.1.1.1 as-number 100
[AR-4-bgp]network 4.4.4.4 255.255.255.255

AR-4:dis bgp peer

AR-3:dis bgp peer

AR-2设备:

[AR-2]bgp 100
[AR-2-bgp]router-id 2.2.2.2
[AR-2-bgp]peer 1.1.1.1 as-number 100
[AR-2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[AR-2-bgp]peer 3.3.3.3 as-number 100
[AR-2-bgp]peer 3.3.3.3 connect-interface LoopBack 0

AR-1设备:

[AR-1]bgp 100
[AR-1-bgp]peer 2.2.2.2 as-number 100
[AR-1-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[AR-1-bgp]peer 2.2.2.2 next-hop-local

AR-3配置类似

在AR-1的BGP路由表查看4.4.4.4/32路由前面带“下一跳可达”

AR-1的BGP路由表信息

AR-1和AR-3 BGP配置内容(dis cu se bgp)


在设备AR-3、4配置ospf协议时
AR-1的BGP路由表信息:

AR-1:dis bgp routing-table

AR-1: ping -c 3 -a 1.1.1.1 4.4.4.4

IBGP不用配置多跳,可以用loopback建立邻居。EBGP不是直连接口建立邻居,需要指多跳。



四、BGP与IGP比较




IGP协议特点:

(1)在AS之内使用的协议,主要用于发现和计算路由;
(2)IGP的路由收敛都相对迅速。工作在直连邻居间;
(3)单一的度量值,列如OSPF和IS-IS当然链路开销cost,RIP的跳数;
(4)适用于中小型网络。

BGP协议特点:

(1)BGP作为外部网关协议,着眼于控制路由的传播和选择最佳路由;
(2)BGP可以工作在非直连邻居之间,使用TCP作为其传输层协议(端口号179);
(3)BGP支持五类别域间路由,路由更新时只发送更新的路由,大大减少了BGP传播路由所占用的带宽, 适用在Internet上传播大量的路由信息;
(4)BGP提供了丰富的路由策略,能够实现路由的过滤和选择;
(5)BGP易于扩展,能够适应网络新技术的发展。适用于大型,超大型运营商网络。



五、BGP的数据包




BGP数据包都由2部分组成,BGP报文头部+类型报文本体

1、BGP报文头部:

Marker 16字节:用于检测BGP对等体之间同步丢失情况;在支持消息验证功能的情况下进行消息验证;
五验证时字段全为1(16 进制显示全FFFF)
Length 2字节:长度,表示此BGP报文的总长度(包含头部,总长度在19–4096字节之间)
Type 1字节:类型值,标识本BGP报文的类型(open 1;update 2;Notification 3;keepalive 4;route-refresh 5)。

2、Open报文(类型1)

(1)作用:

TCP 会话建立起来自以后,两个邻居都要发送一个 Open 报文,每个邻居都使用该报文标识自己, 并且规定自己的 BGP 运行参数。如果 open 消息被接受,则回送一条 keepalive 消息进行确认, 确认后就能发送 update 。

(2)内容:

Version 8bit :BGP版本号,BGP对等体的使用的版本,默认为BGP-4,如果邻居运行版本低于本设备,会拒绝V-4信息, 本设备将发送低版本信息直至协商成功。
My AS 号 16bit :本地 AS 号(决定双方建立什么样的BGP邻居;通AS建立IBGP;不同AS建立EBGP)
Hold Time 16bit:对等体相互协商及保存邻居最大时间,默认为Keepalive时间的3倍-180S
(如果两端hold time时间不一致,将会采用较短时间作为保存时间;最小可以为0,这种情况BGP连接被认为永远是UP的,不再发送Keepalive报文来检测邻居是否失效)
BGP Identifer 32bit:用来标识发送此Open报文设备的Router-ID(ROUTER-ID 和 OSPF 选取 routerID 的方式一致)
Optional Parameters Length 8bit:标识下面的可选参数的总长度(如果为0,那么本报文中没有包含可选参数字段)
Optional Parameters 可变长大小:用于BGP邻居会话协商过程中所使用的可选列表;每一个参数为一个
(参数类型参数长度,参数值)三元组,用于公布一些可选功能的支持,如多协议扩展,路由刷新能力, 四字节AS号等能力。

3、KEEPALIVE 消息(类型4)

(1)作用:

如果路由器接受了邻居在 OPEN 消息中的参数,就会应答一个 keeplive 消息,并且在此后 1/3 的 holdtime(但不小于 1S)为周期发送该消息,华为设备默认 60S一发,保持时间默认180S。如果协商后保持时间为 0,标识此邻居永远UP,则不发送 keepalive 保活消息。

(2)内容:

只包含BGP的消息头部?
Marker 16字节:用于检测BGP对等体之间同步丢失情况;在支持消息验证功能的情况下进行消息验证;
五验证时字段全为1(16 进制显示全FFFF)
Length 2字节:长度,表示此BGP报文的总长度(包含头部,总长度在19–4096字节之间)
Type 1字节:类型值,标识本BGP报文的类型(open 1;update 2;Notification 3;keepalive 4;route-refresh 5)。

(3)其他:

KEEPALIVE 消息实际上弥补了 TCP 无法确认对端存活情况的缺陷;
KEEPALIVE 消息仅包含 19bytes 的 BGP 头部,除此之外不包含任何其他数据。

4、Update报文(类型2)

(1)作用:

当BGP对等体之间成功建立会话后利用Update报文进行路由信息的交换;Update报文既用来通告可用路由信息,也可以通告不可达需要撤销的路由信息。每条update 消息只描述一类具有相同路径属性的可达路由;可达路由信息放在NLRI字段中同时Update报文可以携带多条不可达路由信息;不可达路由信息放在Withdrawn Router字段中。

(2)内容:

Withdrawn Routes Length 2字节:撤销路由长度,标识不可达路由的的长度,为0表示此字段 没有任何数据,本报文不存在需要撤销的路由;
Withdrawn Routes :撤销路由,与NLRI格式相同,同样是前缀长度+前缀组合;
Total Path Attribute Length 2字节:路径属性字段长度。如果为0表示没有下面的Path attributes,本报文没有通告可用路由信息;
Path attributes 可变长:路径属性,每个路径属性都由可变长的三元组(属性类型;属性长度;属性值),为BGP提供最短路径,检查路由环路以及决定路由策略的信息;
Network Layer Reachability Information (NLRI) 可变长度:标识网络层可达信息,包含要向对等体通告的每条可达路由的前缀(IPv4的地址前缀),和前缀长度(IPv4的掩码)。

5、Notification 报文(类型3)

(1)作用:

当BGP检测到错误状态时,就会向对等体发出Notification通知报文,之后BGP连接会立即中断;例如对等体之间的AS号非法,认证失败,邻居地址不可达等。

(2)内容:

Error code 1字节:错误码;描述错误类型,每个错误都使用唯一的错误码来表示;
Errsubcode 1字节:错误子码;描述错误类型的详细信息;
Data 可变长字段:包含了与错误有关的数据,用来诊断错误原因,比如非法的AS号,认证失败等。

6、Route-refresh报文(类型5)

(1)作用:

路由刷新报文用来要求对等体重新发送指定地址族的路由信息;

(2)内容:

AFI Address Family Identifier 2字节:地址族标识,用来标识所采用的地址族类型;
Res 1字节:保留
SAFI:Subsequent Address Family Identifier 1字节:子地址族标识,用于标识地址族的类型。



六、BGP的邻居状态机




1、Idle状态

(1)BGP空闲状态,在Idle状态下BGP拒绝邻居发送的连接请求,此时等待由BGP系统发出的Start事件;
(2)Start(管理员配置邻居)事件发生后,BGP会对自己的资源进行初始化,重置连接计时器(Connect Retry 默认32S)发起TCP 连接请求,并开始侦听远端对等体发起的连接端口,并转至Connect状态。

1.1. 停留在此状态的原因:

(1)本BGP设备没有去往对等体的路由;
(2)收到来自邻居的Notification报文触发Notification报文条件(再一个重置计时器后重新建立BGP的TCP连接,即重新发送用于BGP的TCP连接报文)
a. AS号错误;
b0 R-ID重复;
c. 认证失败;
d. hold time连接超时(中间设备或者目标设备策略限制)
e. 其他错误原因。

2、Connect状态

在Connect状态下,BGP启动连接重传定时器,等待TCP完成连接!
(1)如果TCP连接成功,那么BGP会向对等体发送Open报文,并转至OpenSent状态;
(2)如果TCP连接失败,那么BGP转至Active状态;
(3)如果连接重传定时器超时,BGP任没有收到BGP对等体的响应,那么BGP继续尝试TCP连接,停留在Connect状态。

2.1. 停留在Connect状态的原因:

(1)与BGP对等体TCP连接超时!
a. 中间设备没有本设备去往对等体的路由;
b. 中间设备拒绝了本BGP设备发出的BGP相关数据(过滤了本设备IP流量或者TCP流量或者TCP-179端口数据)
c. 对等体设备未开启BGP(TCP-179端口处于关闭状态)

3、Active

在Active状态下,BGP总是试图建立TCP连接!
(1)如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent;
(2)如果TCP连接失败,停留在Active状态;
(3)如果连接重传定时器超时,任没有收到BGP对等体的响应,那么BGP转至Connect状态。

3.1. 停留在Active状态的原因:

(1)与BGP对等体TCP失败;
(2)本BGP设备配置错误的对等体地址。

4、OpenSent

在OpenSent状态,BGP等对等体的Open报文,并对收到的Open报文中的AS号,版本号,认证信息等进行检查!
(1)如果收到的Open报文正确,那么BGP发送Keepalive报文,且重置Keepalive定时器,并转至OpenConfirm状态;
(2)如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体。并转至Idle状态。

4.1. 停留在OpenSent状态的原因:

(1)对等体发送的Open报文中的AS号与本BGP设备配置不一致(本端BGP配置时邻居的AS号配置错误)

5、OpenConfirm

在OpenConfirm状态下,BGP等待Keepalive或Notification报文;
(1)如果收到Keepalive报文,则转至Established状态(BGP邻居的最终状态)
(2)如果收到Notification报文,则转至Idle状态。

5.1. 停留在OpenConfirm状态的原因:

(1)BGP的TCP建立成功,对等体未发送Keepalive报文(邻居设备BGP配置对本BGP的AS号错误配置)

6、Established状态

在Established状态下,BGP对等体之间交互Update,Keepalive,Route-refresh报文和Notification报文!
(1)如果收到正确的Update或Keepalive报文,那么BGP就人为对端处于正常运行状态,保持BGP连接;
(2)如果收到错误的就发送Notification报文告知对端,并转至Idle状态;
(3)Route-reFresh报文不会改变BGP状态;
(4)如果收到Notification报文,那么BGP转至Idle状态;
(5)如果收到TCP拆除链接通知,那么BGP将断开连接,转至Idle状态。



七、BGP计时器




1、Connect Retry重置连接计时器,默认32S;
2、Keepalive保持时间,默认60S;
3、Hold time 默认为Keeplive时间的三倍(180S),保持时间可以改大,但是不能小于Keepalive的三倍。如果两端 Holdtime 不一致,双方接受较小的的时间;
4、timer keepalive 0 hold 0 ,当检测时间和保持时间都为0时表示本BGP设备认为邻居永远UP;
5、BGP 不会周期性更新路由,仅在需要的时候更新,由于公网的路由可能的动荡的,因此触发更新也会有一定的等待时间,IBGP peer 为 5S;EBGP peer 为 30S,而在这段时间内,BGP 仍可以进行路由信息的搜集,所以 BGP收敛会比慢。



八、BGP的更新源




1、BGP 无法像 IGP 那样自动发现邻居,而需手工指定,邻居的 IP 由本地的 peer 命令指定,而该 BGP 连接的源 IP(更新源)默认情况下为流量的出接口 IP。注意只有当本地配置的邻居 IP 与邻居用于 BGP 连接建立的源 IP 相同时,BGP 连接才能被正常建立;
2、IBGP 邻居之间建立邻居,为了保证邻居关系的稳定,一般使用 loopback 接口建立,这是因为如果使用物理接口,那么物理接口故障,邻居关系就 DOWN 了,并且在 AS 内部,路径可能是冗余的,邻居之间的 LOOPBACK 路由可通过IGP获取并提供一定的路由冗余性(当物理线路也存在冗余的情况下)注意:在使用loopback接口建立BGP邻居关系时,务必注意还需要指定更新源 IP;
3、如果是建立 EBGP 邻居关系,因为 EBGP 邻居关系的建立会检查直连路由,并且默认 TTL=1, 而这个时候实际上loopback 口到 对方loopback 口至少 2 跳 ,那么这个时候 还需要两者配置 peer x.x.x.x ebgp-max-hop 。



九、BGP的路由生成




1、通过手动宣告,只能将本BGP设备路由表存在的路由条目通告出去;
2、通过路由引入,将IGP或者静态,直连路由的重分发进来。



十、BGP的路由通告




1、当存在多条路径时,BGP Router 只选取最优的路由(BEST)来使用(没有负载均衡的情况下);
2、BGP 只把自己使用的路由,也就是自己认为 Best 的路由传递给 BGP peer;
3、BGP Speaker 从 EBGP 获得的路由会向它所有 BGP 相邻体通告(包括 EBGP 和 IBGP);
4、BGP Speaker 从 IBGP 获得的路由不向它的 IBGP 相邻体通告。(避免环路,水平分割;存在路由 RR 的情况除外)

OK

良药苦口利于病,忠言逆耳利于行。



好了这期就到这里了,如果你喜欢这篇文章的话,请点赞评论分享收藏,如果你还能点击关注,那真的是对我最大的鼓励。谢谢大家,下期见!


往期推荐:

华为 VRRP和NQA或者是BFD进行联动,实现VRRP的快速切换

2021-03-08

华为 DHCP、DHCP中继、DHCP snooping

2021-03-04

华为 MPLS的数据转发流程

2021-02-15


关注 艺博东 公众号,与你一起学习共同进步。秀秀秀秀秀~


点赞在看养成习惯


浏览 48
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报