IP第十天笔记 - - - BGP

2023-05-16

BGP --- 边界网关协议

AS --- 自治系统 --- 由单一机构或组织管理的一系列IP网络及其设备的集合。

1、网络范围太大,协议跑不过来,需要进行划分;

2、自治管理

为了方便区分和标定不同的AS,我们给每一个自治系统设计了一个编号 --- AS号 --- 16位二进制构成 --- 0 - 65535;其中0和65535为保留值-不用;所以,AS号真正的取值范围为1 - 65534;我们将64512 - 65534AS号称为私有AS号。 --- 因为传统的AS号存在不够用的问题,所以目前也存在拓展版的AS号 --- 32位构成 --- 目前绝大多数设备已经支持拓展版的AS号。

EGP协议在之前还存在一款协议 --- EGP,但是由于其功能有限,后来在其基础上进行优化和改进,生成了现在的BGP协议。目前AS之间使用最广泛的协议就是BGP协议。

在目前IPV4环境下,使用最广泛发BGP版本是BGPV4。目前市场上已经存在BGPV4+。BGPV4+又可以称为MP --- BGP --- 可以支持多种地址族的应用。

在没有BGP协议的情况下,仅使用重发布技术,也可以实现AS之间的路由信息共享。但是,之所以不采用这种方案,其原因如下:

1、重发布技术本身存在缺陷 --- 在多点重发布中,因为种子度量值问题,必然造成选路不佳

2、ASBR设备的归属问题

BGP之间传递路由信息的方式一定是和RIP类似,通过传递路由条目信息来实现。 --- 之所以不使用拓扑信息,主要因为 : 1、拓扑信息资源占用量太大,而BGP需要传递的数量是巨大的。2、传递拓扑信息将暴漏本AS内部的拓扑连接情况。

BGP --- 无类别的路径矢量型协议

距离矢量 --- 在距离矢量型协议中,距离是开销的体现,将跳数作为开销值的评判标准。将一个路由器看作是一个单位计算距离。

距离矢量是算法的概念,因为IGP协议本身需要通过算法来计算出未知网段的路由信息。

路径矢量 --- 是将一个AS看作一个整体

路径矢量不牵扯算法,因为BGP仅仅是将IGP计算出来的路由信息发送到其他AS之中,相当于仅将现成的路由进行传递而不需要计算。

IGP --- 选路佳,收敛快,占用资源少

BGP协议的关注点 :

1、可控性 --- AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更容易做路由策略。

为了保证可控性,BGP舍弃了开销值。取而代之的是BGP给每条路由信息附加了很多路径属性。之后,可以通过这些属性来进行选路。因为多种属性的存在,将导致我们的选路变的更加的灵活和方便。使得BGP协议具有强大的可操控性。

因为BGP协议需要传递大量的路由信息,所以,其本身不可能存在周期更新机制。BGP仅存在触发更新。

2、可靠性 --- 保证数据传输的可靠。BGP为了保证传输的可靠性,其传输层协议直接选择使用TCP协议。使用TCP的179号端口进行工作。

IGP协议不选择使用TCP的原因:

1、TCP传输效率较低

2、TCP传输占用资源较大

3、TCP协议只能实现单播,所以,无法通过组播或者广播的形式发送,则将导致IGP协议无法自动发现邻居关系,只能手工指定。

因为BGP选择使用的是TCP协议,所以,BGP需要手工建立邻居关系。

BGP因为传输层使用的是TCP 协议,所以,只要在TCP协议可以正常建立会话的基础上就可以完成BGP的建邻工作。 --- BGP支持非直连建邻(前提条件:网络可达) --- BGP 的非直连建立在IGP(静态)之上

在BGP中,我们将邻居关系称为对等体关系。

EBGP对等体关系 --- 如果建立对等体的两台机器位于不同的AS中,则它们的关系被称为EBGP对等体关系。

IBGP对等体关系 --- 如果建立对等体的两台机器位于同一个AS中,则它们的关系被称为IBGP对等体关系。

