概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

系列文件

BGPBorder Gatreway Protcol边界网关路由协议

BGP基本配置

BGP实战拓扑

外部BGP基础配置

内部BGP邻居

EBGP基本配置

CCNP综合实验拓扑

文章目录

概述

当前所使用的计算机网络中一个网络通常用一个IP网段来表示要将所有网络连接起来并且要通信就需要将这些IP网段连接起来让每个IP网段都知道其它IP网段的信息就可以实现全网通信。将网络与网络连接起来的设备都是路由器只要网络中每一台路由器都得知所有的IP网段信息 就可以为全网提供数据转发如果某一台路由器不能得知所有的IP网段信息也就表示这台路由器所连接的网络不能与其他网段通信。为了帮助路由器获得全网IP网段信息因此路由协议工作在路由器与路由器之间最终让网络中每一台路由器都拥有全网完整的路由信息从而实现全网可达。
从上可以看出路由协议在路由器之间传递路由信息是保证网络通信的基础如果路由器协议传递了错误的路由信息或者没有传递路由信息将导致某些网络通信的中断所以路由协议从一台路由收到路由更新后必须毫不保留地传递给其它路由器而当一个网络失效后也必须告知其它路由器该网段不可达需要将相应路由器删除。

当全网每一台路由器都需要拥有所有的路由信息并且完全一致时这种状态被称为收敛状态一个网络只有在收敛状态时才能保证全网可达。而当今所使用的最庞大的互连网是由数万台路由器连接起来的如果每一台路由器都拥有互联网中的每一条路由信息那么就意味着每一台路由器都将拥有数十万甚至数百万条路由条目这个数量是惊人的。但是由于路由协议的特征以及互联网全网通信的需求就必须让互联网中每一台路由器将自己的路由信息与其它路由器互换最终使整个互联网的达到收敛状态。虽然这是铁定的要求但是请仔细想一下这是万万不可能的因为一个拥有数万台路由器组建起来的超大型网络永远不可能达到收敛状态因为当某个网络断开时最先得知的路由器需要将这个信息告知给其它所有路由器因为信息是一台传一台传过去的所以一个网络断开的信息要让数万台路由器都知道这需要很长的时间并且可能在这个信息还没有传遍整个网络时这个之前中断的网络就恢复了正常那么这时最先知道的路由器又要重新向网络中通告该网段恢复正常的信息如此一来互联网中不断变化的网络会让所有路由器不停地传递路由信息结果是导致网络中路由信息的不一致也将导致庞大的路由更新影响所有路由器的性能。因此互联网中一个网络的中断与恢复实在没有必须通告给数以万计的路由器。而网络的信息必须向其它路由器通告那么一台路由器的路由信息既然没有必须向网络中每一台路由器通告那么它究竞该通告给哪些路由器呢?或者换句话说它的路由更新通告的范围究竟有多大呢?

基于以上种种原因所以我们将–台路由器的路由更新限制在一定的范围内也只有这样一个被划分为更小范围的网络才能达到收敛状态。所以现实情况是,我们的互联网被划分成了一个一个更小范围的网络而任何一台路由器的路由更新被限制在这个特定的范围内而这个特定的范围就是你应该知道的被称为自治系统的网络范围即autonomous system (AS)。 我们设计了互联网中路由协议
的更新只应该在一一个AS内部传递但是互联网是需要全网通信的所以必须让每一个AS都能够获得其它AS的路由信息才行因此路由协议被定义为两种截然不同的种类即只在一一个AS内部更新的路由协议称为Interior Gateway Protocol(IGP) ,以及在AS 与AS之间更新的路由协议,称为Border Gateway Protocol (BGP) 。

需要更多的解释将互联网划分成多个AS目的并不仅仅是将路由协议的更新限制在特定的范围内还有一个重要的原因是将互联网划分成若千个小范围的网络后那么这每一个小网络就可以单独定义各自的路由策略与安全策略并且这样不需要干扰其它AS也不受其它AS干扰。比如网络中若干的ISP,这些ISP对自己的网络需要制定自己的策略又需要让这些策略保持私有性而不与其它ISP互相
干扰所以划分AS帮他们实现了这个目的。

