【网络技术设备安全】BGP 基础与概述-2-中转 AS 中的 IBGP 路由传递

0x01 中转 AS 中的 IBGP 路由传递

参考该图:

图片

上图,我们模拟一个 1.0 的路由通过 AS 65101 来传递

1:通过图可知,A 与 B 之间的 Peer 为 EBGP,B 与 E 之间为 Peer IBGP,E 与 F 之间为 Peer EBGP 邻接

2:A 通告 1.0 路由给 EBGP 邻居 B,那么 B 则跨 OSPF 路由 TCP 通信传递给 E,E再通过 EBGP 邻接关系传递给 F 注意:该路由为 AS 65101 update 通告给邻接的一个消息,而不是通信

3:F 已知去往 A 1.0 的路由,如果 AS F 要去往 1.0 路由,需要通过 EBGP E 转发

2:而当 E 转发该路由的时候,只有扔给 D,C 二者之中的一个,当转发到该非 BGP 路由器上的时候,D,C 二者是不知道如何操作该 BGP 路由的,会被直接丢弃,我们将其称作路由黑洞

这里我就叫它 AS 中转 IGP 黑洞

0x02 BGP 同步 🔺

既然出现了路由黑洞,那么就会有解决方法,如 RIP 一样,RIP 拥有水平分割来防环,那么 BGP 就有同步规则来防止路由黑洞

BGP 同步规则:

BGP 的同步规则指出,一台 BGP 的路由器,你不能将通过 IBGP 获取到的 BPG 路由,通告给你的 EBGP 邻居,除非你通过 IGP,又一次获取到这条路由的更新

该同步规则的着重点在于 IGP 路由拥有 BGP 路由跟新过来的路由条目,能够识别 BGP 路由,同时转发给 AS 边界 BGP 路由器这里可能有理解错误,但是大致是这种情况

需要注意的一点是该规则是有点鸡肋的,因为随时可像 ARP 那样欺骗

Cisco IOS 默认关闭同步规则

既然又默认关闭,开启又鸡肋可欺骗,那么前辈们就总结出如下几个方法,来解决路由黑洞的问题

解决办法 1

该方案不是最优建议,因为 BGP 承载大量路由,重发布可能导致 IGP 跑死

参考图:

图片

在 B、E 上将 BGP 路由重发布进 IGP (OSPF) 路由中,可解决路由黑洞问题

解决方法 2

该方案是采取 AS 边界路由全起 BGP 来达到无死角,即 AS 路由器全跑 BGP 路由,从而使得 B peer E D C,邻接,那么这个时候,就不会存在路由黑洞的问题,BGP 同步规则也没必要开启 [ BGP 同步规则,Cisco 默认关闭]

参考图:

图片

该方案缺点:

IBGP 全互联虽然能结局 Transit AS 内的路由黑洞问题,但是却造成 BGP 路由器需耗费大量资源维护 BGP 连接的新问题。

以下为两个资源损耗过大的解决方案:

  • 路由反射器
  • 联邦

0x03 IBGP 水平分割原则 🔺

我们在 RIP 中有水平分割原则,那么视野扩到 IBGP ,其维护的 Peer IBGP 的邻接关系所处的 水平分割原则又是什么样的?

🔺 IBGP 水平分割原则:

当我的一台路由器从我的某一个 IBGP 邻居收到一条 BGP 路由的时候,我将不能够再传递给其他任何一个 IBGP 邻居

以下为讲解过程:

BGP 防环是通过 AS-PATH 实现的,而 AS-PATH 仅仅再路由离开 AS 才会被更改,因此在 AS 内, IBGP 就没有 EBGP 的防环能力,为了防止环路的出现,BGP 路由器不会将从 IBGP 邻居学习过来的路由再通告给自己其他 IBGP 邻居。——BGP 的水平分割原则。

由于水分分割原则的存在,BGP 要求 AS 内,需保证 IBGP 全互联 ( neighbor 命令指定)。

( 根本原因是再 AS 内部,AS-PATH 不会改变,无法使用 AS-PATH 防环,因此会导致出现环路)

