哈工大计算机网络课程网络层协议详解之:Internet路由BGP协议详解

news2024/11/25 7:51:15

哈工大计算机网络课程网络层协议详解之:BGP协议详解

在之前的网络层协议中,我们介绍了Internet网络两个自治系统内的路由协议:RIP协议和OSPF协议。这两个协议应该来说是自治系统内协议的两个代表性协议,前一个基于距离向量路由算法,后一个基于链路状态路由算法。

在这一节中,我们进一步介绍Internet网络作为一个层次化路由,在自治系统间采用什么样的路由协议。为此引入BGP协议。

Internet AS间路由协议:BGP

BGP协议:边界网关协议(Border Gateway Protocol)。BGP协议目前已经成为Internet网络中域间(自治系统间)路由协议标准。目前正在使用的是BGP4,也就是第四版的BGP协议。BGP协议也是将Internet“粘合”为一个整体的关键,也正是因为有了这样的协议,才使得能够在全球性的大规模的Internet网络中实现路由信息的分发。

BGP为每个AS提供了一种手段:

  • eBGP:从邻居AS获取子网可达性信息。 即根据邻居连接的自治系统,到达哪些子网的信息。
  • iBGP:向所有AS内部路由器传播子网可达性信息。
  • 当把上述信息传播给自治系统内的每个路由器之后,每个路由器都可以基于可达性信息与策略,确定到达其他网络的最优路径。

有了BGP协议之后,事实上使得整个互联网中的任何一个子网,在互联网中有了这样一种途径或机制,能够让它在整个互联网中向其他子网通告自己的存在,告诉其他子网/网络如何将数据传输到它对应的子网中来。这也是BGP协议之所以重要和存在的意义和价值。

BGP协议基础

BGP会话(session)

BGP协议的内容和原理较为复杂,本节首先在这里介绍协议的基础概念,便于后续理解。

BGP会话(session): BGP协议的主要工作过程是通过在路由器之间,交换BGP报文来完成的。在两个BGP路由器(“Peers”)之间交换BGP报文的过程称为一个BGP会话。在完成BGP会话的过程中,两端的路由器在术语中被称为”Peer“,类似P2P应用中的”Peer“概念。事实上,是为了强调两个路由器间没有绝对的主次关系,而是对等的两方。

利用BGP的报文交换,从而实现:

  • 一个BGP的Peer路由器可以向另一个路由器通告去往不同目的前缀(prefix) 的路径(“路径向量(path vector)“协议)。这里的前缀也就是CIRD地址中的用来表示网络地址前缀。在网络中,我们经常使用前缀来表示一个子网,或者是一个任意大的IP网络。

    由于BGP协议交换的是一个子网层次的,或者说一个自治系统层次的目的地址,因此我们也成BGP协议是一个路径向量协议。因为它交换的是一个完整的自治系统路径。这跟我们之前介绍的自治系统内通告交换的距离向量或链路状态分组都是有差别的。在这些通告中,交换的是到达目的网络或路由器的最小费用路径,而BGP协议中通告是交换到达目的网络(自治系统)的一个完整的自治系统路径。

  • BGP协议的报文交换基于半永久的TCP连接。

    说明BGP协议同RIP协议一样,也是应用进程来实现的。更进一步说,使用的是TCP的传输层协议,在两个路由器Peer间要交换BGP报文,需要先建立连接。由于BGP协议的特殊性,一个BGP会话的连接建立后,可能长时间不会拆除。因为有时我们也称BGP协议的连接是一个半永久的TCP连接。

BGP报文

BGP协议中定义了多种类型的报文,最典型的四种报文包括:

  • OPEN报文:与Peer建立TCP连接,并认证发送方。
  • UPDATE报文:更新路径,通告新路径(撤销原路径)。当一个Peer向另一个Peer通告可达性信息的时候,就可以利用UPDATE报文进行通告,比如告知对方通过哪一条路径到达哪一个子网。也可以用于撤销原路径,比如原先通告的路径可能因为各种问题无法连通了,撤销原先通告的路径。
  • KEEPALIVE:在无UPDATE时,保活TCP连接;也用于对OPEN请求报文的确认。
  • NOTIFICATION:报告之前报文的差错;也被用于关闭连接。

