BGP边界网关协议
前言:
-
网络划分:
- IGP(内部网关协议):用于在单一自治系统(AS)内部交换路由信息的协议。
- EGP(外部网关协议):用于在不同自治系统之间交换路由信息的协议。
-
自治系统(AS):
- 定义:由一个或多个网络组成的集合,通常由一个组织或机构控制。
- AS号:用于区分和标识不同的AS。原本是16位,范围是0-65535。由于AS号资源有限,IANA组织提出了扩展到32位的方案。(中国骨干网AS号——4134)
-
外部网关协议(EGP):
作用:负责在AS之间传递路由信息。 -
边界网关协议(BGP):
- 是EGP的一种具体实现,是互联网上用于连接不同AS的主要协议。
- 版本:
- BGP V4:主要用于传递IPv4路由信息。
- BGP V4+:增强版本,可以适应多种网络环境,包括IPv4和IPv6。
BGP(边界网关协议):
类型:路径矢量路由协议。
特点:直接传递网段信息(路由条目信息)。
矢量定义:该路由信息的下一跳就是发送(传递)该路由的设备。
分类:无类别路由协议。
工作原理:以一个AS作为一跳进行路由的传递,不涉及算法,仅传递运行了BGP协议的设备路由表中存在的路由信息。
RIP(路由信息协议):
类型:距离矢量路由协议。
- 对内部网关协议的关注点:
- 选路:选择最佳路径。
- 收敛速度:网络拓扑发生变化时,路由器更新其路由表的速度。
- 资源占用:协议运行时对网络设备资源的消耗。
路由信息的可控性:
- BGP设计理念之一是为了在AS之间传递路由信息时实现更好的路由控制。由于存在多台运行BGP协议的设备,BGP通过设计路径属性来实现对路由信息的精细控制。
路由传递的可靠性:
- BGP没有周期更新机制,它在传输层利用TCP协议(端口179)来确保报文传输的可靠性。这是BGP与其他内部网关协议(如RIP和OSPF)的一个重要区别,后者通常使用UDP或进行跨层封装。
TCP协议的影响:
- 收敛速度慢:由于TCP的连接建立和确认机制,BGP的收敛速度可能相对较慢。
- 一对一的单播协议:TCP连接是点对点的,这意味着BGP更新是单播发送的,而不是广播或多播,这有助于减少网络流量。
补充点:
- BGP的路径属性:BGP路由信息包含多种属性,如AS路径、下一跳、本地优先级、MED(多路径外部指标)等,这些属性决定了路由的选择和传递。
- BGP的可靠性:除了使用TCP协议外,BGP还通过其他机制(如路由刷新能力、路由持稳能力等)来确保路由信息的可靠性。
- BGP的会话建立:BGP设备之间首先通过TCP建立连接,然后交换Open消息以建立BGP会话,之后才能交换路由信息。
BGP对等体关系的建立
先启动BGP的一端先发起TCP连接,如上图所示,R1先启动BGP,R1使用随机端口号向R2的179端口发起TCP连接,完成TCP连接的建立。
三次握手建立完成之后,R1、R2之间相互发送Open报文,携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。
其中Open报文中携带:
- My Autonomous System:自身AS号
- Hold Time:用于协商后续Keepalive报文发送时间
- BGP Identifier:自身Router ID
BGP建立对等体的对等体都会发起TCP三次握手,所以会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互。
BGP的AS-BY-AS原则:
BGP将一个自治系统(AS)视为一个整体。在一个AS内部,所有运行了BGP的设备学习到的路由信息是一致的。
BGP的邻居(对等体):
BGP邻居或对等体是指运行BGP协议的设备之间建立的关系。
EBGP对等体:
定义:运行BGP的设备来自不同的AS,建立的对等体关系被称为EBGP对等体。
特点:EBGP对等体通常使用直连建立对等体关系。
注意事项:不建议EBGP对等体之间有中间节点设备,因为无法保证自治性。为了限制EBGP直连建立对等体,EBGP设备之间传递的报文信息TTL值设置为1,只能传递一跳。
IBGP对等体:
定义:BGP协议支持在同一个AS内部非直连设备之间建立对等体关系,这种对等体称为IBGP对等体。
特点:IBGP对等体允许非直连建立,这是因为AS内部可能存在众多设备,无法保证所有设备都运行BGP协议。
注意事项:IBGP对等体设备之间传递的BGP报文TTL值设置为最大255。
BGP的负载均衡:
默认情况下,BGP不支持负载均衡。这意味着BGP通常会选择最佳路径进行数据包转发,而不是在多个路径之间分配流量。
BGP的数据包
报文名称 | 作用 | 发送时刻 |
---|---|---|
Open | 协商BGP对等体参数,建立对等体关系 | BGP TCP连接建立成功之后 |
Update | 发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体 |
Keepalive | 标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
open报文——>建立对等体
AS号一致性:
描述:AS号是由对端设备传递的,需要与本地的配置进行比对。
注意事项:如果AS号不一致,将导致建立对等体失败。
路由器标识符(Router ID):
生成规则:与OSPF协议完全一致。
注意事项:必须保证Router ID不能重复。
认证:BGP支持对等体之间的认证,以确保安全性。
路由刷新功能:用于同步策略,需要两端设备都支持该功能才能使用路由刷新功能。
保活时间(Keepalive Time):
描述:用于检查BGP设备能否正常工作的检查时间,类似于OSPF的Dead Time。
默认值:180秒。
注意事项:两端设备配置不一致不会导致建立对等体失败,但会协商更小的时间作为保活时间。Open报文仅协商该时间,不进行周期保活。
keeplive报文
周期保活:
描述:Keepalive报文用于周期性地确认BGP对等体的连通性。
发送频率:默认情况下,发送频率等于保活时间的1/3,即默认保活时间为60秒,因此Keepalive报文默认每20秒发送一次。
作为Open报文的临时确认包:
描述:在BGP对等体建立过程中,Open报文用于协商对等体参数。如果参数协商成功,设备会主动发送Keepalive报文作为临时确认,反馈协商结果。
注意事项:如果参数协商失败,设备将不会发送Keepalive报文。
BGP公共报文头部
、
BGP的六种状态机
Peer状态名称 | 用途 |
---|---|
Idle | 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 |
Connect | 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接 |
Active | TCP连接没建立成功,反复尝试TCP连接 |
OpenSent | TCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立 |
OpenConfirm | 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包 |
Established | 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息 |
Idle空闲状态:在指定建立对等体对象时,监测设备是否存在路由,如果存在则进入下一状态并准备建立三次握手,如果没有路由则停留在Idle状态。
BGP的工作过程
1.基于IGP实现路由可达:BGP需要建立TCP会话,因此要求邻居之间路由可达。这是BGP工作的前提。
2.指定对等体关系并建立TCP会话:邻居之间通过三次握手建立TCP会话通道。所有的BGP通信都基于此TCP会话通道传输,依靠TCP提供传输的可靠性。
3.使用OPEN和Keepalive报文建立邻居关系:OPEN报文携带建邻参数,Keepalive报文用于确认OPEN报文参数和保活。最终完成对等体关系建立,生成邻居表存储对等体信息。
4.使用Update报文共享路由信息:建立对等体关系后,使用Update报文共享路由条目信息,包括目标网络号、掩码和路径属性。这些信息记录在BGP表中。
5.加载最优路由信息到路由表:从BGP表中选择最优路由信息(通过路径属性)加载到路由表中。BGP默认没有负载均衡,只有一个最优解。
6.使用Keepalive报文周期保活:收敛完成后,使用Keepalive报文进行周期性保活,默认保活时间(hold time)为180秒,发送周期为60秒。
7.使用Notification报文告警:如果过程中出现任何问题,使用Notification报文进行告警。
8.使用Update报文触发更新:如果出现结构突变(如网段消失或新增),使用Update报文触发更新并通告给其他对等体。