【博客538】BGP优雅重启机制

news2025/1/16 5:31:40

bgp优雅重启机制

背景

以BGP为代表的路由协议,从设计之初,就关注路由表的正确性,因为这是确保整个网络系统正常工作的最基本要求。因此每个BGP路由器,总是会以最快的速度收敛到整个网络最新的状态上。当一个BGP peer的BGP连接断开时,当前BGP路由器会认为BGP peer已经不能工作,进而会以最快的速度删除之前从这个BGP peer收到的路由。

但这样敏感的机制其实有一些问题:

首先,BGP连接断开了不一定代表路由器不能工作了。可能只是BGP所基于的TCP连接有问题,也可能是BGP keepalive消息丢了,但是路由器还是具备正常转发的能力。如果仅以BGP断连来判断路由器不能工作有时候会误伤。其次,路由器上的BGP进程可能正在重启,所以BGP连接只是短暂的断开,马上又能重连回来。如果一断开就删路由,重新建连又添加路由,会造成BGP路由器上路由反转,进而产生短时间的路由环路或者黑洞路由。这样一个路由反转可能会传递到整个数据中心,不仅消耗了路由器控制平面的计算能力,甚至会引起整个网络的抖动。

优雅重启机制的引入:

这在之前的硬件BGP设备中不是严重的问题,因为硬件设备设计就是一直运行,不需要重启。但是对于软件BGP来说,软件维护需要经常的重启BGP进程。为了解决这个问题,RFC4724为BGP(包括传统的BGP-4和MP-BGP)增加了一种新的能力,也就是Graceful Restart,它能在BGP短时间断连的时候,不删除相应的路由信息,从而确保网络的稳定性。从协议上来看,Graceful Restart在BGP协议的基础上增加了两个部分:End-of-RIB和Graceful Restart Capability。

bgp优雅重启机制

End-of-RIB

在这里插入图片描述

BGP协议是由4类消息组成的。End-of-RIB从格式上看就是一种特殊的Update消息,它没有可达的Network Layer Reachability Information(NLRI),同时带的撤回NLRI也是空的。End-of-RIB就是一个空的Update消息,按照正常的处理逻辑是没有意义,并且不会产生任何影响。BGP路由器在启动的时候,会计算本地路由并发布到与之相连的BGP peer。这个过程结束之后,BGP路由器就是断断续续的接收一些更新事件,再将路由redistribute到BGP peer。所以,BGP路由器启动之后,过程可以分为两个部分,一个是初始化路由发布,另一个是正常工作时的路由发布。对于一个支持Graceful Restart的路由器来说,End-of-RIB的作用就是区分这两个部分,它会在初始化路由发布完之后,正常工作之前发布

Graceful Restart Capability

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1、支持Graceful Restart的路由器重启流程

1、BGP路由器重启,BGP连接断开。

2、存储在RIB中的之前的BGP route标为stale状态,仅此而已。在生成实际路由表时,stale状态的BGP route不应该区别对待。

3、BGP路由器启动,重新建立BGP连接,发送OPEN Message,在其中的Graceful Restart Capability中,Restart Flags中第1bit置1,表明刚刚经历了重启。

4、对于每个BGP Address Family,如果在重启过程中,BGP route保留了,那么相应的<AFI, SAFI, Flags for Address Family>中,Flags for Address Family的第1bit置1,表明本地仍然有之前的路由。

5、重新建立BGP连接,接收对端发来的BGP路由。但是当前路由器并不立即进行路由选择算法来更新本地路由表。

6、等到下面两个条件之一满足时再进行路由选择算法:

* 从所有的BGP peer都收到了End-of-RIB。
  但是这里要排除在Open Message中,将Restart Flag设置为1的peer,因为它们也在等当前路由器
  的End-of-RIB,而当前路由器只有在收完BGP peer的End-of-RIB并且进行完本地的路由选择算法
  之后才会发送自己的End-of-RIB,所以如果这里互相等待的话就会死锁。