总结:BGP协议主要是通过建立TCP连接,建立BGP会话来交换BGP报文,从而完成网络可达性信息(网络前缀路径)的传输和交换。

下面以一个例子来介绍BGP协议过程:

在这里插入图片描述

假设当自治系统AS3通告一个前缀给自治系统AS1 时:

  • 路由器3a会向路由器1c发送一个BGP报文,利用BGP报文来交换可达性信息。

  • 当一个自治系统向另一个自治系统通告前缀可达性信息时,作为这个自治系统实际上做了一个承诺:即该自治系统(e.g. AS3)承诺可以将数据报转发给该子网。

  • AS3在通告中会聚合网络前缀。

    由于BGP协议按层次路由的概念来说,属于最高层路由。因此,在网络前缀可达性信息通告过程中,会尽可能的进行路由聚合(会尽可能的把符合条件的网络前缀聚合在一起)。从而减少通告的报文量,节省带宽使用。

分发路径信息

事实上,作为BGP协议在分发路径信息时,会利用BGP会话来进行,而BGP会话按我们上面讲的进一步可以区分为外部会话和内部会话。

还是以上面图中为例

在这里插入图片描述

  • 在3a和1c之间,建立的BGP会话,跨越了两个不同的自治系统,事实上是两个不同自治系统的网关路由器之间建立TCP连接,按照TCP连接会话的方式进行通信。这种会话方式就被称为外部会话。

  • 在1c收到AS3发来的网络前缀可达性信息后,则可以利用iBGP向AS1内的所有路由器分发新的前缀可达性信息。

  • 进一步,作为AS1内部的路由器,1b可以(也可能不)通过1b—2a的eBGP会话,向AS2通告新的可达性信息。

当路由器获取新的前缀可达性信息时,即在其转发表中新增加关于该前缀的入口(路由项)。

路径属性与BGP路由(route)

下面我们接着看一个BGP协议在通告路径时,都包含什么样的信息。

我们前面介绍过,通告时一定会包含网络前缀信息,通告给不同的自治系统到达目的网络所需要走的链路,并让其记录在转发表中。

实际上,除了上述的网络前缀信息之外,还包括BGP协议的一些属性。

  • 前缀+属性 构成了BGP路由。

BGP协议定义了若干属性,比较重要的两个属性包括:

  • AS-PATH(AS路径):包含前缀通告所经过的AS序列:

    这个AS路径信息表示,在通告到达某个前缀路径的时候,可能经过了一系列的AS自治系统。因此这个路径就包含了这些自治系统的序列。比如,这个AS序列: AS 67, AS 17,表示需要把数据发送到某一网络前缀路径时,需要先经过自治系统67,再经过自治系统17,然后就是到达目的自治系统。

  • NEXT-HOP(下一跳):开始一个AS-PATH的路由器接口,指向下一跳AS。
    由于BGP协议是更高层次的协议,它所对应的维度是一个个的自治系统。因此,在BGP协议中,它的可达性信息中所表示的下一跳应该是一个自治系统,而不是路由器的概念。

比如下面这个例子,假设当路由器3a向路由器1c利用外部BGP会话,发送了一个前缀可达性信息,这里就包含了上述两个重要的属性:自治系统(AS)路径、下一跳AS。

因为从AS3发送的BGP报文可能经过了若干个自治系统才到达AS1,因此,AS-PATH包含了报文经过的所有自治系统路径:AS3、AS67、AS17…。

另一个重要信息下一跳,按我们上面介绍的,指向开始一个自治系统路径的路由器接口,比如这里AS3中路由器3a的发送接口11.11.1.1。

当AS1接收到前缀可达性信息后,还可能会继续向其相邻的自治系统中继续进行分发,以此类推。因此在BGP协议中,下一跳属性是非常重要的信息,因为假设存在多条路径可达目的子网时,下一跳属性就指明了每一次转发时下一跳应该具体走哪一条路径。