0x04 BGP 路由通告规则 🔺

  • 当存在多条路径时,BGP Router 只选取最优的路由 ( BEST ) 来使用 (没有负载均衡的情况下)
  • BGP 只把自己使用的路由,也就是自己认为 BEST 的路由传递给 BGP peer
  • BGP Speaker 从 EBGP 获得的路由会向他所有的 BGP peer 通告 包括 EBGP 和 IBGP
  • BGP Speaker 从 IBGP 获得的路由不向它的 IBGP 相邻体通告 (水平分割原则:避免环路,存在路由 RR 的情况除外)
  • BGP Speaker 从 IBGP 获得的路由是否通告给它的 EBGP peer 要看 IGP 和 BGP 的同步情况来决定

0x05 BGP 路由表

  • BGP 邻居表:Peer 对等体列表
  • BGP 表:包含了所有从邻居 Peer 对等体那学来的路由条目,以及到达目的的网段的多个路径和属性
  • 路由表:列出了到达目的网段的最佳路径
  • AD:EBGP = 20 ,IBGP = 200

0x06 BGP Next-hop 属性

该特征下一跳与其他下一跳不同,具体看以下解析

BGP 路由器从一个 EBGP 邻居收到一条路由的时候,BGP 路由器会将该 EBGP 邻居的接口 IP 作为我这条路由的下一跳 Next-hop,通告给我的 IBGP 邻居

该 Next-hop 属性只会在 不同 AS 之间发生改变,而 AS 内部是不会发生改变的

参考图如下:

图片

其他参考:

  • BGP 是 AS-by-AS 的路由协议,而不是 router-by-router 的路由协议
  • 在 BGP中,next-hop 并不意味着是下一台路由器,而是到达下一个 AS 的 IP 地址
  • EBGP 中, 默认 next-hop 为发送更新的理解路由器的 IP 的地址
  • IGBP 中,从 EBGP 传来的 Next-hop 属性是在 IBGP 中保持不变的被传递

0x07 BGP 更新源

跟新源在于声明 loopback 基础上

在没有学习 BGP 跟新源的时候,我们使用直连接口建立 BGP peer 邻居关系

如果任何一个直连接口 down 掉,或者任何一个链路 down 掉都将直接导致 BGP 邻居 down,或者 BGP 路由之间的连接消失

如果我们使用 loopback 口来建立 Peer 关系,如果链路 down 了,只要我们有冗余链路,那么该链路会借助 IGP 协议从而再次发现 Peer,使得 BGP 链路更加稳定,邻居关系起到稳定作用

一般而言,与 EBGP 之间仍然采用之间接口指定更新源

参考图如下:

图片

0x08 EBGP 之间使用 Loopback 建立跟新源


如果通过 EBGP 建立邻居关系,其默认 next-hop 为 1

需要注意的是,我们通过 loopback 口建立更新源,其 next-hop 最小值为 2

所以如果通过 loopback 建立更新源,我们需要调整该跳数,同时需要指定 EBGP 邻居间的通信无碍

具体调整方式参考 BGP 基础配置.md

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

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

相关文章

python函数变量的作用域_学不会的Python函数——变量作用域

1. LEGB函数Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。我们先来看一段代码。上述代码有两个变量a,当在test函数中输出变量a的值是,为什么输出的是20,而不是10呢&#x…

浅谈JSP表单中的form传值

不同JSP页面之间、不同action之间,以及JSP中form与其对应的action之间,JSP中form与其不对应的action之间如何传值。本文将介绍JSP表单中的form传值。 JSP表单中的form传值 页面间链接和数据传递的三种方式 (1)通过JSP表单form将数据提交到下一个页面&…

react.js从入门到精通(一)

