《重识云原生系列》专题索引:
- 第一章——不谋全局不足以谋一域
- 第二章计算第1节——计算虚拟化技术总述
- 第三章云存储第1节——分布式云存储总述
- 第四章云网络第一节——云网络技术发展简述
- 第四章云网络4.2节——相关基础知识准备
- 第四章云网络4.3节——重要网络协议
- 第四章云网络4.3.1节——路由技术简述
- 第四章云网络4.3.2节——VLAN技术
- 第四章云网络4.3.3节——RIP协议
- 第四章云网络4.3.4节——OSPF协议
- 第四章云网络4.3.4.3节——OSPF协议工作原理
- 第四章云网络4.3.4.4节——[转载]OSPF域内路由
- 第四章云网络4.3.4.5节——[转载]OSPF外部路由
- 第四章云网络4.3.4.6节——[转载]OSPF特殊区域之Stub和Totally Stub区域详解及配置
- 第四章云网络4.3.4.7节——[转载]OSPF特殊区域之NSSA和Totally NSSA详解及配置
- 第四章云网络4.3.5节——EIGRP协议
- 第四章云网络4.3.6节——IS-IS协议
- 第四章云网络4.3.7节——BGP协议
- 第四章云网络4.3.7.2节——BGP协议概述
- 第四章云网络4.3.7.3节——BGP协议实现原理
- 第四章云网络4.3.7.4节——高级特性
- 第四章云网络4.3.7.5节——实操
- 第四章云网络4.3.7.6节——MP-BGP协议
- 第四章云网络4.3.8节——策略路由
- 第四章云网络4.3.9节——Graceful Restart(平滑重启)技术
2 BGP协议概述
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓扑图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。
2.1BGP使用场景简述
BGP用于在不同的自治系统(AS)之间交换路由信息。当两个AS需要交换路由信息时,每个AS都必须指定一个运行BGP的节点,来代表AS与其他的AS交换路由信息。这个节点可以是一个主机。但通常是路由器来执行BGP。两个AS中利用BGP交换信息的路由器也被称为边界网关(Border Gateway)或边界路由器(Border Router)。
由于可能与不同的AS相连,在一个AS内部可能存在多个运行BGP的边界路由器。同一个自治系统(AS)中的两个或多个对等实体之间运行的BGP 被称为 IBGP(Internal/Interior BGP)。归属不同的AS的对等实体之间运行的BGP称为EBGP (External/Exterior BGP)。在AS边界上与其他AS交换信息的路由器被称作边界路由器(border/edge router)。在互联网操作系统(Cisco IOS)中,IBGP通告的路由的距离为200,优先级比EBGP和任何内部网关协议(IGP)通告的路由都低。其他的路由器实现中,优先级顺序也是EBGP高于IGP,而IGP又高于IBGP。
- EBGP:运行于不同 AS 之间的 BGP 称为 EBGP。为了防止 AS 间产生环路,当 BGP 设备接收 EBGP 对等体发送的路由时,会将带有本地 AS 号的路由丢弃。
- IBGP:运行于同一 AS 内部的 BGP 称为 IBGP。为了防止 AS 内产生环路, BGP 设备不将从IBGP 对等体学到的路由通告给其他 IBGP 对等体,并与所有 IBGP 对等体建立全连接。为了解决 IBGP 对等体的连接数量太多的问题, BGP 设计了路由反射器和 BGP 联盟。
BGP是沟通Internet广域网的主用路由协议,例如不同省份、不同国家之间的路由大多要依靠BGP协议。BGP的邻居关系(或称通信对端/对等实体)是通过人工配置实现的,对等实体之间通过TCP(端口179)会话交互数据。BGP路由器会周期地发送19字节的保持存活keep-alive消息来维护连接(默认周期为30秒)。在路由协议中,只有BGP使用TCP作为传输层协议。
IETF先后为BGP制定了多个建议,分别为:
- RFC 4271:当前正使用的BGP协议版本,称之为BGP4。
- RFC 1654:BGP4协议的第一个规范。
- RFC 1105、RFC 1163、RFC 1267、RFC1771:BGP4之前的BGP版本。
2.2 BGP工作机制
BGP 其着眼点不在于自动发现网络拓扑,而在于在AS之间选择最佳路由和控制路由的传播:
- BGP使用TCP作为其传输层协议(监听端口号为179),提高了协议的可靠性,且不需要专门的机制来确保连接的可控性。
- BGP进行域间的路由选择,对协议的稳定性要求非常高。因此用TCP协议的高可靠性来保证BGP协议的稳定性。
- BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。
- 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
- BGP从设计上避免了环路的发生。
- AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。
- AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。
- 支持CIDR 无类域间路由;
- BGP提供了丰富的路由策略,提供了防止路由振荡的机制,BGP也易于扩展。
2.3 BGP报文格式
2.3.1 BGP报文的5种消息类型
BGP报文头中的type定义了BGP的报文类型。BGP对等体之间通过5种报文进行路由信息的交互,
- Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
- Update消息:用于在对等体之间交换路由信息。Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
- Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。
- Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
- Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。
这5种消息的应用场景:
- 通过TCP建立BGP连接时,发送OPEN消息;
- 连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端;
- 稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性;
- 当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体;
- ROUTE-REFRESH消息用来通知对等体自己支持路由刷新;
然后看一下报文格式。
2.3.2 BGP报文头格式
上图展开了BGP报文中的报文头Header:
- Marker(标记):16字节,固定为1。
- Length(长度):两字节无符号整数。指定了消息的全长,包括头部。
- Type(类型):1 字节,指示报文类型,如OPEN、UPDATE报文等
- 1 – OPEN
- 2 – UPDATE
- 3 –NOTIFICATION
- 4 – KEEPALIVE
2.3.3 BGP Open报文体格式
- Version:1字节,表示BGP版本,缺省为BGP4;
- My AS:2字节,表示发送端对等体的AS号;
- Hold Time:2字节,表示发送端对等体的保持时间,缺省为KeepAlive时间的3倍,180s;
- 如果在保持时间内没有收到Keepalive或Update报文,则认为邻居失效;
- 如果对等体之间协商的保持时间不一致,将会采用较短的时间作为保持时间;
- 如果保持时间为0,对等体之间不发送Keepalive报文,BGP连接永远UP;
- BGP identifier:4字节,表示对等体的RouterID;
- RouterID优选Loopback地址大的,其次是物理接口地址大的;
- Opt Param Len:1字节,表示可选参数字段长度;
- Optional parameters:用于BGP能力协商,如4字节AS号、路由刷新、BGP多协议扩展等;
在向对等体发送Open消息的时候,对等体之间根据可选参数进行能力协商,如果对等体之间都支持就可以使用该能力;
如果一端对等体不支持该能力,会发送Notification报文,说明对等体不支持该能力,BGP邻居会重建;
2.3.4 KeepAlive报文及格式
KeepAlive报文,用于维护对等体邻居关系.缺省为保持时间180s的1/3倍60s,Update报文会抑制KeepAlive报文的发送。如果保持时间为0,那么不会发送KeepAlive消息;
KeepAlive报文只包含BGP报头;
2.3.5 Update报文格式
Update报文,用来通告可达路由和不可达路由;可达路由携带路径属性;不可达路由只携带不可达路由前缀和前缀长度;
- Withdrawn Routes Length:2字节,表示不可达路由的长度;
- Withdrawn Routes:表示不可达路由的前缀和前缀长度;
- NLRI:表示可达路由的前缀和前缀长度;
- Path Attribute Length:2字节,表示可达路由携带的路径属性长度;
- Path Attribute :表示可达路由携带的路径属性;
2.3.6 Notification报文
Notification报文,用于错误信息通告,然后断开 BGP邻居。Notification报文由错误代码、错误子代码以及数据字段构成。
- Error Code:1字节,表示每个错误对应的错误码,每个错误码可以包含多个错误子代码;
- Error SubCode:1字节,表示每个错误码对应的错误子代码;
- Data:包含了错误相关信息,用来诊断差错原因;
2.3.7 Route-Refresh报文
Route-Refresh报文,用于请求对等体重新发送路由信息。
- 对等体之间发送Open报文进行能力协商时,会进行路由刷新能力协商。
- 当BGP的邻居入口路由策略改变后,会自动向邻居发送Refresh消息请求对等体重新发送路由信息。
- 当BGP的邻居出口路由策略改变后,BGP会向邻居重新发送路由信息;
2.4 BGP数据库
BGP数据库是BGP正常工作所需要的存储空间,基于保存的内容不同,可分为以下几种:
- IP路由表(IP-RIB):全局路由信息库,包括所有最优的IP路由信息。
- BGP路由表(Loc-RIB):BGP路由信息库,包括本地BGP Speaker通告的路由信息,将其中最优路由添加到IP路由表中。注意:先要关注BGP路由表、若BGP路由表中不是最优路由,则无法在IP路由表中可见。
- 邻居表:对等体邻居清单列表,包括对等体两端的邻居信息即邻居列表。
- Adi-RIB-In:对等体宣告给本地Speaker的未处理的路由信息库。
- Adj-RIB-Out:本地Speaker宣告给指定对等体的路由信息库。
参考链接
BGP协议原理(一)BGP协议基本概念:BGP作用与特点、BGP邻居关系建立与配置_Skye_Zheng的博客-CSDN博客_bgp协议作用
BGP协议总结(比较详细,好理解)_Looo~ye的博客-CSDN博客_bgp协议
BGP协议详解(一)_liboyang990814的博客-CSDN博客_bgp协议
本文由[mdnice](https://mdnice.com/?platform=6)多平台发布
网友评论