比如在图中的AS2,如果它向右侧的其他网络通告AS路径时,**通过2c和2b分发到达目的自治系统所对应的AS路径一定是相同的,但是两个通告的下一跳是不同的,路由器2c分发的是其路由器接口对应的IP地址,而2b则是其路由器接口对应的IP地址。**那么对于右侧的自治系统网络来说,最终选择2c还是2b,则对应了之前层次化路由中介绍过的,比如热土豆路由的方式来解决。

在这里插入图片描述

在介绍完上述BGP协议中的基本概念后,接下来深入介绍BGP协议如何再不同自治系统间进行路由选择的算法。

BGP路由选择

网关路由器收到对端网关路由的通告后,利用其输入策略(import policy)决策接受/拒绝该路由。这个输入策略重点就是要考虑策略问题:

  • 比如,根据某个策略,从不将流量路由到AS x。那么当你的AS-PATH中包含了这个自治系统x,就拒绝采用通告的这个路由信息。

因此,基于BGP的路由算法实际上是一种基于策略(policy-based)的路由。 在BGP协议的策略约束中,实际上很多都是由网络管理人员设置的,这个设置有的时候是策略,策略可能是技术层面的策略,也可能是企业层面的政策问题,再上层也可能是国家的政策问题(比如通告的路由的自治系统路径包含了敌对国家的自治系统)。

当路由器利用BGP协议获取了到达某一目的AS的多条路由时,基于以下准则选择:

  • 本地偏好(perference)值属性:策略决策(policy decision)。 比如在实际中会人为的为某些AS路径设置不同的偏好值,这个偏好值越大,代表选择的偏向性越高,反之亦然。这个偏好值也反映了BGP协议基于策略这样一个特性。

  • 当偏好值没有或者相等的情况下,进一步会考虑最短AS-PATH路径。 也就是把数据送到目的网络所经过的最短自治系统个数。注意,这里的最短是自治系统个数,而不是经过的链路费用或者路由器个数。

  • 另外一个准则是最近NEXT-HOP路由器:热土豆路由(hot phtato routing)。

    比如在上一节中的例子,可能从某个自治系统的两个路由器发送后,后续经过的自治系统路径一定是相同的,此时应该选择从这两个路由器中的哪个发送呢?这个时候的准则就是选择到达下一跳路由器(也就是下一个自治系统网关路由器)越近,就选择哪一个内部路由器转发。

  • 附加准则

接下来,通过一个示例观察BGP路由选择策略:

在这里插入图片描述

  • 在BGP协议层面,以自治系统AS为粒度,因此上述网路的A、B、C都表示一个自治系统AS,这里表示提供商网络ISP的自治系统。

  • X、W、Y是客户网络(customer network/AS)。

  • W、Y是桩网络(stub network/AS):只与一个其他AS相连。这种网络的跨自治系统路由相对来说更加简单了,不需要更复杂的BGP路由选择。因为离开或进入自治系统完全只能走一个接口,因此可能使用一个静态的路由配置就完成了。

  • X是双宿网络(dual-homed network/AS):连接两个其他AS。

作为客户自治系统,与运营商ISP自治系统最大区别在于,客户自治系统通常都不提供过路流量的传输。换句话说,如果数据报的目的地址不是在客户自治系统的内部网络的,而是需要做路由转发操作,实际上客户网络是不会这样做的。只有运营商的网络才提供这种路由转发服务。

在上述例子中,客户网络X是不提供经过它来路由B到C的流量。因为,网络X不会向B通告任何一条到达网络C的路由。

现在假设网络A向网络B通告一条路径:经过自治系统A可以将数据发送到自治系统W,AS-PATH为:AW。

作为网络B,由于X是B的客户网络,所以它会把这个路径可达性信息进一步转发给网络X, 此时的AS-PATH为:BAW。

那么,此时存在的问题是:网络B是否应该向C通告路径BAW呢?