* 路由选择算法等待时间超时了。
  为了避免当前路由器无尽的等待而不进行路由选择算法,支持Graceful Restart的BGP路由器,
  必须支持配置这个超时时间(Selection_Deferral_Timer)。

7、进行完路由选择算法之后,如果本地标为stale的BGP 路由没有从任何一个BGP peer收到更新,那么说明这条路由真的不存在了,必须被删除。

8、发布计算之后的路由到BGP peer。

9、发布End-of-RIB。

支持Graceful Restart的路由器,最主要的能力就是在BGP重启的过程中,保留之前的BGP route,同时保留自身的转发能力。在BGP 重新建立连接之后,再更新相应的BGP route

2、支持Graceful Restart的路由器发现peer重启的处理流程

1、识别之前已经发送了Graceful Restart Capability的路由器,如果是支持Graceful Restart的路由器断开连接,那么执行下面的操作。

2、保留从peer路由器接收的BGP route,并标记成stale状态。仅此而已。在生成实际路由表时,stale状态的BGP route不应该区别对待。如果在这一步中,BGP route已经是stale,那么BGP route会被删除。也就是对端连续重启可能会造成本地相应的路由删除。

3、对端重新建立BGP连接,在当前BGP 路由器发送的Open Message中,其中Graceful Restart Capability中,Restart Flags中第1bit置0,除非当前BGP路由器也刚刚重启。如果在之前的Graceful Restart Capability中“Restart Time”到达之后,BGP还没有重新建连,那么stale状态的BGP route必须删除。所以,最多为对端保留路由4095秒。

4、对于每个BGP Address Family,如果在peer重启过程中,BGP route保留了,那么相应的<AFI, SAFI, Flags for Address Family>中,Flags for Address Family的第1bit置1,表明本地仍然有之前的路由。

5、但是在从peer BGP路由器收到的Graceful Restart Capability中,如果满足下面三个条件之一,表明peer BGP在重启过程中没有保留BGP route,那么需要立即删除相应的stale 状态的BGP route。

* 对应的Address Family中的Flags for Address Family第1bit为0;
* 没有相应的Address Family;
* 根本就没有Graceful Restart Capability

6、当前BGP 路由器发送End-of-RIB

7、在收到peer BGP重新发送过来的BGP route时,更新本地的stale状态BGP route。

8、当收到peer BGP发送的End-of-RIB时,删除相应Address Family中仍然为stale的BGP route。

支持Graceful Restart的路由器,在同样支持Graceful Restart的peer BGP路由器重启过程中,会保留之前的BGP route,仍然相信peer BGP具备转发能力。在BGP 重新建立连接之后,再更新相应的BGP route。

BGP优雅重启,实际上就是将作为控制平面的BGP和转发平面解耦开。这样,就算控制面BGP断开了,也不影响数据面的转发能力。

优雅重启工作流程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

golang如何使用bgp优雅重启机制

示例来源:kube-router

https://github.com/cloudnativelabs/kube-router/blob/master/pkg/controllers/routing/bgp_peers.go

使用gobgp库进行建立bgp连接的时候,可以参考一下示例打开bgp优雅重启机制

		if nrc.bgpGracefulRestart {
			n.GracefulRestart = &gobgpapi.GracefulRestart{
				Enabled:         true,
				RestartTime:     uint32(nrc.bgpGracefulRestartTime.Seconds()),
				DeferralTime:    uint32(nrc.bgpGracefulRestartDeferralTime.Seconds()),
				LocalRestarting: true,
			}

			if nrc.isIpv6 {
				n.AfiSafis = []*gobgpapi.AfiSafi{
					{
						Config: &gobgpapi.AfiSafiConfig{
							Family:  &gobgpapi.Family{Afi: gobgpapi.Family_AFI_IP6, Safi: gobgpapi.Family_SAFI_UNICAST},
							Enabled: true,
						},
						MpGracefulRestart: &gobgpapi.MpGracefulRestart{
							Config: &gobgpapi.MpGracefulRestartConfig{
								Enabled: true,
							},
							State: &gobgpapi.MpGracefulRestartState{},
						},
					},
				}
			} else {
				n.AfiSafis = []*gobgpapi.AfiSafi{
					{
						Config: &gobgpapi.AfiSafiConfig{
							Family:  &gobgpapi.Family{Afi: gobgpapi.Family_AFI_IP, Safi: gobgpapi.Family_SAFI_UNICAST},
							Enabled: true,
						},
						MpGracefulRestart: &gobgpapi.MpGracefulRestart{
							Config: &gobgpapi.MpGracefulRestartConfig{
								Enabled: true,
							},
							State: &gobgpapi.MpGracefulRestartState{},
						},
					},
				}
			}
		}

