bgp通告四原则_BGP 路由反射器

news/2024/7/2 1:24:32

c0e18052ac9c33f63cc398e3840a571e.png

5c2dd9172482463d1349d0daba70a436.png

  • 路由反射器概述

  • 路由反射器的反射规则

  • 路由反射器环境下的防环

    • Originator_ID属性

    • Cluster_List属性

  • Cluster_List属性对路由优选的影响

  • 路由反射器的配置

路由反射器概述

BGP在AS之间的路由防环依赖AS_PATH属性,但是AS_PATH属性只当路由在EBGP邻居之间传递时才会发生改变,在AS内部,AS_PATH是不会改变的,那么在AS内部的路由防环,就无法依赖AS_PATH了,因此BGP定义IBGP水平分割:一台BGP路由器从它的IBGP邻居学习到的BGP路由不能再传递给任何IBGP邻居。

由于存在IBGP水平分割,使得AS内的BGP路由器之间不得不两两建立IBGP连接(IBGP全互联),以求获得完整的BGP路由更新,然而这是个扩展性非常低的做法,同时也给网络设备带来了负担,解决IBGP扩展性问题的两种有效的办法是路由反射器及联邦。

路由反射器相比于联邦,优势在于,在联邦中所有路由器都需要支持联邦功能,而路由反射器只需要RR支持反射器功能即可,另外,路由反射器的实现机制也相对简单一些。

249e5c8d2963052593cdd4f6ba76d3ca.png

在上图中,由于IBGP水平分割的限制,使得R4在收到IBGP邻居R3发来的路由更新后,不能再发送给IBGP邻居R5。如此一来R5就无法正常学习到路由,除非在R3-R5之间也建立一条IBGP连接,这样就形成了IBGP全互联。

92442769f8704487322de0d05e631100.png

采用路由反射技术即可解决这个问题,首先我们定义一个RR(Route Reflector,路由反射器),同时定义这个RR的Client(客户),如此一来,当RR收到她的Client发送过来的路由时,就可以像一面镜子一样,将路由反射给其他IBGP路由器。如上图所示。在上图中,R4可以配置为RR,与它的Client R1构成了一个路由反射簇。思考路由反射器时,将簇当作一个逻辑的整体去考虑即可,RR和Client共同构成反射簇,但是只有RR知道(配置只是在RR上完成)这种路反射器与客户的关系。注意RR只通告或反射它所知道的最佳路径。

为了维护一致的BGP拓扑,RR在反射路由的时候不修改某些BGP路径属性,这些属性包括NEXT_HOPAS_PATHLOCAL_PREFMED,并且增加了ORIGINATOR_IDCLUSTER_LIST属性用于防环。

路由反射器的反射规则

我们先看一下路由反射的规则:

  • 如果路由学习自非Client IBGP邻居,则反射给所有Client;
  • 如果路由学习自Client,则反射给所有非Client IBGP邻居和除了该Client以外的所有Client(华为设备可以关闭RR在Client之间的路由反射行为);
  • 如果路由学习自EBGP邻居,则发送给所有Client和非Client IBGP邻居。

注意红色关键字,需区分反射和发送的区别。

下面看几个例子:

0526bc90c873a40280190ee83d187bac.png
c78b82846e2eeea08fe81c122252586f.png

注意此处“反射”和“发送”的区别。“发送”指的是传统情况下(相当于RR不存在的场景下)的BGP路由传递行为,而“反射”指的是遵循路由反射规则的情况下,RR执行的路由反射动作,被反射出去的路由会被RR插入特殊的路径属性。

路由反射器环境下的防环

由于AS_PATH属性在AS内部不会发生变化(仅当路由离开本AS才会被修改),因此AS内才有水平分割的机制用于防止环路,而路由反射器实际上是放宽了水平分割原则,这就会引入路由环路隐患,因此路由反射器需使用以下两个属性防止环路:ORIGINATOR_IDCLUSTER_LIST是路由反射器使用的可选非传递属性,用来防止环路。

dd5af7d9327b71c1aeb4ec5c67b8263f.png

在上图中,R1为R2的Client,R2为RR。R1传递一条路由给R2,根据路由反射器的反射规则,R2作为RR将来自Client的路由反射给非Client R3,并且为反射的路由加上两个新的路径属性:Originator_ID及Cluster_list。下面我们分别讲解一下这两个属性。

Originator_ID属性

2fec3f3928702439432c2507881af09e.png

每当一条路由被RR反射时,RR会为反射后的路由创建一个Originator_ID属性,值为该路由的始发IBGP路由器的BGP Router-ID。当一台路由器收到邻居发来的IBGP路由且路由的Originator_ID属性值与自己的Router_ID相同时,它意识到发生了路由环路,因此忽略该条路由。

