BGP学习笔记

news2024/11/17 16:15:02

概念

动态路由协议按照按照工作范围可以分为IGP和EGP,IGP工作在一个AS之内,主要用来发现和计算路由,常见的IGP包括OSPF,RIP,ISIS等。EGP工作在AS与AS之间,在AS之间提供无环路的路由信息交换。BGP(Border Gateway Protocol)就是EGP的一种。

与IGP不同,BGP的着眼点不在于自动发现网络拓扑,而在与在AS之间选择最佳路由和控制路由传播。

BGP的几个特点

使用TCP作为传输协议:BGP使用TCP作为传输层协议,监听端口号为179(目的端口号),本地端口号任意,为单播传递。由于BGP进行的是AS之间的路由传播,对可靠性的要求是比较高的,因此选用TCP作为传输协议。
支持CIDR:支持无类域间路由?
增量更新:路由更新时,BGP只发送更新的路由,因为BGP存储的路由信息与IGP相比是十分巨大的(几百万条)。
增强型的距离矢量路由协议:BGP使用AS-Path作为距离矢量,在将路由发布给EBGP邻居时,会在AS-Path属性中添加自身的AS号
无环路:包括AS内防环和AS间防环。AS在进行EBGP发布时会携带自身的AS号,在接收EBGP信息时会丢弃携带自身AS号的路由信息,达成AS间防环。IBGP学到的路由只会通告给EBGP Peer,不会通告给IBGP Peer,形成水平分割,完成AS内防环。
路由策略丰富:能够对路由实现灵活的过滤和选择
可防止路由震荡:
易于扩展:主要是通过TLV进行扩展

AS

自治系统AS(Autonomous System)是由同一个技术管理机构管理,使用统一路由策略的一些路由器的集合。

每个AS都有唯一的AS号,AS号由IANA分配,编号范围为165535。其中1到64511是注册的因特网编号,6451265535是私有网络编号。

BGP的分类

运行在一个AS内部的IBGP和运行在AS之间的EBGP。

IBGP:在一个AS内,各个路由之间通常都是通过IGP(OSPF)互通的,因此可以使用回环口来与各个IBGP Peer建立TCP连接,实现IBGP。由于一个回环口可以走多个物理链路,因此这样的链接更加稳定。

EBGP:在不同的AS之间,往往是只有直连接口的,此时只能通过直连接口建立TCP连接。在某些场景下,通过制定EBGP的最大跳数和静态路由,也可以使用环回口建立BGP邻居关系。

工作原理

报文分类

open:TCP建立之后发送的第一个消息,作用为协商BGP参数,包括版本号、AS号等。试图建立连接的两个BGP peer会互相发送open报文。
update:用于交换路由信息,包括撤销路由信息和可达路由信息,及其各种路由属性。
keepalive:用于维护邻居关系,建立邻居关系的peer之间会周期性的发送该报文。
notification:BGP中的差错校验。在BGP的整个流程中,一旦检测到任何形式的差错,Speaker都会发送该报文,同时解除对应的邻居关系。对应的peer在接收到notification报文之后也会解除邻居关系。
route-refresh:用于在改变路由策略后,请求对等体重新发送路由信息。在不断开TCP连接的情况下,更新一次路由信息。

BGP报文

在这里插入图片描述
Marker:全部为1
Length:报文长度
Type:报文类型(open,keepalive…)
Message:具体报文信息

open报文

在这里插入图片描述
Version:BGP版本
My Autonomous System:自身AS号
Hold Time:保持时间,如果在保持时间内没有接收到keepalive报文则断开邻居关系。Hold Time一般为keepalive发送周期的三倍,为180s。
BGP Identifier:BGP id,通常为route-id。
Opt Param Len:可选参数长度
Opt Param:可选参数

keepalive报文

在这里插入图片描述
keepalive报文只有报文头

update报文

在这里插入图片描述
Withdraw Routes Length:不可达路由信息长度
WIthdraw Routes:不可达路由信息
Path Attribute Length:可达路由信息长度
Path Attribute:可达路由属性
Network Layer Reachability Information:可达路由信息

notification报文

在这里插入图片描述
Error Code:错误码
Error SubCode:二级错误代码

Route-Refresh报文

在这里插入图片描述
AFI:路由类型,ipv4、ipv6

BGP状态机

BGP共有6个状态,分别是Idle,Connect,Active,Open Sent,Open Confirm,Established。在实际设备上能看到的稳定状态包括Idle,Active,Connect,以及Established。

