###BGP概述
BGP的版本:
- BGP-1 RFC1105
- BGP-2 RFC1163
- BGP-3 RFC1267
- BGP-4 RFC1771 1994年
- BGP-4 RFC4271 2006年
AS Autonomous System 自治系统:由一个单一的机构或者组织所管理的一系列IP网络及其设备所构成的集合
根据工作范围的不同,动态路由协议可以分两类:
a. IGP Interior Gateway Protocol 内部网关协议
ⅰ. RIP
ⅱ. OSPF
ⅲ. IS-IS
b. EGP Exterior Gateway Protocol 外部网关协议
ⅰ. BGP
BGP Border Gateway Protocol 边界网关协议
-
BGP使用TCP作为传输层协议 TCP端口 179
-
建立对等体关系后,只发送增量更新或者在需要时进行触发性更新
-
BGP采用认证和GTSM的方式,保证了网络的安全性
-
BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且指导邻居按策略发布路由
-
BGP提供了路由聚合和路由衰减功能,用于防止路由震荡,提高了网络的稳定性
###BGP对等体关系类型
- BGP的对等体关系不要求设备必须直连
- BGP基于TCP 179 端口建立连接
BGP两种对等体关系:
- EBGP External BGP Peer 如果建立对等体关系的两台路由器位于不同的AS,那么他们之间的关系被称为EBGP对等体关系
a. EBGP对等体之间发送的BGP协议报文的TTL值默认为1,可以修改
b. 通常情况下,EBGP对等体关系基于直连接口建立 - IBGP Internal BGP Peer 如果建立对等体关系的两台BGP路由器位于相同的AS,那么他们之间的关系被称为IBGP对等体关系
a. IBGP对等体不要求路由器必须路直连
###BGP邻居建立
- eBGP:运行于不同AS之间的BGP称为eBGP。为了防止AS间产生环路,当BGP设备接收eBGP对等体发送的路由时,会将带有本地AS号的路由丢弃
- iBGP:运行在相同AS之内BGP称为iBGP,为了防止AS内产生环路,在AS内需要保持全连接的iBGP邻居
###BGP的路由标识(RouterID)
BGP的RouterID是一个用于标识BGP设备的32位的值,通常是IPv4地址的格式,在BGP会话建立时发送的Open报文携带。对等体之间会话建立,每个BGP设备都必须有唯一的RouterID,否则对等体之间无法建立连接
BGP RouterID可以通过两种方式获取:
- BGP自动选取
- 手工配置
缺省情况下,BGP选中设备上Loopback接口的IPv4地址作为BGP设备的RouterID,如果没有配置Loopback接口,系统会选择接口中最大的地址作为BGP的RouterID。一旦选出RouterID,除非发生进程重启或者接口地址删除,否则即时配置了更大的地址,也保持原来的RuterID
###BGP有线状态机
- Idle
a. BGP空闲状态,在Idle状态下,BGP拒绝邻居发送的连接请求,此时等待由BGP系统发出的Start事件
b. Strat事件发生后,BGP会对自己的资源进行初始化,重置连接计时器(Connect Retrt 默认为32s),发起TCP连接请求,并且开始侦听远端对等体发起连接的端口,并转至Connect状态
c. Start事件是一个由操作者配置一个BGP过程,或者重置一个已经存在的过程,或者路由器软件重置BGP过程引起的
d. 任何状态中收到Notification报文或者TCP拆除链路通知等Error事件后,BGP都会转至Idle状态 - Connect
a. 在Connect状态下,BGP启动重传定时器,等待TCP完成连接
b. 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态
c. 如果TCP连接失败,那么BGP转至Active状态
d. 如果连接重传定时器超时,BGP任没有收到BGP对等体的响应,那么BGP继续尝试和其他BGP对等体进行TCP连接,停留在Connect状态
e. 如果发生其他事件(如BGP系统或者操作者人员启动的),则退回Idle状态 - Active
a. 在Active状态,BGP总是在试图建立TCP连接
b. 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态
c. 如果TCP连接失败,那么BGP停留在Active状态
d. 如果重传定时器超时,任没有收到BGP对等体的响应,那么BGP转至Connect状态
e. 如果发生其他事件 如BGP系统或者操作者人员启动的),则退回Idle状态
f. 如果邻居状态在Connect和Active来回切花,有可能是TCP重传次数过多或者IP地址不可达造成的 - OpenSent
a. 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查
b. 如果收到的Open报文正确,那么BGP发送Keepalive报文,且重置Keepalive定时器,并转至OpenConfirm状态
c. 如果收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态 - OpenConfirm
a. 在OpenConfirm状态下,BGP等待keepalive或Notification报文,如果收到keepalive报文,则转至Established,如果收到Notification报文,则转至Idle状态 - Established
a. 在Established状态下,BGP可以和对等体交换Update、Keepalive、Router-refresh报文和Notification报文
b. 如果收到正确的Update或keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接
c. 如果收到错误的Update报文或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态
d. Route-refresh报文不会改变BGP状态
e. 如果收到Notification报文,那么BGP转至Idle状态
f. 如果收到TCP拆除链接通知,那么BGP将断开连接,转至Idle状态

