网络
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内部的网络拓扑;
-
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对等体关系;
能够建立对等体的条件: 两个路由器指定建立对等体的地址必需可达;
-
3、如何建立BGP对等体
(1)TCP连接建立
假设BGP路由器R1先启动,则R1先发起建立TCP连接,通过3次握手完成TCP的连接建立。(2)BGP路由器发送OPEN报文协商参数
三次握手建立完成后,R1和R2之间相互发送OPEN报文,用于建立对等体的参数协商。
OPEN报文参数: 自身AS号;
- hold time:用于协商后续keepalive报文发送时间;
-
(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检测到错误状态时,就会向对等体发送Notification报文,告知对端错误,之后BGP连接会立即中断。
Error Code、Error Code:差错码、差错子码,描述错误类型;
-
(4)Keepalive报文
双方相互发送keepalive报文,收到对方的keepalive报文后对等体建立成功,同时后续定期发送keepalive报文用于保持连接。
(5)Route-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)Opensent状态、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