IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 2021-08-02 -> 正文阅读

[网络协议]2021-08-02

一、BGP的概念
BGP(Border Gateway Protocol,边界网关协议)是一个距离矢量路由协议,和传统的基于下一跳的IGP协议不同,它是基于AS(自治系统)的协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题,也正是这样,它更适合用于互联网。BGP的关键在于理解BGP的报文,邻居的建立、BGP路由属性、选路原则等。

1、自治系统是什么?
自治系统(autonomous system,简称“AS”),是由同一个技术管理机构管理,使用统一选路策略(运行同一动态路由协议)的一组路由器的集合。自治系统的编号取值范围是165535。其中164511是互联网上注册的公有AS号类,类似于公有IP地址,是全球唯一且不可重复使用的;64512~65535是私有AS号,类似于私有IP地址,可以重复使用但是互联网上不可见。

2、动态路由分类
动态路由协议有很多分类方法,按自治系统分类、按协议类型分类是最常用的两种。

1、按自治系统分类:

IGP:内部网关路由协议,主要包含RIP、OSPF、ISIS、EIGRP(思科私有协议)。IGP路由协议运行在AS内部,解决的是AS内部的选路问题。主要作用是发现、计算路由。

EGP:外部网关路由协议,通常就是指BGP,它运行在AS与AS之间,解决的是AS之间的选路问题。BGP的主要作用是控制路由条目的传播和选择最优路由。

一般会先使用IGP协议在自治系统内部计算和发现路由条目,再通过BGP协议将IGP协议产生的路由传递至其他的AS(自治系统)。

3、BGP的特征
BGP解决的是AS之间的路由学习问题,当今互联网是全球互联,在中国,互联网运营商有移动、电信和联通。每个公司都有自己的自治系统,并且内部运行IGP协议。但是互联网又要求互联,所以通过BGP就可以在电信和联通等之间学习对方的AS内部路由,使电信和联通的用户之间互相通信。

二、BGP的工作原理
BGP是跨公网、跨AS(自治系统)的路由协议,可以在AS之间学习路由。BGP的动态学习路由也是基于邻居,只有邻居关系正常,BGP才可以正常工作。

1、BGP邻居关系
运行BGP的路由器通常被称为BGPSpeaker(发言者),相互之间传递报文的speaker之间互称为对等体(peer)。BGP邻居关系的建立、更新和删除是通过对等体之间的5种报文、6种状态机和5个表等信息来完成,最终形成BGP邻居。

(1)BGP报文类型及作用:
BGP报文头中的type定义了BGP的报文类型。BGP对等体之间通过5种报文进行路由信息的交互,5种报文分别有:Open、Update、Notification、KeepAlive和Route-Refresh。

Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP对等体之间的连接关系,主要包括BGP版本、本地AS编号、Holdtime(维持时间)等信息。

update报文:update报文用来在BGP对等体之间更新路由信息,update报文可以通告多条属性相同的可达路由信息,也可撤销多条不可达路由信息。

Notification报文:当BGP检测到错误状态时,立刻向对等体发出Notification报文,之后BGP连接就会立即中断。不管当前BGP状态处于何种状态,只要收到Notification报文就会返回idle状态。

Route-Refresh报文:用来告知对等体本地所支持路由的刷新能力,在所有BGP路由器拥有Route-Refresh能力的情况下,如果BGP入口路由策略发生了变化,本地BGP路由器会向对等体发送Route-Refresh报文,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。

KeepAlive报文:该报文在对等体之间周期性发送,用以保持连接的有效性,类似于OSPF协议中的hello包。

(2)BGP状态:
BGP状态描述的是BGP邻居的建立过程,BGP状态共有六种,分别是Idle(空闲)、Connect(连接)、Active(活动)、OpenSent(打开发送)、OpenConfirm(打开确认)和Established(建立成功)。

Idle状态:BGP拒绝任何进入的连接请求,Idle状态是BGP的初始状态。

Connect状态:该状态下,BGP等待TCP连接的建立完成后在决定后续操作。

Active状态:该状态下,BGP将尝试进行TCP连接的建立,是BGP的中间状态。

OpenSent状态:该状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、Holdtime等进行检查。

OpenConfirm状态:在该状态下,BGP等待KeepAlive或Notification报文。

Established状态:在该状态下,BGP可以在对等体之间交换所有报文,也是BGP正常工作的状态。

在BGP对等体建立的过程中,通常可见的三种状态是Idle、Active、Established。BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方通过Update报文交换路由信息。