###BGP邻居无法建立的因素
处于Idle、Connect、Active状态,说明BGP会话没有建立成功,处于OpenSent、OpenConfirm则说明邻居协商出现问题:
- 两边BGP Peer地址不可达,一般是因为底层原因或者缺少可达的路由
- 对等体AS配置错误
- eBGP跳数问题
- 更新源问题
- BGP的认证错误
- Open报文协商失败,Open报文需要协商BGP版本,Holdtime、RouterID以及可选项参数等
- BGP的RouterID冲突
- 联盟与非联盟之间的BGp连接配置错误
- 错误报文导致连接中断,比较少见的比如BGP的Marker值出现错误
###BGP对等体之间交互原则
BGP设备将最优路由加入BGP路由表,形成BGP路由,BGP设备与对等体建立邻居关系后,采取以下交互原则
- 从iBGP对等体收到的路由,BGP设备只发布给他的eBGP对等体
- 从eBGP对等体收到的路由,BGP设备发布给它所有的eBGP和iBGP对等体
- BGP设备只将最优路由发布给对等体
- 路由更新时,BGP设备只发送跟新的BGP路由
- 所有对等体发送的路由,BGP设备都会接收
BGP水平分割
IBGP水平分割用于解决BGP路由在一个AS内传递时,发生环路的问题
IBGP水平分割:BGP规定,当路由器从一个IBGP对等体学习到某条BGP路由时,他将不能再把这条路由通告给任何IBGP对等体
路由黑洞问题以及BGP同步规则
为了避免路由黑洞问题,BGP引入了同步规则(BGP Synchronization)
BGP同步规则:当一台路由器从自己的IBGP对等体学习到一条BGP路由时,它将不能使用该条路由或者把这条路由通告给自己的EBGP对等体,除非他又从IGP(ospf、静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步
解决路由黑洞的三种方案:
- AS内所有路由器都运行BGP
- 开启BGP同步规则(华为设备默认关闭同步规则)
- MPLS
路由通告
BGP路由在对等体之间交互路由时,有以下几个原则:
- 只将最优的路由加载到路由表中使用(激活了负载分担功能的情况下除外),而且只会将最优的路由通告给BGP对等体
- 当一台路由器从自己的EBGP对等体学习BGP路由时,默认会将这些路由通告给所有IBGP对等体以及EBGP对等体
- 当一台路由器从自己的IBGP对等体学习到BGP路由时,他不会将这些路由通告给其他IBGP对等体--水平分割使然
- 当一台路由器从自己的IBGP对等体学习到BGP路由时,如果BGP同步规则被激活,则路由器只有从IGP协议也学习到相应的路由时,才会将这些BGP路由通告给EBGP对等体;如果BGP同步规则被关闭,则即使没有从IGP协议学习到相应的路由,他也会将这些BGP路由通告给EBGP对等体
注意:华为路由器默认关闭BGP同步规则
AS号
BGP私有AS号的范围是64512-65534。这些AS号可以由私人组织自行使用。