当前位置: 首页 > news >正文

BGP边界网关协议

一、BGP的概述

BGP 是一种实现自治系统(AS)之间的路由可达,并选择最佳路由的距离矢量路由协议。它是外部网关协议。

二、BGP的基础

1.BGP的特点:

(1)BGP是使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而非周期性路由更新。

(2)BGP能够承载大批量的路由信息,可以支撑大规模网络

(3)BGP能够支撑MPLS/VPN的应用,传递客户VPN路由;

(4)BGP提供了路由聚合和路由衰减功能用于防止路由震荡,同股票这两项功能有效地提高了网络稳定性。

2.BGP的特征

BGP通常被称为路径矢量路由协议

每条BGP路由都携带多种路劲属性,BGP可以通过这些路径属性控制路径选择,而不像IS-IS、OSPF只能通过cos值控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最适合的路径控制方式。

3.BGP的工作原理

(1)BGP的报文

BGP对等体间通过以下5种报文进行交互,其中Keepalive报文周期性发送,其余报文为触发式发送:

1)Open报文:用于建立BGP对等体连接。

2)Update报文:用于在对等体之间交换路由信息。

3)Notification报文:用于中断BGP连接。

4)Keepalive报文:用于保持BGP连接。

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

2BGP状态机

BGP对等体的交互过程中存在6种状态机:空闲(Idle)、连接(Connect)、活跃(Active)、Open报文已发送(OpenSent)、Open报文已确认(OpenConfirm)和连接已建立(Established)。

1)Idle(空闲)状态

Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。

2)Connect(连接)状态

BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。

如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态;如果TCP连接失败,那么BGP转至Active状态;如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态

3)active(激活)状态

在active状态下,BGP试图建立TCP连接,如果连接成功,则向对等体发送open消息,并进行下一状态。

4)OpenSent(打开发送)状态

BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。

5)OpenConfirm(打开确认)状态

BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。

6)Established(已建立)状态

BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。

(3)BGP对等体之间交互原则

BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:

1)从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。

2)从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。

3)当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。

4)路由更新时,BGP设备只发送更新的BGP路由。

5)所有对等体发送的路由,BGP设备都会接收。

(4)BGP引入IGP交互

BGP引入路由时支持Import和Network两种方式:

Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。

Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。

 三、BGP路径属性

路径属性分类

 

四、BGP路由反射器

1.路由反射宣告原则(1) 

2.路由反射宣告原则(2)

3.路由反射簇(cluster)

如图所示:当一个AS内存在多台RR为Client提供冗余时,RR间的路由更新很有可能会形成环路,为防止该现象,引入了Cluster的概念。

什么是簇:通过4字节的Cluster_ID来标识Cluster,通常会使用Loopback地址作为Cluster_ID。一个Cluster里可以包括一个或多个RR;一个Client可以同时属于多个Cluster。

4.路由反射环路防止机制-Originator_ID

5.路由反射环路防止机制-Cluster_List

 

五、BGP选路原则

当到达同一个目的网段存在多条路由时,BGP通过如下的次序进行路由优选:

丢弃下一跳不可达的路由

【1】优选Preferred-Value属性值最大的路由

【2】优选Local Preference属性值最大的路由。

【3】本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。

【4】优选AS Path属性值最短的路由。

【5】优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。

【6】优选MED属性值最小的路由。

【7】优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。

【8】优选到Next Hop的IGP度量值最小的路由。

【9】优选Cluster List最短的路由。

【10】优选RouterID(Orginator ID)最小的设备通告的路由。

【11】优选具有最小IP地址的对等体通告的路由。

总结以上规律就会发现,【1】和【2】取值越大越优,其余的取值越小越优。

注意:前八条属性全部相同时可形成路由负载分担

六、BGP路由聚合概述

BGP在AS之间传递路由信息,随着AS数量的增多,单个AS规模的扩大,BGP路由表将变得十分庞大,因此带来如下两类问题:

存储路由表将占用大量的内存资源,传输和处理路由信息需要消耗大量的带宽资源;

如果传输的路由条目出现频繁的更新和撤销,对网络的稳定性会造成影响。

 七、BGP的简单实验拓扑(配置IBGP和EBGP)

实验要求:

1.基本的配置

2.配置IGP(R1与R2运行OSPF协议)

3.配置IBGP和配置EBGP

4.查看TCP连接和查看对等体的状态

5.在R3上用network宣告的方式产生一条BGP路由、在R1上引入的方式产生一条BGP路由

6.在R1上查看路由表和配置下一跳本地 配置后再次查看路由表

7. 查看R2的BGP路由表//

实验步骤:

1、基本的配置

[AR1]int g0/0/0

[AR1-GigabitEthernet0/0/0]ip add 12.1.1.1 24

[AR1-GigabitEthernet0/0/0]q

[AR1]int LoopBack 0

[AR1-LoopBack0]ip add 1.1.1.1 32

[AR1-LoopBack0]q

[AR2]int g0/0/1

[AR2-GigabitEthernet0/0/1]ip add 12.1.1.2 24

[AR2-GigabitEthernet0/0/1]q

[AR2]int g0/0/0

[AR2-GigabitEthernet0/0/0]ip add 23.1.1.2 24

[AR2-GigabitEthernet0/0/0]q

[AR2]int LoopBack 0

[AR2-LoopBack0]ip add 2.2.2.2 32

