BGP基础知识

文章目录


一、BGP:边界网关路由协议

属于无类别的路径矢量协议;EGP协议中最流行的技术,工作在AS之间;
EGP—外部网关路由协议-BGP IGP内部网关路由协议-RIP OSPF EIGRP
AS—自治系统 全球网络—范围、管理域
AS号 – 标准 16位二进制构成 0-65535 其中1-64511公有 64512-65535私有
扩展 32位二进制构成

BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;
AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路;

IGP协议追求:1、无环(选路佳) 2、收敛快 3、占用资源少
EGP协议的追求1:可控性强(管理员可以方便进行策略干涉选路)
2、可靠性(BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;且BGP协议工作环境中为节约成本,必然出现非直连需要建立邻居关系—单播邻居)— 基于TCP工作 -三次握手四次断开 4种可靠传输机制 – TCP只能基于单播工作
单播—需要IP可达—依赖IGP BGP承载于IGP之上
3、AS-BY-AS 以一个AS为一跳;

二、BGP特点:

1) 无类别路径矢量 -----距离矢量的升级版—AS–BY–AS
2) 使用单播更新来发送所有信息;基于TCP 179端口工作
3) 增量更新–仅触发无周期
4) 具有丰富的属性来取代IGP中度量进行选路----多个参数控制协议
5) 可以在进项和出项对流量实施强大的策略–可控性
6) 默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
7) BGP支持认证和聚合(汇总)

三、BGP数据包

基于TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;

首先通过TCP的三次握手来寻找到邻居;

Open消息 : 是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。
对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。

是TCP仅负责邻居关系的建立,正常进收发一次即可;携带route-id,hold time 默认3min

Update消息 :用于在对等体之间交换路由信息。一条Update消息可以发布多条属性相同的可达路由消息,也可以撤销多条不可达路由信息。 携带路由条目: 目标网络号+各种属性

Keeplive消息 : 保活 周期1min查询邻居关系是否存在;实际保活TCP会话;

缺省情况下,发送KeepAlive 的时间间隔为 60秒,Hold Time是180秒。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器
超时,就认为对等体Down掉。

Notification消息: 出现错误数据时收发,之后BGP连接会立即中断。

Router-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。在所有BGP路由器使能Route-Refresh能力情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-Refresh消息收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。

BGP报文应用∶

  • BGP使用TCP建立连接,本地监听端口为179。和TCP连接建立相同,BGP连接的
    建立也要经过一系列的对话和握手。TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有∶BGP版本、BGP连接保持时间、本地的路由器标识(Router
    ID)、授权信息等。这些信息都在Open消息中携带。
  • BGP连接建立后,如果有路由需要发送则发送Update消息通告对端。Update消
    息发布路由时,还要携带此路由的路由属性,用以帮助对端BGP协议选择最优路由。在本地BGP路由变化时,要通过Update消息来通知BGP对等体。
  • 经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定状态。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在保持时间内,未收到任何对端发来的BGP消息,就认为此BGP连接已经中断,将断开此BGP连接,并删除所有从该对等体学来的BGP路由。
  • 当本地BGP在运行中发现错误时(如对端BGP版本本地不支持、本地BGP收到了结构非法的Update消息等),要发送Notification消息通告BGP对等体。本地
    BGP退出BGP连接时,也需发送Notification报文。

四、BGP工作原理一数据库

  • IP路由表 (IP-RIB):全局路由信息库,包括所有IP路由信息。
  • BGP路由表 (Loc-RIB):BGP路由信息库,包括本地BGPSpeaker选择的路由信息。
  • 邻居表:对等体邻居清单列表。
  • Adj-RIB-In:对等体宣告给本地BGP Speaker的未处理的路由信息库。
  • Adj-RIB-Out:本地BGP Speaker宣告给指定对等体的路由信息库

五、BGP工作原理–BGP路由信息处理

BGP基础知识
BGP路由信息处理∶

当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base,RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。

得出的最佳路径被存储到本地BGPRIB(Loc-RIB)中,然后被提交给本地IP路由选择表IP-
RIB),以用作安装考虑。

除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB(Adj-RIB-Out)中。

六、BGP的工作过程

1、配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输;
会话建立后,邻居间正常收发一次open报文建立BGP的邻居关系,生成邻居表;
BGP协议的open报文中将携带本地的RID—生成方式和OSPF一致;仅需要本地及本地所有邻居唯一即可;

邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系(周期保活TCP会话)

2、邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表;— 装载本地发出及接收到的所有路由条目;
默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)

3、收敛完成,仅keeplive周期保活即可;

4、若出现错误信息,邻居间将使用Notification报文进行报错操作

5、结构突变
1)新增 — 本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合路由包含
2)断开 — 本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合路由包含
只有到聚合条目中包含的所有明细路由均在本地失效,才告知邻居删除聚合条目
3)无法沟通 — hold time为3min,连续3次未收到邻居的keeplive;断开邻居关系、TCP会话,删除从该邻居处学习到的所有路由;

七、邻居状态机

BGP基础知识

可以利用邻居状态机描述BGP连接的建立和维护,它将有以下的6中状态:

  1. ldle (空闲)状态

BGP总以ldle状态为起点,该状态拒绝所有入站的连接。只有在BGP起动之后,BGP进程将初始化所有BGP资源,初始化去往邻居的TCP连接,监听来自邻居的TCP初始化消息,并更改为连接状态。启动事件一般是配置BGP进程。

  1. Connect(连接)状态

进入Connect状态后,BGP进程将一直等待TCP连接的完成(三次握手),当TCP连接建立成功,BGP将会向邻居发送Open消息,并进入OpenSent(打开发送)状态。如果TCP会话没有建立,BGP将继续监听邻居初始化的连接,开启连接重试定时器,迁移到Active(激活)状态。Connect→→OpenSent(TCP连接建立);Connect→→Active(TCP连接暂未建立)。

  1. Active(激活)状态

该状态下,BGP进程继续尝试和邻居建立TCP连接,如果TCP连接建立成功,BGP进程清除连接重试定时器,完成初始化过程,并向邻居发送Open报文,迁移到OpenSent(打开发送)状态。
如果连接重试定时器到期BGP进程依然处在激活状态,进程将返回连接状态,监听邻居发起的TCP会话,这个过程将反复循环,直到监听到由邻居发起的TCP会话。

  1. OpenSent(打开发送)状态

进入了该状态,已经发送了Open消息,BGP将一直等待来自邻居的Open消息。一旦接收到Open消息后,将检查该消息的每一个字段,如果有差错,将会发送Notification消息迁入Idle状态。
如果接收到的Open消息没错,就会发送Keepalive消息并商讨Keepalive定时器和Keepalive发送的时间。 并迁移到OpenConfirm(打开确认)状态。

  1. OpenConfirm(打开确认)状态

进入了这个状态下,BGP进程将等待邻居确认的Keepalive或Notification消息。如果接收到的是Keepalive消息则迁移到Established(建立)状态,如果是Notification消息那么就将迁移到Idle状态。

  1. Established(建立)状态

进入了这个状态就说明了BGP的对等连接正式建立了,对等体之间交互Update,Keepalive和Notification消息,如果接受到的是Update或Keepalive消息,则重启保持定时器,如果接受到一个Notification消息,则会迁移到Idle状态。

八、BGP的路由黑洞问题

非直连建邻到达控制层面路由条目可传递,递归计算路由可达;
而实际数据层面流量在经过没有运行BGP协议的路由器时无法通过,最终有去无回

1、 物理、逻辑拓扑全连 – 物理链路直连、或者vpn
2、 邻居关系全连 – 网络中所有设备运行BGP
3、 BGP重发布到IGP(LAB)
4、 MPLS 多协议标签交换— 推荐做法

九、BGP的防环机制 –水平分割

1、EBGP水平分割—解决EBGP环路;

依赖了BGP路由条目中的一种属性来进行防环;AS-PASH路径属性;
BGP协议在传递路由条目的过程中,将记录所有经过的AS的编号;
EBGP水平分割—接收到的路由条目中,若存在本地的AS号将拒绝该条目进入;

2、IBGP水平分割—解决IBGP环路由中的一种机制

本地从一个IBGP邻居处学习到的路由条目,不得传递给本地的其他IBGP邻居;
AS-BY-AS在一个AS内部条目传递的过程中,默认不会修改任何的属性;

由于BGP可以非直连建立邻居关系,故在一个AS内部,可以通过与多台运行BGP协议的路由器建立BGP邻居关系,来稳定关系网络;因此在一个AS内部运行BGP协议的设备,正常均存在EBGP邻居(均同时连接其他AS)

在IBGP水平分割的限制下,虽然避免了IBGP的环路产生,但同时也使得AS内部为了能够传递路由条目,必须两两间建立IBGP邻居关系,邻居关系成指数上升,配置量巨大;

后期可以依赖打破水平分割的机制来解决—联邦、路由反射器

十、IBGP与IGP同步

在IBGP路由加入路由表并发布给EBGP对等体之前,会先检查IGP路由表。只有在IGP也知道这条IBGP路由时,它才会被加入到路由表,并发布给EBGP对等体。

BGP基础知识
同步是指IBGP和IGP之间的同步,其目的是避免误导外部AS的路由器。

拓扑说明(在同步开启情况下):
R4通过BGP学习到R1宣告的10.0.0.0/24网络。R4在将该网络通告给R5之前,会首先检查自己的IGP路由表是否已经存在100.0.0/24网络。如果R4本地IGP路由表项存在10.0.0.0/24网络,则将该网络通告给R5;如果R4本地IGP路由表项不存在
10.0.0.0/24网络,则不能将该网络通告给R5。

注意事项∶
VRP平台缺省情况下BGP与IGP是取消同步机制的,并不可改变。但取消同步是有条件的,
在以下两种情况下可以取消同步 ∶
1.本AS不是过渡AS。
2.本AS内所有路由器建立IBGP全连接。

上一篇:HCIE-DC考试心得


下一篇:k8s网络主题系列:Flannel和Calico