BGP工作流程
- 通过 TCP 建立 BGP 连接时,发送 Open 消息
- 连接建立后,如果有路由需要发送或者路由变化时,发送 Update 消息通告对端
- 稳定后要定时发送 Keepalive 消息以保持 BGP 连接的有效性
- 当本地 BGP 在运行发生错误时,要发送 Notification 消息告诉 BGP 对等体
- Route-refresh 消息用来通知对等体自己支持路由刷新
BGP 邻居状态机
Idle:BGP连接的第一个状态。在空闲状态,BGP在等待一个启动事件。启动事件出现以后,BGP初始化资源,复位连接重试计时器,发送一条 TCP 连接,同时转入 Connect 连接状态
Connect:在此状态,BGP发起第一个TCP连接,如果连接重试器超时,就重新发起TCP连接,并继续保持在 Connect 状态,如果TCP连接成功,发送 Open 消息转入OpenSent 状态,如果TCP连接失败,就转入Active状态,如果在 Active 状态一直连接不成功,退回到 Connect 状态之后,计时器超过之后会退回到 Idle 状态
BGP发送第一个TCP连接成功之后会发送一个Open消息进入Opensent状态
Active:在此状态,BGP总是在试图建立TCP连接,如果连接重试器超时,就退回到 Connect 状态,如果TCP连接成功,就会发送一个 Open 消息转入OpenSent 状态,如果TCP连接失败,就继续保持在 Active 状态,并继续发起 TCP 连接
OpenSent:在此状态,TCP连接已经建立,BGP已经发送了第一个 Open 报文,剩下的工作,BGP就在等待其他对等体发送 Open 报文。并对收到的 Open 报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到 Idle 状态,如果没有错误,BGP就开始发送 Keepalive 报文,之后进入Open Confirm 状态
OpenConfirm:在此状态,已经发送了 Keepalive 报文,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
Route-refresh报文不会改变BGP状态。
如果收到Notification报文,那么BGP转至Idle状态。
如果收到TCP连接断开消息,那么BGP断开连接,转至Idle状态。
BGP Adj-in/out
当路由器R1给对端更新一条路由,路由器R2不会立马放入路由表
R2首先会放到 Adj-RIB-in 方向的数据库,之后在这里执行策略,Route-policy
执行完策略之后,加入R2的路由表 这是在 In 方向
当路由器R1给对端更新一条路由,先运行一个策略 Route-policy
之后放入 Adj-RIB-out,之后到RIB 这是在 Out 方向
BGP 路由黑洞问题
控制层面有路由,转发层面无路由(出现黑洞)
华为设备默认关闭同步,而且不能开启
思科设备可以通过命令开启同步完美解决问题
同步:收到的IBGP路由要不要转发给EBGP主要是看本地对于这条IBGP路由是否IGP可达,如果可达就会把这条IBGP路由发送给EBGP
BGP 路径属性
BGP 的策略属性工具最精华
公认必遵
所有BGP路由器都可以识别,且必须存在于Update消息中,如果缺少这种属性,路由信息就会报错
- Origin
- AS_Path
- Next-Hop
公认任意
所有的BGP路由器都可以识别,但不要求必须存在于 Update 消息中,可以根据具体情况来决定是否添加到 Update 消息中
- Local-Pref
- Atomic_Aggregate 聚合
可选过渡
BGP路由器可以选择是否在 Update 消息携带这种属性,接受的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别这种属性(不认识 但会携带,会传递)
不能被所有的BGP路由器识别,如果无法识别会传递给邻居
- Aggregator 聚合
- Community 团体属性
可选非过渡
BGP路由器可以选择是否在 Update 消息携带这种属性,在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥作用,因此接受的路由器如果不识别这种属性,将丢掉这种属性,不必转发给邻居路由器(不认识,会携带,邻居不认识,直接丢弃)
不能被所有的BGP路由器识别,如果无法识别则丢弃该属性
- MED
- Originator ID
- Cluster List
作者:DC