一个正常的BGP Peer流程如下:
首先给当前设备输入一个想要建立Peer的IP地址,如果该地址不可达,则会一直处于Idle状态。
如果可达,当前设备会发送一个SYN报文,进入Connect状态尝试与对端建立TCP连接。
如果TCP连接建立成功,会给对端发送一个Open报文,进入Open sent状态,等待对端的回复
如果收到对端发送过来的Open报文,则进入Open Confirm状态,等待对方发送的keep alive报文
在收到Keep Alive报文之后,BGP邻居关系正式建立,进入Established状态
Established状态中的Peer会每隔一段时间(默认是30秒)给对端发送keep alive报文,如果一段时间(默认三个Keep alive周期,90s)没有收到对端发送的keep alive报文,则会进入Idle状态
如果在任何一个环节收到Notification报文,则会接触邻居关系,进入Idle状态
如果TCP建立连接失败,则会进入Active状态,继续尝试建立TCP连接,在重试超时过后,则会重新回到Connect状态。因此如果有默认路由,但是TCP连接建立不起来,当前设备会处于Connect和Active状态的循环。
在这里插入图片描述

BGP对等体之间的交互原则

IBGP路由,只发送给EBGP对等体
EBGP路由,发布给所有IBGP和EBGP对等体
只将最优路由发布给对等体
只将更新信息发布给对等体

交互细则

在连接刚建立时,BGP Speaker会将自己产生的所有路由发布给新的对等体。
多条路径时,BGP Speaker只会选择最优路径给自己使用,因此发布给对等体的只有最优路径。
BGP Speaker会将接受到的EBGP路由发布给所有的IBGP邻居和EBGP邻居,同时还要保证IBGP邻居的下一跳可达。
BGP Speaker从IBGP学到的路由不会再发布给IBGP邻居,这也称为BGP的水平分割,可以有效避免AS内部产生回路。这种连接方式称为全互联。
BGP Speaker从IBGP学到的路由是否发布给EBGP对等体要视IGP和BGP的同步情况决定。如果IGP中存在相关路由则发布。

路由反射器

为了防止环路,通过IBGP学到的路由是不会发布给IBGP邻居的,因此为了实现AS内部的路由传递,有两个办法:
一是为所有路由器建立Fullmesh连接,在网络较小时尚可实施,但在网络较大时显然是不现实的。
二是设置一个路由反射器,由路由反射器发布IBGP的所有路由。路由发射器是一个与AS内所有路由器都建立Peer关系的路由器,在反射器收到IBGP路由时,会将该路由发布给其他所有IBGP邻居。

BGP数据库

IP路由表(IP-RIB):存储全局路由信息,用于转发
BGP路由表(Loc-RIB):BGP路由信息库,包括本地BGP Speaker学习到的所有路由信息。其中的最优路径会被复制到IP路由表中用于转发。
邻居表:BGP对等体列表
Adj-RIB-In:其他对等体发布给本地BGP Speaker且尚未处理的路由信息。
Adj-RIB-Out:本地BGP Speaker发布给其他对等体的路由信息。
在这里插入图片描述

BGP属性

BGP路由属性是一套参数,它是对特定理由的进一步描述。

BGP属性分类

公认必遵(Well-known mandatory):所有BGP路由器均可识别,Update时必须携带,否则路由会报错。
公认任意(Well-known discretionary):所有BGP路由器均可识别,Update时可以选择携带。
可选过度(Optional transitive):部分BGP路由可识别,如果BGP路由不识别,在接收到该种类的属性之后可以选择性的发送给其他路由。
可选非过渡(Optional non-transitive):部分BGP路由可识别。如果BGP路由器不识别该类型属性,不会对其进行记录,同时也不会发布给其他对等体。

常见BGP路由属性

Origin(Well-known mandatory):定义路径信息的来源。IGP(i),EGP(e),Incomplete(?),分别是从通过IGP学到的,从BGP学到的,还有通过其他方式(import)学到的。
AS_PATH(Well-known mandatory):按矢量顺序记录某条路由从本地到目的地址所要经过的所有AS编号。相当于AS的路由信息。
Next hop(Well-known mandatory):记录下一跳信息。在IBGP传输过程中,该值默认不变。而在EBGP传输中,该值会被修改为建立TCP连接的IP地址。
Local_Preference(Well-known discretionary):标识流量离开本AS之后所走路径的优先级,数值越大优先级越高。在IBGP的发布中会携带该属性,可以通过配置该属性控制流量从自身AS的出路径。
Atomic_Aggregate(Well-known discretionary):
Aggregator(Optional transitive):
Community(Optional transitive):相当于给路由打上一个标签,分为公共团体属性和私有属性。常用标签:NO_ADVERTISE,带有此标签的路由不会被通告给任何对等体。NO_EXPORT,带有此标签的路由只会在AS内部传播,这里的AS是包括联盟的大AS。NO_EXPORT_SUBCONFED:带有此标签的路由只会在小AS内传播。
Originator-ID(Optional non-transitive):
Cluster-List(Optional non-transitive):
MP_Reach _NLRI:
MP_Unreach_NLRI:
Extended_Communities:
MED:可以通过EBGP发布该属性,在两个AS之间有多条线路可以互通时可以通过该属性为各个线路设置优先级,MED值越小优先级越高。通过该属性可以控制其他AS到当前AS入流量的路径,前提是对端AS的路由器支持该属性。

BGP选路规则

当BGP对等体接收到到达同一目的地的多条路由时,会逐条按照下面的方式进行优选:
如果路由的下一跳不可达,忽略此路由。
优选协议首选值(PreVal)最高的路由。PreVal每个BGP对等体可以单独设置,默认为0。这个不是BGP传播的属性,相当于在设备上直接对各个路由打上的优先级。
优选本地优先级(Loc_Pre)最高的路由。默认为100. Loc_Pre只会在本地AS内通过IBGP传播。Loc_Pre只会在没有值的时候被添加,一条路由如果已经有了Loc_Pre,便不会再做修改。
优选本地生成的路由。在本地路由中,优选聚合路由,在聚合路由中,优选aggregate生成的手动聚合路由,其次summary automatic自动聚合路由。network引入的路由优先级高于import-route引入的路由。
优选AS_PATH最短的路由。
比较Origin属性,按照IGP,BGP,incomplete的顺序进行优选。
优选MED值最低的路由。
优选EBGP的路由,相比IBGP。
优选BGP下一跳IGP Metric较小的路由。
当以上条件全部相同时,视为等价路由,可以进行负载均衡。

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

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

相关文章

[附源码]Python计算机毕业设计Django基于Web的软考题库平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

ActiveMQ window安装、修改密码、启动一闪而过、设置8161端口仅本地访问

目录 1.ActiveMQ下载 2.ActiveMQ目录说明 3.启动activemq 4.修改activemq默认密码 5.设置8161端口仅本地访问。 1.ActiveMQ下载 官网下载ActiveMQhttps://activemq.apache.org/ window版本直接解压就可以。 2.ActiveMQ目录说明 apache-activemq-5.16.5 activemq目录结构…

这几款文档笔记工具,你习惯用哪个?

前言 俗话说的好:“好记性不如烂笔头”,平时工作记录笔记的确是一个良好的习惯,做文档笔记可以在我们遗忘时进行回看,方便查找,代替人的大脑。有时程序写多了,很不愿意去强制记忆一些东西,那么…

【高度预估】基于matlab卡尔曼滤波和粒子滤波无人机离地高度估计【含Matlab源码 2255期】

⛄一、卡尔曼滤波和粒子滤波无人机离地高度估计 1 无人机离地高度估计算法 1.1 离地高度估计基本方案 无人机安装两路距离测量传感器, 传感器能在小型无人机飞行的一般高度正常工作, 且两个传感器的安装位置保证它们能够测量相同的离地高度信息。 两路距离测量传感器以1s的频…

单源最短路径(贪心算法)

最近在研究算法设计与分析&#xff0c;看到了单源最短路劲&#xff0c;特发文一篇。 下面代码就是实现这个有向联通图 废话不说直接上代码 #include<stdio.h> #define m 5000 int c[5][5] {m,10,m,30,100,m,m,50,m,m,m,m,m,m,10,m,m,20,m,60,m,m,m,m,m, }; int dist[5]…

现在市面跑步耳机哪款好用、分享五款适合跑步用的耳机推荐

近这两年来&#xff0c;运动健身风潮一直都非常火&#xff0c;但是一个人运动健身&#xff0c;难免无聊&#xff0c;如果有音乐的陪伴&#xff0c;时间都能过得快很多&#xff0c;这时候就需要一款运动蓝牙耳机了。不过购买运动蓝牙耳机&#xff0c;比挑选普通的耳机还更需要花…

[附源码]Python计算机毕业设计Django架构的博客平台设计

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

节约软件开发成本,关键在这儿。

​1、节省软件开发成本的核心在减少返工&#xff01; 软件企业利润 销售额 - 成本。企业的利润少&#xff0c;可能是销售额太少&#xff0c;也可能是成本太高。而增加销售额&#xff0c;取决于销售人员、客户、市场、产品等众多不可控因素&#xff0c;可遇而不可求。相反&…

RabbitMQ-死信交换机

文章目录1 死信交换机1.1.什么是死信交换机1.2 利用死信交换机接收死信1.3 总结2 TTL2.1 接收超时死信的死信交换机2.2 声明一个队列&#xff0c;并且指定TTL2.3 发送消息时&#xff0c;设定TTL2.4.总结3 延迟队列3.1 DelayExchange原理3.2 使用DelayExchange3.3 总结1 死信交换…

智云通CRM:如何判断客户忠诚度的高低?

客户忠诚度是一个相对概念&#xff0c;说明了客户在购买同类产品或服务时对某一企业或品牌光顾比重的高低。注意&#xff0c;不能跨产品或服务进行客户忠诚度比较&#xff0c;因为这样比较是没有意义的。客户忠诚度可以通过以下指标来衡量。 一、 客户重复购买的次数 客户重复…

【LeetCode每日一题:1769. 移动所有球到每个盒子所需的最小操作数~~~双重循环遍历模拟】

题目描述 有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中&#xff0c;你可以将 一个 小球从某个盒子移动到一个与之相邻…

区块链共识机制 (Consensus)(PoW,PoS,PAXOS,RAFT,PBFT)

文章目录ConsensusProof of Work&#xff08;PoW)Proof of Stake&#xff08;PoS&#xff09;PAXOSPhases in PAXOSPrepare PhaseAccept PhaseReplicated And Fault Tolerant&#xff08;RAFT&#xff09;Leader ElectionLog ReplicationPractical Byzantine Fault Tolerance (…

Ubuntu18.04开机自动启动终端并运行脚本

目录 1.创建测试脚本文件 2.添加到开机自启动 1.创建测试脚本文件 CtrlAltT打开终端在终端中输入以下指令&#xff0c;创建.sh文件。 touch “文件名”.sh 双击打开test.sh文件&#xff0c;输入以下测试代码&#xff0c;并保存 #!/bin/bash source /opt/ros/melodic/setu…

用于Python降维的线性判别分析

减少预测模型的输入变量数称为降维。 较少的输入变量可以产生更简单的预测模型&#xff0c;该模型在对新数据进行预测时可能具有更好的性能。 线性判别分析&#xff08;简称LDA&#xff09;是一种用于多类分类的预测建模算法。它还可以用作降维技术&#xff0c;提供训练数据集…

Unity 3D 导航系统||Unity 3D 障碍物

Unity 3D 导航系统 过去&#xff0c;游戏开发者必须自己打造寻路系统&#xff0c;特别是在基于节点的寻路系统中&#xff0c;必须手动地在 AI 使用的点之间进行导航&#xff0c;因此基于节点系统的寻路非常烦琐。 Unity 3D 不仅具有导航功能&#xff0c;还使用了导航网格&…

牛客练习赛106 药丸

牛客练习赛106 药丸 2022.12.02 与舍友四排玩了团体对抗的模式&#xff0c;练习赛就只有40分钟的剩余时间了。 题目描述 来源&#xff1a;牛客网 牛牛有 nnn 个属性&#xff0c;第 iii 个属性的初始值为 aia_iai​ &#xff0c;牛牛想把第 iii 个属性的值变为目标值 bib_ib…

享元模式Flyweight

1.意图&#xff1a;运用共享技术有效地支持大量细粒度的对象。 2.结构 描述一个接口&#xff0c;通过这个接口Flyweight可以接受并作用于外部状态&#xff1b; ConcreteFlyweight实现Flyweight接口&#xff0c;并为内部状态&#xff08;如果有&#xff09;增加存储空间。Conr…

超融合时序数据库YMatrixDB与PostGIS案例

目录 什么是PostGIS PostGIS的特点 PostGIS 基础知识 OGC的WKB和WKT格式 插入数据实例 EWKT、EWKB和Canonical格式 插入数据实例 SQL-MM格式 常几何类型和函数 常用操作符 常用操作函数 OGC标准函数 管理函数 几何对象关系函数 几何对象处理函数 几何对象存取函…

Redis中的事务可以满足ACID属性吗?

前言 事务是数据库操作的最小工作单元&#xff0c;由一个有限的数据库操作序列构成。这些操作要么全部执行&#xff0c;要么全部不执行&#xff0c;是一个不可分割的工作单位。一键获取最先java文档。 事务在执行时&#xff0c;会提供专门的属性保证&#xff1a;原子性、一致性…

[附源码]Python计算机毕业设计Django高校学生摄影作品展示平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…