帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
【华为认证】BGP基础知识(干货满满!!!)
发布时间:2024-03-02 20:03:45   分类:帮助文档
【华为认证】BGP基础知识(干货满满!!!)

1. BGP基础
为方便管理规模不断扩大的网络,网络被分成了不同的AS(Autonomous System,自治系统)。早期,EGP(Exterior Gateway Protocol,外部网关协议)被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求,BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。
1.1     BGP概述
1.1.1   AS(Autonomous System,自治系统)
OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不断增长,IGP已无法管理大规模网络,AS的概念由此诞生。
AS指的是在同一个组织管理下,使用统一选路策略的设备集合,不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发,当不同AS之间需要进行通信时,在AS之间应使用何种路由协议进行路由的传递?

 

提示:
IANA(Internet Assigned Numbers Authority,因特网地址分配组织):IAB(Internet Architecture Board,因特网体系委员会)的下设组织。IANA授权NIC( Network Information Center,网络信息中心)和其他组织负责IP地址和域名分配,同时,IANA负责维护TCP/IP协议族所采用的协议标识符数据库,包括自治系统号。在长度为16bit的AS号表示方式中:64512-65534为私有AS号,在长度为32bit的AS号表示方式中:4200000000-4294967294为私有AS号。
1.1.2   使用IGP传递路由
AS之间需要直连链路,或通过VPN协议构造逻辑直连(例如GRE Tunnel)进行邻居建立。
VPN(virtual private network,虚拟专用网):使用虚拟专业网络技术可以从逻辑上建立一个直接连接的网络。
AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。

 

1.1.3   使用BGP传递路由
为此在AS之间专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:
BGP基于TCP,只要能够建立TCP连接即可建立BGP。只传递路由信息,不会暴露AS内的拓扑信息。触发式更新,而不是进行周期性更新。

 

1.1.4   BGP的发展史
 

目前关于BGP-4最新的RFC是4271,相比较于RFC1771,对于一些细节进行了进一步说明,如事件、状态机以及BGP路由决策流程等。
1.1.5   BGP在企业中的应用
企业内部互通
 

企业与运营商互通


1.2     BGP的基本概念
1.2.1   BGP概述
BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。
BGP的特点:
BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。BGP能够承载大批量的路由信息,能够支撑大规模网络。BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。
1.2.2   BGP特征          
BGP特征1:
 

BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表。BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会周期性更新)。BGP能够承载大批量的路由前缀,可在大规模网络中应用。

BGP特征2:


BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。每条BGP路由都携带多种路径属性(Path attribute),BGP可以通过这些路径属性控制路径选择,而不像IS-IS、OSPF只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式。
1.2.3   BGP对等体关系
与OSPF、IS-IS等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连,BGP存在两种对等体关系类型---EBGP及IBGP。
EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件:
两个路由器所属AS不同(即AS号不同)。在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。

 

BGP对等体关系建立 1:

先启动BGP的一端先发起TCP连接,如左图所示,R1先启动BGP,R1使用随机端口号向R2的179端口发起TCP连接,完成TCP连接的建立。三次握手建立完成之后,R1、R2之间相互发送Open报文,携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。其中Open报文中携带:
My Autonomous System:自身AS号Hold Time:用于协商后续Keepalive报文发送时间BGP Identifier:自身Router ID


BGP建立对等体的对等体都会发起TCP三次握手,所以会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互。

BGP对等体关系建立 2:
BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体。
 

1.2.4   TCP连接源地址
缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题。

 

 一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于冗余链路的存在,R1与R3之间的IP连通性其实并没有DOWN(仍然可以通过R4到达彼此)。
1.2.5   BGP报文类型
BGP存在5种类型的报文,不同类型的报文拥有相同的头部(header):


 

不同于常见的IGP协议,BGP使用TCP作为传输层协议,端口号179,这使得BGP支持在非直连的路由器之间建立对等体关系。
1.2.6   BGP报文格式
BGP五种报文都拥有相同的报文头,格式如下图所示:
 