因为,EBGP对等体之间一般使用直连建邻,所以,EBGP对等体之间发送的数据包中的TTL值我们将其设置位1。如果遇到EBGP对等体之间需要进行非直连建议,则需要手工修改TTL值。IBGP对等体关系在AS内部一般都是非直连建邻,所以,TTL值设置为255。

3、AS - BY - AS --- 在BGP当中,我们将一个AS看作一个整体。

BGP协议是不支持负载均衡的。 --- 在BGP当中,如果到达同一个目标网段存在多条路径可以走时,BGP将会根据其中的路径属性来选择一条最优的加载到路由表中,而不会进行负载均衡。

一、BGP的数据包

BGP协议所有数据包的传输的可靠性均由TCP协议来保证。所有BGP数据包均基于TCP建立的会话通道发送。

OSPF的hello包 --- 可以周期性的发现、建立和保活邻居关系。

在BGP中,发现邻居关系的过程变为由人手工指定。主要因为TCP协议需要建立会话渠道,之后才会基于通道发送数据包。

open 包 --- 建立BGP对等体关系 --- 邻居关系的建立无非就是参数协商的过程,而BGP建立邻居关系需要通过open包来携带参数,然后进行比对协商。

AS号 --- 在创建邻居关系时,需要指定邻居所在的AS号,这个参数将被携带在open报文中发送给对方,对方将比对这个AS号和本地所在的AS号是否一致,如果一致,则可以正常建立邻居关系。

认证 --- BGP建邻也可以做认证,做认证后将携带认证口令,认证口令双方需要比对,一致则可以正常建立邻居关系。

Route - ID --- 区分和标定路由器的。也是由32位二进制构成,按照IP地址的格式来表示。 --- 1、手工配置; 2、自动获取(先看是否存在环回接口,如果存在则将选择环回接口中IP地址最大的地址作为RID,如果没有环回接口,则将在物理接口中选择IP地址最大的作为RID)

这个RID将在open包中携带,发送到对端之后,对端将检测到这个RID,如果和本地的RID不同,则将可以正常的建立邻居关系。

手工建立邻居关系时,所指定的建邻的IP地址必须和收到的open包中的源IP地址相同才能正常建立邻居关系。否则,邻居关系将建立失败。

Hold time --- 保活时间 --- 默认时间为180s,在保活时间内,如果没有收到对方发送的keeplive包或者update包,则将断开BGP邻居关系。这个参数在open报文中将被携带,但是,双方不一致不会影响邻居关系的建立,但是在执行时,这个时间必须是一致的,则将采用双方中较小的保活时间来使用。

路由器是否支持刷新功能也将成为OPEN报文中所携带的一个协商参数。

keep live 包 --- 周期保活 --- 周期发送时间等于保活时间的1/3.默认保活时间是180s,则默认的周期发送时间为60s。

除了保活之外,keeplive包还将在open报文协商参数时临时充当确认包的作用。

TCP协议进行确认的目的是为了保证数据传输的可靠性,而keep live报文确认的目的是为了确认认可对方发送的open报文中的参数。

update 包 --- 更新包 --- 携带需要传递的路由信息的数据包。表示一条路由条目信息,需要携带的参数主要就是目标网络号和子网掩码信息,以及路径属性。

在更新包中,存在一个撤销路由条目字段,在这个字段下的路由条目将需要对端删除,而不再需要通过带毒传输的方式来表达。

notification 包 --- BGP中设计的一个告警机制。

Router - refresh 包 --- 用于改变路由策略变更后请求对等体重新发送路由信息(前提条件是双方均支持路由刷新功能才行)

二、BGP的状态机

BGP的状态机描述的是BGP对等体建立过程中状态的变化。因为BGP这个协议可以将邻居建立过程和路由收发过程分开进行。

IDLE --- 空闲状态 --- 路由器启动BGP进程之后,将先处于idle状态。当你手工指定邻居关系后,BGP将进入到一个检查环节,检查指定的IP地址在本地路由表中是否可达。如果可达,则将进入到下一个状态 --- connect。