BGP协议作为自治系统间的路由协议,事实上,运营商之间如何去交换网络可达性路径信息,其实并没有一个法律或是标准来完全约束。但是有一些通常大家遵循的基本原则:

  • 作为任何一个网络提供商,它提供路由的时候,只为它的客户网络提供服务。

在这种原则下,由于网络C和网络W均不是网络B的客户,网络B路由CBAW的流量没有任何收益,因此便不会把路由信息:CBAW通告给网络C。

In a word,在自治系统间路由时遵循的一个基本原则是:提供商网络通常只为它的客户网络提供路由服务。

对于网络B来说,它的客户是网络X,因此只有到达或离开网络X的流量,才会为其提供路由服务。在这样的原则下也意味着,网络B不把BAW的路径信息通告给网络C,从而强制网络C只能把数据路由给A在路由到目的网络W。

为什么采用不同的AS内与AS间路由协议?

最后,我们再总结归纳一下,在介绍了诸如RIP协议、OSPF协议、BGP协议之后,为什么在Internet网路中要根据不同的层次采用不同的路由协议?这样的好处是什么?

自治系统内的路由和自治系统间的路由其实主要从这几个方面考虑:

  • 策略(policy)
    • inter-AS:在自治系统间期望能够管理控制流量如何被路由,以及确定哪些路由可以经过其网络等。这些信息都很难单独利用一个算法来计算。
    • intra-AS:在自治系统内期望能够对路由信息进行单一管理,无需策略决策。
  • 规模(scale)
    • 从规模角度来说,层次化路由也是必须的。层次路由将网络划分不同的自治系统,从而缩小了路由算法计算路由信息时的规模,节省路由表大小,较少路由更新流量,也省了带宽消耗。
    • 基于层次化路由的策略,可以适应大规模互联网。
  • 性能(performance)
    • intra-AS:在自治系统内部侧重性能,因为没有不同自治系统间的差异。
    • inter-AS:策略主导。

小结

实际上BGP协议是一个非常复杂的协议,我们上述讲解的也只是BGP协议中非常基本的概念和逻辑,作为初步的了解。如果想深入研究里面的算法和思想,需要更进一步的参阅相关书籍。

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

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

相关文章

优化内存利用:深入了解垃圾回收算法与回收器

🔭 大家好,我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏:JVM &am…

机器学习面试题- 特征工程

目录标题 1、为什么要对特征做归一化2、对特征归一化的方法2.1 线性函数归一化2.2 零均值归一化 3、对数据预处理时,如何处理类别型特征3.1 序号编码3.2 独热编码3.3 二进制编码 4、什么是组合特征?如何处理高维组合特征?5、怎样有效地找到组…

​python接口自动化(十)--post请求四种传送正文方式(详解)​

简介 post请求我在之前的文章已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等。我们要知道post请求四种传送正文方式首先需要先了解一下常见的四种编码方式: HTTP 协议规定 POST 提交的数据必须放在消息主体(…

SpringBoot处理全局异常详解(全面详细+Gitee源码)

前言:在日常的开发工作中,项目在运行过程中多多少少是避免不了报错的,对于报错信息肯定不可以把全部信息都抛给客户端去显示,这里就需要我们对常见的七种异常情况统一进行处理,让整个项目更加优雅。 目录 一、基本介绍…

AMEYA360:航顺芯片产品有哪些 航顺家族介绍

经济型 HK32M050 家族 采用ARM Cotex-M0内核,最新工艺标准,最高48M主频,内置16K FALSH,4K SRAM,支持DMA,内置4个模拟比较器,2路运放(PGA),支持多种通讯包括2个…

二叉树 — 给定二叉树中某个节点,返回该节点的后继节点

后继节点定义: 二叉树以中序的方式进行遍历打印,节点X的下一个节点,就是X的后继节点。 假设二叉树如下图所示:则中序遍历的后打印出来的就是 4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7。如果X 3,则X的后继节…

Docker网络模型以及容器网络初探(一)

〇、前言 安装Docker时,它会自动创建三个网络,默认bridge网桥(创建容器默认连接到此网络)、 none 、host。各个方式有各自的特点,它们有着特定的差距,比如网络性能等,一般按照实际应用方式手动…

大数据之数据采集项目总结——hadoop,hive,openresty,frcp,nginx,flume

1、前期准备 2、数据收集 1、开启openresty,nginx和frcp内网穿透 2、编辑并启动定时器 3、查看是否收集到了数据 数据收集阶段结束,进入下一个阶段 2、将收集到的切分好的数据上传到hdfs 使用的工具:flume flume像一个管道一样&#xff0c…

三十九、动态规划——线性DP问题-例题题解

线性DP问题的例题状态划分 一、问题:数字三角形1、题目内容2、状态划分1)状态编号 f[i][j]2)状态划分 3、题解 二、最长上升子序列1、题目内容2、状态划分1)状态编号 f[i]2)状态划分 3、题解 三、最长公共子序列1、题目…