主要字段解释:
Marker:16Byte,用于标明BGP报文边界,所有bit均为“1”。Length:2Byte,BGP报文总长度(包括报文头在内),以Byte为单位。Type:1Byte,BGP报文的类型。其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh 报文。

BGP报文格式 – Open
Open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系,报文格式如下图所示,主要字段解释如下:
Version:BGP的版本号。对于BGP 4来说,其值为4。My AS(autonomous system):本地AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS。Hold Time:保持时间。在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive报文或Update报文,则认为BGP连接中断。BGP Identifier:BGP标识符,以IP地址的形式表示,用来识别BGP路由器。
 

BGP报文格式 - Update
Update报文用于在对等体之间传递路由信息,可以用于发布、撤销路由,一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(Network Layer Reachable Information,网络层可达信息)中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
报文格式如下图所示,主要字段解释如下:
Withdrawn routes:不可达路由的列表。Path attributes:与NLRI相关的所有路径属性列表,每个路径属性由一个TLV(Type-Length-Value)三元组构成。NLRI:可达路由的前缀和前缀长度二元组。


Unfeasible routes length:不可达路由字段的长度,以Byte为单位。如果为0则说明没有Withdrawn Routes 字段。Withdrawn Routes Length:标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。Total path attribute length:路径属性字段的长度,以Byte为单位。如果为0则说明没有Path Attributes 字段。

3.     BGP报文格式 - Notification
当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发生),就会向对等体发送Notification,告知对端错误原因。之后BGP连接将会立即中断。
Error Code、Error subcode:差错码、差错子码,用于告知对端具体的错误类型。Data:用于辅助描述详细的错误内容,长度并不固定。


4.     BGP报文格式 -Keepalive
BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接,Keepalive报文格式中只包含报文头,没有附加其他任何字段。


5.     BGP报文格式 - Route-refresh
Route-refresh报文用来要求对等体重新发送指定地址族的路由信息,一般为本端修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。
相关字段内容如下:
AFI:Address Family Identifier,地址族标识,如IPv4。Res.:保留,8个bit必须置0。SAFI:Subsequent Address Family Identifier,子地址族标识。
 

在Open报文协商时会协商是否支持Route-refresh,如果对等体支持Route-refresh能力,则可以通过refresh bgp命令手工对BGP连接进行软复位,BGP软复位可以在不中断BGP连接的情况下重新刷新BGP路由表,并应用新的策略。
对于不支持Route-Refresh能力的BGP对等体,可以配置keep-all-routes命令,保留该对等体的所有原始路由,这样不需要复位BGP连接即可完成路由表的刷新。
缺省情况下未开启keep-all-routes。
1.2.7   BGP状态机
BGP状态机汇总表:

BGP状态机迁移:
 

Idle状态是BGP初始状态。在Idle状态下,BGP拒绝对等体发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。

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

BGP状态机详解

 

1.2.8   BGP对等体表
在设备上通过display bgp peer命令查看BGP对等体表:
 

其中主要参数含义:
Peer:对等体地址V:version,版本号AS:对等体AS号Up/Down:该对等体已经存在up或者down的时间State:对等体状态,这里显示的为BGP状态机的状态PrefRcv:prefix received,从该对等体收到的路由前缀数目MsgRcvd 、MsgSent:从对等体收到的报文个数,向对等体发送的报文个数。OutQ:out queue,对外发送报文队列中排队的个数,一般为0。
BGP对等体表的作用为列出本设备的BGP对等体,以及对等体的状态等信息。
1.2.9   BGP路由表
在设备上通过display bgp routing-table查看BGP路由表:
 

Network:路由的目的网络地址以及网络掩码NextHop:下一跳地址
如果想要查看某条路由更加详细的信息,可以通过display bgp routing-table ipv4-address { mask | mask-length} 查看,该命令会将匹配的BGP路由信息详细展示:
 

