BGP基础

简介: BGP基础

BGP简单概述

BGP,边界网关协议。是一种实现自治系统AS之间的路由可达,并选择最佳路由的高级路径矢量路由协议。优先级:255。TCP端口号:179。BGP 4版本。

BGP不产生路由,只负责传递路由,所以TCP可以承载大量的路由;

BGP工作前,必须建立TCP连接,基于TCP工作,这也是BGP协议稳定的原因。

BGP知识点:

BGP 基础配置,BGP 5 种报文,6 种邻居状态,4 大类 细分 10 种属性,IBGP EBGP (环回口 物理接口)建立邻居,BGP 认证,fake-as ,路由传递原则,IBGP 防环,EBGP 防环,RR防环,BGP 路由自动聚合,手工聚合(detail-suppressed,suppress-policy,attribute-policy,origin-policy , as-set ),BGP  5 种 community 属性,BGP 选路,BGP 联盟,路由反射器,BGP路由过滤,引入,下放默认路由。

自治系统AS

AS指的是在同一个组织管理下,使用统一选路策略的设备集合。

BGP网络中的每一个AS都被分配一个唯一的AS号,用于区分不同的AS。

AS号长度分为2字节AS号和4字节AS号。

其中2字节的AS号的范围是1 ~ 65535,其中1 ~ 64511是互联网上注册公有AS号,类似公网IP地址;64512 ~ 65535是私有AS号,类似私网地址。

4字节AS号的范围为1至42949672954200000000-4294967294为私有AS号。支持4字节AS号的设备能够与支持2字节AS号的设备兼容。IANA(互联网数字分配机构)负责AS号的分发。

使用BGP传递路由

在AS之间专门使用BGP协议进行路由传递,相较于传统的IGP协议:

  • BGP基于TCP,只要能够建立TCP连接即可建立BGP。
  • 只传递路由信息,不会暴露AS内的拓扑信息。
  • 触发式更新,而不是进行周期性更新。

  • 在OSPF里,R1的邻居只有R2。但如果在BGP中,即使非直连,BGP中R1也会和R3建立邻居。
  • 触发式更新:只有网络发生变化,才会立即把变化内容发送邻居。

BGP的基本概念

BGP特点

BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议。

BGP的特点:

  • BGP使用TCP作为传输层协议(端口号179),使用触发式路由更新。
  • 运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。
  • 两个建立BGP会话的路由器互为对等体(Peer),或BGP邻居,BGP对等体之间交换BGP路由表。
  • BGP能够承载大批量的路由信息,能够支撑大规模网络。
  • BGP通常被称为路径矢量路由协议。
  • BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
  • BGP提供了路由聚合和路由衰减功能用于防止路由震荡,通过这两项功能有效的提高了网络稳定性。
  • 在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式。不像IS-IS、OSPF只能通过cost控制路径选择。

BGP对等体

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

与OSPF、ISIS不同,BGP是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。

EBGP对等体优于IBGP对等体。

图1 BGP的运行方式


  • EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。
  • IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接

BGP的路由器号(Router ID)

BGP的Router ID是一个用于标识BGP设备的32位值,通常是IPv4地址的形式,在BGP会话建立时发送的Open报文中携带对等体之间建立BGP会话时,每个BGP设备都必须有唯一的Router ID,否则对等体之间不能建立BGP连接。

BGP的Router ID在BGP网络中必须是唯一的,可以采用手工配置,也可以让设备自动选取。缺省情况下,BGP选择设备上的Loopback接口的IPv4地址作为BGP的Router ID。如果设备上没有配置Loopback接口,系统会选择接口中最大的IPv4地址作为BGP的Router ID。一旦选出Router ID,除非发生接口地址删除等事件,否则即使配置了更大的地址,也保持原来的Router ID。

BGP工作原理

BGP对等体的建立、更新和删除等交互过程主要有5种报文、6种状态机和5个原则。

BGP的报文

BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:

  • Open报文:协商对等体参数,用于建立BGP对等体连接。
  • Update报文:用于在对等体之间交换路由信息。
  • Notification报文:用于中断BGP连接。
  • Keepalive报文:用于保持BGP连接。
  • Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。

报文名称

作用

发送时刻

Open

协商对等体参数,用于建立对等体连接。

BGP TCP连接建立成功之后

Update

用于BGP对等体之间交换路由信息。

BGP对等体关系建立之后有路由需要发送路由变化时向对等体发送Update报文。

Notification

报告错误信息,中断BGP对等体连接。

当BGP在运行中发现错误时,发送Notification报文把错误通告给BGP对等体。

Keepalive

标志对等体建立,保持BGP连接。

BGP路由器收到对端发送的Keepalive报文,将对等体状态置位建立,同时后续定期发送Keepalive报文(60s),用于保持连接。

Router-refresh

用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备才会发送和响应该报文。

当路由策略发生变化时,触发请求对等体重新通告路由。

BGP状态机

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

Peer状态名称

用途

Idle

开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源。

Connect