只能在一个AS内部传递更新的IGP路由协议有RIP, EIGRP OSPF, IS-IS 可以在AS之间传递更新的路由协议目前只有BGP。但是有个特别之处是EIGRP 也使用了AS的概念来工作运行EIGRP的网络也会被划分成多个AS,虽然默认情况下EIGRP不能在AS与AS之间更新路由信息但是EIGRP也可以实现AS之间的路由更新。需要说明的是EIGRP概念中的AS与BGP的AS并无任何关联它们之间没有任何共同操作性真正的AS是指BGP的AS,而EIGRP不管有什么样的AS特征它永远被限制在BGP的单一AS之中。

BGP AS

对于BGP的AS号码的分配是由Internet Assigned Number AuthorityIANA机构来统一规划和分配的IOS中运行的BGP目前最多支持4字节长度的AS号码但并不表示所有AS号码都能任意配置在2009年1月之后IANA决定使用4字节长度AS范围是65535-4294967295.

当前通常还是使用2字节长度的AS也就是1-65535所以不对4字节的AS号码做太多讨论。因为BGP是使用在互联网之中的互联网由多个BGP AS域组成所以互联网中不能出现AS号码相同的域如果一台路由器要接入互联网并运行BGP那么必须向IANA申请合法的AS号码。为了考虑到某些大型企业需要使用BGP与ISP对接而又没有足够的AS号码用来给企业用户吗所以将AS号码划分为公有AS和私有AS公有AS的范围是1-64511私有AS范围是64512-65534公有AS只能用于互联网并且全球唯一,不可重复而私有AS可以在得不到合法AS的企业网络使用可以重复。很显然因为私有AS可以被多个企业网络重复使用所以这些私有AS不允许传入互联网ISP在企业用户边缘需要过滤掉带有私有AS号码的路由条目。

BGP 邻居

如果你在自己的PC上从某个FTP服务器下载文件那么你的PC只要和FTP服务器是通畅的即可也就是说你的PC只要ping得通FTP服务器就行不管距离有多远因为不可能从FTP服务器上下载文件的PC都与之是直接连在一起的PC从FTP服务器下载文件时使用的是TCP传输当数据在中途出现丢包时被丢弃的数据包能够得到重新传递从而保证下载的文件是完整的。由于BGP运行在整个互联网传递着数量庞大的路由信息因此需要让BGP路由器之间的路由传递具有高可靠性和高准确性所以BGP路由器之间的数据传输使用了TCP协议端口号为179并且指的是会话目标端口号为179而会话的目标端口号为179而会话源端口号是随机的。

正因为BGP使用了TCP协议传递所以两台运行BGP的路由器只要通信正常也就是说只要ping得通而不管路由器之间的距离有多远都能形成BGP邻居从而互换路由信息。

一个配置BGP进程的路由器只能称为BGP-Speaker当和其它运行了BGP的路由器形成邻居之后就被称为BGP-Peer。如果一个网络中的多台路由器都运行OSPF之后那么这些路由器会在相应网段去主动发现OSPF邻居并主动和对对方形成OSPF邻居。而一个路由器运行BGP后并不会主动去发现和寻找其它BGP邻居BGP的邻居必须手工指定。

BGP和其它路由协议一样传递的是网络层协议如IP协议除此之外BGP还能够传递除IP协议之外的其它网络层协议能够传递的协议如下

IP Version 4 (IPv4)
IP Version 6 (IPv6)
Virtual Private Netwoks version 4 (VPNv4)
Connectiononless Network Service (CLNS)
Layer 2 VPNL2VPN