Connect ---- 连接状态,该状态完成TCP会话的建立。

如果TCP会话建立成功,则将进入到opensent状态,发送open报文。

如果TCP会话建立失败,则将进入到ACTIVE状态,尝试重新建立TCP会话。

在建立TCP会话过程中,因为双方都会主动发起建立会话过程,而最终建立的都是一个双向的会话。所以,最终只需要保持一个会话通道即可。选择方式是通过后续open报文中的RID进行比较,选择保留RID大的设备发起的TCP会话。

Opensent ---- 发出本地的open报文。收到对端发送的open报文,查看里面的参数,之后,如果确认参数无误。则将回复keeplive报文作为确认。

Openconfirm ---- open报文确认状态 --- 对端也收到本地发送的open报文,之后根据里面的参数进行确认。如果确认无误则将发送keep live报文。本端收到对方发送的keep live报文之后将进入下一个状态。

Established ---- 建立状态 ---- 标志着BGP对等体关系的建立。

三、BGP的工作过程

1、基于IGP协议实现IP可达

2、指定邻居关系,通过三次握手,建立TCP的会话通道。之后,所有BGP的数据包都将基于TCP会话通道来进行传递。

3、使用open报文和keep live报文进行邻居关系的建立。之后将邻居关系收集到一张表中 --- 邻居表。

4、通过update报文去传递路由信息。传递的路由信息中主要包含目标网络号,掩码信息,以及各种路径属性。之后,设备会将所有自己发出的以及收到的路由信息记录在一张表中 --- BGP表。

5、之后,将BGP表中最优路径加载到路由表中。

6、收敛完成后,BGP将周期使用keep live报文进行保活。保活时间默认为180s,周期发送时间默认为保活时间的1/3,即60s。

7、若出现错误信息,将使用notification报文进行告警。

8、若发生结构突变,则将使用这个updat报文进行触发更新。

四、BGP的路由黑洞

由于BGP协议支持非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器。导致BGP路由传递后,控制层面可达,但是数据层面,在经过未运行BGP协议的路由器时无法通过。形成路由黑洞。

1、在R3上将BGP协议的路由信息重发布到IGP当中

2、直接在R4上运行BGP协议

3、MPLS

为了避免路由黑洞的情况产生,BGP提出了同步机制 --- 即一台路由器从自己的IBGP对等体学习到一条BGP路由时,他将不能吧他通告给自己的EBGP对等体,除非他又从IGP协议当中学习到这条路由。

五、BGP的防环

BGP使用的防环机制 --- 水平分割机制

EBGP的水平分割 - - - 一种专门应用于EBGP对等体之间,用来解决EBGP对等体之间可能出现的环路问题。

BGP协议将在路由条目中记录所经过的AS编号 - - - AS_PATH - - - 记录AS路径的一个属性。(这个属性除了可以完成EBGP的水平分割外,还可以作为选路的依据) - - - 接收到BGP路由条目中,其中的AS_PATH属性中,若存在本地的AS号,则拒绝接受。

IBGP的水平分割 - - - 一种专门应用于IBGP对等体之间,用来解决IBGP对等体之间可能出现的环路问题。

IBGP水平分割 - - - 当一个路由器从一个IBGP对等体处学习到某条BGP路由时,他将不能吧这条路由信息通告给其他的IBGP对等体关系。

因为IBGP水平分割的限制,导致IPGP对等体之间的路由信息只能传递一跳,在这种情况下,可能会造成通信障碍。

解决方案 :

1、构建全连的IBGP对等体关系 - - - 这样的方法弊端在于 1、 全连建邻会导致资源消耗增加 ; 2、肯会导致网络的可拓展性降低。

2、路由反射器