web端三大框架react、vue和angular,下面是对react.js的一些总结。 一、环境搭建 1、npm搭建项目 推荐使用npm搭建项目环境,如果网速过慢,可是使用cnpm进行项目的搭建(cnpm是淘宝的npm镜像,与npm有些差异,有…

java 代码冲突检测_Java中常见的代码冲突

java 代码冲突检测在工作中,最近我对现有Java项目进行了代码清理。 完成该练习后,我可以看到在代码中一次又一次地发生了一组常见的代码冲突。 因此,我想出了此类常见违规的清单,并与同行共享,以提高安全意识&#xff…

ubuntu 编译mysql_Ubuntu编译MySQL5

编译MySQL5源码提示 No curses/termcap library found,但安装curses termcap都提示已经安装。编译时加上路径即可解决,即./conf编译MySQL5源码提示 No curses/termcap library found,但安装curses termcap都提示已经安装。编译时加上路径即可…

WIN7下搭建FTP

步骤如下: 一、 二、 三、 四、 五、 六、 七、 八、 九、检验 注意:只有本机可以访问ftp,外部电脑无法访问ftp?可能是防火墙未关闭。

Android调用系统拍照裁剪和选图功能

最近项目中用到修改用户头像的功能,基本上都是模板代码,现在简单记录一下. 调用系统拍照private fun openCamera() { //调用相机拍照// 创建File对象,用于存储拍照后的图片var outputImage File(externalCacheDir, "output_image.jpg")try {if (outputI…

忘记番石榴:5个Google库Java开发人员应该知道的

什么是最有用但未知的Google Java库? 如果我们在激烈的黑客马拉松中阻止某人并要求她命名一个受欢迎的Google Java库,那么答案可能就是Guava。 这也就不足为奇了,因为它的主要重点是提高开发人员的生产力。 但是其他Google图书馆呢&#xff…

VS在win32平台与mysql链接_mysql5.5.28-win32 + qt--4.8.2-vs2008 数据库驱动编译与连接...

我们来编译配置qt的mysql数据库驱动,首先看看官方文档的说明,如下How to Build the QMYSQL Plugin on WindowsYou need to get the MySQL installation files.RunSETUP.EXEand choose "Custom Install".Install the "Libs & Include …

JAVA知识学习——类的修饰符

Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非访问控制符两大类。修饰符之间的先后排列次序对类的性质没有任何影响。一,非访问修饰符。 1…

神秘的数组初始化_I / O神秘化

神秘的数组初始化由于对高度可扩展的服务器设计的所有炒作以及对Node.js的狂热,我一直想重点研究IO设计模式,直到现在为止都没有足够的时间进行投资。 现在已经做了一些研究,我认为最好记下我遇到的东西,作为对我以及可能遇到这篇…

mysql characteristic_MySQL存储过程定义中的特性(characteristic)的含义

MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容…

hive 案例分析

转自 http://www.cnblogs.com/guanhao/p/5641675.html 1. 创建数据库,切换数据库 create database testdb2; use testdb2; 2. 创建管理表 create table emp( empno int, empname string, job string, mgr int, hiredate string, salary double, comm double, deptn…

BeanUtils包的使用

BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作。 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: (1) BeanUtils相关包 commons-beanutils-1.8.3.jar commons-beanutils-1.8.3-javadoc.jar commons-beanuti…

使用JMX作为Ganglia的现代替代品进行CLDB监视

有许多选项可用于监视MapR集群的性能和运行状况。 在本文中,我将介绍使用Java管理扩展(JMX)监视CLDB的鲜为人知的方法。 据最受尊敬的MapR数据工程师之一,Akihiko Kusanagi称,与使用Ganglia相比,使用JMX来…

python 多线程并发怎么还是顺序执行_python thread 并发且顺序运行示例

python怎么实现用多线程顺序执行python 的GIL规定每个时刻只能有一个线程访问python虚拟机,所以你要用python的多线程来做计算是很不合算的,但是对于IO密集型的应用,例如网络交互来说,自己把自己说服了,是一种理智的胜利;自己被自己感动了,是…

markdown pad激活

<iframe src"https://cn.calcuworld.com/%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6%e8%ae%a1%e7%ae%97%e5%99%a8?iframe1" width"100%" height"400"></iframe> ---恢复内容开始--- 注册码 Soar360live.com GBPduHjWfJU1mZqcPM3BikjYKF…

Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?

在最初的 http 协议中&#xff0c;没有上传文件方面的功能。RFC1867&#xff08;"Form-based File Upload in HTML".&#xff09; 为 http 协议添加了这个功能。客户端的浏览器&#xff0c;如 Microsoft IE, Mozila, Opera 等&#xff0c;按照此规范将用 户指定的文件…

pytest单侧模块_入门汇总

Pytest简单介绍 &#xff08;pytest是python的一个测试框架&#xff0c;主要是用来进行一些小的测试&#xff09; 安装&#xff1a;pip install -U pytest查看是否安装成功&#xff1a;pytest --version运行&#xff1a;在当前文件所在目录下执行pytest&#xff0c;会寻找当前目…

pythonreshape函数三个参数_详解numpy.ndarray.reshape()函数的参数问题

我们知道numpy.ndarray.reshape()是用来改变numpy数组的形状的&#xff0c;但是它的参数会有一些特殊的用法&#xff0c;这里我们进一步说明一下。代码如下&#xff1a;import numpy as npclass Debug:def __init__(self):self.array1 np.ones(6)def mainProgram(self):print(…