注意

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种PEG衍生物Azide-PEG-Biotin|N3-PEG-Biotin|叠氮-PEG-生物素|956748-40-6

1、名称 英文&#xff1a;N3-PEG-Biotin&#xff0c;Azide-PEG-Biotin 中文&#xff1a;叠氮-聚乙二醇-生物素 2、CAS编号&#xff1a;956748-40-6 3、所属分类&#xff1a; Azide PEG Biotin PEG 4、分子量&#xff1a;可定制 5、质量控制&#xff1a;95% 6、储存&…

[附源码]java毕业设计食堂线上点餐系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

玩转MySQL:命令大全~忘记了SQL该怎么写就回来看看~

引言 相信大家在编写SQL时一定有一个困扰&#xff0c;就是明明记得数据库中有个命令/函数&#xff0c;可以实现自己需要的功能&#xff0c;但偏偏不记得哪个命令该怎么写了&#xff0c;这时只能靠盲目的去百度&#xff0c;以此来寻找自己需要的命令。 时间是最厉害的武器&…

Anaconda3安装部署(二) 百篇文章学PyQT

本文章是百篇文章学PyQT的第二篇&#xff0c;本文讲述如何安装Anaconda3工具&#xff0c;Anaconda3 在安装过程中会遇到很多问题&#xff0c;博主在本篇文章中将遇到和踩过的坑总结出来&#xff0c;可以供大家参考&#xff0c;希望大家安装顺利。包括 安装、遇到问题的解决方案…

实战十八:通过ItemKNN算法实现基于协同过滤的商品推荐 代码+数据

项目概述: 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。ItemKNN推荐…

【专栏】基础篇05| Redis 该怎么保证数据不丢失(下)

前言 上一小节我们讲了AOF是什么以及它是如何保证Redis的Crash Safe的&#xff0c;这一节我们再来看一看Redis的RDB和AOF有何不同&#xff0c;两者是怎么样的关系 RDB的工作模式 RDB全称Redis Database&#xff0c;我们也常叫做Redis的内存快照&#xff0c;它与AOF最大的不同在…

基于java+ssm幼儿园教学网站管理系统vue-计算机毕业设计

项目介绍 要想做好幼升小的衔接工作&#xff0c;首先我们要明确小学生相对于幼儿园来说的不同之处。在幼儿园阶段&#xff0c;我们更多的是让小朋友做游戏&#xff0c;培养他们的学习兴趣等。而进入小学后&#xff0c;课程种类增加了&#xff0c;阅读信息不再是简单的图片&…

PHP房屋租售信息管理系统可以用wamp、phpstudy运行定制开发mysql数据库BS模式

一、源码特点 PHP房屋租售信息管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库系统主要采用B/S模式开发,开发环境为PHP APACHE&#xff0c;数据库为mysql5.0&#xff0c;使用php语言开发 PHP房屋租售信…

kubernetes组件再认知

背景 之前学习k8s的各组件还是感觉不深入, 只停留在名字解释上面。总是不能深入理解&#xff0c;例如应用部署后kuber-proxy会在master 和node上添加什么样的iptables规则、部署一个应用的完整流程( 手画各组件功能并介绍10分钟以上 )、schedule具体是怎么调度的、limit reque…

计算机视觉|针孔成像,相机内外参及相机标定,矫正的重要性