3、联邦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IP第十天笔记 - - - BGP 的相关文章

  • 如何使用IntelliJ IDEA 配置Maven

    IDEA 全称 IntelliJ IDEA xff0c 是java语言开发的集成环境 xff0c IntelliJ在业界被公认为最好的Java开发工具之一 IDEA是JetBrains公司的产品 现在有逐步取代老牌Java开发工具Eclip
  • Protobuf协议格式详解

    protobuf 是google开源的一个序列化框架 xff0c 类似xml xff0c json xff0c 最大的特点是基于二进制 xff0c 比传统的XML表示同样一段内容要短小得多 还可以定义一些可选字段 xff0c 用于服务端与客
  • 【Nacos源码调试】集群模式内置数据源单机多实例部署问题解决

    最近对Nacos源码比较感兴趣 xff0c 个人是个好奇宝宝 xff0c 特别想了解一下Nacos这个阿里开源的分布式服务注册与发现及配置管理中间件内部到底是个啥样子 xff0c 于是就想着自己源码编译 xff0c debug走一下试试 可
  • 浅谈网络安全态势感知

    一 基本概念 前美国空军首席科学家Endsley博士给出的动态环境中态势感知的通用定义是 态势感知是感知大量的时间和空间中的环境要素 xff0c 理解它们的意义 xff0c 并预测它们在不久将来的状态 在这个定义中 xff0c 我们可以提炼
  • [搬运]Ali Canal Prometheus QuickStart

    Prometheus QuickStart lcybo edited this page on 29 Aug 2018 3 revisions Pages 38 Contents 目录 HomeIntroduction 简介Quick St
  • python打包分发工具:setuptools

    你是否也想写一个python库 xff0c 想向社会开源或者企业内部使用 xff0c 想让别人通过简单的命令pip install 安装你的库 那么setuptools绝对是最好用的python打包与分发工具 setuptools库的前身是
  • Reactor 3 参考文档

    Reactor 3 参考文档 Stephane Maldini 64 smaldini Simon Basl 64 simonbasle3 2 0 BUILD SNAPSHOT xff08 译者加 xff09 本文档的一些典型的名词如下 x
  • 在Ubuntu/Linux环境下使用MySQL:开放/修改3306端口、开放访问权限

    操作系统 Ubuntu 17 04 64位 MySQL版本 MySQL 5 7 一 查看3306端口是否开放 netstat an grep 3306 如果看到下图这样的 说明端口并未打开 nbsp 二 修改访问权限 进入目录 etc my
  • 使用nohup后台运行并获取pid

    启动 nohup command gt command log 2 gt amp 1 amp echo gt command pid 注意 nohup运行后需要按回车键 xff0c 不然强行ctrl 43 C会退出 停止 kill 96 c
  • YAML——基本语法

    功能 编辑 YAML的语法和其他高级语言类似 xff0c 并且可以简单表达清单 散列表 xff0c 标量等数据形态 4 它使用空白符号缩进和大量依赖外观的特色 xff0c 特别适合用来表达或编辑数据结构 各种配置文件 倾印调试内容 文件大纲
  • 推荐一些socket工具,TCP、UDP调试、抓包工具

    推荐一些socket工具 xff0c TCP UDP调试 抓包工具 转载 还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么 他们都是HTTP的神器级调试工具 xff0c 非常非常的好用 好工具能让你事半功
  • Docker学习笔记(3)-- 如何使用Dockerfile构建镜像

    Dockfile是一种被Docker程序解释的脚本 xff0c Dockerfile由一条一条的指令组成 xff0c 每条指令对应Linux下面的一条命令 Docker程序将这些Dockerfile指令翻译真正的Linux命令 Docker
  • Ubuntu部署安装Jenkins

    1 概述 安装jenkins需要有java的环境 xff0c 因此需要先安装jdk 2 安装OpenJDK 11 2 1 安装JDK 更新apt sudo apt get update 安装 sudo apt get install ope
  • softmax函数详解

    softmax函数 1 softmax函数理解 我们知道Logistic回归只能进行二分类 xff0c 因为它的随机变量的取值只能是0或者1 xff0c 那么如果我们面对多分类问题怎么 办 xff1f 比如要将一封新收到的邮件分为垃圾邮件
  • PX4 固件改造【持续更新】

    1 修改IMU三轴信息 xff1a 可修改两个CPP文件里的三轴信息 如下图 xff09 xff1a 修改的信息如下 xff08 见下图 xff09 xff1a accel x accel samples 61 accel x xff1b
  • 网络部分之Physical Layer

    2 Physical Layer Physical layer需要将 data 转换成 signal xff0c 所以需要 2 steps xff1a Step 1 xff0c 叫做 information coding xff0c 来对数
  • 树莓派 软键盘matchbox-keyboard 安装

    我的树莓派3b在第二步和第三步执行都 出现问题 但是顺序执行下去 最终虚拟键盘还是可以使用 1 安装必需文件 sudo apt get install libfakekey dev libpng dev y 2 安装编译虚拟键盘ato sa
  • Pi3 E14中国版 MySQL安装详细过程

    硬件环境 xff1a 树莓派 xff1a Pi3 E14中国版 Usb键鼠 10 1 1280 800电视机 xff08 集成HDMI xff09 wifi路由器 笔记本电脑 软件环境 xff1a 树莓派Linux raspberrypi
  • 在Ubuntu下进行安卓开发遇到“insufficient permissions for device: user in plugdev group; ”问题的解决办法

    开发环境 Ubuntu 16 04 IDE Android Studio 开发语言 Java 在接入设备进行联机调试的时候 遇到了这样的问题 insufficient permissions for device user in plugd
  • 谈谈技术在日常工作生活中的重要性

    我从事 技术方面 的工作也有10多年了 从最初的一个软件工程师 xff0c 也逐渐成长为项目经理 xff0c 部门经理 无论岗位怎么变换 xff0c 但是我还是没有离开技术方面的工作 xff0c 一直对技术的研究有很大热情 Csdn是非常棒

