八、BGP

目录

一、为何需要BGP?

二、BGP        

2.1、BGP邻居

2.2、BGP报文

2.3、BGP路由

2.4、BGP通告遵循原则

2.5、BGP实验

第一步:建立邻居

第二步:引入路由

BGP路由黑洞

路由黑洞解决方案

1、IBGP全互联

2、路由引入

3、MPLS 多协议标签交换

三、BGP路由反射器


        路由策略:让自己不计算路由或者让自己不产生LSA发送给邻居

        ospf:企业网

        isis:运营商

一、为何需要BGP?

        IGP:内部网关协议,ospf,isis等

        1、IGP无法承载和计算庞大的路由条目,IGP能够处理的路由条目有限,OSPF10000条

        2、同一批路由器运行了相同的协议,如OSPF,只有没有做策略,两两设备间都能相互通信,两个协议之间需要有限制的去传递路由信息

二、BGP        

        BGP基本原理:ASBR设备把想发布到其他AS的路由先引入到本设备运行的BGP中,再通过BGP报文发送到对等体中,最终实现跨AS的路由传递。

        BGP:边界网关协议

        AS:自治域系统

        BGP工作在AS的边界上,采用TCP作为传输层协议,端口号179,触发式更新,而不是周期性更新。

        BGP路由器(BGP发言者,BGPSpeaker):运行BGP的路由器

        通过BGP的属性可以获悉路由传递过来经过的路径,这条路由从哪里产生,经过了哪些AS,经过了哪台设备的转发,开销是多少等,所以被称为路径矢量路由协议