【二维偏序+双指针】ABC245 E

E - Wrapping Chocolate (atcoder.jp) 题意: 思路: 因为两个数组都是无序的,因此可以考虑给这两个数组都排个序 将物品和盒子都按照两个维度去排序 我们可以先去枚举物品,然后去选对应的盒子 在选盒子的过程中,注…

【王道·操作系统】第四章 文件管理(下)

一、文件系统 1.1 文件系统的层次结构 用户需要通过操作系统提供的接口发出上述请求——用户接口由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项——文件目录系统不同的用户对文件有不同的操作权限,因…

c++读取字符串字符时出错

这是我做的一个c爬虫程序但是在抓取网页的时候string类型传递出现了问题 以下是图片代码 url的值是 "http://desk.zol.com.cn/" 我不知道为什么数据传递会出问题 请大佬指教

Java 串口通信(RS232/485)

Java 串口通信(RS232/485) 一.串口通信页面二.串口服务实现1.Java 串口通信配置1.扩展包和依赖库2.Pom配置 2.启动类3.工具包类1.Common2.Crc16Modbus3.SerialUtil 4.WebSocket 配置1.启动配置2.监听配置 5.UI交互类1.串口配置对象2.串口信息获取接口3.R…

HOT39-对称二叉树

leetcode原题链接:对称二叉树 题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出&a…

JVM03-优化垃圾回收

JVM的内存区域中,程序计数器、虚拟机栈和本地方法栈这3个区域是线程私有的,随着线程的创建而创建,销毁而销毁;栈中的栈帧随着方法的进入和退出进行入栈和出栈操作,每个栈帧中分配多少内存基本是在类结构确定下来的时候…

消息中间件面试题详解

RabbitMQ 如何保证消息不丢失 消息的重复消费问题如何解决 rabbitmq中死信交换机(RabbitMQ延迟队列有了解吗) 延迟队列:进入队列的消息会被延迟消费的队列 场景:超时订单,限时优惠,定时发布 延迟队列 …

【Linux】-第一个小程序(进度条)

💖作者:小树苗渴望变成参天大树 🎉作者宣言:认真写好每一篇博客 🎊作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作…

Activiti modoler 整合后报错 TypeError: Cannot read property ‘namespace‘ of undefined

之前在Demo整合过没问题,结果好不容易整合到现在的项目,结果出现成这个鬼样子……问题找了好久,一直以为是SpringSecurity请求限制没放开,所以找SpringSecurity的debug日志,浏览器请求有没有404、500、502等&#xff0…

将OpenAI和ChatGPT模型与LearnDash线上学习平台结合使用

人工智能革命来了!(以尽可能最好的方式。)了解如何使用 Uncanny Automator 通过 OpenAI 和 ChatGPT 模型为您的线上学习和LearnDash LMS提供动力。 当人们听到“人工智能”这个词时,他们往往会想到流氓机器人、无政府状态的机器人…

科技项目验收测试报告包括哪些内容?

科技项目验收测试报告是评估科技项目质量和可靠性的重要文件。通过全面的测试和评估,可以确保项目的质量,提高用户满意度,降低项目风险。 一、科技项目验收测试报告的内容 1. 项目概述:介绍项目的背景、目标和范围,…