BGP-Huawei

BGP概述

BGP(Border Gateway Protocol)

IGP(Internal Gateway Protocol)

EGP(External Gateway Protocol)

AS指的是在同一个组织管理下,使用同一选路策略的设备集合

as号有16bit和32bit

BGP更像搬运工,直接把IGP内部的路由搬出去

触发式更新,只对波动的路由才收敛

能解决环路问题,并对路由信息优选,控制

BGP4,BGP4+ 扩展性非常高

企业内部互通,企业和运营商互通

BGP基本概念

路径矢量路由协议(Path-vector Routing Protocol)

使用tcp 端口号179,使用触发式路由更新,而不是周期性的

BGP能承载大批量的路由信息,能够支持大规模网络

BGP提供丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由信息

BGP能够支撑MPLS/VPN应用,传递客户VPN路由

BGP提供了路由聚合和路由衰减用于防止路由震荡,通过这两项功能有效的提高了网络稳定性

BGP特征

运行BGP的路由器被称为BGP发言者,BGP Speaker 或者BGP路由器

两个建立BGP会话的路由器互为对等体 Peer,BGP对等体之间交换BGP路由表

BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会进行周期姓更新

BGP能承载大批量的路由器前缀,可在大规模网络中应用

每条BGP路由都携带多重路径属性(Path Attribute),BGP可以通过这些路径属性控制路径选择,OSPF和IS-IS只能通过开销Cost控制路径选择,因此在路径选择上,BGP有丰富的可操作性,可以在不同场景下选择最合适的路径

BGP与对等体的关系

与OSPF和ISIS等不同,BGP的会话是基于tcp的,建立BGP的对等关系的路由器并不要求必须直连

BGP存在两种对等体关系类型:EBGP和IBGP:

-EBGP(External BGP):位于不同自治区的BGP路由器之间的BGP对等体关系,两台路由器要建立EBGP对等体关系,必须满足两个条件:
-- 两个路由器所属的AS不同
-- 在配置EBGP时,Peer命令所指定的对等体的IP地址要求路由可达,并且TCP连接能够正确建立

-IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻居关系

BGP对等体关系的建立

先启动BGP的一端先发起TCP连接,比如R1先启动,使用随机端口向R2的179端口发起tcp连接

三次握手完成后,R1和R2互相发送open报文,携带参数用于对等体建立,参数协商完成后双发互相发送keepalive报文,收到对端发送的keepalive后对等体建立成功,同时双方定期发送keepaalive保持连接

其中Open报文中携带
- My Autonomous System:自身的as号
- Hold Time:用于协商后续keepalive的发送时间
- BGP Identifier:自身的Router ID(通过这个id来确定使用那个tcp连接,会选择id大的tcp连接)

对等体关系建立完成后,双方BGP路由器发送BGP Update报文通告路由到对等体

TCP连接源地址

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

在部署IBGP对等关系时,建议使用loopback地址作为更新源地址,loopback接口非常稳定,而且可以借助as内的IGP和冗余拓扑来保证可靠性

在部署EBGP对等关系时,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等关系,则应注意EBGP多跳问题
-EBGP传递报文的TTL值默认1,如果使用loopback接口作为源ip地址就会被丢弃,如想要使用loopback需要修改默认ttl>=2

BGP的报文类型

BGP存在五种类型的报文,不同类型的报文拥有相同的头部(header)
-Open: 协商BGP对等体参数,建立对等关系 | 在BGP TCP建立连接之后发送
-Update:发送BGP路由更新 | BGP对等体关系建立之后又路由需要发送或者路由变化时向对等体发送Update报文
-Notification:报告错误信息,终止对等体关系 | 当BGP在运行时发现错误时,发送Notification报文将错误通告给BGP对等体
-Keepalive:标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接
-Route-Refresh:用于在改变路由策略后请求对等体重新发送路由信息,只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由

报文格式:

Marker(16byte)Length(2byte)type(1byte)