2.1、BGP邻居

        BGP建立邻居关系(单播起邻居,前提是能够通信)的路由器分为两种:

  1. 不同AS之间建立的邻居关系称为EBGP peer(一般用物理口直连路由起邻居
  2. 同一AS之间建立的邻居关系称为IBGP peer(一般用环回口起邻居,因为物理口down就没有邻居关系了,但其他路由能够通信),先跑IGP协议确保能够通信,再建立IBGP邻居关系,并且可以跨路由器建立邻居。

        R1-R2-R3(R1的环回口1.1.1.1,R3环回口3.3.3.3)

        R1和R3已建立IBGP邻居关系,R1向R3发送BGP路由(BGP封装在TCP+IP上)时,R2会不会学到BGP路由?不会!  

        R1-R2

        先启动BGP的一端先发起TCP连接,如上所示,R1先后动BGP,R1使用随机端口号向R2的179端口发起TCP连持完成TCP连接的建立。
        三次握手建立完成之后,R1、R2之间相互发送Open报文携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive(保活)报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。

2.2、BGP报文

        open报文包含:

  1. My Autonomous System:自身AS号
  2. Hold Time:用于协商后续Keepalive报文发送时间
  3. BGP Identifier:自身Router ID

        Update报文:发送BGP路由更新

        Keepalive报文:标志对等体建立,维持BGP对等体关系,60s一次

        Notification报文:报告错误信息,中止对等体关系

        Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文

2.3、BGP路由

        BGP并不会发现并计算产生路由,只是路由的搬运工

        引入路由的前提以本设备的全局路由为准!

        引入路由方式:

  1. network 192.168.1.0 24(逐个引入)
  2. import-route ospf/isis/direct(批量引入)

        ASBR设备运行BGP引入所在AS的路由生成BGP路由后,将BGP路由通过update报文分享给对等体。         

2.4、BGP通告遵循原则

  1. 只发布最优且有效路由
  2. 从EBGP对等体获取的路由,会发布给所有对等体
  3. IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
  4. BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。

        四种情况:

  1. EBGP邻居—ASBR—EBGP邻居
  2. EBGP邻居—ASBR—IBGP邻居
  3. IBGP邻居—ASBR—EBGP邻居
  4. IBGP邻居—路由器—IBGP邻居(II不传)
  5. 前三种,左侧邻居把BGP路由引入到中间路由器,路由器会传递到右侧邻居;最后一种不可以。

思考:为什么第四种不可以?

        如上图,四个路由器都运行了IBGP,假设第四种情况可以传递路由,就会形成路由环路,如果R1和R4链路,按照IBGP邻居建立规则,R1仍然和R4仍然可以建立IBGP邻居,仍然存在环路。

        如上图,R1和R2是EBGP邻居,R2和R3、R4、R5为IBGP邻居,R2收到EBGP路由后会发送给R3和R4,因为I和I不能传,所以R5也是由R1直接传递EBGP路由,也就是说IBGP邻居的BGP路由全都来自于ASBR,即IBGP水平分割

2.5、BGP实验

需求:1.1.1.1和5.5.5.5能够通信

第一步:建立邻居

R1和R2采用物理口直连路由起EBGP邻居

##R1
bgp 100
    router-id 1.1.1.1
    ##告知对等体的ip和as号
    peer 12.1.1.2 as-number 200
    ##无需手工自动生成的配置
    ipv4-family unicast##支持ipv4地址族单播路由
    undo synchronization##淘汰的功能,忽略
    peer 12.1.1.2 enable##自动在ipv4地址族下建立了指定的邻居


##R2
bgp 200
    router-id 2.2.2.2
    ##告知对等体的ip和as号
    peer 12.1.1.1 as-number 100

R4和R5采用环回口起EBGP邻居,前提确保路由互通

##R4
int lop10
    ip add 10.4.4.4 32
ip route-static 10.5.5.5 32 45.1.1.5

##AS号200
bgp 200
    router-id 4.4.4.4
    peer 10.5.5.5 as-number 300
    ##修改建立邻居的通信接口为环回口,默认情况采用直连物理口
    peer 10.5.5.5 connect-interface lop10
    ##默认情况下,EBGP只能有一跳(即直连起邻居),用环回口就多了一跳
    peer 10.5.5.5 ebgp-max-hop 2

##R5
int lop10
    ip add 10.4.4.4 32
ip route-static 10.4.4.4 32 45.1.1.4

bgp 300
    router-id 5.5.5.5
    peer 10.4.4.4 as-number 200
    ##修改建立邻居的通信接口为环回口,默认情况采用直连物理口
    peer 10.4.4.4 connect-interface lop10
    ##默认情况下,EBGP只能有一跳(即直连起邻居),用环回口就多了一跳
    peer 10.4.4.4 ebgp-max-hop 2

R2和R4采用环回口起IBGP邻居,前提确保路由互通

##用ospf路由保证互通,别忘了配置环回口和在ospf内激活环回路由,因为要用环回路由建立邻居
##R2
bgp 200
    router-id 2.2.2.2
    peer 4.4.4.4 as-number 200
    peer 4.4.4.4 connect-interface lop10
    ##IBGP默认路由跳数为255,所以不用修改

##R4
bgp 200
    router-id 4.4.4.4
    peer 2.2.2.2 as-number 200
    peer 2.2.2.2 connect-interface lop10
    ##IBGP默认路由跳数为255,所以不用修改

第二步:引入路由

        注:引入路由后对本设备全局路由表(dis ip routing-table)无影响,对bgp路由有影响(dis bgp routing-table)

##R1
bgp 100
    network 1.1.1.1 32

        dis bgp routing-table:带*为有效路由;下一跳0.0.0.0代表本地始发;bgp中认为下一跳是属性,所以在IBGP内传递的过程中不会被修改,但因为在R4上12.1.1.1不可达,所以变为无效路由,此时,R4不会把该BGP路由发给R5,如下图:

        综上,所以需要添加策略,当R2把BGP路由发送给R4的时候让它修改下一跳

##R2
bgp 200
    ##发路由时启用的策略,作用是发给4.4.4.4的所有路由下一跳属性改为本地(即peer 4.4.4.4 connect-interface lop10中的lop10)
    peer 4.4.4.4 next-hop-local

        此时再在R4上查看bgp路由发现下一跳为2.2.2.2

        disp fib:转发表,会把需要递归的路由简化

        到此为止时,1.1.1.1的路由发布到R5上了,但5.5.5.5的路由还没发布到R1上,所以不能互通.

##R5
bgp 300
    network 5.5.5.5 32

##R4
bgp 200
    peer 2.2.2.2 next-hop-local

        到此为止时,1.1.1.1和5.5.5.5仍然不能互通,因为在R3上没有二者的路由,该现象称之为BGP路由黑洞

BGP路由黑洞

BGP路由黑洞产生原因

        路由从R1到R5和R5到R1时经过R3可以传送,但数据包却不能转发?

        路由从R2到R4时,sip为2.2,dip为4.4,R3上是有2.2.2.2和4.4.4.4的路由的。

        而R1pingR5时,sip为1.1,dip为5.5,R3上没有理由,所以丢弃。       

路由黑洞解决方案

1、IBGP全互联

        让AS内部所有路由器运行BGP,并且,全部建立IBGP邻居关系。

        缺点:如果AS内设备较多,就要建立很多很多IBGP邻居关系,配置很复杂;而且会要求内部所有设备都学习外部路由。

2、路由引入

        注:IBGP传入的路由不能引入IGP

        在ASBR上,把BGP引入到IGP中,使得AS内部路由通过IGP学习到外部路由。
        缺点:BGP路由条目很多,有可能IGP协议无法承载,内部路由器都要学习外部路由。

##R2
ospf 1
    import-route bgp

        如下图,R2的BGP路由有两个:1.1.1.1(EBGP传入)和5.5.5.5(IBGP传入),所以R3的路由表只学到1.1.1.1的路由。

        所以,R3想要学到5.5.5.5的路由,需要在R4引入

##R4
ospf 1
    import-route bgp
3、MPLS 多协议标签交换

        使用MPLS直接建立ASBR之间的隧道,使得内部路由器无需学习任何外部路由,即可完成转发。

        完美解决路由黑洞,将来使用BGP,几乎必然配合MPLS使用,解决其路由黑洞问题。

三、BGP路由反射器

        IBGP内ASBR数量多时,需要单个ASBR分别与其他的ASBR起邻居,导致建立邻居关系过多。

        作用:简化邻居关系

        打破II不传原则

        反射:不会改变路由内容;直接给邻居;

        传递:会对路径进行优选,并修改相关属性传递给邻居;

        R3收到R1反射的R2的路由,R3会认为是R2发给它的,在R1上配置反射器的时候告知R1客户端为R2,但是R2不知道自己是客户端,也不知道谁是反射器。

引入路由反射器之后存在两种角色:
        RR(Route Reflector):路由反射器
        Client:RR客户端
        RR会将学习的路由反射出去,从而使得IBGP路由在AS内传递,无需建立IBGP全互联。
        将一台BGP路由器指定为RR的同时,还需要指定其Client。至于Client本身,无需做任何配置,它并不知晓网络中存在RR。

        反射规则:IBGP邻居之间反射

  1. client—RR—client
  2. client—RR—No client
  3. No client—RR—client
  4. No client—RR—No client
  5. 前三种可以反射,最后一种不可以(非非不传)

路由环路隐患

        RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:
        Originator_ID:发起者ID

        将R1的router-id写在R2发给R1的路由条目中,反射器R2收到后将router-id改写为OID属性:2.2.2.2,且反射给R3时OID仍为2.2.2.2,R3收到后与自己router-id比较,一致丢弃,不一致传递。当同一AS内有多个RR,OID由第一个RR为路由条目写上OID。        

        如图,R1、R3、R4都为反射器,OID防环失效。

        Cluster_List:簇ID列表,类似水印

    R2发送给R1的路由,经过R1反射给R3时除了添加Originator_ID之外还会添加Cluster_List:10.0.1.1。R3再次反射给R4时,Cluster_List值为:10.0.3.3 10.0.1.1,R4再次反射给R1时Cluster_List值:10.0.4.4 10.0.3.3 10.0.1.1。
        当R4将路由反射给R1时,R1发现Cluster_List包含了自身Cluster_ID,判断存在环路,从而忽略该路由更新。
        这两个属性不会传递给EBGP邻居,即都属于可选过渡类型。

        同级反射器:两个反射器配置相同的簇ID,避免路由在两个反射器之间互相反射,节约设备性能。

##R2、R3、R4ospf协议互通,确保环回口路由激活
##R2和R3、R3和R4建立IBGP邻居

第一种方法:在反射器上配置对方为客户端
##R3
bgp 200
    router-id 3.3.3.3
    peer 2.2.2.2 as-number 200
    peer 2.2.2.2 connect-interface LoopBack0
    peer 4.4.4.4 as-number 200
    peer 4.4.4.4 connect-interface LoopBack0
    ##配置2.2.2.2和4.4.4.4为反射器客户端
    peer 2.2.2.2 reflect-client
    peer 4.4.4.4 reflect-client  

第二种方法:
bgp 200
    ##ibgp 为名字,internal代表ibgp
    group ibgp internal
    peer ibgp as onnect-interface LoopBack0
    peer ibgp reflect-client  
    ##将邻居加入ibgp组
    peer 2.2.2.2 group ibgp
    peer 4.4.4.4 group ibgp

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】数据处理:Matplotlib绘图

Matplotlib是Python强大的数据可视化工具库,类似于MATLAB语言。Mat-lotlib提供了一整套与MATLAB相似的命令API,十分适合进行交互式制图,而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。 Matplotlib是神经生物学家John D.Hu…

轻松拿捏C语言——【关机代码】

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 🎉创作不易,请多多支持🎉 🌈感谢大家的阅读、点赞、收藏和关注💕 🌹如有问题,欢迎指正 我们可以通过写…

c++编程(16)——STL(4)deque

欢迎来到博主的专栏:c编程 博主ID:代码小豪 文章目录 dequedeque的优劣势deque的操作constructor元素访问 deque deque的全称是double ended queue,译为双端队列,如何理解这个双端呢?我们以vector为例,vec…

深入剖析人才管理的关键要素:“选、用、育、留”四大核心要素

在当今这个日新月异的商业时代,企业的成功不再仅仅取决于资金、技术或市场策略,而更多地依赖于企业所拥有的人才资源。有效的人才管理策略,尤其是“选、用、育、留”四大核心要素,已成为推动企业持续发展的关键。 一、选&#xff…

Canvas绘制老友记时钟

Canvas绘制老友记时钟 前言 一直做3D/2D可视化&#xff0c;Canvas API和三角函数&#xff0c;空间几何是基础。在官网上看了一遍Canvas API之后&#xff0c;决定绘制一个老友记时钟来巩固知识点&#xff0c;本文用实际代码讲解绘制过程。 代码 HTML <canvas id"myC…

electron模板【lectron-react-boilerplate】多窗口配置【HtmlWebpackPlugin】多页面配置

如果您正在使用electron-react-boilerplate进行快速的Electron应用程序开发,您可能会遇到想要在桌面应用程序中拥有多个原生窗口的情况。 MacOS窗口图像由OpenClipart-Vectors提供,来源Pixabay。 开始之前需要提及的事情! Electron有一个主进程和渲染进程的模式。可以有多个…

【MySQL】聊聊数据库是如何保证数据不丢的

对于一个存储系统来说&#xff0c;其中比较关键的核心组件包含&#xff0c;网络、存储模型、持久化、数据结构等。而数据如何保证不丢失&#xff0c;对于不同的存储系统来说&#xff0c;比如Redis采用AOF和RDB的方式进行混合使用&#xff0c;而MySQL采用日志进行保证。也就是re…

【C++11】第一部分(一万六千多字)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 C11简介 统一的列表初始化 &#xff5b;&#xff5d;初始化 std::initializer_list 声明 auto decltype 右值引用和移动语义 左值引用和右值引用 左值引…

车票信息的请求与显示

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 发送与分析车票信息的查询请求 得到了获取车票信息的网络请求地址&#xff0c;然后又分析出请求地址的必要参数以及车站名称转换的文件&#xff…

利用鱼骨图进行项目问题复盘与改进

一、引言 在项目管理中&#xff0c;问题复盘是一个至关重要的环节。它不仅能帮助我们识别项目执行过程中出现的问题&#xff0c;还能促使我们深入探究问题的根本原因&#xff0c;从而采取有效的改进措施。在这个过程中&#xff0c;鱼骨图作为一种强大的工具&#xff0c;为我们…

GiantPandaCV | 提升分类模型acc(三):优化调参

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;提升分类模型acc(三)&#xff1a;优化调参 一、前言 这是本系列的第三篇文章&#xff0c;前两篇GiantPandaCV | 提升分类模型acc(一)&#xff1a;B…

一文讲通:前后端分离的四种开发模式,及其优缺点。

前后端分离已经成为了开发的主流模式&#xff0c;很多老铁认为前后端分离就是各干各的&#xff0c;其实不然。 前后端分离有多种模式&#xff0c;贝格前端工场为大家一一详解。 1. 前后端完全分离 在这种模式下&#xff0c;前端和后端是完全独立的两个系统。前端使用一种框架…

Python学习笔记9:入门知识(九)

缩进 什么是缩进&#xff1f; 缩进&#xff0c;简单的理解为本行的首字符相比上一行的首字符位置相对靠后。目前笔者接触的编程语言缩进一般是4字符&#xff0c;直接可以按tab键就行。 为什么突然讲缩进&#xff1f; Python这门语言&#xff0c;是依靠缩进来判断当前行与上…

十五边形有多少条对角线?(解答某位网友的困惑)

想要做出这种题目&#xff0c;必须得先列举一些多边形的例子。 三角形&#xff1a;000 四边形&#xff1a;112 五边形&#xff1a; 六边形&#xff1a; 此时即可发现规律&#xff1a; 三角形的对角线为(3-3)(3-3)0 四边形为&#xff1a;(4-3)(4-3)2 五边形为&#xff1a;…

增强的依赖性

增强的依赖性 原文参见 https://universaldependencies.org/u/overview/syntax.html 受控/提升主语 受控主语&#xff1a;表示主语由控制动词决定。提升主语&#xff1a;表示主语通过提升动词从嵌套句提升到主句。 基本树缺少受控动词与其控制者之间的主语依存关系&#xf…

民生银行信用卡中心金融科技24届春招面经

本文介绍2024届春招中&#xff0c;中国民生银行下属信用卡中心的金融科技&#xff08;系统研发方向&#xff09; 岗位2场面试的基本情况、提问问题等。 2024年04月投递了中国民生银行下属信用卡中心的金融科技&#xff08;系统研发方向&#xff09; 岗位&#xff0c;暂时不清楚…

8个宝藏APP,个个都牛逼哈拉!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 目前win7已经逐渐淡出人们的视野&#xff0c;大部分人都开始使用win10&#xff0c;在日常工作和使用中&#xff0c;创客们下载神奇的软件能大幅提…

最新下载:Folx【软件附加安装教程】

​Folx Pro是一款适合Mac的专业下载工具也是一款BT下载器&#xff0c;Folx中文版有一个支持Retina显示的现代界面&#xff0c;提供独特的系统排序、存储下载内容与预览下载文件&#xff0c;Folx中文官网提供Folx教程、激活码、下载。 Folx友好兼容浏览器&#xff1a;如果你在网…

Ubuntu 18.04下普通用户的一次提权过程

Ubuntu 18.04下普通用户的一次提权过程 一.背景介绍:二.主要调试过程:三.相关命令:1.设置BMC密码,获取BMC IP2.找一台ubuntu搭建TFTP服务,用来替换grub.cfg文件3.从调试服务器的/boot/grub/grub.cfg中提取出recovery mode的配置,简化并生成新的配置文件grub.cfg,放在tftp服务的…

Python教程:超详细1小时学会Python,太简单了!

1.Hello world 安装完Python之后&#xff0c;打开IDLE(Python GUI) &#xff0c;该程序是Python语言解释器,你写的语句能够立即运行。 我们写下一句著名的程序语句&#xff1a; 并按回车&#xff0c;你就能看到这句被K&R引入到程序世界的名言。 在解释器中选择"File…