在上图中,R1发布了一条BGP路由,这条BGP路由在被R2反射后,被添加了两个属性,其中Originator_ID属性值为R1的Router-ID,现在假设AS123是一个高冗余度的拓扑环境(例如,可能部署了多个路由反射蔟),而这条路由又被传回了R1。R1查看该路由,发现路由携带了Originator_ID属性并且值与自己的Router-ID相等,于是知道存在了路由环路因此忽略该路由更新。

Originator_ID及Cluster_List属性将会影响BGP路径决策。

Cluster_List属性

路由反射簇(Cluster)包括反射器RR及其Client。每一个簇都有唯一的簇ID(Cluster_ID)。每当一条路由被RR反射后,该路由反射簇的Cluster_ID就会被添加至路由的Cluster_List属性中。当RR接收到一条路由时,RR会检查Cluster_List,如果Cluster_List中已经有本地Cluster_ID,则忽略该路由;如果没有本地Cluster_ID,则将其加入Cluster_List,然后反射该路由。

283a4f4cda2c029c38b420eac2b813f2.png

上图中,R1发布了一条BGP路由,该路由被R2反射后,被添加两个属性:Originator_ID及Cluster_List,其中Cluster_List属性值中插入了Cluster_ID 2.2.2.2,这个Cluster_ID默认时是RR的Router-ID,所以这里值为2.2.2.2。假设AS123内有一个高度冗余的网络环境(可能部署了多个路由反射蔟),这条路由又被传回了R2,R2收到路由后发现路由携带了Cluster_List属性,并且属性值中包含自己的Cluster_ID,它将忽略该更新。

Cluster_List属性对路由优选的影响

acd807640859820edd62c9221e3c9ac8.png

环境描述:R2为RR,设置R1为其Client;R3为RR,设置R1为其Client;R4为RR,设置R3为其Client;也就是说,在该网络中,存在多个路由反射蔟。所有的路由器的Loopback0口地址为x.x.x.x(路由器的Router-ID与该地址相同),x为设备编号,IBGP邻居关系基于该Loopback口建立。

现在R1将路由11.11.11.0/24引入BGP,路由会通过两条路径最终传递给R5,我们看看R5对这两条路径是如何优选的?

R5 display bgp routing-table 11.11.11.0
BGP local router ID : 5.5.5.5
Local AS number : 12345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 11.11.11.0/24:
From: 2.2.2.2 (2.2.2.2)  #路径1
Route Duration: 00h05m13s
Relay IP Nexthop: 10.1.25.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 1.1.1.1
Qos information : 0x0
AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255, IGP cost 2
Originator: 1.1.1.1
Cluster list: 2.2.2.2
Not advertised to any peer yet
From: 4.4.4.4 (4.4.4.4)  #路径2
Route Duration: 00h01m36s
Relay IP Nexthop: 10.1.25.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 1.1.1.1
Qos information : 0x0
AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost 2, not preferred for Cluster List
Originator: 1.1.1.1
Cluster list: 4.4.4.4, 3.3.3.3
Not advertised to any peer yet

我们看到最终R5优选的是由R2传递过来的路由,从上面的输出我们可以看出,为什么从R4传递过来的这条路由没有被优选,因为:“not preferred for Cluster List”,实际上是输在了Cluster_List的长度上。R1发送的路由传递给了R2,被R2反射后,路由会被插入两个路径属性:Originator_ID及Cluster_List,其中Cluster_List属性值为2.2.2.2,然后这条路由被反射给了R5;另一边,R1发送的路由传递给了R3,被R3反射后插入了两个路径属性:Originator_ID及Cluster_List,其中Cluster_List属性值为3.3.3.3,接着,R4收到了这条路由,由于R3是它的Client,因此R4继续反射该路由,在反射时它发现路由中已经有了Cluster_List属性,因此它将本地Cluster_ID插入已有的Cluster_List属性中,那么这样一来这条路由的Cluster_List就变成了“4.4.4.4 3.3.3.3”,最后,路由被更新给了R5。

现在R5收到了关于1.1.1.0/24路由的两条更新,它会看看谁更优。BGP有一套复杂的规则来判定这种情况,我们称为BGP的选路规则。选路规则包含多条,在其他条件相同的情况下,Cluster_List所包含的Cluster_ID越少,或者说Cluster_List越短,则路由越优。

486037b455dd682a72062b93e55e4cae.png

上面就是在一个Update报文中,这两个属性的呈现。

路由反射器的配置

ba7bd4ecd3e6c45d24d25f6d90658661.png
  • 所有路由器的Loopback0口地址为x.x.x.x/32,x为设备编号。
  • AS123内跑一个OSPF,宣告直连接口,以及各自的Loopback0接口。
  • R1、R2、R3根据上图所示建立IBGP邻居关系,邻居关系基于Loopback0接口建立。
  • 在R1上发布11.11.11.0/24路由进BGP,初始情况下R2能够学习这条BGP路由,但是R3无法学习到。将R2配置为RR,R1作为R2的Client,使得R3能够学习到11.11.11.0/24路由。