-Marker : 用于标明BGP报文边界,所有bit均为1
-Length :BGP报文总长度(包括头部报文)
-Type : BGP报文的类型(取值从1到5表示open,update,notification,keepalive,route-refresh)

Open报文格式

Version(8bit)-My AS(16bit)-Hold Time(16bit)-BGP Identifier(32bit)-Opt Parm Len(8bit)-Optional Parameters(可变长度)

-Version : BGP的版本号,对于BGP4来说,值为4
-My AS(Autonomous System) :本地AS号。比较本端自治系统和对端自治系统是否在同一个AS内,确定E或IBGP
-Hold Time  :保持时间。默认是180秒、在建立对等关系时两端要协商Hold Time,并保持一致,如果在这个时间内未收到对端发来的Keepalive(默认60秒)或update报文,则认为BGP连接中断
-BGP Identifier : BGP的标识符,以IP地址的形式表示,用来识别BGP路由器
-Optional Parameters :包含了BGP在协商过程中能够支持的其他能力,比如,是否支持认证,是否支持其他协议处理,都需要这个字节来协商

Update报文格式

Unfeasible Routes Length (2byte) / Withdrawn Routes (nbyte) / Total Path Attribute Length (2byte) / Path Attrbutes (nbyte) / NLRI (nbyte)

一个UPdata报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(Network Layer Reachable Information,网络可达信息)中。
同时,Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。

报文解释:
Unfeasible Routes Length :  表示不可行路由的数量
Withdrawn Routes(可选): 撤销路由前缀;撤销路由长度
Total Path Attribute Length :指示路径属性的总长度
Path Attributes(可选):用于描述BGP路由的特征和属性例如:NEXT_HOP(下一跳地址)、AS_PATH(AS路径)和MED(多路径外部度量)等。
NLRI(Network Layer Reachable Information):网络层可达消息,要发布或者更新路由信息就通过这个字段,NLRI前缀,NLRI前缀长度

Notification报文格式

Error Code(8bit) / Error Subcode(8bit) / Data(可变长度)

当BGP检测到错误状态时(对等体关系建立时,建立之后都可能发生)就会像对等体发送Notifiction,告知对端错误原因,之后BGP连接将会立即终端。

Error Code : 差错码,用于告知对端具体的错误类型
Error SubCode : 差错子码,用于告知对端具体的错误类型
Data : 用于辅助描述详细的错误内容,长度并不固定

Keepalive报文格式

Marker(16byte) / Length(2byte) / Type (1byte)   这里会发现跟头部一样,没错就是一样

BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送Keepalive报文用于保持连接。

Keepalive报文格式中只包含报文头,没有附加其他任何字段。默认每隔60秒发送一次

Route-Refrash报文格式

AFI(16bit) / Res(8bit) / SAFI(8bit)

Route-Refresh报文用来要求对等体重新发送指定地址族的路由信息,一般为本地修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。并不是所有设备都支持。

AFI(Address Family Identifier) : 地址族标识,如IPV4

Res : 保留,8个bit必须置0
SAFI(Subsequent Address Family Identifier) :子地址族标识

BGP-Peer状态

Idle:开始准备tcp的连接并监视远程对等体,启用BGP时,要准备足够的资源
connect:正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Avtive状态,反复尝试连接,成功就会进入OpenSent状态。
Active:TCP连接没建立成功,反复尝试TCP连接。
OpenSent:TCP连接已经建立成功,开始发送Open包。Open包携带参数协商对等体的建立。
OpenConfirem:参数,能力特性协商成功,自己发送keepalive,等待对方的Keepalive
Established:已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update发送路由信息,表明正式建立对等体Peer

BGP路由的生成(注入)

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

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

与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由。

Network

bgp 200
network 10.1.0.0/24
network 10.2.0.0/24

可以精确的发送路由信息,但是一次只能注入一条,量大的时候太繁琐。
注入后,这两条路由将会出现在本地的BGP路由表中。然后通过Update报文发送给Peer,Peer收到后将接受到的路由加入到本地的BGP路由表中

