BGP的出现源于网络规模的扩大和路由条目的增加,IGP协议已无法有效管理大规模网络。AS概念的引入,将网络划分为多个组,每组内部使用统一的路由策略。BGP正是为了实现不同AS间路由的可达性而设计的。
BGP的优势在于其基于TCP的可靠性、只传递路由信息而不暴露内部拓扑、触发式更新而非周期性更新。这使得BGP在网络规模扩大和路由数量增多的情况下,仍能保持高效的收敛速度。
BGP对等体是建立BGP会话的路由器,分为IBGP和EBGP两种。IBGP对等体位于同一AS内,而EBGP对等体则位于不同AS间。建立对等体的过程包括TCP连接建立、OPEN报文协商参数、KEEPALIVE报文确认等步骤。
BGP报文类型包括OPEN、UPDATE、NOTIFICATION、KEEPALIVE和ROUTE-REFRESH。每种报文都有特定的功能和格式,如OPEN报文用于协商参数,UPDATE报文用于传递路由信息,NOTIFICATION报文用于报告错误等。
BGP状态机描述了BGP连接的六种状态:IDLE、CONNECT、ACTIVE、OPENSENT、OPENCONFIRM和ESTABLISHED。状态间的转换由特定事件触发,如TCP连接成功、报文接收等。
BGP路由表存储了通过BGP学习到的路由信息。通过命令可以查看BGP对等体表和路由表,了解对等体的状态和路由的具体信息。
BGP路由生成有两种方式:network和IMPORT。NETWORK命令将本地路由表中的路由发布到BGP路由表中,而IMPORT命令则将其他路由协议学到的路由重分发到BGP中。
BGP通告原则确保了路由的正确传播。例如,从IBGP学到的路由只能传递给EBGP对等体,而从EBGP学到的路由则可以传递给所有对等体。此外,BGP只通告最优路由,并在路由更新时仅发送更新的部分。
总之,BGP作为一种高效、灵活的外部网关协议,为不同AS间的路由交互提供了可靠保障,是现代互联网架构中不可或缺的一部分。
前言
BGP路由协议 是网络中使用最为广泛的协议了,不管是运营商网络、企业网络、数据中心网络,目前都有在使用BGP协议。
今天就给大家详细介绍下BGP路由协议;
什么是BGP路由协议
1、BGP协议出现背景
OSPF、ISIS路由协议在网络中已经广泛使用,但是随着网络规模的扩大,路由条目也随增加,IGP协议已经无法管理大规模网络了。因此出现了AS的概念。
AS的概念比较抽象呀。
官方解释: AS是指在同一组织管理下,使用统一选路策略设备的集合 。
简单来说:就是你可以把一个网络中的不同的设备划分到 不同的组(AS) 中,或者都划分在一个组中,那么一个组中的这些设备 具备相同的路由协议 。
比如你可以将企业总部网络划分在一个AS中,企业的分部网络划分在一个AS中。不同的AS可以运行不同的路由协议。
那么不同AS的网络需要通信时,采用什么路由协议进行通信呢?答案就是本章的 BGP路由协议 。那么为什么不能够通过IGP(ISIS、BGP)进行通信呢?
这个举个简单的例子,企业网络或者数据中心网络对接运营商的Internet时。 如果使用IGP路由协议(OSPF、ISIS)对接时,那么这个时候企业网络和运营商的网络是运行在一张网络中,这个是不安全的,你可以认为运营商为什么 信任 你的企业网络?
还有一点就是 整个网络规模扩大,路由数量增多,路由收敛慢 。
那么有没有一种路由协议可以实现不同网络间的路由交互呢?答案就是 BGP 。BGP有个好处就是不产生路由,只传递路由,并且具备丰富的路由策略。
这个时候可能有人还会站出来说, 静态协议 不就可以解决吗?其实是可以解决,不过有个问题就是使用静态协议时网络变动时都需要人手动去增删路由,那么有没有一种动态的方式呢?答案就是 BGP路由协议 了。
所以说上面的例子:企业和运营商对接时可以采用BGP路由协议进行对接实现路由的交互。
2、BGP传递路由优势
不同AS之间通过BGP路由协议对接,那么使用BGP相比IGP协议有那么好处呢?
- BGP是基于 TCP 的路由协议,只要能够建立TCP就能够建立BGP;
- BGP只 传递路由信息 ,不计算路由,不会暴露AS内部的网络拓扑;
- BGP的路由更新是 触发更新 ,不是周期性更新;
3、什么是BGP路由协议
BGP是一种基于 距离矢量 的路由协议,用于实现不同AS之间的路由可达。
BGP协议的基本特点:
(1)BGP是一种外部网关协议,其着眼点 不在于发现和计算路由 ,而在于 控制路由的传播和选择最佳路由 ;
(2)BGP使用 TCP 作为其传输层协议(端口号179),提高了协议的可靠性;
(3)BGP是一种 距离矢量路由协议 ,在设计上就避免了环路的发生;
(4)BGP提供了丰富的 路由策略 ,能够实现 路由的灵活过滤和选择 ;
(5)BGP采用 触发式增量更新 ,而不是周期性的更新;
BGP对等体
1、什么是BGP对等体
BGP发言者 :运行BGP路由协议的路由器称为 BGP发言者(BGP路由器) ;
BGP对等体 :两个建立BGP会话(BGP的会话是基于TCP建立的)的路由器互为 BGP对等体, BGP对等体之间可以交换路由表;
2、BGP对等体分类
BGP对等体可以按照两个路由器是否AS相同,分为 EBGP对等体 和 IBGP对等体 。
(1)IBGP:位于 相同的AS 的BGP路由器互为IBGP对等体关系;
(2)EBGP:位于 不 同的AS 的BGP路由器互为EBGP对等体关系;
能够建立对等体的条件:
- 两个路由器指定建立对等体的地址必需可达;
- TCP连接能够建立;
3、如何建立BGP对等体
( 1 )TCP连接建立
假设BGP路由器R1先启动,则R1先发起建立TCP连接,通过3次握手完成TCP的连接建立。
(2 )BGP路由器发送OPEN报文协商参数
三次握手建立完成后,R1和R2之间相互发送OPEN报文,用于建立对等体的参数协商 。
OPEN报文参数:
- 自身AS号;
- hold time:用于协商后续keepalive报文发送时间;
- BGP identifier:自身router id;
(3 )BGP路由器发送keepalive报文完成对等体建立
参数协商正常后双方相互发送keepalive报文,收到对方的keepalive报文后对等体建立成功,同时后续定期发送 keepalive 报文用于保持连接。
(4 )BGP路由器发送UPDATE报文通告路由
BGP对等体关系建立好了,就可以通过BGP update 报文通告路由到对等体。收到对方的keepalive报文 后 对等体建立成功, 同时后续定期发送 keepalive 报文用于保持连接。
4、BGP对等体建立使用源地址
BGP默认使用出接口的ip地址建立对等体。
(1)在建立 IBGP对等体关系 时,建议使用 loopback地址 建立IBGP对等体。因为loopback地址稳定,可以借助内部IGP冗余保证可靠性。
例如上图:
R1和R2通过loopback地址建立IBGP对等体,如果R1和R2之间的物理链路断了, loopback地址的连通性也不会受影响 ,可以通过R3实现R1和R2的loopback地址的互通,那么R1和R2之间的对等体关系依然可以保持建立。如果通过接口建立的话,就会导致BGP对等体关系中断。
(2)在建立EBGP对等体关系时,建议使用直连地址建立EBGP对等体。如果使用loopback,需要注意 EBGP多跳 的问题。
BGP报文类型
1、BGP报文类型
BGP存在5种不同类型的报文,分别是open、update、notification、keepalive、route-refresh。
2、BGP报文头格式
不同于常见的IGP协议,BGP使用 TCP 作为传输层协议,端口号 179 。BGP存在5种不同类型的报文, 不同类型的报文具有相同的头部 。
报文头字段解释:
- Marker:16Byte,用于标明BGP的边界,所有的bit均为“1”
- Length:2Byte,BGP总报文长度(包括报文头)
- Type:1Byte,BGP报文的类型。其取值从1到5,分别表示 open、update、notification、keepalive、route-refresh 报文。
3、BGP报文格式
(1)OPEN报文
open报文是TCP连接建立后发送的第一个报文,用于协商参数;
- version:bgp版本,通常为4;
- My AS:本地AS号;
- Hold time:保持时间。在建立对等体关系时两端要协商hold time,如果在这段时间内未收到对端发来的keepalive报文和update报文,则认为BGP连接中断;
- BGP identifier: BGP标识符,以IP地址形式标识,用来识别路由器。
(2)Update报文
Update 报文用于在对等体之间传递路由信息,可以用来 发布和撤销路由 。
一个 Update报文 可以通告具有 相同路径属性的多条路由 ,这些路由保存在NLRI(网络层可达信息)中。
- Withdrawn Routes Length: 标明Withdrawn Routes部分的长度。 其值为零时,表示没有撤销的路由。
- Total path attribute length:路径属性字段的长度,以Byte为单位。如果为0则说明没有Path Attributes 字段。
(3)Notification报文
当BGP检测到错误状态时,就会向对等体发送N otification 报文,告知对端错误,之后BGP连接会立即中断。
- Error Code、 Error Code:差错码、差错子码,描述错误类型;
- Data:错误内容;
(4)Keepalive 报文
双方相互发送keepalive报文,收到对方的keepalive报文后对等体建立成功,同时后续定期发送 keepalive 报文用于保持连接。
(5)R oute-refresh 报文
Route-refresh报 文用于要求 对等体重新发送指定地址族的路由信息 ,一般是本地修改了相关的路由策略,让对方重新发送update报文。
在Open报文协商时会协商是否支持Route-refresh,如果对等体支持Route-refresh能力,则可以通过 refresh bgp 命令手工对BGP连接进行软复位,BGP软复位可以在不中断BGP连接的情况下重新刷新BGP路由表,并应用新的策略。
BGP状态机
1、BGP 6种状态
BGP的状态有idle、connect、active、opensent、openconfirm、established六种状态。
2、BGP 状态变换
BGP的状态有idle、connect、active、opensent、openconfirm、established六种状态。
(1)Idle状态是BGP初始状态。
在Idle状态下,BGP拒绝对等体发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至 Connect 状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
(2) Connect状态
在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
- 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至 OpenSent 状态。
- 如果TCP连接失败,那么BGP转至 Active 状态。
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在 Connect 状态。
(3) Active状态
在Active状态下,BGP总是在试图建立TCP连接。
- 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至 OpenSent 状态。
- 如果TCP连接失败,那么BGP停留在 Active 状态。
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至 Connect 状态。
(4 )O p ensent 状态、 openconfirm 状态
TCP三次握手建立成功后,发送open报文建立对等体关系,此时的状态为
opensent 状态,当收到对端回应的open报文,并且参数检查无误,在发送keepalive报文后进入 openconfirm 状态。
(5)established状态
进入openconfirm状态后,收到对端的keepalive报文后进入 established 状态。
BGP路由表
1、BGP对等体表
可以通过 dis bgp peer 查看BGP对等体表;
(1)peer:对等体地址
(2)V:版本号
(3)AS:对等体AS号
(4)UP/DOWN:对等体存在up或者down的时间
(5)state:对等体状态
(6)prefRce:从该对等体收到的路由前缀数目
2、BGP路由表
可以通过 display bgp routing-table 查看BGP路由表;
如果到达同一个目的地存在多条路由,则将路由都进行罗列,但每个目的地只会优选一条路由。
通过 display bgp routing-table IPv4-address { mask | mask-length } 可以显示指定IP地址/掩码长度的路由信息,在其中有关于该BGP路由的详细信息,如:路由始发者、下一跳地址、路由的路径属性等。
BGP路由生成
BGP路由是通过BGP命令通告而成的,而通告BGP路由的方法有两种:network和Import。
(1) network方式 :
使用network命令可以将当前设备路由表中的路由(非BGP)发布到BGP路由表中并通告给邻居,和OSPF中使用network命令的方式大同小异,只不过在BGP宣告时,只需要宣告网段+掩码数即可,如:network 12.12.0.0 16。
(2) Import方式 :
使用Import命令可以将该路由器学到的路由信息重分发到BGP路由表中,是BGP宣告路由的一种方式,可以引入BGP的路由包括:直连路由、静态路由及动态路由协议学到的路由。其命令格式与在RIP中重分发OSPF差不多。
BGP通告原则
BGP设备会将 最优路由 加入BGP路由表,形成BGP路由。
BGP设备与对等体建立邻居关系后,采用以下交互原则:
- 从IBGP对等体获得的BGP路由,BGP设备只传递给它的EBGP对等体。
- 从EBGP对等体获得的BGP路由,BGP设备传递给它所有EBGP和IBGP对等体(对等体是IBGP只能传递一跳,对等体是EBGP则不限制)
- 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
- 路由更新时,BGP设备只发送更新的BGP路由
- 所有对等体发送的路由,BGP设备都会接收
- 所有EBGP对等体在传递过程中下一跳改变
- 所有IBGP对等体在传递过程中下一跳不变(需要特别注意)
- 默认EBGP传递时 TTL值为1(需要特别注意)
- 默认IBGP传递时 TTL值为255
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
汇鑫科服隶属于北京通忆汇鑫科技有限公司, 成立于2007年,是一家互联网+、物联网、人工智能、大数据技术应用公司,专注于楼宇提供智能化产品与服务。致力服务写字楼内发展中的中小企业 ,2009年首创楼宇通信BOO模式,以驻地网运营模式为楼宇提供配套运营服务;汇鑫科服始终以客户管理效率为导向,一站式 ICT服务平台,提升写字楼办公场景的办公效率和体验;