随机推荐

  • JSP中的网页编写格式——MIME TYPE?

    一 首先 xff0c 我们要了解浏览器是如何处理内容的 在浏览器中显示的内容有 HTML 有 XML 有 GIF 还有 Flash 那么 xff0c 浏览器是如何区分它们 xff0c 决定什么内容用什么形式来显示呢 xff1f 答案是 MI
  • 安卓开发05:Activity之间链接和传递参数

    Activity之间链接和传递参数主要通过Intent安卓的一个对象来实现 首先我们创建一个MainActivity xff1a java view plain copy print package com example androidt
  • 安卓开发06:布局-线性布局 LinearLayout

    LinearLayout把视图组织成一行或一列 子视图能被安排成垂直的或水平的 线性布局是非常常用的一种布局方式 请看一个布局例子 xff1a html view plain copy print lt LinearLayout xmlns
  • 可以带到2015年的几点思考

    1 自己的事情永远得自己出头 我从小就是个很独立的人 我不知道这种独立是什么时候培养起来的 xff0c 但清楚的记得一件事情 上小学那会儿 xff0c 有一年母亲生病了 xff0c 在医院 xff0c 家里就我一个人 xff0c 有时候 x
  • 纪事2011—中国,建大,家,我

    前言 2011 年就要真的成为我记忆了 xff0c 我一直在想该怎样总结我的2011 xff0c 我的2011留下的是什么 xff0c 收获的又是什么 xff0c 这365天的句号我该怎么画上 xff0c 是圆是扁 xff0c 还是有缺口
  • 用java做的一个小游戏—黑白反斗棋(适合菜鸟)

    用Java做的一个小游戏 xff0c 黑白反斗棋 xff0c 我玩过了5 5和10 10的 是学习之后做的 xff0c 不是自己原始开发的 import java awt Color import java awt FlowLayout i
  • 我的精神分裂——普通青年用二-B的方式走文艺的范儿

    一直以来都是以一种低沉的文笔在写些我的垃圾生活 xff0c 垃圾感想 xff0c 每次都会放那些特定的音乐 xff0c 那是一种心境 xff0c 那些音乐带着我的手在敲动 今天我想换种音乐 xff0c 猜猜我在放什么音乐 xff0c 很Hi
  • 读书随笔(1)——《计较是贫穷的开始》

    xff08 读书之后写感 xff0c 本该是读书之后自然的一个延续 xff0c 但我却很少这样了 xff0c 这不能说是一个极其坏的习惯 xff0c 虽不知道我究竟能不能改了 xff0c 但还是希望能尽可能的写写 xff0c 对自己想法有个
  • 2012年终随笔

    时至年终 xff0c 按我此前的惯例 xff0c 该写篇年终总结性的文章 xff0c 在之前末日说沸沸扬扬的时候 xff0c 我在想是否该早点写 xff0c 写个末日遗言什么的 xff0c 但还是没有写 xff0c 觉得如果真的末日来临 x
  • Tomcat多端口映射配置

    1 多端口映射配置 在server xml中 xff0c 找到 lt Connector gt 标签 xff0c 默认情况下会有一个 8080 端口的 lt Connector gt 标签 xff1a lt Connector port 6
  • 10个艰难的Java面试题与答案

    10个最难回答的Java面试题 这是我收集的10个较难回答的 Java 面试题 这些问题主要来自 Java 核心部分 不涉及 Java EE 相关问题 这些问题都是容易在各种 Java 面试中被问到的 1 为什么 wait xff0c no
  • Spring Security 5.x兼容多种密码加密方式

    1 spring security PasswordEncoder spring security 5不需要配置密码的加密方式 xff0c 而是用户密码加前缀的方式表明加密方式 xff0c 如 xff1a MD5 88e2d8cd1e92f
  • linux把进程或线程绑定到特定cpu核上

    绑定进程到cpu核上运行 查看cpu有几个核 使用cat proc cpuinfo 查看cpu信息 xff0c 如下两个信息 xff1a processor xff0c 指明第几个cpu处理器cpu cores xff0c 指明每个处理器的
  • Suse重启samba指令

    重启前先查看后台进程 linux jzp3 home w210412 ps aux grep smbd root 4400 0 0 1 2 308428 22372 Ss 18 23 0 00 usr sbin smbd D F root
  • uIP和LwIP背后的那个牛逼男人

    在公众号给大家介绍过Uip和LwIP xff0c 如果使用过这两种TCP IP协议栈 xff0c 那么你一定会熟悉一个人Adam Dunkels亚当 邓克尔 瑞典计算机科学院的教授 xff0c 这两种开源的协议栈都出自他手 xff0c 现在
  • 一张表看懂uIP和lwIP的区别

    我们给大家介绍过目前比较流行的开源TCP IP开源协议栈uIP和lwIP 这两种都是由瑞典计算机科学研究院开发的 xff0c 广泛应用于嵌入式系统中 因为全功能的TCP IP协议是很庞大的 xff0c 在资源紧张的嵌入式上是很难实现的 xf
  • 小猿助你freeRTOS驱动开发

    主要介绍在移植好的基于NXP之kinetis K64 43 freeRTOS平台上添加Modbus驱动 对freeRTOS不懂或者移植不懂的可以看看之前公众号的文章 准备工作 xff1a 1 xff0c 基于之前移植好的K64 43 fre
  • 告诉过你PID很重要,你不听

    曾经在公众号 xff0c 多次提到在控制系统中经常用到的PID控制 xff0c 也在培训中讲过PID的应用和在软件中的实现以及调试 xff0c 但是现实中还是有很多工程师对PID很陌生 xff0c 如果你是搞电力电子 xff0c 电力变换
  • Windows 使用 VNC 远程连接 Ubuntu 桌面版

    前言 工作需要使用 Windows 远程桌面版的 Ubuntu xff0c 原来使用的 TeamViewer 现在经常被检测为商业用途 xff0c 就很麻烦 因此 xff0c 现在转战使用 VNC 进行远程 使用步骤参考地址 xff1a 法
  • IP第十天笔记 - - - BGP

    BGP 边界网关协议 AS 自治系统 由单一机构或组织管理的一系列IP网络及其设备的集合 1 网络范围太大 xff0c 协议跑不过来 xff0c 需要进行划分 xff1b 2 自治管理 为了方便区分和标定不同的AS xff0c 我们给每一个