人人都想了解的BGP,路由策略这样处理

网络 路由交换
路由协议,套用IT里面的术语,实际上就是分布式数据库系统,它包含了节点间的数据传递和节点内的数据处理。对于BGP来说,节点间基于TCP(端口179)的连接,在这个基础上,可以构建AS间的EBGP,AS内的IBGP,IBGP有full mesh,BGP路由反射器等,这些都是BGP节点之间的连接方式,这次看看BGP router内部是如何处理数据。

作者简介:肖宏辉,毕业于中科院研究生院,8年的工作经验,其中6年云计算开发经验,OpenStack社区积极活跃,有超过300个commit和超过30000行代码的贡献。目前关注SDN/NFV等虚拟网络技术。本文所有观点仅代表作者个人观点,与作者现在或者之前所在的公司无关。

路由协议,套用IT里面的术语,实际上就是分布式数据库系统,它包含了节点间的数据传递和节点内的数据处理。对于BGP来说,节点间基于TCP(端口179)的连接,在这个基础上,可以构建AS间的EBGP,AS内的IBGP,IBGP有full mesh,BGP路由反射器等,这些都是BGP节点之间的连接方式,这次看看BGP router内部是如何处理数据。 

[[212997]]

BGP是一种path vector路由协议,对比其他类的路由协议,path vector随路由携带的辅助信息更多,处理也稍微复杂一些。BGP内部处理流程简单的画了一下,如下所示,各家的实际实现可能略有不同,但应该大同小异。 

在看这个处理流程前,先看看一些相关概念。

Path Attribute(PA)

Path对应的就是route,那顾名思义,这是BGP Route的一些参数属性。Path Attribute是BGP的基础组成元素,它贯穿了整个BGP 路由处理的过程。

首先,BGP节点间传递的BGP message就是由NLRI(Network Layer Reachability Information)和PA组成。这个可以从BGP Update Message看出来。如果只考虑IP路由,那么NLRI就是IP prefix。 

其次,BGP policy engine的处理是围绕着Path Attribute展开的。第三,BGP best path selection,是根据PA做的算法。

Path attribute分为4类:

  • Well-known Mandatory: 所有的BGP router必须识别这个属性,并且所有的BGP Message必须包含这个属性
  • Well-known Discretionary: 所有的BGP router必须识别这个属性,BGP Message可以不包含这个属性
  • Optional Transitive: BGP router可以不识别这个属性,如果不识别直接无视这个属性
  • Optional Non-transitive: BGP router可以不识别这个属性,如果不识别要将这条BGP Message丢弃

常见的BGP Path Attribute如下表所示: 

这里NEXT_HOP也属于Path Attribute,BGP处理过程中可以修改NEXT_HOP。EBGP router默认会修改NEXT_HOP为自己,IBGP router默认不会修改NEXT_HOP,这在上一篇讲过。

Routing Information Base(RIB)

RIB其实是设备商的术语。或许不太恰当,但是Global RIB可以对应操作系统里面的路由表。Global RIB和路由表都决定IP packet的三层转发的路径。RIB除了存放路由条目,还保存一些路由协议相关的辅助信息。除了Global RIB,每个路由协议都有自己的RIB,这样,路由协议可以将一些生(Raw)数据与真正应用的数据进行隔离。BGP维护几个RIB,包括了:

  • BGP Adjacent In RIB:保存所有接收到的BGP Message,这里可能存在多条BGP Message指向同一个目的IP prefix
  • BGP Local RIB:保存经过处理和运算得到的***BGP Message,对于同一个目的IP prefix,只存在一条***的BGP Message
  • BGP Adjacent out RIB:保存将要发送给BGP Peer的BGP Message

BGP协议收发的数据不会直接写到Global RIB里,而是放到了BGP自己的RIB里面,在适当的时候写入Global RIB,前面说过,这样可以实现数据隔离,有选择的将BGP数据写入主路由表。BGP的三个RIB保存着不同处理阶段的BGP Message,为不同阶段的操作提供数据。接下来过一下BGP路由处理过程。

Route Processing

1. BGP Adjacent in RIB 

这一步比较简单,来者不拒,所有收到的BGP Message都存到了BGP Adjacent in RIB

2.Input Policy 

nput policy会完成两部分工作,filtering和manipulation。

