目录

前言

BGP的基本概述

BGP的分类

BGP的工作过程

BGP 与 IGP 交互

BGP 安全性

BGP 的路由优选规则和负载分担


前言

        想弄清bgp概念之前,先了解什么是bgp。bgp协议:边界网关协议(Border Gateway Protocol,BGP)是一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。由于不同的管理机构分别控制着他们各自的路由选择域,因此,路由选择域经常被称为自治系统AS(Autonomous System)。现在的Internet是一个由多个自治系统相互连接构成的大网络,BGP作为事实上的Internet外部路由协议标准,被广泛应用于ISP(Internet Service Provider)之间。


BGP的基本概述

1、BGP使用TCP作为其传输层协议(监听端口号为179),提高了协议的可靠性,且不需要专门 机制来确保连接的可控性。BGP进行域间的路由选择,对协议的稳定性要求非常高。因此用TCP协议的高可靠性来保证BGP协议的稳定性。BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。

2、路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。

3、BGP从设计上避免了环路的发生。AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。

4、支持CIDR 无类域间路由

5、BGP提供了丰富的路由策略;提供了防止路由振荡的机制;BGP也易于扩展


BGP的分类

 BGP 按照运行方式分为 EBGP(External/Exterior BGP)和 IBGP(Internal/Interior BGP)。 

1、EBGP:运行于不同 AS 之间的 BGP 称为 EBGP。为了防止 AS 间产生环路,当 BGP 设备接收 EBGP 对等体发送的路由时,会将带有本地 AS 号的路由丢弃。

2、IBGP:运行于同一 AS 内部的 BGP 称为 IBGP。为了防止 AS 内产生环路, BGP 设备不将从IBGP 对等体学到的路由通告给其他 IBGP 对等体,并与所有 IBGP 对等体建立全连接。为了解决 IBGP 对等体的连接数量太多的问题, BGP 设计了路由反射器和 BGP 联盟。

tips:如果在AS内一台BGP设备收到EBGP邻居发送的路由后,需要通过另一台BGP设备将该路由传输给其他AS,则推荐使用IBGP。 


BGP的工作过程

1、BGP报文

BGP报文有5种消息类型

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

Update消息:用于在对等体之间交换路由信息。Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。应用:连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端。

Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。应用:稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性。

Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。应用:当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体。

Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。应用:ROUTE-REFRESH消息用来通知对等体自己支持路由刷新。

2、BGP处理过程

        因为BGP的传输层协议是TCP协议,所以在BGP对等体建立之前,对等体之间首先进行TCP连接。BGP邻居间会通过Open报文协商相关参数,建立起BGP对等体关系。建立连接后,BGP邻居之间交换整个BGP路由表。BGP会发送Keepalive报文来维持邻居间的BGP连接,BGP协议不会定期更新路由表,但当BGP路由发生变化时,会通过Update报文增量地更新路由表。当BGP检测到网络中的错误状态时(例如收到错误报文时),BGP会发送Notification报文进行报错,BGP连接会随即中断。示意图见图1 邻居建立过程图。

 

3、BGP报文中的角色

Speaker:发送BGP报文的路由设备称为BGP发言者(Speaker),它接收或产生新的路由信息,并发布(Advertise)给其它BGP Speaker。当BGP Speaker收到来自其它AS的新路由时,如果该路由比当前已知路由更优、或者当前还没有该路由,它就把这条路由发布给所有其他BGP Speaker。

Peer:相互交换报文的BGP Speaker之间互称对等体(Peer)。

4、BGP有限状态机

BGP 对等体的交互过程中存在 6 种状态机:空闲状态(Idle)、连接状态(Connect)、活跃(Active)、 Open 报文已发送(OpenSent)、 Open 报文已确认(OpenConfirm)和连接已建立(Established)。在 BGP 对等体建立的过程中,通常可见的 3 个状态是:Idle、 Active 和 Established。 

① Idle 状态是 BGP 初始状态。在 Idle 状态下, BGP 拒绝邻居发送的连接请求。只有在收到本设备的 Start 事件后, BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接,并转至 Connect状态。

② 在 Connect 状态下, BGP 启动连接重传定时器(Connect Retry),等待 TCP 完成连接。

如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态;

如果 TCP 连接失败,那么 BGP 转至 Active 状态;

如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和其它 BGP 对等体进行 TCP 连接,停留在 Connect 状态。

③ 在 Active 状态下, BGP 总是在试图建立 TCP 连接。

如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至 OpenSent 状态;

如果 TCP 连接失败,那么 BGP 停留在 Active 状态;

如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至 Connect状态。

④ 在 OpenSent 状态下, BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的 AS 号、版本号、 认证码等进行检查。

如果收到的 Open 报文正确,那么 BGP 发送 Keepalive 报文,并转至 OpenConfirm 状态;

如果发现收到的 Open 报文有错误,那么 BGP 发送 Notification 报文给对等体,并转至Idle 状态。

⑤ 在 OpenConfirm 状态下, BGP 等待 Keepalive 或 Notification 报文。如果收到 Keepalive 报文,则转至 Established 状态,如果收到 Notification 报文,则转至 Idle 状态。

⑥ 在 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 状态。

5、BGP对等体之间的交互原则

BGP 设备将最优路由加入 BGP 路由表,形成 BGP 路由。BGP 设备与对等体建立邻居关系后,采取以下交互原则:

① 从 IBGP 对等体获得的 BGP 路由, BGP 设备只发布给它的 EBGP 对等体。

② 从 EBGP 对等体获得的 BGP 路由, BGP 设备发布给它所有 EBGP 和 IBGP 对等体。

③ 当存在多条到达同一目的地址的有效路由时, BGP 设备只将最优路由发布给对等体。

④ 路由更新时, BGP 设备只发送更新的 BGP 路由。

⑤ 所有对等体发送的路由, BGP 设备都会接收。 


BGP 与 IGP 交互

        BGP 与 IGP 在设备中使用不同的路由表,为了实现不同 AS 间相互通讯, BGP 需要与 IGP 进行交互,即 BGP 路由表和 IGP 路由表相互引入。

1、BGP引入IGP路由

BGP 协议本身不发现路由,因此需要将其他路由引入到 BGP 路由表,实现 AS 间的路由互通。当一个 AS 需要将路由发布给其他 AS 时, AS 边缘路由器会在 BGP 路由表中引入 IGP 的路由。为了更好的规划网络, BGP 在引入 IGP 的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置 MED 值指导 EBGP 对等体判断流量进入 AS 时选路。

2、BGP 引入路由时支持 Import 和 Network 两种方式:

1、 Import 方式是按协议类型,将 RIP 路由、 OSPF 路由、 ISIS 路由等协议的路由引入到 BGP 路由表中。为了保证引入的 IGP 路由的有效性, Import 方式还可以引入静态路由和直连路由。

2、Network 方式是逐条将 IP 路由表中已经存在的路由引入到 BGP 路由表中,比 Import 方式更精确。

3、IGP引入BGP路由

当一个 AS 需要引入其他 AS 的路由时, AS 边缘路由器会在 IGP 路由表中引入 BGP 的路由。为了避免大量 BGP 路由对 AS 内设备造成影响,当 IGP 引入 BGP 路由时,可以使用路由策略,进行路由过滤和路由属性设置。


BGP 安全性

        BGP 使用认证和 GTSM(Generalized TTL Security Mechanism)两个方法保证 BGP 对等体间的交互安全。

1、BGP认证

BGP 认证分为 MD5 认证和 Keychain认证,对 BGP 对等体关系进行认证是提高安全性的有效手段。MD5 认证只能为 TCP 连接设置认证密码,而 Keychain 认证除了可以为 TCP 连接设置认证密码外,还可以对 BGP 协议报文进行认证。

2、BGP GTSM

BGP GTSM 检测 IP 报文头中的 TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合 TTL 值范围的报文进行允许通过或丢弃的操作,从而实现了保护 IP 层以上业务,增强系统安全性的目的。


BGP 的路由优选规则和负载分担

        在 BGP 路由表中,到达同一目的地可能存在多条路由。此时 BGP 会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP 为了选出最佳路由,会根据 BGP 的路由优选规则依次比较这些路由的 BGP 属性。

1、BGP属性

路由属性是对路由的特定描述,所有的 BGP 路由属性都可以分为以下 4 类

① 公认必须遵循(Well-known mandatory):所有 BGP 设备都可以识别此类属性,且必须存在于 Update 报文中。如果缺少这类属性,路由信息就会出错。

② 公认任意(Well-known discretionary):所有 BGP 设备都可以识别此类属性,但不要求必须存在于 Update 报文中,即就算缺少这类属性,路由信息也不会出错。

③ 可选过渡(Optional transitive):BGP 设备可以不识别此类属性,如果 BGP 设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。

④ 可选非过渡(Optional non-transitive):BGP 设备可以不识别此类属性,如果 BGP 设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。

 2、BGP选择路由的策略

当到达同一目的地存在多条路由时, BGP 依次对比下列属性来选择路由:

① 优选协议首选值(PrefVal)最高的路由。

协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。

② 优选本地优先级(Local_Pref)最高的路由。

如果路由没有本地优先级, BGP 选路时将该路由按缺省的本地优先级 100 来处理。

③ 依次优选手动聚合路由、自动聚合路由、 network 命令引入的路由、 import-route 命令引入的路由、从对等体学习的路由。

④ 优选 AS 路径(AS_Path)最短的路由。

⑤ 依次优选 Origin 类型为 IGP、 EGP、 Incomplete 的路由。

⑥ 对于来自同一 AS 的路由,优选 MED(Multi Exit Discriminator)值最低的路由。

⑦ 依次优选 EBGP 路由、 IBGP 路由、 LocalCross 路由、 RemoteCross 路由。

⑧ 优选到 BGP 下一跳 IGP 度量值(metric)最小的路由。

说明:在IGP中,对到达同一目的地址的不同路由, IGP根据本身的路由算法计算路由的度量值。

⑨ 优选 Cluster_List 最短的路由。

⑩ 优选 Router ID 最小的设备发布的路由。

说明:如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较RouterID),并优选Originator_ID最小的路由。

 优选从具有最小 IP Address 的对等体学来的路由。

3、BGP负载分担

        当到达同一目的地址存在多条等价路由时,可以通过 BGP 等价负载分担实现均衡流量的目的。形成 BGP 等价负载分担的条件是“BGP 选择路由的策略”的 1 至 8 条规则中需要比较的属性完全相同。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