这些协议都被为 address family配置时需要进入相应的协议 address family 模式而IPv4除外。所有命令在address family 中独立配置独立生效并且都拥有独立的数据库。正常的BGP配置模式被称为NLRI模式中配置在NLRI模式中配置的参数只对IPv4单播生效。

IOS支持四个AFI模式为IPv4IPv6CLNSVPNv4并且IPv4和IPv6还有单播和组播之分。

思科路由器运行的BGP为version4一台路由器只能运行一个BGP进程并且整台路由器只能属于一个AS但是一台路由器可以承载多个address Family而一个支持多个address family 的BGP和一个不支持的可以正常通信但这也仅限于IPv4.

一台BGP路由器运行在一个单一的AS内在和其它BGP路由器建立邻居时如果对方路由器和自己属于相同AS则邻居关系为 Internal BGPiBGP如果属于不同AS则邻居关系为external BGP eBGP。BGP要求eBGP邻居必须直连而iBGP邻居可以任意距离但这些都是可以改变的。

在BGP形成邻居后最开始会交换所有路由信息但是之后都采用增量更新也就是只有在路由有变化时才更新并且只更新有变化的路由。

BGP建立邻居后最开始后会通过相互发送类似hello包的数据来维持邻居关系这个数据包称为Keepalive便认为邻居丢失则断开与邻居的连接。

BGP之间建立邻居需要经历如下几个过程

Idle——BGP 进程被启动或被重置这个状态是等待开始比如等于指定一个BGPpeer当收到TCP连接请求后便初始化另外一个事件当路由器或peer重置都会回到idle状态。
Connect——检测到有peer要尝试建立TCP连接。
Active——尝试和对方peer建立TCP连接如有故障则回到idle状态。
OpenSent——TCP 连接已经建立BGP发送了一个0PEN消息给对方peer,然后切换到OpenSent状态如果失败则切换到Active状态。
OpenReceive——收到对方peer的OPEN消息并等待keepalive消息如果收到keepalive,则转到Establ ished状态如果收到notification,则回到idle状态比如错误或配置改变都会发送notification而回到idle状态。
Established——从对端peer收到子keepalive并开始交换数据收到keepalive后holdtimer都会被重置如果收到notification,就回到idle 状态。

BGP 更新源

BGP并不能主动在网络中寻找邻居必须手工指定BGP邻居的地址那么BGP才会将数据包发往指定的地址来请求建立邻居与此同时BGP发出的请求数据包除了写明目标IP地址外还要写上自己的IP地址即BGP源地址。路由器自己产生流量后从接口发出时流量从哪个接口被发出那么这些数据包的源IP地址就是哪个接口的地址。因此当BGP发出数据包寻找邻居时这些数据包从那些接口被发出那么BGP源IP地址就是哪个接口的地址。要两台BGP路由器要正常建立邻居必须双方路由器都相互指定邻居相互发送数据包才行。当一台BGP路由器收到建立邻居的请求后如果发现数据包的目标IP不是自己的BGP源地址那么就拒绝该连接的请求后只有当请求数据包的目标与自己的BGP源地址相同时才可建立BGP邻居。需要注意的是这个条件只在两个邻居之间任意一个邻居满足条件即可并不需要双方都满足也就是说一方收到的数据包目标IP与自己的BGP源地址相同即可另一方收到的数据包目标IP与它的BGP源地址不同也没关系只要单方面符合条件就行但我们通常都将BGP两端的源与目标保持一致。BGP 的源地址是可以随意更改的但只能是路由器上的接口地址。

如下图
在这里插入图片描述
在上图中R1与R2之间有两条链路当配置BGP邻居时如果R1指定邻居地址为12. 1.1.2, R2指定邻居地址为12. 1.1.1那么在建立邻居过程中R1 将请求数据包从接口F0/0发出数据包的目标IP为12. 1. 1.2, BGP 源地址为F0/0的接口地址12. 1.1.1当R2将请求数据包从接口F0/0发出时数据包的目标IP为12.1. 1.1, BGP 源地址为F0/0的接口地址12. 1.1.2由于R1发出的数据包目标IP12. 1.1.2与R2的BGP源地址12. 1. 1.2完全相同,所以最终能够正常建立BGP邻居。R1在检测地址时R2的目标IP与R1的源也完全相同通常我们都保证双方一致。

