BGP是一种路径矢量协议。AS之间的外部网关协议。使用TCP作为传输协议,使用179端口号进行通信。BGP通过在对等体之间建立TCP连接来交换路由信息和网络可达性信息。BGP的主要作用是实现自治系统之间的路由选择和路径选择。
一、BGP引入
1、IGP,EGP:
IGP
内部网关协议 :域(AS)内路由选择
- RIP:距离矢量协议,多用于小型网络。
- ISIS:链路状态协议,多用于运营商网络。
- OSPF:链路状态协议,多用于企业中大型网络。
- EIGRP:CISCO 私有路由协议,增强型距离矢量协议。
EGP
外部网关协议:域(AS)间路由选择
- EGP:BGP 的前身,目前已经不再使用。
- BGP:路径矢量协议,事实上目前唯一的域间路由选择协议。
2,距离矢量,路径矢量
路径矢量--EGP | 距离矢量--RIP |
一个AS为一跳 | 一个路由器为一跳 |
不是算法概念,仅将IGP协议算好的路由信息搬运传递出去 | 是一个算法的概念,用来计算到达未知网段作的路由信息 |
3,TCP,UDP
TCP协议
面向连接的,通过三次握手建立连接,确保数据的有序、可靠传输,并具有流控制和拥塞控制机制。
UDP协议
面向无连接的,不提供可靠性保证,但传输速度快,适用于对实时性要求较高且对可靠性要求不高的场景。
二、BGP对等体分类
IBGP(内部BGP)和EBGP(外部BGP)是BGP对等体的两种类型,它们在不同的场景中发挥不同的作用。
1、IBGP
IBGP用于AS内部的路由传递。在一个AS内部,可能有多个BGP对等体,它们通过IBGP建立对等关系来交换路由信息。将外部BGP(EBGP)学习到的路由信息传递给AS内的其他BGP对等体。
2、EBGP
EBGP用于AS间的路由传递。当一个AS与另一个AS相连时,它们之间会建立EBGP对等关系,通过EBGP交换路由信息。
3、IBGP的协议特点
- 1、AS路径不会改变,即AS路径会保持不变。
- 2、IBGP对等体必须全互连,即每个IBGP对等体之间都必须建立对等关系。
- 3、 IBGP对等体之间需要进行全网扩散,确保每个对等体都能学习到完整的路由信息。
4、EBGP的协议特点
- 1、 AS路径会改变,即AS路径会根据经过的自治系统而改变。
- 2、 EBGP对等体之间可以是部分互连,即不需要所有EBGP对等体之间都建立对等关系。
- 3、 EBGP对等体之间不需要进行全网扩散,只需要将路由信息传递给需要的自治系统。
三、BGP数据包
BGP的运行是通过报文驱动的,共有Open、Update、Notification、Keepalive和Route-refresh五种报文类型。其中 Keepalive 报文为周期性发送,其余报文为触发式发送
Open报文:
是TCP连接建立BGP连接后发送的第一个消息,用于建立对等体连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
Update报文:
用于在对等体之间交换路由信息。连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端。
Notification报文:
当BGP检测到错误状态时,就向对等体发出Notification消息,之后会立即中断BGP连接。
Keepalive报文:
BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性,周期保活。
Route-Refresh报文:
在改变路由策略后请求对等体重新发送路由信息。通过OPEN消息告知BGP对等体本地支持路由刷新能力。只有支持路由刷新(Route-refresh)能力的 BGP 设备会发送和响应此报文。
四、BGP状态机
BGP对等体的交互过程中存在6种状态机:空闲状态(Idle)、连接状态(Connect)、活跃(Active)、 Open 报文已发送(OpenSent)、 Open 报文已确认(OpenConfirm)和连接已建立(Established)。在BGP对等体建立的过程中,通常可见的3个状态是: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报文交换路由信息。
1、Idle 状态
是 BGP 初始状态。在 Idle 状态下, BGP 拒绝邻居发送的连接请求。只有在收到本设备的 Start 事件后, BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接,并转至 Connect状态。
说明:
Start 事件是由一个操作者配置一个 BGP 过程,或者重置一个已经存在的过程或者路由器软件重置 BGP 过程引起的。
任何状态中收到 Notification 报文 或 TCP 拆链通知等 Error 事件后, BGP 都会转至 Idle状态。
2、Connect 状态
BGP 启动连接重传定时器(Connect Retry),等待 TCP 完成连接。
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态;
如果 TCP 连接失败,那么 BGP 转至 Active 状态;
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和其它 BGP 对等体进行 TCP 连接,停留在 Connect 状态。
3、Active 状态
BGP 总是在试图建立 TCP 连接。如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至 OpenSent 状态;
如果 TCP 连接失败,那么 BGP 停留在 Active 状态;
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至 Connect状态。
4、OpenSent 状态
BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的 AS 号、版本号、 认证码等进行检查。
如果收到的 Open 报文正确,那么 BGP 发送 Keepalive 报文,并转至 OpenConfirm 状态;
如果发现收到的 Open 报文有错误,那么 BGP 发送 Notification 报文给对等体,并转至Idle 状态。
5、OpenConfirm 状态
BGP 等待 Keepalive 或 Notification 报文。如果收到 Keepalive 报文,则转至 Established 状态,如果收到 Notification 报文,则转至 Idle 状态。
6、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工作过程
因为BGP的传输层协议是TCP协议,所以在BGP对等体建立之前,对等体之间首先进行TCP连接。BGP邻居间会通过Open报文协商相关参数,建立起BGP对等体关系。建立连接后,BGP邻居之间交换整个BGP路由表。BGP会发送Keepalive报文来维持邻居间的BGP连接,BGP协议不会定期更新路由表,但当BGP路由发生变化时,会通过Update报文增量地更新路由表。当BGP检测到网络中的错误状态时(例如收到错误报文时),BGP会发送Notification报文进行报错,BGP连接会随即中断。
1. 邻居建立
BGP的工作始于建立邻居关系。邻居关系是指两个BGP路由器之间的逻辑连接。建立邻居关系的步骤如下:
1.路由器A向路由器B发送一个BGP Open消息,其中包含有关路由器A的信息,如AS号码、BGP版本等。
2.路由器B接收到BGP Open消息后,检查其中的信息,并向路由器A发送一个BGP Open消息作为响应。该消息包含有关路由器B的信息。
3.路由器A和B交换Keepalive消息以确认邻居关系的建立。
4.路由器A和B交换Update消息以交换路由信息。
2. 路由信息交换
一旦邻居关系建立,BGP路由器之间开始交换路由信息。路由信息交换的步骤如下:
5.当路由器A有新的路由信息可用时,它将发送一个Update消息给路由器B。Update消息包含有关可达目的地的信息,如网络前缀、下一跳等。
6.路由器B接收到Update消息后,检查其中的路由信息,并将其添加到自己的路由表中。
7.路由器B向路由器A发送一个Update消息,其中包含有关自己的路由信息,以便路由器A也可以将其添加到自己的路由表中。
8.路由器A和B可以通过交换Update消息来更新彼此的路由表,以反映网络拓扑的变化。
3. 路由策略决策
在路由信息交换的过程中,BGP路由器需要根据一定的路由策略来决定如何选择和传播路由。路由策略决策的步骤如下:
9.路由器根据收到的Update消息中的属性,如AS路径、自治系统号等,判断是否接受该路由。
10.如果路由器接受了路由,它将根据自己的策略决定是否将该路由添加到自己的路由表中。
11.路由器可以基于不同的策略进行路由选择,如最短AS路径、最低延迟等。
12.路由器可以使用路由映射、过滤器等技术来修改或限制路由信息的传播。
4. 路由信息传播
一旦路由器决定了要接受和使用的路由,它将开始将路由信息传播给其他邻居。路由信息传播的步骤如下:
13.路由器将接受的路由信息添加到自己的路由表中。
14.路由器将新的路由信息封装在Update消息中,并发送给所有的邻居。
15.邻居路由器接收到Update消息后,将检查其中的路由信息,并根据自己的策略决定是否接受和使用该路由。
16.如果邻居路由器接受了路由,它将将其添加到自己的路由表中,并将该路由继续传播给它的邻居。
17.路由信息根据BGP的循环避免机制,避免无限循环的传播。
5. 路由器状态维护
BGP路由器需要维护与邻居之间的状态和连接。路由器状态维护的步骤如下:
18.路由器定期发送Keepalive消息给邻居,以确认邻居的活动状态。
19.路由器接收到邻居的Keepalive消息后,确认邻居的活动状态,并继续维持邻居关系。
20.如果路由器在一定时间内没有收到邻居的Keepalive消息,它将认为邻居已经失效,并将邻居从自己的路由表中删除。
21.路由器可以根据需要手动终止与邻居的连接,或者重新建立邻居关系。
6. 路由信息的撤销和更新
在网络拓扑变化或故障发生时,BGP路由器需要及时撤销和更新路由信息。路由信息的撤销和更新的步骤如下:
22.如果某个路由不再可达或失效,路由器将发送一个Withdraw消息给它的邻居,以撤销该路由。
23.邻居路由器接收到Withdraw消息后,将从自己的路由表中删除该路由。
24.如果某个路由的属性发生变化,路由器将发送一个Update消息给它的邻居,以更新该路由。
25.邻居路由器接收到Update消息后,将根据新的路由信息更新自己的路由表。
以上是BGP的工作流程的主要步骤和流程。BGP作为一种自治系统之间的外部网关协议,通过邻居建立、路由信息交换、路由策略决策、路由信息传播、路由器状态维护以及路由信息的撤销和更新等过程,实现了互联网中的路由控制和管理。