通过display bgp routing-table ipv4-address { mask | mask-length } 可以显示指定IP地址/掩码长度的路由信息,在其中有关于该BGP路由的详细信息,如:路由始发者、下一跳地址、路由的路径属性等。
1.2.10 BGP路由表生成
不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。
BGP注入路由的方式有两种:
Networkimport-route
与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由。


Network注入路由


       AS200内的BGP路由器已经通过IGP协议OSPF学习到了两条路由:10.1.0.0/24和10.2.0.0/24,在BGP进程内通过network命令注入这两条路由,这两条路由将会出现在本地的BGP路由表中。    /* Network方式注入的路由必须是已经存在于IP路由表中的路由条目,否则不会被成功注入到BGP路由表中*/
AS200内的BGP路由器通过Update报文将路由传递给AS300内的BGP路由器。
AS300内的BGP路由器收到路由后,将这两条路由加入到本地的BGP路由表中。

import-route方式注入路由
Network方式注入路由虽然是精确注入,但是只能一条条配置逐条注入IP路由表中的路由,如果注入的路由条目很多配置命令将会非常复杂,为此可以使用import-route方式,将:
直连路由静态路由OSPF路由IS-IS路由
等协议的路由注入到BGP路由表中。


1.2.11 BGP路由聚合
与众多IGP协议相同,BGP同样支持路由的手工聚合,在BGP配置视图中使用aggregate命令可以执行BGP路由手工聚合,在BGP已经学习到相应的明细路由情况下,设备会向BGP注入指定的聚合路由。


执行聚合之后,在本地的BGP路由表中除了原本的明细路由条目之外,还会多出一条聚合的路由条目。如果在执行聚合时指定了detail-suppressed,则BGP只会向对等体通告聚合后的路由,而不通告聚合前的明细路由,如上图:在聚合时配置了抑制明细路由的参数,R3上查看路由表,将只能看到BGP路由:10.1.0.0/22,无法看到聚合前的明细路由。
1.2.12 通告原则
BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体。
BGP通告遵循以下原则:
1.     只发布最优路由。
通过display bgp routing-table命令可以查看BGP路由表,在BGP路由表中同时存在以下两个标志的路由为最优、有效:
* : 代表有效> : 代表最优


2.     从EBGP对等体获取的路由,会发布给所有对等体。
3.     IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
如下图所示,如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体:
R2将一条路由传递给了IBGP对等体R3R3收到路由之后传递给IBGP对等体R1R1继续传递给IBGP对等体R2
路由环路形成。

 

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


 
4.     当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题,如图所示:
BGP路由器R4上存在一条路由10.0.4.0/24,R4将其传递给了R2。R2将路由传递给非直连IBGP对等体R3。R3将路由传递给R5。之后R5向10.0.4.4发起访问。


 
 

R5访问10.0.4.4:
R5查找路由表,将报文发送给R3。R3收到报文后查找路由表,匹配到一条BGP路由,其下一跳为R2,但是R2为非直连下一跳,需要进行路由迭代,通过IGP学习到的路由迭代出下一跳为R1。R3将报文发送给R1。R1收到报文后查找路由表,因为R1并非BGP路由器,未与R2建立IBGP对等体关系,因此R1上并无BGP路由10.0.4.0/24,路由查找失败,R1将报文丢弃。

产生该问题根本原因为AS200域内未运行BGP的路由器并无从BGP学习到的路由条目,查找路由失败,导致R1丢弃报文。为此制定了BGP同步原则:
当BGP的路由条目也存在于IGP路由表时才对外发送,以图中场景为例,当R3查看IGP路由表,OSPF路由表中并无路由10.0.4.0/24,因此并不会向R5发送该路由,自然也不会产生后续的访问失败问题。
解决该问题的方式有:
将BGP路由重分发到IGP中,基本不会使用该方式。建立全互联的IBGP对等体关系,让全网所有路由器都拥有BGP路由。



香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价