[AR2-LoopBack0]q

[AR3]int g0/0/1

[AR3-GigabitEthernet0/0/1]ip add 23.1.1.3 24

[AR3-GigabitEthernet0/0/1]q

[AR3]int LoopBack 0

[AR3-LoopBack0]ip add 3.3.3.3 32

[AR3-LoopBack0]q

2、配置IGP(AR1和AR2运行OSPF)

[AR1]ospf router-id 1.1.1.1

[AR1-ospf-1]area 0

[AR1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255

[AR1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0

[AR1-ospf-1-area-0.0.0.0]q

[AR1-ospf-1]q

[AR2]ospf router-id 2.2.2.2

[AR2-ospf-1]area 0

[AR2-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255

[AR2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0

[AR2-ospf-1-area-0.0.0.0]q

[AR2-ospf-1]q

3、配置IBGP

[AR1]bgp 100 //启动BGP进程,进程号为100

[AR1-bgp]undo synchronization //关闭同步,默认配置

[AR1-bgp]undo summary automatic //关闭自由汇总

[AR1-bgp]router-id 1.1.1.1 //设置BGP的route-id

[AR1-bgp]peer 2.2.2.2 as-number 100 //指定邻居和邻居AS号

[AR1-bgp]peer 2.2.2.2 connect-interface loopBack 0 //用环回口创建邻居

[AR1-bgp]q

[AR2]bgp 100

[AR2-bgp]undo synchronization

[AR2-bgp]undo summary automatic

[AR2-bgp]router-id 2.2.2.2

[AR2-bgp]peer 1.1.1.1 as-number 100

[AR2-bgp]peer 1.1.1.1 connect-interface LoopBack 0

[AR2-bgp]q

4、配置EBGP

[AR2]bgp 100

[AR2-bgp]peer 23.1.1.3 as-number 200 //EBGP用直连接口创建邻居

[AR2-bgp]q

[AR3]bgp 200

[AR3-bgp]undo synchronization

[AR3-bgp]undo summary automatic

[AR3-bgp]peer 23.1.1.2 as-number 100

[AR3-bgp]q

 5、查看TCP的连接情况

可以看到TCP是连接成功的

6、查看对等体的状态

7、产生BGP路由

[AR3]bgp 200

[AR3-bgp]network 3.3.3.3 32

[AR3-bgp]q

[AR1]bgp 100

[AR1-bgp]import-route ospf 1

[AR1-bgp]q

8、在AR1上查看路由表

*:代表路由条目有效;

>:代表路由条目最优,可以被传递。只有下一条可达路由才会最优

i:代表路由是从IBGP学习到的

可以看到3.3.3.3不是最优的,如果不优就不会再加载进全局路由表,也不会传递给其它路由器,本例不优的原因为下一条不可达,用以下方法

[AR2]bgp 100

[AR2-bgp]peer 1.1.1.1 next-hop-local //配置下一条为本地

[AR2-bgp]q

再次查看AR1的路由表

扩展:什么情况下采用next-hop-local命令?

对从EBGP邻居收到的路由,在传递给IBGP邻居时,修改下一条地址为本地的connect-interface。

9.查看AR2的BGP了路由表

可以看到1.1.1.1这条路由虽然下一条可达,但不是有效和最优的,其原因是为如果IGP路由表里宣告了这条路由,然后再在IBGP里面宣告,路由只能本地有效,二不会传递给邻居。

 

http://www.lryc.cn/news/575136.html

相关文章:

  • 【基础篇-消息队列】——如何通过网络传输结构化的数据( 序列化与反序列化)
  • Class00.3矩阵计算
  • Linux进程控制与进程间通信(IPC)全面指南
  • Prompt:面向目标的提示词
  • Java如何导出word(根据模板生成),通过word转成pdf,放压缩包
  • aspose.word在IIS后端DLL中高并发运行,线程安全隔离
  • Java8 Stream流:Stream流的思想和获取Stream流
  • CTF Writeup: [强网杯 2019]随便注挑战解析
  • selenium UI自动化元素定位中classname和CSS区别
  • 渗透靶场:事件和属性被阻止的反射xss
  • Vue+ECharts后台仪表盘加载地图功能
  • Android14音频子系统-ASoC-ALSA之DAPM电源管理子系统
  • 个人技术文档库构建实践:基于Cursor和GitHub的知识管理系统(含cursor rules)
  • Github Copilot协助解决cucumber插件不支持async/await
  • 【Orange Pi Zero 3】-usb摄像头项目
  • 服务器性能优化通用方案
  • 一个项目中调用两个不同后台,前端如何优雅实现无感刷新Token调用接口
  • webpack5 css-loader:从基础到原理
  • css实现a标签前面加小图标
  • 【GStreamer】减小延时的参数设置、从RTP中获取时间戳
  • 深入探索WordPress Multisite:构建与管理多站点网络
  • 【Lua 基础学习】
  • C++(智能指针)
  • LeetCode 3298.统计重新排列后包含另一个字符串的子字符串数目2
  • ivx创建一个测试小案例
  • Vue3插槽
  • 基于springboot+vue的智慧农业专家远程指导系统
  • 批量DWG转PDF工具
  • ES和 Kafka 集群搭建过程中的典型问题、配置规范及最佳实践
  • RK平台HDMI-IN/camera调试:预留CMA内存