Filtering会根据Path Attribute过滤BGP Message,这里需要注意两个内置的过滤,一个是判断当前的AS是否在BGP Message的AS_PATH中,如果在的话,那么这是一条之前已经经过当前AS的Message,这条Message会被过滤。另一个会判断BGP Message里的NEXT_HOP是否可达,如果不可达,那么这条Message会被标成Invalid,也会被过滤。除了内置的过滤,用户(对,就是网工)和控制程序也可以添加过滤规则,例如通过route-map,access-list,distribution-list等。

Manipulation会修改BGP Message的Path Attribute,这样可以控制后面的步骤,例如Best path selection。举个例子,BGP Router从两个邻居收到同一个IP Prefix的BGP Message,那么可以通过修改某一个邻居的BGP Message的PA,使得其中一条BGP Message在下一步中胜出。

3.Best path Selection 

Local Route是本地的并且希望通过从BGP发布出去的路由。例如思科的设备,通过network命令可以发布本地路由,也可以通过redistribution,将IGP的路由重分布到BGP。这些Local Route都将转换成了BGP Message,和经过Input policy过滤和修改过的BGP Message,一起参与Best Path Selection。

Best Path Selection是一个根据Path Attribute运算,从指向同一个目的IP prefix的,多条BGP Message中选出一条***的过程。这个过程不复杂,但是比较繁琐,相应的介绍也很多了,限于篇幅我就不展开了,感兴趣可以看看思科的文档BGP Best Path Selection Algorithm。

4.BGP Local RIB 

Best Path Selection能确保指向同一个IP prefix只有一条(其实也可以多条,取决于multipath)***的BGP Message,这些BGP Message会存到BGP Local RIB。接下来的处理会分两条路径。

***个是写入到Global RIB,也就是全局路由表。当路由器中,没有其他的路由协议生成了指向相同目的IP prefix的路由,或者有的话,该路由协议的Administrative Distance(AD)大于BGP的AD值,那么这个时候BGP Local RIB的路由才会写入到Global RIB。EBGP的AD值是20,小于大部分路由协议,IBGP的AD值是200,大于大部分路由协议。

第二个是输出到Output Policy,进而发往其他的BGP Peer。

这两个路径互不影响,就算BGP没有竞争过其他路由协议,没有将路由写到全局路由表,也不影响路由传递给其他的BGP Peer。

5.Output Policy 

与Input Policy类似,这里也做filtering和manipulation。

Filtering会根据Path Attribute过滤BGP Message,可以自己定义,也有BGP程序自带的过滤。还是以AS_PATH为例,如果目的BGP Peer的AS在BGP Message的AS_PATH中,那么这条BGP Message不会生成对应的发往该BGP Peer的BGP Message。

Manipulation会修改BGP Message的Path Attribute,例如修改MED值,进而生成发往BGP Peer的BGP Message。

经过Output Policy之后,一条BGP Message,会生成针对每一个可以送达的BGP Peer的,多条BGP Message。虽然来自同一个BGP Message,但是这里的每个BGP Message里面包含的Path Attribute可能因为定义策略不一样。

6.BGP Adjacent out RIB

人人都想了解的BGP,路由策略这样处理

类似于***步,这部分也简单,生成好的BGP Message发往对端的BGP Peer。

***

以上就是BGP路由处理过程,可以看出都是围绕Path Attribute。如果说BGP基于TCP传输,给BGP router间的传输带来可靠性,那么Path Attribute给BGP的应用带来了灵活性。

责任编辑:未丽燕 来源: SDNLAB
相关推荐

2015-05-15 10:09:09

程序员

2019-05-16 08:31:43

物联网物联网开发IOT

2017-03-16 13:03:28

智能技术人工智能机器视觉

2015-08-17 10:50:34

2020-04-02 13:17:24

开发团队技术

2015-02-10 09:32:20

BGP路由器

2010-07-05 16:28:18

BGP路由协议

2010-07-12 16:07:14

BGP路由协议

2019-12-04 07:57:22

6G5G网络

2010-06-18 15:03:12

BGP路由协议

2010-06-10 16:16:42

BGP路由协议

2010-06-25 15:07:10

BGP路由协议

2009-12-22 14:22:14

BGP路由

2011-08-23 09:54:26

路由BGP

2013-10-24 09:43:39

路由器

2021-02-23 09:28:48

大数据数据分析

2018-10-09 15:20:57

CIOHRHRM

2010-08-05 13:11:52

2010-06-18 14:18:44

BGP路由协议

2021-06-01 20:38:04

Vuex对象import
点赞
收藏

51CTO技术栈公众号