BGP路由原理
- 一、BGP路由属性介绍
- 二、BGP对路由的处理流程
- 三、BGP的路由选择策略
- 四、BGP负载分担时的选路策略
- 五、BGP的路由发布策略
一、BGP路由属性介绍
BGP路由属性是路由信息所携带的一套参数,它呢对特定的路由进行了进一步的描述,表达了每一条路由的各种特性。路由属性是BGP协议区分于其他协议的重要特征,BGP通过比较路由携带的属性来完成路由的选择、过滤和路由环路的避免。
BGP路由属性的特点:完成路由的选择、过滤和避免环路。
——————————————————————————————————————————————————
BGP每个属性都有特定的含义,具有不同的用途和灵活的应用,这些属性使得BGP功能十分强大。
所有的BGP路由属性都可以分为4大类。
公认必须遵循的(Well-known mandatory): 所有BGP路由器都可以识别且必须存在于Update消息中。如缺少这种属性,则路由信息就会出错。
公认任意(Well-known discretionary): 所有的BGP路由器都可以识别但不要求必须存在于Update消息中,可根据情况选择。
可选过渡(Optional transitive): 在AS之间具有可传递性的属性。BGP路由器可以不支持此属性,但它仍然会接收带有此属性的路由,并通告给其他对等体。
可选非过渡(Optional non-transitive): 如果BGP路由器不支持此属性,则相应的Update消息会被忽略,且不通告给其他对等体。
目前已定义的BGP属性已有16种,并且支持扩展到256种。。。。这次学完了若干年后,还不会玩BGP了吗。
列举常见的BGP路由属性及类别:(后面有详细的介绍)
Origin(起点属性),属于Well-known mandatory(公认必须遵循的)
AS_Path(AS路径属性),属于Well-known mandatory(公认必须遵循的)
Next_Hop(下一跳属性),属于Well-known mandatory(公认必须遵循的)
初始+经过AS的路径+下一跳,不用想,必须是公认遵循的。。。。
————————————————————————————————————————————————
Local_Pref(通告优先属性):属于Well-known discretionary(公认任意)
Atomic_Aggregate(通告聚合属性):属于Well-known discretionary(公认任意)
一个是用来通告路由的优先程度,一个是用来通告该路由是经过聚合的。
都可以识别,可根据情况选择。归属公认任意。
————————————————————————————————————————————————
Aggregator(可选传递属性):属于Optional transitive(可选过渡)
Community(路由标记属性):属于Optional transitive(可选过渡)
Multi_Exit_Disc(MED多出口标识符属性):属于Optional transitive(可选过渡)
Aggregator指明了路由信息何处出现丢失。Community用于简化路由策略的执行。MED用来判断进入该自治系统的最佳路由。可选过渡:在AS之间具有可传递性的属性,路由器可以不支持此属性,但仍然接收并转发。琢磨这三个都是在AS之间传递的属性。便于好记
————————————————————————————————————————————————
Originator_ID(防环属性):Optional non-transitivev(可选非过渡)
Cluster_List(防环属性):Optional non-transitivev(可选非过渡)
——————————————————————————————————————————————————
二、BGP对路由的处理流程
对于一个BGP路由器来说,其路由的来源主要有两种:从对等体接收和从IGP引入。
BGP发言者从对等体接收到的BGP路由后,其基本过程为:
接收路由过滤与属性设置>路由聚合>路由优选>路由安装>发布策略>发布路由过滤与属性设置。
1、接收路由过滤和属性设置是BGP发言者从对等体接收到路由后的第一步工作。BGP接收到路由后,根据所配置的接收策略对接收到的BGP路由进行匹配与过滤,并对其设置相关的属性。
发言者接收路由后,根据配置的策略对接收的路由进行过滤,并设置相关属性。
2、完成了接收策略的匹配后,如果需要的话,BGP发言者将对路由进行聚合,合并其中的具体路由,以此减少路由表规模。
发言者如有需要,对路由进行聚合。
3、完成具体合并后,BGP将对接收到的路由进行优选,对到达同一目的地址的多条BGP路由,BGP发言者只选择最佳路由给自己使用,并将此最佳的路由安装到IP路由表中,称为有效路由。
发言者完成聚合后,对收到的路由进行选优,安装到路由表。
4、在向BGP对等体发布路由的时候,BGP发言者需要依据一定的发布策略,对已经安装到自己IP路由表的部分有效路由进行发布。
发言者根据发布的策略,发布路由表的有效路由。
5、同时,BGP路由器需要执行发布路由过滤与属性设置,然后将通过过滤的BGP路由发送给自己的BGP对等体。
发言者发布有效路由的同时需要执行过滤和属性设置。
对于IGP路由,则需要先经过引入策略的过滤和属性设置,将IGP路由表中的有效路由引入到BGP路由表中,然后才能进行发布策略过滤与属性设置,并将过滤后的路由发送给自己的BGP对等体。
——————————————————————————————————————————————————
三、BGP的路由选择策略
当达到同一目地存在多条路由时,BGP将采取如下策略进行路由选择:
1、BGP优选Preference值较低的本地始发路由。这个优先级是IP路由表中各个协议路由的优先级值。值越小优先级越高。本地始发路由是指BGP通过import命令、Network命令引入的路由或通过Aggregate命令、summary automatic命令聚合生成的路由,是相对于BGP邻居接收的路由而言的。
还是那句话,还是和以前路由协议的优先值顺序类似。BGP不产生路由,所以都是引入路由。
2、如果不同协议的路由的Preference值相同,系统会按照这样的顺序优选一种协议路由,OSPF>IS-IS Level-1>IS-IS Level2>EBGP(包含BGP Aggregate)>Static>RIP>OSPF_ASE>IBGP。由于直连路由的优先级为0,所以在BGP本地始发路由中如果存在直连路由,那么GBP会优先选择直连路由。
3、首先丢弃下一跳(Next_Hop)不可达的路由。
4、无条件优选带Label的IPV4路由。
5、优选协议首选值最高的路由。
6、优选本地优先级最高的路由。
7、优选聚合路由。聚合路由高于非聚合路由。
8、优选AS路径最短的路由。
9、比较Origin属性,依次选择Origin类型为IGP、EGP及Incomplete的路由。
10、优选MED值最低路由。
11、优选EBGP学来的路由(EBGP路由优先级高于IBGP路由)。
12、优选AS内部IGP的Metric最低的路由。如果配置负载分担,并且有多条AS路径完全相同的外部路由,则根据配置的路由条数来选择多条路由进行负载分担。
13、优选Cluster_List最短的路由。
14、优选Originator_ID最小的路由。
15、优选Router ID最小的路由器发布的路由。
16、比较对等体的IP Address,优选从具有较小IP的对等体学来的路由。
——————————————————————————————————————————————————
四、BGP负载分担时的选路策略
在BGP中,由于协议的特殊,它产生的路由下一跳地址可能不是当前路由器直接连接的邻居,常见的一个原因是,IBGP之间发布路由信息时不改变下一跳。在这种情况下,为了能让报文正确的转发出去,路由器必须先找到一个直接可达的地址,然后通过这个地址到达路由表中指示的下一跳。在这个过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发,根据下一跳地址找到依赖路由的过程就是路由迭代。
这里举个路由迭代的例子便于理解上面的话术。
如图:AS100内运行的IGP协议为OSPF,AR1分别与AR2和AR3之间通过loopback0建立IGBP连接。AR2和AR3都从网络中接收到去往10.20.1.0/24的BGP路由。因为AR2的Router-ID较小,所以AR1将优先从AR2学到的去往10.20.1.0/24的路由,原始下一跳为2.2.2.2/32。
正常情况下,AR1会把去往10.20.1.0/24的BGP路由下一跳迭代到去往2.2.2.2/32的IGP路由上,迭代的出接口为G0/0/0,但是当AR2发生故障时,AR1会很快撤销去往2.2.2.2/32的IGP路由,而由于AR1要等到BGP保持时间定时器超时后才能感知到BGP路由的变化,所以在此之前,AR1仍然优选原始下一跳2.2.2.2/32的BGP路由。根据最长匹配原则,AR1会把去往10.20.10.0/24的BGP路由下一跳错误的迭代到去往2.2.2.0/24的直连路由上,迭代出接口为2.2.2.0/24的接口上,从而导致流量丢失。
为了避免上述情况,可以在AR1配置BGP按路由策略迭代下一跳,利用指定的路由策略对迭代结果路由进行限制。在上图,可通过路由策略将迭代结果路由限制为32位掩码的具体路由,不能通过该路由策略过滤的迭代结果将被标识为不可达,这样就能使AR1在AR2发生故障时,快速感知BGP路由的变化,进而重新选择正确的路由即原始下一跳为3.3.3.3/32的BGP路由,防止流量丢失。
BGP的负载分担与IGP的负载分担在实现方法上有所不同:
1、在IGP中,对到达同一目的地址的不同路由,IGP根据本身的路由算法计算路由的度量值(Metric),并在度量值相等的路由之间进行负载分担。
2、BGP由于本身并没有路由算法,不能根据一个明确的度量值决定是否对路由进行负载分担。但BGP有很多路由属性,这些属性在BGP选路策略中的优先顺序是不同的。对BGP负载分担的处理规则是加入到这些选路策略中的,即在所有高优先级路由属性相同的情况下,BGP根据所配置的最大负载分担的路由跳数进行负载分担。
3、BGP只对AS_Path属性完全相同的路由进行负载分担,BGP负载分担特性同样适用于联盟内部的自治系统之间。
——————————————————————————————————————————————————
五、BGP的路由发布策略
总结归纳下,在目前的实现种,BGP发布路由时采用如下策略,这些也是BGP设计者在设计BGP协议时的硬性规定。
1、存在多条有效路由时,BGP发言者只将最优路由发布给对等体。
2、BGP发言者只把自己使用的路由发布给对等体。
3、BGP发言者从EBGP获得路由会向它所有的BGP对等体发布(包括EBGP对等体和IBGP对等体)
4、BGP发言者从IBGP获得的路由不向它的IBGP对等体发布。
5、BGP发言者从IBGP获得的路由发布给它的EBGP对等体(在关闭BGP与IGP同步的情况下,IBGP路由被直接发布。在开启同步的情况下,该IBGP路由只有在IGP也发布了这条路由时才会被同步并发送给EBGP对等体。)
6、连接一旦建立,BGP发言者将会把自己所有的BGP路由发布给新对等体。