正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态。

Active

表示TCP连接没建立成功,并反复尝试TCP连接

OpenSent

TCP连接已建立成功开始发送Open包,Open包携带参数协商对等体的建立。

OpenConfirm

参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包

Established

已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息。

图1 BGP对等体交互过程


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

说明:

  • Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
  • 任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
  1. 在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
  • 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
  • 如果TCP连接失败,那么BGP转至Active状态。
  • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
  1. 在Active状态下,BGP总是在试图建立TCP连接。
  • 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
  • 如果TCP连接失败,那么BGP停留在Active状态。
  • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
  1. 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
  • 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。
  • 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
  1. 在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
  2. 在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对等体关系的建立

  1. 先启动的BGP路由器发起TCP连接,使用随机端口号向另一台路由器的179端口发起TCP连接,完成TCP的建立。
  • 路由器两端都会发送建立TCP连接,但只会保留其中一个,比较open报文中的Router ID, 小的一方会关闭自己的TCP连接。
  1. 三次握手建立完成之后,两台BGP路由器相互发送Open报文,携带参数用于对等体的建立,参数协商正常后相互发送Keepalive报文,收到对端的keepalive报文后对等体建立成功,同时双方定期发送该报文用于保持连接。
  2. BGP对等体关系建立之后,BGP路由器发送update报文通告更新路由信息到对等体。

其中open报文携带:

  • 自身AS号
  • Hold Time:用于协商后续keepalive报文发送时间
  • BGP自身router ID

Keepalive周期发送,60s

Hold Time180s发送

如果邻居之间keepalive发送时间不一致,则会选择小的时间当作keepalive发送时间

TCP连接源地址:

缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。

在部署IBGP对等体,建议使用loopback地址作为更新源地址。稳定。

在部署EBGP对等体,建议使用直连接口作为源地址。

如果是EBGP建立邻居,要注意EBGP多跳的问题。

BGP对等体之间的交互原则

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

  • 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。
  • 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。
  • 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。
  • 路由更新时,BGP设备只发送更新的BGP路由。
  • 所有对等体发送的路由,BGP设备都会接收。

BGP的表项

BGP对等体表

Peer:对等体IP地址

V:版本号

AS:对等体AS号

Up/Down:对等体存在up/down的时间

State:对等体状态

PrefRcv:从该对等体收到的路由前缀数目

BGP路由表

Network:路由的目的网络地址以及掩码

Nexthop:下一跳地址

查看某条路由更详细的信息,可以通过display bgp routing-table 地址+掩码

BGP路由的生成

BGP注入路由的方式有两种:

Network

import-router

与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由。

聚合路由也是路由生成的一种方式。

Network方式注入的路由必须是已经存在于IP路由表中的路由条目,否则不会被成功注入到BGP路由表中 。

Network方式注入路由虽然是精确注入,但是只能一条条配置,如果注入路由条目较多,可以使用import-route方式。

BGP聚合路由

支持自动聚合和手动聚合。

自动聚合只能聚合引入的路由,network的路由聚合不了。 summary automatic

aggregate 10.1.0.0 22 detail-suppressed

如果不带后面detail-suppressed的话,那么将会学习明细路由和聚合路由。如果指定了这条命令,那么只通告聚合后的路由。

BGP通告原则

BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体。

BGP通告遵循以下原则:

  1. 只发布最优且有效路由。
  2. 从EBGP对等体获取的路由,会发布给所有对等体。
  3. IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
  4. BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。

第4条总结:从IBGP邻居学到的路由,如果要发给EBGP邻居,那么这条路由必须存在IGP路由表中。

路由黑洞:如果两台设备跨跳的建立了IBGP邻居,但是中间设备没有运行BGP,那么当数据转发到这台设备后,他没有路径可走,会被丢弃

1和3建立邻居,经过2时,会被丢弃,因为2没有建立BGP。

IGBP防环:水平分割

EBGP防环:AS Path

BGP通告遵循以下原则

  • 只发布最优路由。     *代表可用路由    >代表最优路由
  • EBGP对等体获取的路由,会发布给所有对等体。
  • 比如R2从R3获取到了2.2.2.2/24的路由,R2会发布给R1,同样,R2也会发给R4。
  • IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
  • 比如R1、R2、R3同属于IBGP对等体,R1从R2获取的路由,R1不会发送给R3,如果R3需要获取R2的路由,可以直接由R2发给R3。
  • BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(IBGP路由),它将不能使用该条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF、静态)学习到这条路由,也就是要求IBGP路由和IGP路由同步。同步规则主要是用于路由黑洞。
  • 路由黑洞是指在BGP路由条目中有这条路由,但ping不通。
  • BGP同步规则一般取消。
  • 系统自动生成的命令。

BGP路由通告原则

第一条原则:只发布最优且有效(下一跳可达)的路由。

通过display bgp routing-table查看路由表

*代表有效

>代表最优

第二条原则:从EBGP对等体获取的路由,会发布给所有对等体。

