概述协议
BGP 是种实现 AS 间的路由可达,并选择最佳路由的矢量性协议。早期发布的三个版本分别是 BGP-1(RFC1105)、BGP-2(RFC1163)、BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。
BGP 通常被称为 Path-Vector Routing Protocol(路径矢量路由协议)
BGP Speaker
运行 BGP 的路由器被称为 BGP Speaker(BGP 发言者,或 BGP 路由器)。
BGP Peer: IBGP Peer and EBGP Peer
两个建立 BGP 会话的路由器互为 Peer(对等体),BGP Peer 间交换 BGP 路由表。
BGP 存在两种对等体关系类型:
IBGP Peer
IBGP(Internal BGP):位于相同 AS 的 BGP Router 间的 BGP Peer 邻接关系。
EBGP Peer
EBGP(External BGP):位于不同 AS 的 BGP Router 间的 BGP Peer 关系。
两台路由器间要建立 EBGP Peer 关系,必须满足两个条件:
1)在配置 EBGP 协议时,命令 peer 所指定的对等体IP地址要求路由可达,并且 TCP 连接能够正确建立;
2)两个路由器所属 AS 不同(即 AS Number 不同);
Source IP Address
针对建立 BGP Peer 关系的路由器,并不要求必须直连,但是需要通过配置来声明 Peer 的地址信息;
在 BGP 中,管理员手动互相指定两个 Peer 地址。在 BGP 关系建立过程中,SRC-Address 与 DST-Address 也必须为这两个地址,否则无法建立 Peer 关系。即:本端路由器用于发起 TCP 连接的 SRC-Address 必须与 对端路由器 Peer 所指定的 Address 相同;
在缺省情况下,路由器的 BGP Pakcet 的 Source Address 为 出接口地址。
EBGP (Inter-AS)
在部署 EBGP Peer 关系时,通常使用 直连接口的 IP-Address 作为源地址。鉴于非直连接口在两个 AS 间通常是无法互通的,所以很难使用非直连接口。
也能够使用 Loopback 接口来建立 EBGP 关系:EBGP, with Loopback, Max Hop
IBGP (Intra-AS)
在部署 IBGP Peer 关系时,建议使用 Loopback 地址作为更新源地址。
选用 Loopback 原因:
1)如果链路断开,接口 Down 状态而引发 IP Address 失效,进而导致 BGP 断开;
2)而 Loopback 接口非常稳定,不用担心接口故障;在 AS 内,通常运行 IGP 协议,所以内部网络互通;
3)且借助 AS 内的 IGP 和冗余拓扑来保证可靠性;
如下图所示,在 R1 与 R3 间,我们尝试建立 IBGP 邻居:
1)如果采用直连接口建立 IBGP 邻居关系,那么接口故障或者直连链路发生故障,BGP 会话也会断开。
2)但事实上,AS 内部网络通常具备冗余链路,而冗余链路使得 R1 与 R3 间的 IP 连通性其实并没有断开(仍可通过 R4 到达彼此)。
Q:这里还有个小问题:当配置 BGP 协议时,我们使用 peer 指令来指定对端地址(BGP Peer),这也是 BGP 报文的 DST-Address,但是路由器默认使用出接口的地址来封装报文的 SRC-Address,而该地址与对端设备配置的 Peer Address 不匹配,将导致 BGP Peer 关系建立失败。
A:若使用 Loopback 接口建立 IBGP Peer 关系,则要显式指定 Source Address,以暗示路由器应该使用 Loopback 接口地址来封装报文;
Port Number (179)
与 OSPF、IS-IS 等协议不同,BGP 的会话是基于 TCP 建立的,其使用 TCP 为传输层协议。路由器间的 BGP 会话基于 TCP 连接而建立。
其使用 TCP 179 端口号。
Incremental Updates
BGP Router 只发送增量的 BGP 路由更新,并采用触发式更新(不会周期性更新)。该特性 BGP 能够承载大批量的路由前缀,可在大规模网络中应用。