当R1与R2之间的直连接口F0/0中断后如果双方将数据包从S0/0发出那么R1的源地址就是10. 1. 1.1, R2的源地址就是20. 1.1.2由此可以看出双方发出的数据包的目标IP都与对方的源地址不符所以无法建立BGP邻居。虽然在上面的网络环境中双方路由器之间都拥有多条链路在中断某条链路之间仍然可以通信但是这并不能保证BGP邻居的永久连接。为了使拥有多条链路的BGP邻居.之间永远保持连接考虑到路由器的loopback口在设备正常工作的情况下不会像物理接口那样出现中断所以建议在BGP邻居之间使用loopback 接口的地址来建立TCP连接当指定邻居时不再将邻居的地址指定为对方物理接口地址而改为指定对方的loopback地址这样-来既然物理接口中断只要还有通畅的链路那么BGP邻居仍然可以保持连接。在将BGP邻居地址指定为对方loopback地址时为了使数据包的目标IP与对方的BGP源地址相同所以邻居也要将BGP源地址更改为自己的loopback接口地址从而使得双方正常建立BGP连接。

在上图中当R1指定邻居地址为2.2.2.2BGP 源地址为1.1.1.1, 而R2指定邻居地址为1.1.1.1, BGP源地址为2.2.2.2,这样-来双方的目标IP都与对方的BGP源地址相同所以可以正常建立邻居并且在双方链路中任何一条链路断开都不影响邻居的会话BGP 的连接仍然保持而不会中断实现了连接的冗余性和稳定性。

BGP TTL

BGP的路由可能会从一个AS发往另外一个AS,从而穿越多个AS。但是由于运行BGP的网络会是-一个很大的网络路由从一个AS被发出可能在经过转发之后又回到了最初的AS之中最终形成路由环路所以出于防止环路的目的考虑BGP 在将路由发往其它AS时也就是发给eBGP邻居时需要在路由中写上自己的AS号码下一个 AS收到路由后再发给其它AS时除了保留之前的AS号码之外也要添加上自己的AS号码这样的写在路由中的AS被称为AS -path,如果BGP收到的路由的AS_ PATH中包含自己的AS号码就认为路由被发了回来以此断定出现了路由环路最后就会丢弃收到的路由。BGP只有在将路由发给eBGP时才会在AS- path中添加自己的AS号码而在发给iBGP时是不会添加AS号码的因为iBGP邻居在同一个AS中即使要添加AS 号码全是一样的所以没有必要。
在这里插入图片描述
在上图中当路由穿越各个AS时所有发给eBGP邻居的路由都会在AS-path中添加自己的AS,自己的AS总是添加在AS-path的最前面。例如一条路由从AS10被发往AS 20则AS-path为“10”当AS 20 将路由发往AS 30时添加上自己的AS号码20之后AS- path变成“20, 10”当AS 30将路由发往AS 50时最终AS 50收到的路由的AS-path为“30, 20, 10”。当AS 30将路由发给AS 40, AS 40再将路由发给AS 10时路由的AS- path为“40, 30,20, 10”由于AS 10 在收到路由后发现AS- path中包含自己的AS号码10,所以认为出现环路便丢弃收到的所有路由。

在IGP协议中我们将路由协议分成两大类:距离矢量路由协议和链路状态路由协议而BGP被划分为路径矢量路由协议(path-vector routing) 路径矢量算法结合了距离矢量特性与AS- path防环特性。

因为BGP在将路由发给eBGP邻居时会将自己的AS号码添加到AS- path中,所以可以以此来防止环路而在将路由发给iBGP时是不会往AS -path添加AS号码的因此在iBGP之间传递路由时没有防止环路的机制。考虑到为iBGP之间的路由传递也加入防环机制因而强制将BGP路由在AS内部只传一跳 具体操作为:一台BGP路由器从eBGP邻居收到路由发给iBGP邻居之后iBGP邻居收到后就不能再传给其它任何iBGP邻居只能传递给eBGP邻居。此规则被多数人称为BGP的水平分割就是一台BGP路由器从iBGP邻居收到的路由不能传递给其它iBGP 邻居只能传给eBGP邻居。如下图:
在这里插入图片描述

在上图中当R1从eBGP邻居R6那里收到路由后可以发给任何iBGP邻居,包括R3和R4当R3从iBGP邻居R1那里收到路由后不可以转发给任何iBGP邻居只可以转发给eBGP邻居,所以R3从R1收到路由后只能转发给eBGP邻居R5。由于R3和R4从R1收到路由后都不可以转发给iBGP邻居R2 在上图环境中最
终造成R2无法接收任何路由要让R2收到路由建议在R1与R2之间再建立一条.BGP会话所以如此一来在同一个AS中要将路由全网传递就需要在iBGP邻居之间配置全互联最终AS 20内的邻居关系如下图:
在这里插入图片描述
在AS内部,除了建立全互联的iBGP邻居关系外,还可以通过BGP Reflector (BGP反射器)和BGP Confederation(BGP联邦)的方式来实现路由全网传递将在后续介绍。

BGP路由表

当路由器之间建立BGP邻居之后就可以相互交换BGP路由。一台运行了BGP协议的路由器会将BGP得到的路由与普通路由分开存放所以BGP路由器会同时拥有两张路由器一张是存放普通路由的路由表被称为IGP路由表就时平时我们使用命令show ip route 看到的路由表IGP 路由表的路由信息只能从IGP协议和手工配置获得并且只能传递给IGP协议:另外一张就是运行BGP之后创建的路由表称为BGP路由表需要通过命令showipbgp才能查看BGP路由表的路由信息只能传递给BGP协议如果两台BGP邻居的BGP路由表为空就不会有任何路由传递。在初始状态下BGP 的路由表为空没有任何路由要让BGP传递相应的
路由只能先将该路由导入BGP路由表之后才能在BGP邻居之间传递。默认情况下任何路由都不会自动进入BGP路由表BGP路由表的路由获得有多种方式可以从BGP邻居获得也可以手工将IGP路由导入BGP路由表还可以将其它路由重分布进BGP只要BGP的路由不是从邻居学习到的而是手工导入的那么这样的路由被称为BGP本地路由。

因为BGP的邻居类型分为两种: eBGP 和iBGP,所以BGP路由的AD值也有区分如果BGP的路由是从eBGP学习到的AD值为20可以发现从eBGP邻居学习到的路由将优于任何IGP协议:从iBGP学习到的路由的AD值为200同样可以发现此类路由的优先级低于任何IGP协议。BGP 除了以上两种AD值之外如果BGP
路由是从本地手工导入的即BGP本地路由则BGP本地路由的AD值为200与iBGP路由的AD值相同优先级低于任何IGP协议。

如果某一条相同的路由同时从eBGP和iBGP以及本地路由学习到那么究竞哪条路由会被选择为最优路径呢?路由的AD值并不一-定会影响到路径选择因为BGP并不会在一开始就通过比较AD值来选择最优路径。

BGP 同步

BGP邻居之间的通信与交流运行在TCP的基础上在两个节点之间只要网络是通的就能够建立TCP建立网络的连通可以是任何IGP路由协议甚至是静态路由总之只要网络是通的.TCP 连接就一定能够建立起来。只要让两台路由器之间连通保证TCP能够正常连接就能够保证BCP的通信。在-一个AS中除了需要建立BGP连接之外同时还需要运行FGP协议其中运行BGP的目的是为了在大型网络中传递庞大的路由表或路由信息而运行IGP协议的目的可想而知并不是为了传递庞大的路由信息在AS中运行IGP的根本目的是为了让BGP路由器之间能够建立TCP连接从而为BGP的通信服务。因此可以看出BGP 就像是 一辆运货的卡车BGP 的路由就是卡车要运的货而IGP协议就是为了在站与站之间铺平道路如果没有IGP去让道路连通那么BGP就无法在站与站之间运送货物。