(3)BGP数据库:

(4)BGP邻居关系类型:
在BGP中大致可分为两种邻居关系:IBGP邻居和EBGP邻居。

IBGP:同一个AS内部的BGP邻居关系,IBGP邻居通常是指运行BGP协议的对等体两端均在同一个AS域内,属于同一个BGP AS内部。

EBGP:AS之间的BGP邻居关系,EBGP邻居通常是指运行BGP协议的对等体两端分别在不同的AS内。

BGP邻居的AS号和本端的AS号相同就为IBGP(邻居),不同就是EBGP邻居。

IGP(内部网关协议,如OSPF)建立邻居一般要求三层设备直连,并且通过广播或组播建立邻居关系。而BGP(外部网关协议)的邻居关系是基于TCP的,也就是说只要让TCP/IP可达,无论是否直连,BGP对等体彼此之间就可以建立邻居关系。所以BGP建立邻居之前首先要考虑的就是对等体之间的路径可达(是否存在路由,可以ping通)。务必要通过IGP或者静态路由使对等体两端互通。

2、通告BGP路由的方法
BGP路由是通过BGP命令通告而成的,而通告BGP路由的方法有两种:network和Import。

(1)network方式:

使用network命令可以将当前设备路由表中的路由(非BGP)发布到BGP路由表中并通告给邻居,和OSPF中使用network命令的方式大同小异,只不过在BGP宣告时,只需要宣告网段+掩码数即可,如:network 12.12.0.0 16。

(2)Import方式:

使用Import命令可以将该路由器学到的路由信息重分发到BGP路由表中,是BGP宣告路由的一种方式,可以引入BGP的路由包括:直连路由、静态路由及动态路由协议学到的路由。其命令格式与在RIP中重分发OSPF差不多。

3、BGP对等体的交互原则

4、更新源建立邻居关系
这个概念说白了就是在指定对等体时,使用对方的loopback口,因为该接口比任何物理接口都要稳定,只要设备在运行,loopback口就不会关闭,只要有一条链路可以和对方的loopback地址通信,就不会造成BGP状态的改变,若使用物理接口,一旦这个物理接口down掉,那么BGP也就完了,所以这种使用loopback口建立BGP邻居的方法称为更新源建立邻居,通常会在同一个AS内使用冗余链路来确保BGP的稳定性。(若在不同AS内使用对端路由器的loopback地址来建立邻居关系,需要改变两个路由器上的TTL值,具体解释请参考博文末尾的配置总结)

如在上图中,三个路由器同在AS 100区域中,若R1和R3要使用更新源建立邻居关系,那么配置如下:

R1路由器:

R3路由器(相关命令解释参考R1路由器的配置)

注意:本地loopback接口先要让对等体可达(就是可以ping通对方的loopback地址),需要手动添加对等体环回接口的路由条目或者使用OSPF、RIP等自动学习对方环回接口的路由。

5、保证IBGP下一跳可达
在AS边缘的BGP设备,会接收到它的EBGP对等体邻居传递过来的BGP路由信息。上面说过:所有EBGP对等体在传递过程中下一跳改变, 所有IBGP对等体在传递过程中下一跳不变。上个图来直观的说一下:

图中,用A——J分别来代替路由器的接口IP地址,结合所有EBGP对等体在传递过程中下一跳改变, 所有IBGP对等体在传递过程中下一跳不变这个结论,可以看到图中存在什么问题(自己看图理解吧,是在是懒癌晚期,不想解释了),就是图中R3路由器以后的路由器收到的路由条目中的下一跳是错误的,解决办法就是在R3和R5路由器上对R4和R6宣称下一跳为它自己,然后就会发现,R4学到的下一跳地址是E。R6学到的下一跳就是I。这只是解决了R1宣告路由时出现的问题,那么如果现在R6又宣告了一条路由,就还需要在R4和R2路由器上对R3和R1宣称下一跳为它自己。这样才算保证了IBGP的下一跳可达。

配置如下(就拿一个路由器来举例,前三条配置命令的解释可以参考上面的注释,主要是最后一条命令,来改变路由的下一跳):

6、EBGP多跳
这个好理解,由于默认BGP中EBGP邻居之间的TTL值为1,(TTL,数据包的生命周期值,每经过一个路由器该值会-1,当该值为0后,数据包将会被丢弃)。若EBGP对等体非直连(通信时需要经过一个以上的路由器,TTL值就不够用了),TTL值限制会使非直连的对等体无法正常建立邻居关系,所以需要用EBGP多跳的命令来解决非直连的邻居关系。如下图,若不配置EBGP多跳,那么R1和R3将无法正常建立邻居关系:

7、控制BGP选路
BGP协议包含很多路由属性,这些属性可以非常灵活的控制BGP的选路。

BGP的属性分为共有必遵,公认任意、可选过渡可选非过渡四大类,如下表为BGP的属性及对应的分类

(1)公有必遵:所有BGP路由器都可以识别,且必须存在update报文中。
(2)公有任意:所有BGP路由器都可以识别,但不要求必须存在于update报文中,可以根据具体情况来决定是否添加到Update报文中。
(3)可选过渡:BGP路由器可以选择是否在Update报文中携带这种属性。接收的路由器如果不识别这种属性,可以转发给邻居路由器(这就是过渡的含义),邻居路由器可能会识别并使用这种属性。
(4)可选非过渡:BGP路由器可以选择是否在Update报文中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥作用。因为接收的路由器如果不识别这种属性,将丢弃这种属性,而不再转发给邻居路由器。

BGP属性的介绍:

BGP常用的属性有:Origin、AS-PATH、Next-Hop、Local-Perf和MED等。
(1)Origin(起源)属性:属于公有必遵,用来定义路径信息的来源,其作用是标记一条路由是怎么成为BGP路由的。它有以下三种类型:
IGP(I):优先级最高,通过Network命令注入BGP路由表的路由,其Origin属性为IGP。
EGP(e):优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete(?):优先级最低。通过其他方式学习到的路由信息。如BGP通过Import-route命令重分发引入的路由,其Origin属性为Incomplete。可以使用 display bgp routing-table 命令查看,将显示在最后一列,其列名是Path/Ogn

(2)AS-PATH(AS路径)属性:该属性按照矢量顺序记录某条路由从本地到目的地址要经过的所有AS编号,在接受路由时,设备如果发现AS-PATH列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
若在查看BGP路由表时,看到了AS编号,如(100,200,300),则表示该路由条目是经过了AS300、AS200和AS100传播到本设备,其中AS100是离本设备最近的AS。

(3)Next-Hop(下一跳)属性:又回到保证IBGP下一跳可达这个问题了,这么说吧,在前面提到的保证IBGP下一跳可达,就是利用了Next-Hop属性,不解释了。

(4)Local-Perf属性:用来标识BGP路由的优先级,,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但是下一跳不同的多条路由时,将选择优先级Local-Perf属性值较高的路由。Local-Perf属性仅在IBGP对等体之间有效,不会通告给其他AS,本地优先级在AS内部传递,数值越高越优先。默认优先级为100,可以手动更改。下面是我在网上找到的一个配置图(可以使用ACL来定义一些流量,也可以直接修改本地的优先级,下图是基于ACL来对不同网段设置不同的优先级)。

(5)MED属性:用于判断流量进入邻居AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址一样但是下一跳不同的多条路由时,在其他条件相同的情况下,将选择MED 值较小者作为最佳路由,用来改变下游的选路。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给其他任何第三方AS。MED属性可以手动配置,默认为0,具体配置看图吧:

8、BGP的选路原则
BGP选路原则
(1)若去往目的网络的路由下一跳不可达,则可以忽略此路由
(2) Preferred-Value优先级以数值高的路由优先
(3) Local-Preference优先级以数值高的路由优先(4)聚合路由优先级高于非聚合路由
(5)本地手动聚合路由的优先级高于本地自动聚合的路由
(6))本地通过Network命令引入的路由的优先级高于本地通过Import-route命令引入的路由(7)AS路径长度最短(最少个数)的路径优先级高
(8)比较Origin属性,IGP优先级高于EGP,EGP优先级高于Incomplete(9)选择MED优先级较小的路由
(10) EBGP路由优先级高于IBGP路由
(11)BGP优先选择到BGP下一跳的IGP度量低的路径
当以上全部相同,则为等价路由,可以负载分担(注:AS-PATH必须一致),当负载分担时,以下3条原则无效
(12)比较Cluster-List长度,短者优先
(13)比较Originator_IlD(如果没有Originator_IlD,则用Router lD比较),选择数值较小的路径(14)比较对等体的IP地址,选择IP地址数值最小的路径

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:34:09  更:2021-08-03 11:34:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 3:20:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码