BGP的状态机
OSPF的状态机是在描述整个协议的完整工作过程,而BGP的状态机仅描述的是对等体关系建立过程中的状态变化。-----因为BGP将邻居建立过程以及BGP路由收发过程完全隔离。
IGP协议在启动后,需要通过network命令激活接口,从而使接口具备处理IGP协议报文的能力。且network命令另一重含义就是发布路由,所以IGP协议无法将邻居建立过程以及路由收发过程隔离。
但是BGP协议在启动后,每一个接口都具备处理BGP报文的能力,不需要其他任何操作,所以可以将邻居建立过程以及路由收发过程进行分割。
- Idle----空闲状态
- 等待网络管理员手工指定邻居信息,IP地址以及AS号
- 当指定邻居信息后,会进入一个检查环节,需要检查手工指定的IP地址在本地路由表中是否可达,只有可达,才可以正常建立TCP会话,如果不可达,则邻居关系建立失败,停留在Idle状态。
- Connect----连接状态
- 该状态会开启一个连接重传定时器—32秒。
- 当该计时器时间超时,则本端重新发送一次TCP连接请求报文。在该时间段内没有收到任何一个回复报文。
- 如果此时本地判断TCP状态进入到establish状态,则认为TCP连接建立成功,进入到opensent状态。
- 如果此时本地收到的是拒绝报文,则认为TCP连接建立失败,进入到Active状态。
- 如果BGP在连接重传定时器时间内,没有收到对等体的响应,那么BGP会继续尝试与对等体建立TCP会话,并一直处于该状态。
- 该状态会开启一个连接重传定时器—32秒。
- Active----尝试状态
- 当第一次TCP会话建立失败,则进入该状态。
- 如果建立成功,则进入opensent状态;如果建立失败,则停留在active状态。
- 使用在connect状态开启的连接重传定时器来发送链接建立请求报文,当建立成功后,该计时器才会被关闭。
- opensent状态
- 本端处于opensent状态,然后对端刚从Idle状态变为Connect状态,对端重新申请建立连接,先发送RST报文(本端opensent状态不会变,除非对面发的是FIN报文),然后和之前一样,最后选择后建立的连接
- 本地发送出open报文,同时也将收到对端发送的open报文,并予以回复。
- 如果收到的open报文中的参数本端认可,则回复keepalive报文;否则回复notification报文。
- 如果回复keepalive报文,则进入openconfirm状态;如果回复notification报文,则进入idle状态。
- openconfirm状态
- 等待对等体对于本地发出的open报文参数的回复。
- 如果收到的是keepalive报文,则认为BGP会话建立成功,进入到establish状态。
- 如果收到的是notification报文,则认为BGP会话建立失败,断开TCP连接,回到idle状态。
- Establish状态----建立状态
- BGP会话建立的标志。
- 在该状态可以发送除了open报文以外的所有BGP数据报文。
- 一但接收到错误的keepalive报文或TCP的FIN报文,本端会发送notification报文,然后进入idle状态。
BGP的工作过程
- 基于IGP、静态、直连路由协议实现IP可达---->前置要求,不是BGP工作过程
- 启动BGP协议,并指定邻居关系。
- 邻居之间使用单播进行数据传输,通过三次握手,建立TCP会话通道。
- 之后所有的数据通讯均基于TCP会话通道来传输,并由TCP协议来提供传输的可靠性机制。
- 使用open报文和keepalive报文进行邻居之间参数的协商,以及对等体关系的建立。
- open报文用来携带参数信息
- keepalive报文用来进行参数确认
- 最终生成BGP邻居表。
- 使用update报文来传输BGP路由信息。该信息中将携带前缀信息、前缀长度以及路径属性。
- 设备会将自己发送的以及收到的所有BGP路由信息记录在BGP路由表中。
- 设备会对比不同路由表单,将其中最优的路由信息加载到全局路由表中。
- 此时路由收敛完成,BGP对等体之间使用keepalive报文进行周期保活(可选)。默认为180S,可以设置为0关闭周期保活性质。
- 如果出现出错误,使用notification报文告警;如果出现结构突变,使用update报文进行增量更新。
BGP的防环
EBGP的水平分割机制
专门为了解决EBGP对等体之间的环路问题
通过AS_Path属性进行防环,该属性会记录下该路由信息所经过的所有AS的AS号。当设备收到一条路由信息时,会查看该属性内容,如果其中存在有与本地AS号相同的信息,则不接受该路由信息。
IBGP的水平分割机制
BGP规定:当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由信息通告给任何IBGP对等体------IBGP水平分割机制。
解决思路:
- 将原本的IBGP对等体关系替换为EBGP对等体关系----在同一个AS下--------联邦。
- 手工设定让某台路由器将从IBGP学习到的路由信息传递给某个IBGP对等体-----路由反射器。
- 构建全互联的IBGP对等体关系。----暂时常用。
BGP的路由黑洞
BGP同步更新规则----为了避免BGP路由黑洞问题
当一台路由器从自己的IBGP对等体学习到一条IBGP路由时,它将不能使用这条路由或者将这条路由通告给其他设备,除非他又从IGP协议中学习到这条路由信息------要求IBGP路由与IGP路由同步。
华为与思科默认禁止使用该规则,华为不允许打开该规则,思科允许打开该规则。
解决方法:
- 让两台运行BGP设备在物理或逻辑上直连
- 所有设备运行BGP协议----暂时最常用
- 将BGP路由引入到IGP中。
- MPLS----多协议标签交换----现网环境使用的解决方案