因为BGP在建立邻居时BGP的源地址可以是任意地址这些地址可以不是直连的只要是能通信的能建立TCP连接即可。当BGP在向邻居发送流量时只要将流量发往邻居的对端地址因为邻居的地址并不一定是直连的所以要找到去往邻居地址的路径可能需要查询IGP路由表因为IGP为BGP的通信与连接提供了保证。由此可见BGP 要将数据发给邻居BGP 在查询去往邻居的路径时采用的是递归查询BGP 查询去往邻居的过程中可能要多次查询IGP路由表只要在IGP路由表中找到了去往邻居地址的相应路径或相应下一-跳那么就会将数据发给这个下一跳。在这里插入图片描述
在上图的网络中R1与R4建立eBGP连接R3与R5建立eBGP连接而R1与R3建立iBGP连接。在R1与R3建立iBGP连接时R1通过目标地址3.3.3.3找到邻居R3, R1的BGP源地址为1.1.1.1, 而R3也通过目标地址1. 1. 1.1找到邻居R1,R3的BGP源地址为3.3.3.3为了让1.1. 1.1和3.3. 3.3能够正常通信从而建立TCP连接R1、R2、R3之间启用了IGP协议0SPF, OSPF的目的只是为了使1.1.1.1能够与3.3.3.3通信并不传递AS中庞大的路由信息。

当AS 10中的R4将网段10. 1.1.0/24通告给AS 20中的R1后因为R1与R3之间是iBGP邻居所以R1将路由10.1.1.0/24传递给R3,最终R3将路由10.1.1.0/24传递给AS30中的R5。当R5将目的地为10.1.1.0/24的流量发给R3时R3在查询路由表后得知,去往10.1. 1. 0/24的数据包需要发给iBGP邻居1.1.1.1才能够到达于是R3便执行递归查询查询如何去往1.1.1.1,正因为R1与R3之间的通信是靠OSPF提供的所以R3得知去往1.1.1.1必须将数据包交给R2,即咬给下一跳23.1.1.2因为R2只运行了OSPF为BGP服务所以R2没有BGP的路由
10. 1.1.0/24当R2发现数据包的目标地址为10. 1. 1. 0/24后只能将数据包全部丢弃这就类似于路由黑洞。

从以上情况中可以看出当BGP从iBGP收到路由时因为邻居之间可能跨越了多台IGP路由器所以BGP在将数据包发往目的地时,通常会发给一台只运行了 IGP的路由器而只运行IGP的路由器并没有BGP的路由因而最终导致数据包丢失造成路由黑洞。要杜绝此类问题的发生其实答案很明了就是让AS中只运行IGP的路由器同时也拥有BGP的路由表即可。由于以上原因在BGP路由传递中有以下一条规则:当BGP要将从iBGP邻居学习到的路由信息传递给其它邻居之前(这个邻居通常是eBGP邻居)这些路由必须在IGP路由表中也能学到否则认为此路由无效而不能发给其它邻居。

此规则称为iBGP与IGP路由同步。

在上图环境中,在R3将从iBGP邻居R1学习到的路由传递给eBGP邻居R5之前必须确定这条路由在自己的IGP路由表中也存在否则不使用该路由。要查看路由在IGP路由表中是否存在使用命令show ip route 即可。

注意只有从iBGP邻居学习到的路由才受iBGP与IGP路由同步规则的限制如果路由是从eBGP邻居学习到的则不受此规则限制并且此规则可以手工开启或关闭。

BGP同步默认是开启的在IOS 12.2(8)T 以及之后的版本默认都是关闭的。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6