R1的配置(省略OSPF及接口的配置):

[R1] bgp 123
[R1-bgp] router-id 1.1.1.1
[R1-bgp] peer 2.2.2.2 as-number 123
[R1-bgp] peer 2.2.2.2 connect-interface loopback0
[R1-bgp] network 11.11.11.0 24

R2的配置(省略OSPF及接口的配置):

[R2] bgp 123
[R2-bgp] router-id 2.2.2.2
[R2-bgp] peer 1.1.1.1 as-number 123
[R2-bgp] peer 1.1.1.1 connect-interface loopback0
[R2-bgp] peer 1.1.1.1 reflect-client  #指定1.1.1.1为自己的Client,因此R2为RR
[R2-bgp] peer 3.3.3.3 as-number 123
[R2-bgp] peer 3.3.3.3 connect-interface loopback0

R3的配置(省略OSPF及接口的配置):

[R3] bgp 123
[R3-bgp] router-id 3.3.3.3
[R3-bgp] peer 2.2.2.2 as-number 123
[R3-bgp] peer 2.2.2.2 connect-interface loopback0

完成配置后,即可在R3上验证一下,查看路由11.11.11.0的详细信息:

300859e210123622284398a9e68a6388.png

另一个需要关注的配置是配置路由反射簇的Cluster_ID,这也是在RR上完成的配置。当RR反射一条路由时,如果该路由不存在Originator_IDCluster_list属性,则插入这两个属性,同时Cluster_list属性值中写入本路由反射簇的Cluster_ID,默认情况下,Cluster_ID为RR的Router-ID,如果需要修改,可使用下面的命令;如果RR在反射路由时,被反射路由中已经存在Cluster_List属性了,那么RR将Cluster_ID插入到已有的CLuster_List中。

7241778b7cdadabceb44f33918aad3de.png
45b43d8aaabfbc87d5e71daae3e6be9c.png

BGP 路由策略

d2a3fae7d48742b3210dd2ec837d5d7e.png

BGP 路径属性

75f955244a2be4533d6ba91a897ab9cf.png

BGP 入门实验

477c4d33bea7afdeda1b40398bd9e354.png

BGP基础概念

0a1048550b4edf50ee714a03a7c94040.png


http://www.niftyadmin.cn/n/4334237.html

相关文章

不会和容器一起启动_美团面试官:为什么不建议把数据库部署在Docker容器内?...

Hi,各位读者们,我是你们的鸭哥!由于最近公众号的改版,为了保证你们第一时间能看到鸭哥的文章,大家记得将公众号 加星标置顶 哦!来源:http://l.wz2.in/0AC近2年Docker非常的火热,各位…

不用缓存安装_Spring Boot 五种热部署方式,再也不用老重启了!

1、模板热部署在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引擎的缓存,如下:Thymeleaf的配…

Netweaver和CloudFoundry的服务器日志

Netweaver 事务码SMICM,Goto->HTTP Plug-In->Server Logs: CloudFoundry 假设我部署本地应用到CloudFoundry之后,应用的状态变为CRASHED。然而从应用的控制台看不出太多有用的信息。 此时可以使用命令cf logs --recent来查看服务器端日志&#xff…

win10猎豹wifi间歇性掉线_无线WiFi间歇性掉线怎么办 无线WiFi间歇性掉线解决方法【详细介绍】...

正在看直播无线WiFi忽然掉线,游戏玩到决胜时刻网络问题聊个微信都间歇性的“网络连接不可用”,今天,小编将为大家讲解无线WiFi间歇性掉线如何搞定。一、避免信号干扰普通的家用路由器是在2.4G频段下工作的,而微波炉、电视机、冰箱…

PyCharm入门教程——添加、删除和移动代码元素

2019独角兽企业重金招聘Python工程师标准>>> PyCharm最新版本下载 JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业…

延时消息_一文玩转消息中间件rabbitmq延时消息(附带源码)

我是码农小胖哥,之前探讨了springboot 集成 rabbitmq 以及开启ack模式 传送门:10分钟就能轻松入门消息中间件rabbitmq(附带教学源码)接着该搞一下死信队列了业务场景有时候 我们可能有些场景,不能让消费方那么快拿到消息。比如 10分钟后再告知…

我的建站经历(一)

转载自我的博客:https://blog.ljyngup.com 我的建站经历(一) 我建站时的状况为: 1.学生党 2.未满十八岁 3.预算不高(大约200左右) 4.不想花太多精力在建站上,想快速建站开始写博客。 5.不以盈利为目的(以后发展好了另说) 6.想拥有一个属于自己的…

调用登录_SpringSecurity在前后端分离项目中自定义登录及源码分析

课纲自定义登录流程源码分析常见问题总结登录功能背景项目登录功能在没有使用SpringSecurity之前,流程如下:用户输入用户名和密码并提交到Controller在Controller层调用service层校验是否正确如果正确,将用户信息写入session返回用户的json数…