一、概述及相关术语
BGP概念
BGP——边界网关路由协议,是一种基于策略的路径矢量路由协议(可以理解为距离矢量型协议的升级版),BGP在确定最佳路径时考虑的不是速度,而是让AS能够根据多种BGP属性来控制数据流的传输。
BGP的主旨是提供一种域间路由选择系统,确保自治系统只能够无环地交换路由选择信息,BGP路由器交换有关前往目标网络的路径信息。
BGP是一种解决大型网络的EGP协议,本身并不产生路由,只是传递路由信息,因为基于TCP传输,故不需要物理直连(但TCP一定要可达)。
BGP相关术语
1.自治系统:自治系统就是处于一个管理机构控制之下的路由器和网络群组。它可以是一个路由器直接连接到一个LAN上,同时也连到Internet上;它可以是一个由企业骨干网互连的多个局域网。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号。
BGP将每个自治系统看作路由一个节点。
2.AS号:自治系统号为一16位的数字范围为1–65535,私有自治系统号64512~65535,在Internet上不可路由。
自治系统号可以防环,运行BGP的路由器不会接收路径列表中包含自己AS号的路由更新信息,因为这个路由已经穿过了自己的AS,再次接收这个路由信息就会造成环路,所以当BGP路由器收到含有自己AS号的路由信息的数据包时会丢弃从而防环。
3.BGP和IGP:ISP(网络服务提供商)和他的客户通常会使用一种IGP来进行他们的网络内部路由信息。客户与同一ISP下的另一客户,客户与Internet,ISP与ISP之间进行路由交换时会使用到BGP。
PS:IGP路由协议主要使命在路由的自动发现和计算上,而BGP主要在路由的控制和选择上。
4.BGP发言者(BGP Speaker):发送BGP消息的路由器称为BGP发言者,它接收或者产生新的路由信息,并发布给其他BGP发言者。
5.Router ID(RID):Router ID是一个32位比特无符号的整数,用来在自治系统中唯一标识一台路由器。路由器如果运行BGP协议,则必须存在Router ID。Router ID可以是手工配置或者是路由协议自动选举。
6.BGP对等体(BGP Peer):相互交换消息的BGP发言者之间互称对等体(Peer)。
7.IBGP对等体(Internal BGP Peer):如果BGP对等体处于同一自治系统内,被称为IBGP对等体。
8.EBGP对等体(External BGP Peer):BGP对等体处于不同自治系统时,被称为EBGP对等体。
9.IGP:内部网关路由选择协议:RIP、OSPF、ISIS等
10.EGP:外部网关路由选择协议
关于BGP的两类对等体
BGP对等体也称为BGP邻居,EBGP对等体也称为EBGP邻居,IBGP对等体也称为IBGP邻居。
EBGP对等体
处于不同AS的BGP对等体为EBGP对等体,通常情况下EBGP对等体是物理上直连。AS间通信的BGP邻居必须处于相同的物理网络。
BGP Speaker从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP);同时为了防止环路,他不会将学习到的路由再向原发布者发布。
建立eBGP邻居关系的要求:
不同的AS号:不同AS号之间的BGP路由器才能建立起BGP外部连接
指定邻居:默认邻居间连接关系为直连,为网络的健壮性可以将Loopback口的IP设为neighbor address,需要用ebgp多跳技术来实现
可达性:在开始交换BGP路由更新之前,必须先建立TCP会话,BGP的数据必须能到达BGP邻居处
IBGP对等体
处于同一个AS的BGP对等体为IBGP对等体(或者是IBGP邻居)IBGP对等体不一定是物理直连,但是一定要TCP可达。
建立iBGP邻居关系的要求:
相同的AS号
指定邻居
可达性
由于物理接口的不稳定性,neighbor 所指向的IP地址可能会down掉,所以可以使用本地环回接口作为BGP邻居neighbor。
为了防止环路,BGP协议规定BGP发言者从IBGP获得的路由不向它的IBGP对等体发布。
另外为了防止路由黑洞的产生,协议还规定BGP发言者从IBGP获得的路由是否发布给它的EBGP对等体与BGP是否同步相关。
补充:路由黑洞
路由黑洞一般是在网络边界做汇总回程路由的时候产生的一种不太愿意出现的现象,就是汇总的时候有时会有一些网段并不在内网中存在,但是又包含在汇总后的网段中,如果在这个汇总的边界设备上同时还配置了缺省路由,就可能出现一些问题。这时,如果有数据包发向那些不在内网出现的网段(但是又包含在汇总网段)所在的路由器,根据最长匹配原则,并没有找到对应的路由,只能根据默认路由又回到原来的路由器,这就形成了环路,直到TTL值超时,丢弃。
路由黑洞解决办法:运营商核心网MPLS LDP,完美的解决方案。
IBGP的全连接
BGP会话是基于TCP的点到点的单播链接
TCP的可靠传输机制和滑动窗口机制可以确保承载与TCP之上的BGP可以可靠传递大量路由。但是TCP链接是点到点的单播方式来进行报文传输的,因此BGP链接只能是基于点到点的链接。同时BGP是一种距离矢量路由协议,为了防止产生路由环路,协议规定BGP发言者从IBGP对等体获得的路由不能向其他的IBGP对等体发布。这样,在运行了BGP协议的AS内,为了确保所有BGP路由器的路由信息向,则需要使所有的IBGP路由器保持全连接。
二、BGP特性
由TCP承载
BGP将TCP用作他的传输协议(唯一用TCP作为传输协议的路由协议),TCP为BGP提供了面向连接的可靠的传输。所有BGP认为他所有的通信都是可靠的,不存在控制差错和错误重传机制,BGP使用179号端口(目的端口),数据封存在TCP分段中,然后这些数据在被封装入IP数据包中。
BGP在接收更新分组的时候,TCP使用滑动窗口,接收方在发送方窗口达到一半的时候进行确定,不同于OSPF等路由协议使用1-to-1窗口。
补充:
BGP单播建邻居,TCP 179端口 工作在OSI4层
RIP UDP 520端口 工作在4层
OSPF IP 89端口 工作在3层
ISIS 组播mac 工作在2层
只发送增量路由更新
在邻居关系建立后,BGP路由会将自己的全部路由信息通告给邻居,此后如果路由表发生了变化,则只将增量部分发送给邻居。这样可以大大减少BGP传播路由所占用的带宽,以利于在Internet上传播大量的路由信息,并降低路由器CPU与内存的消耗。
在可靠的链路上不需要使用定期更新,所以BGP使用触发更新。
路由过滤和路由策略
与IGP不同的是,BGP最重要的特性是丰富的路由属性以及强大的路由过滤和路由策略。通过路由策略等方法,来更改路由属性,或者是根据路由更新信息中的属性来实现路由过滤和路由策略,从而使BGP的使用者可以非常灵活地对路由进行选路和控制。
支持CIDR和路由聚合
可以将一些连续的子网聚合成较大的子网(突破了自然分类的限制),从而可以在一定程度上控制路由表的快速增长,并降低了路由查找的复杂度。
三、BGP消息
Open(初始)
Keepalive(保活)
Update(更新)
Notification(通知)
Route-refresh
Open(初始)
初始消息在对等路由器间打开一个BGP通信会话,是建立传输协议后发送的第一个消息,用于建立BGP对等体之间的链接关系和协商BGP参数(包含hold-time,router-id),默认仅发送一次。
初始消息由对等设备发送的keep-alive消息确认,且必须得到确认后才可以交换更新、通知和keep-alive消息。
初始消息包含的内容
版本号:8比特,用来标识BGP版本,目前一般使用的为BGP第四版本(高版本兼容低版本)。
本地AS:长16比特位,指明了发送方的AS号,如果不是期待的版本号,BGP会话就会断开。
保持时间:保持时间内若没有收到下一个存活消息或更新消息BGP会话将断开(默认180S)
BGP路由器识别符:路由器ID,选择方式与OSPF类似(3种方法)
可选参数:长度字段,指明了可选参数字段的总字节数。目前只定义了一个可选参数类型:认证信息。
认证信息含有下列两个域:认证码:标识使用的认证类型。认证数据:包含由认证机制使用的数据。
Keepalive(存活)
BGP会周期性(默认60s发送一次)的向对等体发出Keepalive消息,主要作用就是让BGP邻居知道自己的存在,保持邻居关系的稳定。
另外一个作用就是对收到的Open消息的回应。
消息格式中只包含消息头,没有附件任何字段。长度为19字节,消息只有标记、长度、类型,不包括数据域。
Update(更新)
携带的是路由更新(删减、增加)信息。
主要用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以发布不可达路由消息;一条Update消息可以通告一类具有相同路径属性的可达路由,同时还可以携带多条不可达路由。
更新消息包含的内容
撤销路由:(如果之前存在的话)IP地址前缀列表,不再为这些前缀提供路由
路径属性:也就是AS-Path,源(origin),本地优先级等.属性类型和属性值(TLV)
NLIR(网络层可达信息):网络列表(IP地址前缀长度),表示通过这条路径可达的网络
Notification(通知)
Notification的作用就是错误通知。BGP发言者如果检测到对方发过来的消息有错误或者主动断开BGP链接,都会发出Notification消息来通知BGP邻居,并关闭链接回到idle状态。
如果收到邻居发来的 Notification消息,也会将链接状态变为idle。
Route-refresh
要求对等体重新发送指定地址族的路由信息。
四、BGP对等体建立过程
正常情况下:IdleConnectOpensentOpenconfirmEstablished
Idle(空闲)
在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
PS:Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
Connect(连接状态)
TCP三次握手,TCP三次握手未完成BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
TCP连接失败,重置重传定时器Connect Retry,侦听是否有对等体启动连接,那么BGP转至Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
Opensent(Open消息已发送)
TCP的三次握手成功,发OPEN报文协商BGP相关参数(AS,version,auth) 。BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
Active(活跃状态)
这个状态下, BGP初始化TCP连接来获得一个对等体。如果连接成功,本地清空Connect Retry计时器,并向对等体发送OPEN报文,并转至OpenSent状态。
Openconfirm(Open消息已确认)
BGP等待Keepalive或Notification报文。
如果收到Keepalive报文,则转至Established状态,并重置HoldTime定时器。
如果KeepAlive定时器超时则重置并发送KeepAlive消息。
如果收到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同步(BGP Synchronization)
规则要求:
在BGP同步打开的情况下,一个BGP路由器不会把那些通过IBGP邻居学到的BGP路由通告给自己的EBGP邻居;除非自己的IGP路由表中存在这些路由,才可以向EBGP路由器通告。
同步规则要求BGP库与IGP库同步。这么做是为了使AS内的所有路由器都能达到同步,确保能够转发其它AS因使用该AS通告的路由而发送到该AS的那些数据。BGP同步规则也保证了整个AS中路由信息的一致性,避免了AS内的路由“黑洞”。
示例:如上图所示:首先,RTB通过EBGP邻居关系,获得了去往AS100的路由信息,例如,去往AS100中的10.1.1.1/24,RTB会把这样的路由信息通告给RTE,RTE收到从RTB通告来的去往自治系统AS100的路由信息10.1.1.1/24。对于RTE来说,她在考虑是否把这样的路由信息通告给她的EBGP邻居RTF时,就需要考虑同步问题。这里的同步是指:RTE如果能通过IGP(内部网关协议,如OSPF协议)获得去往10.1.1.1/24的路由,我们就认为EGP(外部网关协议,如BGP协议)和IGP同步。在同步情况下,RTE可以将路由信息10.1.1.1/24通告给RTF。否则,不能通告。
依然用上面的例子来解释,如果RTE不考虑同步问题,直接将路由信息10.1.1.1/24 通告给RTF,那么RTF的路由表中就会记录一条去往10.1.1.1/24的路由信息,下一跳是指向RTE的。这样问题就会出现:RTF有一去往10.1.1.1/24的数据包,RTF通过查看路由表,把这一数据包转发给RTE。如果没有同步,RTE的路由表中也会有去往10.1.1.1/24的表项,但是这一表项的下一跳是直接指向RTB的S0接口的(因为BGP是以一个自治系统为一跳的)。在不同步的情况下,RTE是无法直接去往此路由的下一跳的(因为RTE没有去往10.1.1.1/24的路由)。这里有个概念叫下一跳不可达,就是指这种情况。
为了解决下一跳不可达的情况,可以:
将BGP路由引入IGP中,当然这样的做法一般不采用,应为BGP的路由信息量很大,对于IGP来说负担太重。
增加静态路由,当网络不算复杂时可行,如果网络规模较大,解决起来就很困难了。
BGP可以通过命令来强制修改下一跳,在RTE上将去往10.1.1.1/24的下一跳强制修改为RTE自身的接口,同时,需要静态配置,时RTE的路由表中有去往10.1.1.1/24的路由。从EBGP邻居学习到的路由会传递给我的IBGP邻居,下一跳不变,还是EBGP邻居,需要使用next-hop-self改变。
这个问题的彻底解决是在BGP和MPLS联手以后的事情,本文不过多讨论。
六、BGP路由通告原则
连接一建立, BGPSpeaker将把自己所有BGP路由通告给新对等体(在遵守以下规则的前提下)。只有明确通告的网络才会发送给邻居,通告的网络必须能够精确地在路由表中找到。
多条路径时,BGPSpeaker只选最优的加入路由表,即BGP Speaker只把自己使用的最优路由通告给对等体。
为了防止环路,BGP协议规定BGP发言者从IBGP获得的路由不向它的IBGP对等体发布。
BGP Speaker从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP);同时为了防止环路,他不会将学习到的路由再向原发布者发布。
BGP Speaker从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定。
从IBGP获得的路由仅发布给它的EBGP对等体:
关闭BGP同步的情况下,IBGP路由被直接发布 开启BGP同步的情况下,该IBGP路由只有在IGP也发布了这条路由时才会被发布给EBGP对等体 ( 默认情况下同步未开启) 多条路径时,只有最优的才传给EBGP邻居
七、BGP的三张表
邻居表(adjancy table)——show ip bgp summary(简单邻居),show ip bgp neighbor(详细邻居)
BGP表(forwarding database)——show ip bgp:BGP默认不做负载均衡,会选出一条最优的,放入路由表
路由表(routing table)——show ip route
BGP表
status codes是最前面的,包括s,d,h,*,>,i,r,S
origin codes是后面path列,包括i,e,?
(注意大小写)
第一列
*:可用的
R:不可用,从更小AD值的IGP中学到了该路由,因此不用BGP路由
S:表示该条目被抑制,通常因为这条路由有汇总路由,且该汇总路由被限制了
D:表示该条目因惩罚而现在处于抑制状态,因为他可用和不可用状态切换过于频繁,可能这条路由现在可用,但是在惩罚期间不会通告该条路由
H:表示历史,表示这条路径不可用并且已经失效。历史信息还在,但最佳路由可能已经没有了。
第二列
>:最优的,要确保>号出来,才能放进路由表,才能继续传给EBGP邻居。
Next Hop
表示下一跳地址,路由表与他同步 若为0.0.0.0 则该网络是本地通告的。
Metric 度量值
MED,影响别的自治系统如何进入本自治系统(后面会说)
LocPrf 本地优先级
决定本自治系统中的流量如何出去,默认为100,到外部的路由条目才会显示,本地通告的路由显示为空。
权重
默认为0,本地通告(源自本地的)的权重为32768。
最后一列
i:则表明是通过network命令将这个网络引入。
e:说明源路由器是从EGP学到这个网络的。
?:则无法确定这个网络的可达性,因为是IGP重分发进BGP的。
0(空,0是和上面做区分):若为空则说明是本地通告的条目。
没有>号的路由非优化的:不会放进路由表,不会给其他邻居传递
示例如下图:
BGP表中路由最优的条件(即出现>号的条件:关同步——next-hop-self)
实际上就是在讨论从IBGP收到的路由,是否有资格放入路由表,是否能传给后面的IBGP/EBGP邻居的问题。
只有解决“IBGP下一跳可达性问题,以及路由黑洞问题 ”这2个问题才能优化。
方法:
首先确保下一跳可达,next-hop-self或者静态指向EBGP下一跳地址。 然后:方法一,同步+BGP重发布到IGP;方法二,同步+写静态欺骗;方法三,关同步(关同步后黑洞问题仍然存在,可以通过fullmesh或者mpls解决)。
八、BGP引入IGP路由
BGP协议本身不发现路由,因此需要将其他路由引入到BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为了更好的规划网络,BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路。
方法:
Network宣告:逐条将IP路由表中已经存在的路由通告到BGP路由表中。
BGP network的作用:在路由器的当前IP路由表中查找与network命令中参数完全匹配的路由,如果存在,就将等价的NLRI注入到本地BGP表中,IP表中的直连路由,静态路由,IGP路由都可以进入到BGP表中。
Import引入:根据运行的路由协议(RIP,OSPF,ISIS等)将路由引入到BGP路由表中,同时import命令还可以引入直连和静态路由。
auto-summary对于redistribute以及network的影响
redistribute从IGP,静态路由或直连路由重分布路由,可以对重分布进的路由利用路由映射表进行过滤筛选。
重分发进的路由的下一跳地址,要么与重分发的路由器的下一跳地址匹配,要么为0.0.0.0表示是该路由器直连的链路。
此外,aggregate-address 以及 default-information originate(默认路由引入)也能引入本地IGP
network:逐条将IP路由表中已经存在的路由通告到BGP路由表中。
BGP的 auto-summary 命令,仅汇总该路由器通过重分发操作进入BGP表的路由。
对于network和重分发两种方式,具体auto-summary的操作是不一样的,开启auto-summary后:
对于network来说,如果network命令列出了有类网络号(可以归结为A/B/C/D类的IP地址)以及有类默认掩码或者无掩码,并且该有类网络的子网存在,那么就注入该有类网络。
对于重分发来说,如果重分发有类网络的任意子网,那么并不重分发该子网而是重分发该有类网络
开启汇总下进行network时,所有子类网络会被通告,子类网络所在的主类网络也会被通告 。
开启汇总下进行重分发时,所有子类网络都不会被通告,只会通告主类网络。
例如:
当使用network向BGP中注入一条路由时,如果没有开启自动汇总那么,只有与路由表中前缀和前缀长度精确匹配的network命令才会进入BGP表,开启之后,当配置一个有类网络的子网时,BGP表中会同时出现主类网络的子网和该主类网络。
当使用重分发向BGP中注入一条路由 10.1.1.0/16,此时默认没有开启自动汇总,那么show ip bgp 中显示的为 10.1.1.0/16 的信息,而如果当开启汇总之后,显示的将为10.0.0.0/8这个主类路由。
九、BGP安全性
BGP使用认证和通用TTL安全保护机制GTSM(Generalized TTL Security Mechanism)两个方法保证BGP对等体间的交互安全。
BGP认证
BGP认证分为MD5认证和Keychain认证,对BGP对等体关系进行认证是提高安全性的有效手段。
MD5认证只能为TCP连接设置认证密码。
Keychain认证除了可以为TCP连接设置认证密码外,还可以对BGP协议报文进行认证。
BGP GTSM
BGP GTSM检测IP报文头中的TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合TTL值范围的报文进行允许通过或丢弃的操作,从而实现了保护IP层以上业务,增强系统安全性的目的。
例如将IBGP对等体的报文的TTL的范围设为254至255。当攻击者模拟合法的BGP协议报文,对设备不断的发送报文进行攻击时,TTL值必然小于254。如果没有使能BGP GTSM功能,设备收到这些报文后,发现是发送给本机的报文,会直接上送控制层面处理。这时将会因为控制层面处理大量攻击报文,导致设备CPU占用率高,系统异常繁忙。如果使能BGP GTSM功能,系统会对所有BGP报文的TTL值进行检查,丢弃TTL值小于254的攻击报文,从而避免了因网络攻击报文导致CPU占用率高的问题。
十、BGP路由过程中的相关问题与特性
前言:下文我们将介绍BGP路由中的各类属性值,众所周知这些属性值是为了策略路由准备的,但是为什么需要这么多,每一个属性值是为了解决什么问题呢?
1、重叠路由
BGP路由器可以向其他BGP路由器发送重叠路由(overlappingroute),重叠路由是指那些,指向同一目的地的不同路由。
例如,路由206.25.192.0/19 和206.25.128.0/17就是重叠路由,可以看出第一条路由包含在第二条路由之内。在确定最佳路径时,路由器总是选择更精确的路径。然而在宣告路由时,BGP 发言者可以有多种方式来处理重叠路由:
-同时宣告 精确和不精确路由 -仅宣告较精确路由。 -聚合两条路由并宣告聚合路由。 -仅宣告较不精确路由。 -两条路由都不宣告。
2、链路聚合
聚合方法:
静态聚合
路由器通过路由聚合屏蔽明细路由。
自动聚合
自动聚合只对引入BGP的路由进行聚合,聚合到自然网段后发送给邻居。(Summary automatic)自动聚合只能聚合import的路由。
自动聚合带来的问题:环路
手动聚合
手动聚合既能聚合network的路由,又能聚合import的路由。(最好)
路由聚合带来的问题:潜在环路
解决方法:当发生聚合后,如果需要聚合路由携带所有明细路由经过的AS号来防止环路,则在配置聚合的命令后添加AS-SET参数。
3、IBGP对等体过多
BGP协议要求一个路由器通过IBGP学到的路由,不再向其他IBGP邻居广播,所以一个自治系统内所有参加IBGP协议的路由器都要与其他路由器建立会话,从而保证路由信息能够正确地广播到每一个路由器。依照这个原则,一个自治域内总的I-BGP会话数为N×(N-1)/2 (N为运行IBGP的路由器数),当N不断增大时,这个数字会大得惊人。
这对网络设备而言是个非常大的负担,而且还将使网络的管理与配置变得异常复杂。BGP针对这个问题,有如下两种解决方案:
①路由反射器
相关概念:
路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。
客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。
始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
集群或簇(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。
路由反射器的部署:
同一集群内的客户机只需要与该集群的RR直接交换路由信息,因此客户机只需要与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少了IBGP连接数量。为了防止环路出现,要求路由反射器不得更改从客户收到的路由属性。
路由反射簇中的客户路由器可以与自治系统外部路由器建立EBGP对等体关系,但是只可以与簇内的RR或者是其他客户路由器建立IBGP对等体。路由反射器可以与簇外的路由器建立EBGP或者IBGP对等体关系,并且把他们的路由反射给客户路由器。
备份路由反射器
为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。
RR向IBGP邻居发布路由规则如下(非非不传递):
如果路由学习自非客户IBGP对等体,则仅反射给客户路由器。
如果路由学习自某客户,则反射给所有非客户和客户路由器(发起此路由的客户机除外)。
如果路由学习自EBGP对等体,则反射给所有非客户和客户路由器。
这里注意如果客户全连接,那么RR不会将一个客户的路由反射给其他客户。仅将客户的路由反射给非客户。
缺点:因为BGP只传递最优路径,反射器下游路由器丧失了对反射前路由的最优路径选择权。
②联盟
联盟是另一种控制IBGP对等体数量的方法。
原理:将一个AS划分为多个联盟子自治系统,并且将AS内的每台路由器都划分到其中的一个联盟子自治系统中去。位于同一个子自治系统中的对等体是联盟IBGP对等体,位于不同子自治系统中的对等体是联盟EBGP对等体。
就好像是在一个自治系统之内的,又分为若干个子自治系统,子自治系统之间的操作和子自治系统之内的操作,与普通自治系统类似无太大差别。
路由反射器 | 联盟 |
---|---|
不需要更改现有的网络拓扑,兼容性好 | 需要改变逻辑拓扑 |
配置方便,只需要对作为反射器的设备进行配置,客户机并不需要知道自己是客户机 | 所有设备需要重新进行配置 |
集群与集群之间仍然需要全连接 | 联盟的子AS之间是特殊的EBGP连接,不需要全连接 |
适用于中、大规模网络 | 适用于大规模网络 |
4、路由振荡
BGP属于增量更新的路由协议,当有新的路由要发布时,路由器会向邻居发送Update信息,而如果要删除某条路由时,就会发送Withdraw(撤回)信息。BGP路由震荡(Route Flap)的定义是:当一条路由在被收回后,又被广播(Update)出来,视为一次Flap。由于任何一条路由的收回和更新都会导致一台路由器整个路由表重新计算,因此当Flap的情况比较多时,对路由器设备的负载将产生巨大的压力。
应对方法:路由衰减
路由衰减使用惩罚值(Penalty Value)来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定,如上图所示,路由每发生一次震荡,BGP便会给此路由增加1000的惩罚值,其余时间惩罚值会慢慢下降,当惩罚值超过抑制阈值(Suppress Value)时,此路由被抑制,不加入路由表中,也不再向其他BGP对等体发布更新报文,被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间成为半衰期(Half Life),当惩罚值降低到再使用阈值(Reuse Vlaue)内时,此路由变成可用并被加入到路由表中,同时向其他BGP对等体发布更新报文,从路由被抑制到路由恢复可用的时间成为抑制时间(Suppress Time)。
注意:路由衰减只对EBGP路由起作用,对IBGP路由不起作用,这是因为IBGP路由可能含有本AS的路由,而IGP网络要求AS内部路由表尽可能一致,如果路由衰减对IBGP起作用,那么当不同设备的衰减参数不一致时,将导致路由表不一致。
5、Peer Group的应用
在实际的网络中,有一种非常普遍的现象,即一个路由器会有多个属于一类的BGP Peer。这里的“属于一类”是指BGP的策略相同或类似,当Peer比较多时,BGP的配置会变得臃肿,同时,路由器的负载也会加重,因为一旦有路由的更新,路由器需要针对每个Peer做一次策略计算(虽然策略都相同)。另外,应用Peer Group还有一个好处,就是降低了对路由器设备的资源消耗,因为路由器对同一Group更新路由时,由于使用相同策略,因此只进行一次路由计算,从而大大减少了占用CPU的时间。
十一、BGP的属性值(重!)
BGP的路由属性分类
公认必遵属性:ORIGIN、AS-PATH、NEXT_HOP
公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
公认自选属性:LOCAL_PREF(本地优先级)、ATOMIC_AGGREGATE(原子聚合体)
公认自选(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
可选传递属性:COMMUNITY(团体)、AGGREGATOR(聚合站)
可选传递(Optional transitive)属性:BGP路由器可以不支持此属性,但它仍然会接收这类属性,并传递给其他对等体 ——不认识,也可以传。
可选非传递属性:MED、CLUSTER_LIST(集群列表)、ORIGINATOR_ID(发起者ID)
可选非传递(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。
在BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。
常用的BGP属性
Origin属性(公认必遵属性)
Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。
AS_Path属性(公认必遵属性)
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
当BGP Speaker传播自身引入的路由时:
BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。
BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。
当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:
当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。
Next_Hop(公认必遵属性)
属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:
BGP发言者把自己产生的路由发给所有邻居时,将把该路由信息的下一跳属性设置为自己与对端链接的接口地址。
BGP发言者把从EGP邻居得到的路由发给IBGP邻居时。并不改变该路由信息的下一跳属性,将从EBGP得到的路由的NEXT-HOP直接传递给IBGP对等体。(在未开启同步的情况下,要配置next-hop-self使路由下一跳可达)
BGP发言者把收到的路由发给EBGP对等体时,将把该路由信息的下一跳属性设置为本地与对端连接的接口地址。
对于可以多路访问的网络(以太网或者帧中继),如果通告路由器和源路由器接口处于同一网段,则BGP会向邻居通告路由的实际来源。
Local_Pref属性(公认自选属性)
Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS(除非是联盟对等体)。
Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。
MED(Multi-Exit Discriminator)属性(可选非传递属性)
用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS,如果路由器将从EBGP邻居那里收到的MED传递给它的IBGP邻居,那么MED值会恢复为0。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。只有来自同一个AS的MED才能进行比较,不同的AS不能进行MED的比较。(Bgp always-compare-med 开启这个条命令可以进行不同AS间MED的比较)
注意:
通常情况下,BGP只会比较来自同一个AS的路由MED属性值,不比较来自不同AS的MED值。若一定要比较,则需要进行特别的配置。
Atomic-Aggregate(公认自选属性)
Atomic-Aggregate:原子聚合体,是公认自选属性(well-known discretionary) ,当BGP发言者将精确路由汇总到一个较不精确的聚合路由时,都将丢失路径信息。而且BGP发言者还必须将Atomic-Aggregate属性附加在聚合路由上。任何接收到带有Atomic-Aggregate属性的下游BGP路由器都无法获悉该路由的更精确的NLRI信息,而且在将该路由宣告给其他对等体时,必须附加上Atomic-Aggregate属性。
Aggregator(可选传递属性)
聚合体:当设置了Atomic-Aggregate属性时, BGP路由器还可以附加Aggregator。
属性,Aggregator属性是可选传递的,包含了AS号以及发起路由聚合的路由器的IP地址(Router-id)。Atomic-Aggregate 属性表示已经丢失了路径,而Aggregator属性指示在何处出现路由聚合。
As-set
AS-Path属性有两种,一个是有序的AS-Sequence (有序的AS号列表)另一个是AS-SET (去往特定目的地无序的AS号列表)。AS-Path 属性主要用于防止环路,但是当执行了路由聚合,将会丢失某些AS-Path属性的细节信息,因而增加路由环路的潜在危险。比如下图所示: AS810有一条路径去往其他AS,那么来自AS 3113的聚合路由将被宣告给AS6571,而该聚合路由又将通过AS 6571被宣告给AS810,由于聚合而导致AS-Path丢失,因为AS 810无法检测到潜在的路由环路,如果AS 810 内的某个子网出现故障,那么将匹配聚合路由将数据包转发至AS6571,此时出现了路由环路。
Community团体属性值(可选传递属性)
standard(做路由标识) extended(MPLS VPN)
Community团体属性是对一组路由实施路由策略,使路由策略的应用更加灵活,同时降低了维护管理的难度。路由器将Community属性设置为某个标识自己为某团体成员的值之后,就可以将路由加入团体中。可以为一条路由设置多个Community属性。路由器在接收到一条拥有多个community属性的路由后,既可以基于全部属性来设置路由策略,也可以基于部分属性来设置路由策略。当包含Community属性的路由被聚合之后,聚合路由将继承所有被聚合路由的Community属性。
Community之后,就可以将特定的路由设置私有Community, 并将其传递给所有邻居,最终所有路由器都对拥有该私有Community的路由配置策略,并且对大量路由设置私有Community只需要在一台路由器 上完成后,发给所有邻居即可。
公认团体属性如下所示:
Internet 团体无任何属性值,所有路由默认情况下都属于该团体,如果接收到的路由属于该团体,则可以自由宣告该路由。
No-Export (4294967041 或0xFFFFFF01)如果接收到的路由携带该数值,则不能将该路由宣告给EBGP对等体;如果配置了BGP联盟则不能将该路由宣告到联盟之外。
No-Advertise (4294967042 或0xFFFFFF02)如果收到的路由携带该数值,则根本不能宣告该路由,不管是EBGP还是IBGP对等体。
Local-AS (4294967043 或0xFFFF03)如果接收到的路由携带该数值,那么不能将该路由宣告为EBGP对等体,包括同一联盟内其他自治系统中的对等体。
Cluster_List(可选非传递)
集群列表:路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。
当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。
当RR接收到一条更新路由时,RR会检查Cluster List。如果Cluster List中已经有本地Cluster ID,丢弃该路由;如果没有本地Cluster ID,将其加入Cluster List,然后反射该更新路由。
Originator_ID属性(可选非传递)
发起者ID:Originator ID由RR产生,使用的Router ID的值标识路由的始发者,用于防止集群内产生路由环路。
当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。
当设备接收到这条路由的时候,将比较收到的Originator ID和本地的Router ID,如果两个ID相同,则不接收此路由。
十二、BGP选路规则(重!)
选路前提:
同步被关闭 下一跳可达 均最优“>”
优选协议首选值(Preference Value)最高的路由(私有属性,仅本地有效,默认0,华为特有)
(思科为weight,默认32768,越大越好)
优选本地优先级(Local_Pref)最高的路由(默认100)
路由生成方式:Aggregate(手动汇总)>summary automatic(自动汇总)>Network>import>从对等体学到的
AS路径(AS_Path)最短的路由
比较Origin code(起源属性),IGP>EGP>incomplete。
优选MED值最小的路由(默认0,越小越优)
优选从EBGP邻居学来的路由(EBGP>IBGP)
BGP优选达到下一跳IGP Cost较小的路由(最近的IBGP邻居)
对于EBGP邻居关系来说选举较老的(建立较早的路由条目为最佳路由。比较稳定)
选举BGP路由器ID最小的
选取邻居IP地址最小的
注意:
BGP的max path(默认1)改掉的话,比到第8条停止,如果前八条都一样,实行负载均衡。
如果特定NLRI的最佳路由是从选举过程中第一步到第八步之间选举出来的,那么BGP仅将这条路由放入路由表,因为这条路由就是最佳的路由。
如果特定NLRI的最佳路由是第八步之后确定的,那么BGP就会考虑许多将多条BGP路由放入IP路由表中。
即使BGP将多条路由放入路由表中,BGP也仍只会为每个NLRI选择一条路径作为最佳路由,而且该最佳路由就是BGP向邻居通告的那一条最佳路由。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !