BGP路由知识点

news2024/11/26 13:44:36

目录

1.BGP的工作原理:

2.BGP路由的一般格式:

3.三种不同的自治系统AS

4.BGP的路由选择

5.BGP的四种报文


BGP(Border Gateway Protocol)是一种用于自治系统(AS)之间的路由选择协议。它是互联网中最常用的外部网关协议,负责在不同自治系统之间交换网络前缀信息,以便实现跨网络的数据转发。

我们首先应当弄清,在不同自治系统AS 之间的路由选择为什么不能使用内部协议,如RIP或OSPF?

我们知道,内部网关协议(如RIP或OSPF)主要是设法使数据报在一个AS 中尽可能有效地从源站传送到目的站。在一个 AS内部也不需要考虑其他方面的策略。然而 BGP使用的环境却不同。这主要是因为以下的两个原因:

第一,互联网的规模太大,使得自治系统AS之间路由选择非常困难。连接在互联网主干网上的路由器,必须对任何有效的 IP 地址都能在转发表中找到匹配的网络前缀。目前在互联网的主干网路由器中,一个转发表的项目数甚至可达到50万个网络前缀。如果使用链路状态协议,则每一个路由器必须维持一个很大的链路状态数据库。对于这样大的主干网用Dikstra 算法计算最短路径时花费的时间也太长。另外,由于自治系统AS各自运行自己选定的内部路由选择协议,并使用本 AS 指明的路径度量,因此,当一条路径通过几个不AS时,要想对这样的路径计算出有意义的代价是不太可能的。例如,对某 AS来说,代价为1000可能表示一条比较长的路由。但对另一AS,代价为 1000却可能表示不可接受的坏路由。因此,对于自治系统AS之间的路由选择,要用“代价”作为度量来寻找最佳路由也是很不现实的。比较合理的做法是在自治系统之间交换“可达性”信息(即“可到达”或“不可到达”)。例如,告诉相邻路由器:“到达网络前缀N可经过自治系统AS_{x}”。

第二,自治系统AS之间的路由选择必须考虑有关策略。由于相互连接的网络的性能相差很大,根据最短距离(即最少跳数)找出来的路径,可能并不合适。也有的路径的使用代价很高或很不安全。还有一种情况,如自治系统AS1要发送数据报给自治系统AS2,本来最好是经过自治系统AS3。但AS3不愿意让这些数据报通过本自治系统的网络,即使AS1愿意付一定的费用。但另一方面,自治系统 AS3 愿意让某些相邻自治系统的数据报通过自己的网络,特别是对那些付了服务费的某些自治系统更是如此。因此,自治系统之间的路由选择协议应当允许使用多种路由选择策略。这些策略包括政治、安全或经济方面的考虑。例如,我国国内的站点在互相传送数据报时不应经过国外兜圈子,特别是,不要经过某些对我国的安全有威胁的国家。这些策略都是由网络管理人员对每一个路由器进行设置的,但这些策略并不是自治系统之间的路由选择协议本身。还可举出一些策略的例子,如:“仅在到达下列这些地址时才经过 AS_{x}”,“AS_{x}AS_{y}相比时应优先通过AS_{x}”,等等。显然,使用这些策略是为了找出较好的路由而不是最佳路由。

所以边界网关协议 BGP 只能是力求选择出一条能够到达目的网络目比较好的路由(不能兜圈子)而并非要计算出一条最佳路由。这里所说的 BGP路由,是指经过哪些自治系统AS 可以到达目的网络前缀。当然,这选择出的比好的路由,也有时不严格地称为最佳路由。BGP采用了路径向量(path vector)路由选择协议,它与距离向量协议(如RIP)和链路状态协议(如 OSPF)都有很大的区别。

1.BGP的工作原理:

在一个自治系统 AS中有两种不同功能的路由器,即边界路由器(或边界网关)和内部路由器,一个AS至少要有一个边界路由器和相邻 AS 的边界路由器直接相连。
当两个边界路由器(如图(a)中的 R1和 R2)进行通信时,必须先建立TCP连接(端口号为 179),这种TCP 连接又称为半永久性连接(即双方交换完信息后仍然保持着连接状态)。像 R1和 R2之间的这种连接称为 eBGP 连接,e表示外部 extemal。现在,边界路由器 R1 可通过 eBGP 向对等端R2发送BGP路由“X,AS1,R1”,意思是“从R1经AS1可到达X”。这样,通过eBGP连接,AS2中的边界路由器R2,就知道了到达AS1中的前缀X的BGP路由。

但是,仅有边界路由器 R2 知道“到AS1的前缀X的BGP 路由”是远远不够的。边界路由器R2应当把获得的 BGP路由,再转发给AS内部的其他路由器。为此,协议 BGP 规定,在AS 内部,两个路由器之间还需要建立 iBGP(也就是 BGP 连接,i表示内部ntemal),iBGP也使用TCP连接传送 BGP报文。如图(b)中表示边界路由器 R2 在三个iBGP 连接上,向 AS2内部的其他三个路由器转发自己收到的 BGP 路由。至此,AS2内的所有路由器都知道了这条 BGP 路由信息。由此可见,协议 BGP 并非仅运行在AS之间,而且也要运行在AS的内部。

注:

这里要说明一下。图(a)中的边界路由器 R1 通告给边界路由器 R2的 BGP 路由可能有很多条(在图中只画出了一条)。但 R2根据本 AS 管理员所规定的策略,可以拒绝某些由(收到这种路由后即删除掉),而在 iBGP连接上仅转发符合规定策略的 BGP路由。


协议BGP规定,在一个AS 内部所有的 iBGP 必须是全连通的。即使两个路由器之间没有物理连接,但它们之间仍然有iBGP 连接。

iBGP和eBGP的关联:

从 eBGP 对等端收到的BGP路由,可通过iBGP告诉同一AS内的对等端。反过来也是可以的,即从iBGP对等端收到的 BGP 路由,可通过 eBGP 告诉在不同AS的对等端。但是,从 iBGP 对等端收到BGP路由,不能转告给同一个AS内不同iBGP的对等端。

上图中,每一个AS都必须运行本AS选择的内部网关协议IGP,例如OSPF或RIP。而协议BGP是在iBGP连接和eBGP连接之上运行的。

还有一个问题,当AS2内的路由器R4在收到BGP路由“X,AS1,R1”后,知道了“从R1出发就能到达AS1中的前缀X”,但是路由器R4应当怎样构造自己的转发表呢? 这需要经过两次递归查找

首先,R4要把这条 BGP 路由的起点进行转换。原来的 BGP 路由是“R1一>X”,路由的起点 R1 并不在 AS2中。AS2中的路由器都不能识别 R1。因此现在 R4 要把 BGP 路由的起点改为R1 的对等端R2,把BGP 路由变为“R2一>R1一>X”。由于R2位于AS2中,因此AS,里面的所有路由器都能把分组转发到R2,然后就能再经过 R1,最后到达前缀X。

其次,R4要利用内部网关协议,找到从 R4到 R2的最佳路由中的下一跳。在本例中,查出下一跳是 R3,于是R4在转发表中增加了到达前缀X的下一跳是 R3这一项目。

用类似的方法,路由器 R3 也在自己的转发表中增加了到达前缀X的项目。

这样,路由器R4只要收到要到达前缀X的分组,都按照R4-->R3-->R2-->R1-->X的路径最后到达前缀X。
总之,每一个路由器收到一条新的 BGP 路由通告后,必须经过上述步骤,才能在自的转发表中,增加到达终点的“下一跳”的相应项目。
在实际的转发表中,“前缀匹配”项目都用 CIDR 记法表示。由于路由器有两个以接口,因此“下一跳”项目用进入该路由器的接口的IP 地址来表示。

2.BGP路由的一般格式:

前缀就是通告的 BGP 路由终点(子网前缀)。

BGP属性有好几种类型,但最重要两个就是这里列出的AS-PATH和NEXT-HOP。

AS-PATH(自治系统路径)是通告的 BGP 路由所经过的自治系统。BGP 路由每经过一个AS,就将其自治系统号 ASN 加入到 AS-PATH 中。从这里可以清楚地看出,“BGP路由必须指出通过哪些自治系统AS,但不指出路由中途要通过哪些路由器。
NEXT-HOP(下一跳)是通告的 BGP 路由起点。

3.三种不同的自治系统AS

在互联网中自治系统 AS 的数量非常之多,其连接图也是相当复杂的。但归纳起来,可以把AS划分为图中所示的三大类,即末梢AS (stub AS)、穿越AS(transit AS)和对等AS(peering AS)。

末梢AS 是比较小的AS(如图中的AS4 ,AS5和AS6,其特点是这些AS 或者把分组发送给其直接连接的 AS,或者从其直接连接的 AS 接收分组,但不会把来自其他 AS 的分再转发到另一个 AS。末梢 AS 必须向所连接的 AS 付费才能发送或接收分组。
末梢AS也可以同时连接到两个或两个以上的 AS(如图中的 AS5)。这种末梢AS就称为多归属AS(multihomed AS)。多归属AS可以增加连接的可靠性,因为若有一条连接出现故障,那么还有另一条连接可用。作为末梢AS的AS5不能把AS3发送过来的分组转发到AS2。同理,AS5也不能把 AS2发送过来的分组转发到 AS3。这就是说,末梢 AS 不是穿越 AS,它不允许分组穿越自己的自治系统。末梢 AS也不能把(AS5-->AS2-->AS4)这样的BGP路由信息通告给AS3。如果AS3有分组要转发给AS4,可以通过对等AS2转发,但不能通过末梢AS5。
如图所示的穿越AS1往往是拥有很好的高速通信干线的主干AS,其任务就是为其他的AS有偿转发分组。通常都会有很多的AS 连接到穿越AS上。
对等AS(如图中的AS2和AS3)是经过事先协商的两个 AS,彼此之间的发送或接收分组都不收费,这样大家转发分组都比较方便。
注:BGP 路由必须避免兜圈子的出现。AS3向AS1通告可到达 AS6 的 BGP 路由中的属性AS-PATH 是[AS3,AS6],AS1在收到的 BGP 路由的属性 AS-PATH 中的最前面,添加上自己的 AS,通报给 AS2:[AS1 AS3 AS6]。AS2收到 BGP 路由后,向AS3通报 BGP 路由属性AS-PATH是[AS2 AS1 AS3 AS6] 。当AS3收到BGP路由后,检查属性AS-PATH序列中已经有了自己的AS3,如果AS3接受这个路由,并添加上本 AS 号,则将在属性 AS-PATH 中出现两个 AS3 :[AS3 AS2 AS1 AS3 AS6 ]。这就构成了一个兜圈子的 BGP 路由,因此AS3应立即删除此BGP路由,因而避免了兜圈子路由的出现。也就是说,在属性 AS-PATH 中不允许出现相同的AS。
AS3还可向AS2通报可到达 AS6 的另一条 BGP 路由,其AS-PATH是[AS3 AS6]。因此AS2知道有两条BGP路由可到达AS6,其AS-PATH是[AS2 AS1 AS3 AS6]和[AS2 AS3 AS6]。

4.BGP的路由选择

假如从一个 AS到另外一个 AS 中的前缀X 只有一条 BGP 路由,那么就不存在选择BGP路由的问题,因为这时BGP路由是唯一的。
但如果到前缀X有两条或更多的 BGP 路由可供选择,那么就应当根据以下的原则,按照这里给出的先后顺序,选择一条较好的BGP路由

(1)本地偏好LOCAL-PREF(LOCAL PREFerence)值最高的路由要首先选择。

在BGP路由中的属性里面有一个选项叫作本地偏好,在属性中记为 LOCAL-PREF。本地偏好也就是本地优先,“本地”的意思是指,从本 AS 开始的、到同一个前缀的不同 BGP路由中,挑选一个较好的(即偏好值最高的)路由。这可由路由器管理员或网络管理员根据政治上或经济上的策略来设置。
例如在图中,AS分别用高速和低速链路连接到AS2和AS3,并从这两个 AS获悉可通过AS2或AS3到达AS4。但AS1认为,若有分组要从AS1转发到AS4,应优先选择路由器R1离开AS1。于是就把从 R1离开AS1的BGP 路由的属性 LOCAL-PREF 值设为 300,而把从R2离开AS1的 BGP 路由的 LOCAL-PREF 值设为 200。这一信息通过i BGP通告AS1内部的所有路由器。这样,凡是有分组要转发到 AS4,都优先选择从R1离开AS1。

但是,即使所有的通信量都通过这条高速链路,使得链路负荷过重,协议 BGP 也无法把一些负载调整到负载较轻的那条低速链路上。

如果从几条 BGP路由中找不出本地偏好值最高的路由,则执行下一条。

(2)选择具有AS跳数最少的路由。

现观察图中的例子。从AS1到AS5共有两条 BGP 路由,即AS1-AS2-AS3-AS5和AS1一AS4一AS5。根据选择具有AS 跳数最少的原则,我们应选择只通过1个AS的BGP路由,即 AS1一AS4一AS5。但是没有想到,分组在 AS4 中反而要经过更多次数的转发(或许AS4是个很大的 AS),可能要花费更长的时间。可见选择经过 AS 数量最少的路 AS1一AS4一AS5未必更好。这个例子再次说明了协议 BGP 无法选择出最佳路由。

(3)使用热土都路由选择算法

如果按前两种方法都无法选择最好的路由,那么就在要进入 BGP路由的AS,执行热土豆路由选择算法。例如在图中,从AS1出发,共有两条BGP路由可到达AS3:

BGP路由1:从R3离开AS1,然后进入AS2,再到AS3。
BGP路由2:从R4离开AS1,然后进入AS2,再到AS3。

假定这两跳BGP路由的本地偏好相同,同时所经过的AS个数也相同。在这种情况下,AS1中的每一个路由器,就应采用热土豆路由选择算法。这种算法把分组比喻为烫手的热土豆,要尽快地转发出去。对于图中的例子,就是要使分组尽快离开 AS1,而不考虑从哪个路由器离开 AS1。或者说,要让分组经过最少的转发次数离开本 AS。这时要使用内部网关协议(如协议 OSPF或RIP)。对于不同的路由器,得出的选择结果是不同的。

例如,对于 AS1中的路由器 R1,若要使转发的分组尽快离开 AS1,应选择 R4作为其下一跳,因此应选择BGP路由2。这样,R1的转发路径应当是:R1一R4一BGP路由2。同理,对于 R2,若要使转发的分组尽快离开 AS1,应选择 R3 作为其下一跳,因此应选择BGP路由1。这样,R2的转发路径应当是:R2一R3一BGP路由1。

(4)选择路由器BGP标识符的数值最小的路由。
当以上几种方法都无法找出最好的 BGP路由时,就可使用BGP标识符来选择路由。在BGP进行交互的报文中,其首部有一 4 字节的字段,叫作 BGP 标识符,记为 BGP ID。这个字段被赋予一个无符号整数作为运行 BGP 的路由器的唯一标识符。具有多个接口的路由器有多个IP地址。BGP ID就使用该路由器的 IP 地址中数值最大的一个。

5.BGP的四种报文

在协议 BGP 刚运行时,BGP 连接的对等端要相互交换整个的 BGP 路由表。但需要在 BGP路由发生变化时,才更新有变化的部分。这样做对节省网络带宽和减少路的处理开销方面都有好处。

在RFC4271中规定了BGP-4的四种报文:
(1)OPEN(打开)报文,用来与BGP连接对等端建立关系。

(2)UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的路由。

(3)KEEPALIVE(保活)报文,用来周期性地证实与对等端的连通性。
(4)NOTIFICATION(通知)报文,用来发送检测到的差错。

OPEN 报文是两个路由器之间建立了 TCP连接后接着就必须发送的报文。OPEN报的作用是相互识别对方,协商一些协议参数(如计时器的时间)。收到 OPEN 报文的路由就发回KEEPALIVE报文表示接受建立BGP连接。

UPDATE报文是BGP协议的核心,用来撤销它以前曾经通知过的路由,或宣布增加新的路由。撤销路由可以一次撤销许多条,但增加新路由时,每个更新报文只能增加一条。

虽然BGP连接的两端建立了 TCP连接,传输报文是可靠的,但TCP上层的BGP是否始终正常工作还无法确知。在对等端之间定期传送BGP路由表是不可取的,因为BGP路表往往过于庞大,这样做会使网络的通信量过大。因此协议 BGP 采用的方法是让 BGP连接的两个对等端之间,周期性地交换 KEEPALIVE 报文,以表示协议工作正常。KEEPALIVE报文只包含 BGP 报文的通用首部 (19 字节长),因此不会在网络上产生多少开销。
每个路由器都有一个保持时间计时器(Hold Timer)。路由器每收到一个BGP报文,这个计时器就重置一次,继续从0开始计时。如果在商定的保持时间内没有收到对等端发来的任何一种BGP报文,就认为对方已经不能工作了。发送 KEEPALIVE 报文的时间间隔取为双方事先商定的保持时间(Hold Time)的 1/3。例如,在 BGP 连接建立阶段,双方商定保持时间为180秒,那么KEEPALIVE 报文就每隔60秒发送一次。如果两个对等端选择的保持时间不一致,就选择数值较小的一个作为彼此使用的保持时间。保持时间也可选择为 0。在这种情况下就永远不发送KEEPALIVE 报文,表明这条BGP 连接总是正常工作的。

BGP 可以很容易地解决距离向量路由选择算法中的“坏消息传播得慢”这一问题。当某个路由器或链路出故障时,可以从不止一个邻站获得路由信息,因此很容易选择出新的路由。

BGP报文是作为 TCP报文的数据部分来传送的(如图所示)。四种类型的BGP报文具有同样的首部。

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

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

相关文章

如何确保云中高可用?聊聊F5分布式云DNS负载均衡

在当今以应用为中心的动态化市场中,企业面临着越来越大的压力,不仅需要提供客户所期望的信息、服务和体验,而且要做到快速、可靠和安全。DNS是网络基础设施的重要组成部分,拥有一个可用的、智能的、安全和可扩展的DNS基础设施是至…

面试高频算法专题:数组的双指针思想及应用(算法村第三关白银挑战)

所谓的双指针其实就是两个变量,不一定真的是指针。 快慢指针:一起向前走对撞指针、相向指针:从两头向中间走背向指针:从中间向两头走 移除值为val的元素 题目描述 27. 移除元素 - 力扣(LeetCode) 给你…

IoT 物联网常用协议

物联网协议是指在物联网环境中用于设备间通信和数据传输的协议。根据不同的作用,物联网协议可分为传输协议、通信协议和行业协议。 传输协议:一般负责子网内设备间的组网及通信。例如 Wi-Fi、Ethernet、NFC、 Zigbee、Bluetooth、GPRS、3G/4G/5G等。这些…

ArkTS - @Prop、@Link

一、作用 Prop 装饰器 和Link装饰器都是父组件向子组件传递参数,子组件接收父组件参数的时候用的,变量前边需要加上Prop或者Link装饰器即可。(跟前端vue中父组件向子组件传递参数类似) // 子组件 Component struct SonCom {Prop…

python实现Ethernet/IP协议的客户端(二)

Ethernet/IP是一种工业自动化领域中常用的网络通信协议,它是基于标准以太网技术的应用层协议。作为工业领域的通信协议之一,Ethernet/IP 提供了一种在工业自动化设备之间实现通信和数据交换的标准化方法。python要实现Ethernet/IP的客户端,可…

影视后期: PR调色处理,调色工具面板介绍

写在前面 整理一些影视后期的相关笔记博文为 Pr 调色处理,涉及调色工具面板简单认知包括 lumetri 颜色和范围面板理解不足小伙伴帮忙指正 元旦快乐哦 _ 名词解释 饱和度 是指色彩的鲜艳程度,也被称为色彩的纯度。具体来说,它表示色相中灰色…

python实现平滑线性滤波器——数字图像处理

原理: 平滑线性滤波器是一种在图像处理中广泛使用的工具,主要用于降低图像噪声或模糊细节。这些滤波器的核心原理基于对图像中每个像素及其邻域像素的线性组合。 邻域平均: 平滑线性滤波器通过对目标像素及其周围邻域像素的强度值取平均来工…

Linux驱动学习—ioctl接口

1、unlock_ioctl和ioctl有什么区别? kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl 。ioctl是老的内核版本中的驱动API,unlock_ioctl是当下常用的驱动API。unlocked_ioctl 实际上取…

易舟云财务软件使用教程【文章目录】

易舟云财务软件使用教程【文章目录】 1、财务软件导论2、易舟云财务软件3、财务软件原理4、账套5、会计凭证6、资金日记账7、发票8、员工工资9、固定资产10、期末处理(结转与结账)11、会计账簿12、财务报表13、财务软件设置 1、财务软件导论 财务软件导论 2、易舟云财务软件 …

STM32与TB6612电机驱动器的基础入门教程

TB6612是一款常用的双路直流电机驱动芯片,适用于小型机器人以及其他需要控制电机方向和转速的应用。在STM32微控制器的配合下,可以实现对TB6612电机驱动器的控制,进而实现电机的控制。本文将带领读者一步步了解如何搭建基于STM32与TB6612的电…

Android 13 - Media框架(29)- MediaCodec(四)

上一节我们了解了如何通过 onInputBufferAvailable 和 getInputBuffer 获取到 input buffer index,接下来我们一起学习上层如何拿到buffer并且向下写数据的。 1、获取 input Buffer 获取 MediaCodec 中的 buffer 有两种方式,一种是调用 getInputBuffers…

Linux:/proc/sys/vm/目录各文件详解

目录 前言一、/proc/sys/vm/目录各文件二、相关功能的API函数 前言 /proc/sys/vm/ 目录是 Linux 系统中的一个特殊目录,它包含了与虚拟内存子系统相关的系统内核参数。这些参数可以用来配置系统的虚拟内存管理策略,包括内存分配、页面置换、内存压缩、NU…

【软件工程】航行敏捷之路:深度解析Scrum框架的精髓

🍎个人博客:个人主页 🏆个人专栏: 软件工程 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 Scrum(敏捷开发框架之一) 详细介绍和解释: 优缺点: 优点: 缺点&…

2.3 设计FMEA步骤三:功能分析

2.3.1 目的 设计功能分析确保要求/规范中的功能适当分配给系统要素。分析必须使用功能术语进行编写。 功能分析地主要目标是: 产品或过程功能可视化。制作功能树/网或功能分析表格和参数图(P图)。展开与顾客(内部和外部)功能相关的要求。将要求或特性与功能关联。促进工…

cocos creator + vscode debug

安装插件 安装插件:JavaScript Debugger 配置 7456 为本地cocos creator的启动端口 启动debug调试 选择对应的启动方式

计算机网络第一课

先了解层级: 传输的信息称为协议数据单元(PDU),PDU在每个层次的称呼都不同,见下图:

关于MySQL Cluster

目录 1.MySQL Cluster2.MySQL Cluster架构3.MySQL Cluster 与 MySQL 主从架构有什么区别4.参考 MySQL Cluster是MySQL的一个高可用性,高性能的分布式数据库解决方案。它结合了内存数据库和共享无状态架构的技术,提供了99.999%的可用性,满足严…

三、C语言中的分支与循环—循环嵌套 (9)

嵌套循环指的是一个循环内部包含另一个循环。外层循环每执行一次,内层循环会执行完其所有的迭代。嵌套循环经常被用来处理多维数据结构,如多维数组,或者在进行复杂的算法操作时,如排序和搜索算法。 嵌套循环可以是任意类型的循环…

excel统计分析——单因素方差分析

参考资料:生物统计学 方差分析是将总变异分解为组间变异的方差和组内变异的方差,并通过F检验推断处理效应是否显著的过程,而方差是通过平方和与自由度计算出来的,所以方差分析首先需要进行平方和与自由度的分解。具体步骤如下&…

RedisTemplate序列化

SpringBoot整合Redis,配置RedisTemplate序列化。如果使用StringRedisTemplate,那么不需要配置序列化,但是StringRedisTemplate只能存储简单的String类型数据,如图: 如果使用StringRedisTemplate存储一个常规对象&#…