计算机视觉读书笔记|相机内外参及相机标定&#xff0c;矫正的重要性 这篇博客将介绍针孔成像&#xff0c;透镜&#xff08;弥补了针孔成像曝光不足成像速度慢的缺点&#xff0c;但引进了畸变&#xff0c;主要是径向畸变和切向畸变&#xff0c;径向畸变主要是离中心越远越弯曲&…

Tableau指标排行

2022年11月15日&#xff0c;深圳数据交易所举行揭牌暨数据交易成果发布活动。 文章目录前言一、整体数据排行二、数据排行TOP N三、根据需要也可以显示具体排名总结前言 分享Tableau指标排行制作过程中遇到的问题及其解决方式&#xff0c;供各位小伙伴参考。 一、整体数据排行…

谷粒学院(二) 讲师管理模块

一、讲师管理模块配置 1、在service下面service-edu模块中创建配置文件 2. resources目录下创建文件 application.properties # 服务端口 server.port8001 # 服务名 spring.application.nameservice-edu# 环境设置&#xff1a;dev、test、prod spring.profiles.activedev# my…

java基于ssm网上超市购物商城-计算机毕业设计

项目介绍 网上超市是商业贸易中的一条非常重要的道路&#xff0c;可以把其从传统的实体模式中解放中来&#xff0c;网上购物可以为消费者提供巨大的便利。通过网上超市这个平台&#xff0c;可以使用户足不出户就可以了解现今的流行趋势和丰富的商品信息&#xff0c;为用户提供…

MySQL8.0优化 - 锁 - 从数据操作的粒度划分:表级锁、页级锁、行锁

文章目录学习资料锁的不同角度分类锁的分类图如下从数据操作的粒度划分&#xff1a;表级锁、页级锁、行锁表锁&#xff08;Table Lock&#xff09;表级别的S锁、X锁意向锁&#xff08;intention lock&#xff09;自增锁&#xff08;AUTO-INC锁&#xff09;元数据锁&#xff08;…

算法刷题介绍

算法刷题介绍 课程大纲 Python 作为实现语言。 快速排序算法 0 (nlogn) 实际工作中要根据实际情况选择最优解。 有可能没有完美方案&#xff0c;需要做平衡。 数据有啥特征&#xff1f; 举例&#xff1a;对一组数据进行排序 是否包含大量重复元素&#xff08;三路快排&#x…

【微服务治理之监控APM】系统监控架构概述

APM 简介 APM 通常认为是 Application Performance Management 的简写&#xff0c;它主要有三个方面的内容&#xff0c;分别是 Logs(日志)、Traces(链路追踪)Metrics(报表统计)。 以后大家接触任何一个 APM 系统的时候&#xff0c;都可以从这三个方面去分析它到底是什么样的…

vue中scoped原理与样式穿透原理

是什么 在vue组件中的style标签上有一个特殊属性&#xff1a;”scoped“ 为什么 当一个style标签拥有scoped属性时&#xff0c;它的CSS样式就只能作用于当前的组件&#xff0c;通过该属性&#xff0c;可以使得组件之间的样式不互相污染。 怎么样实现的 1.为组件实例生成一个唯一…

[附源码]SSM计算机毕业设计智能视频推荐网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

codeforces:F. All Possible Digits【贪心 + 模拟进位】

目录题目截图题目分析ac code总结题目截图 题目分析 注意是只能再最后一位加我们要使得0到p - 1都出现至少一次统计出现的数字aset考虑最后一位pivot情况1&#xff1a;如果pivot前都出现了&#xff0c;就不用进位了&#xff0c;pivot只需要加到最大的未出现在aset的num即可情况…

【编程题】【Scratch二级】2022.09 小老鼠偷面包

小老鼠偷面包 1. 准备工作 &#xff08;1&#xff09;背景&#xff1a;Stars&#xff0c;绘制如下图所示的迷宫&#xff1b; &#xff08;2&#xff09;角色&#xff1a;Cat 2、Mouse1、Bread。 2. 功能实现 &#xff08;1&#xff09;Cat 2、Mouse1和Bread初始位置和方向如…