Import-route

通过import-route注入可以使用以下路由协议的路由直接注入到BGP中:
直连路由
静态路由
OSPF路由
IS-IS路由
等非BGP的路由都可以注入到本地BGP路由表

bgp 200
import-route {bgp | direct | static | isis[process-id-isis] | ospf[process-id-ospf] }

BGP聚合路由

与众多的IGP协议相同,BGP同样支持路由的手工聚合,在BGP配置视图中使用aggregate命令可以执行BGP路由手工聚合,在BGP已经学习到相应的明细路由情况下,设备会向BGP注入指定的聚合路由

比如有:
10.1.1.0/24
10.1.2.0/24
10.1.3.0/24

就可以聚合为

10.1.0.0/22

bgp 200
aggregate 10.1.0.0 22 detail-suppressed

如果不加detail-suppressed会把聚合前的三个路由也给传过去,为了减少开支,就加上细节抑制也就是detail-suppressed

通告原则

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

BGP通告遵循以下原则:

  • 只发布最优路由
  • 从EBGP对等体获取的路由,会发布给所有的对等体
  • IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体
  • BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它不能使用该条路由或者这条路由通告给自己的EBGP对等体,厨房它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。

只发布最优路由

通过display bgp routing-table 可以查看bgp路由表:

Total Number of Routes:2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.1.0.1/24 11.1.0.1 0 100 0 ?
*i 11.1.0.1 0 100 0 ?

在BGP路由表中同时存在以下两个标志的路由为最优,有效路由:

  • *  :代表有效
  • > :代表最优

所以会发送第一条,而不发送第二条

从EBGP对等体获取的路由,会发布给所有的对等体

只要是从EBGP获取到的,除了不发给来的的时候的Peer,都会转发给IBGP和EBGP

IBGP水平分割

从IBGP的Peer获取的BGP路由,不会再发送给其他IBGP对等体。

该原则也被称为IBGP水平分割

如图所示,如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体:

  • R2将一条路由传递给了IBGP对等体R3
  • R3收到路由之后传递给IBGP对等体R1
  • R1收到路由之后传递给IBGP对等体R2

路由环路产生。所以会有这条原则

但是同时,第三条原则也会来带新的问题,当BGP路由器R2将路由传递给BGP路由器R1时,由于IBGP水平分割原则,R1无法将BGP路由传递给R3,R3将无法学习到路由。

为解决该问题可以采用AS内IBGP全互联的方式,即:R2、R3之间建立非直连的IBGP对等体关系,
以此让BGP路由器R2将路由传递给BGP路由器
R3。

第四条规则

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

在后续的学习中可以使用RR路由反射器,MPLS隧道等技术来解决路由黑洞的问题。

BGP的基本配置

配置介绍:

1.启动BGP进程
]bgp {as-number-plain | as-number-dot}
// plain指的是数字方式的as号,dot指的是as1.2模式的as号
bgp]router-id ipv4-address
// 在bgp视图中,使用router-id命令配置BGP的router id,建议将BGP router ID配置为设备的Loopback接口的地址。
2.配置BGP对等体
bgp]peer {ipv4-address | ipv6-ipaddress} as-number {as-number-plain | as-number-dot}
// 创建BGP对等体,指定对等体的ip地址以及as号
3.配置建立对等体使用的源地址,EBGP对等体的最大跳数
bgp]peer ipv4-address connect-interface interface-type interface-number [ipv4-source-address]
// 指定发送BGP报文的原接口,并可指定发起连接时使用的源地址
bgp]peer ipv4-address ebgp-max-home [hop-count]
// 指定建立EBGP连接允许的最大跳数。缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。

4.查看BGP信息
display bgp peer
// 查看Peer表
display bgp routing-table
// 查看bgp路由表
display bgp routing-table 10.1.0.0 24
// 查看具体的一条路由表

 

 

阅读剩余
THE END