R2从EBGP对等体获取的BGP路由,会发布给所有EBGP、IBGP对等体。

第三条原则:从IBGP对等体获取的路由,不会再发送给其他IBGP对等体。

该原则被称为“水平分割”。

如图所示,如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体:

  • R2将一条路由传递给了IBGP对等体R3
  • R3收到路由之后传递给IBGP对等体R1
  • R1继续传递给IBGP对等体R2

路由环路形成。

但这条原则可能会带来当R2将路由传递给R1时,由于第三条原则限制,R1无法传递给R3,R3就学习不到路由。为解决该问题可以采用AS内IBGP全互联方式,即:R2、R3之间建立非直连的IBGP对等体关系,以此让R2可以将路由传递给R3。

四条原则:当一台BGP路由器从自己的IBGP对等体学习到一条BGP路由时(IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议路由学习到这条路由,该条路由也被称为BGP同步原则。

如图所示:

1.BGP路由器R4上存在一条路由10.0.4.0/24,R4将其传递给了R2。

2.R2将路由传递给非直连IBGP对等体R3。

3.R3将路由传递给R5。

4.之后R5向10.0.4.4发起访问。

R5访问10.0.4.4:

1.R5查找路由表,将报文发给R3。

2.R3收到报文后查找路由表,匹配到一条BGP路由。其下一跳为R2,但是R2为非直连下一跳,需要进行路由迭代,通过IGP学习到的路由迭代下一跳为R1。R3将报文发给R1。

3.R1收到报文后查找路由表,因为R1并非BGP路由器,未与R2建立IBGP对等体关系,因此R1上并无BGP路由10.0.4.0/24,路由查找失败,R1将报文丢弃。

产生该问题原因为AS200域内未运行BGP的路由器没有学习到BGP的路由条目,查找路由失败,导致R1丢弃报文。为此制定了BGP同步原则:

当BGP的路由条目同时也存在于IGP路由表时才对外发送,以图中为例,当R3查看IGP(R1)路由表时,OSPF路由表中并无路由10.0.4.0/24,因此不会向R5发送该路由,自然也不会产生后续的访问失败。

解决该问题的方式有:

  • 把BGP路由重分发到IGP,但基本不用;
  • 建立全互联的IBGP对等体关系,让全网所有路由器都拥有BGP路由。

BGP的基本配置

1.启动BGP进程

[Huawei]bgp
[Huawei]router-id x.x.x.x

启动BGP,指定本地AS号,并进入BGP视图。使用router-id命令配置BGP的router-id,建立配置为loopback的地址。

2.配置BGP对等体

[Huawei]peer x.x.x.x as-number
//x.x.x.x是BGP对等体的IP地址,as-number也是对等体的AS号

创建BGP对等体,指定对等体地址和编号

3.配置建立对等体使用的源地址、EBGP对等体最大跳数

[Huawei]peer x.x.x.x connect-interface
[Huawei]peer x.x.x.x ebgp-max-hop

指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。如果是环回口,要加connect-interface

指定建立EBGP连接允许的最大跳数。如果是环回口,要下ebgp-max-hop,最少是2跳,

相关文章
|
5月前
|
存储 网络协议 网络虚拟化
BGP路由协议学习一
BGP路由协议学习一
97 0
|
6月前
|
网络协议 算法 数据库
|
7月前
|
存储 负载均衡 网络协议
BGP 技术连载:BGP 选路规则
【4月更文挑战第23天】
476 0
|
网络协议
BGP的基础配置
BGP的基础配置
120 0
|
网络架构
BGP路由技术(二)
⭐本文介绍⭐ BGP(Border Gateway Protocol,边界网关协议)是一个路径矢量路由协议,和传统的基于下一跳的IGP协议不同,它是基于AS(自治系统)的协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题,也正因为这样,它更适合与互联网。学习BGP的关键在于理解BGP的报文,邻居建立,BGP路由属性,选路原则等。本文将对以上各项知识、工作原理及相关的配置做介绍。
BGP路由技术(二)
|
网络协议 数据库 网络架构
BGP路由技术(一)
⭐本文介绍⭐ BGP(Border Gateway Protocol,边界网关协议)是一个路径矢量路由协议,和传统的基于下一跳的IGP协议不同,它是基于AS(自治系统)的协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题,也正因为这样,它更适合与互联网。学习BGP的关键在于理解BGP的报文,邻居建立,BGP路由属性,选路原则等。本文将对以上各项知识、工作原理及相关的配置做介绍。
BGP路由技术(一)
|
网络协议 算法 数据库
概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步(上)
文章目录 系列文件 概述 BGP AS BGP 邻居 BGP 更新源 BGP TTL BGP路由表 BGP 同步
399 0
概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步(上)
|
网络协议 网络架构 iOS开发
概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步(下)
文章目录 系列文件 概述 BGP AS BGP 邻居 BGP 更新源 BGP TTL BGP路由表 BGP 同步
485 0
概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步(下)
|
网络协议 网络架构
下一篇
DataWorks