1. 什么是BGP?
边界网关协议(Border Gateway Protocol,BGP)是一种路由选择协议,用于在路由选择域之间交换网络层可达性信息。路由选择域经常被称为自治系统AS(Autonomous System)。
2. 为什么需要BGP?
与BGP相对的路由选择协议是IGP(Interior Gateway Protocol,内部网关协议),用于在路由选择域内交换网络层可达性信息。
IGP有:
- 距离矢量协议,例如路由信息协议(Routing Information Protocol, RIP)。
- 链路状态协议,例如开放式最短路径优先(Open Shortest Path First, OSPF)协议和中间系统到中间系统(Intermediate System to Intermediate System, IS-IS)协议。
上述协议的共同目标是解决路由选择域内路径最优化的问题,而不同的域通常需要不同的路由选择策略和管理策略,BGP的目标是提供策略控制能力和可扩展性。
根据BGP作用域的不同可分为IBGP和EBGP,当BGP运行于同一AS内部时,为IBGP(Internel BGP,内部边界网关协议),当BGP运行于不同AS之间时,称为EBGP(Externel BGP,外部边界网关协议)。
3. BGP的工作方式
Speaker角色:发送BGP报文的路由设备称为BGP发言者(Speaker),主要工作为接收或产生新的路由信息,并发布(Advertise)给其它BGP Speaker。
BGP的运行方式是通过报文实现的,共有五种报文类型。
- Open:TCP连接建立后发送的第一个报文,用于建立BGP对等体之间的连接关系;
- Update:用于在对等体之间交换路由信息。
- Notification:检测到错误状态时,就向对等体发出Notification报文,之后BGP连接会立即中断。
- Keepalive:BGP会周期性地向对等体发出Keepalive报文,用来保持连接的有效性。
- Route-refresh:Route-refresh报文用来请求对等体重新发送所有的可达路由信息。
整体流程图:
- BGP传输层协议是基于TCP实现的,在建立BGP对等体之前,会进行TCP连接;
- BGP邻居间会通过Open报文协商相关参数,建立起BGP对等体关系。
- 建立连接后,BGP邻居之间交换整个BGP路由表。
- BGP会发送Keepalive报文来维持邻居间的BGP连接,BGP协议不会定期更新路由表,但当BGP路由发生变化时,会通过Update报文增量地更新路由表。
- 当BGP检测到网络中的错误状态时(例如收到错误报文时),BGP会发送Notification报文进行报错,BGP连接会随即中断。
BGP的有限状态机总共有六种,对等体建立过程中,常见的有Idle、Active、Established。
- Idle状态下,BGP拒绝任何进入的连接请求,是BGP初始状态。
- Connect状态下,BGP等待TCP连接的建立完成后再决定后续操作。
- Active状态下,BGP将尝试进行TCP连接的建立,是BGP的中间状态。
- Open-Sent状态下,BGP等待对等体的Open报文。
- Open-Confirm状态下,BGP等待一个Notification报文或Keepalive报文。
- Established状态下,BGP对等体间可以交换Update报文、Route-refresh报文、Keepalive报文和Notification报文。
BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方通过Update报文交换路由信息。