计算机网络-BGP基础概念

2024-05-28 11:28

本文主要是介绍计算机网络-BGP基础概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、BGP的基本概念

BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。

BGP的特点:

  • BGP使用TCP作为其传输层协议( 端口号为179),使用 触发式路由更新,而不是周期性路由更新。
  • BGP能够承载大批量的路由信息,能够支撑大规模网络。
  • BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。
  • BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
  • BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。

BGP特征:

  • BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
  • 运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。
  • 两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表。
  • BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会周期性更新)。
  • BGP能够承载大批量的路由前缀,可在大规模网络中应用。

BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。

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

BGP能够支撑更多的路由表项
BGP能够支撑更多的路由表项
BGP支持丰富的选路规则
BGP支持丰富的选路规则

概况地说就是IGP(OSPF、ISIS)只能与直连链路设备建立邻居关系,因为hello包中TTL值为1,不能跨越设备。BGP只需要能够tcp三次握手成功就能建立邻居,简单说就是ping通就行。BGP支持大量路由表项、拥有丰富的选路规则,是当前用于不同AS之间的主要路由协议。

二、BGP邻居建立

2.1 BGP对等体

与OSPF、IS-IS等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。

BGP对等体
BGP对等体

BGP存在两种对等体关系类型:EBGP及IBGP:

EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件:

  • 两个路由器所属AS不同(即AS号不同)。
  • 在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。

IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。

BGP不单单能用于AS之间也能用于AS内,后面我们学习MPLS、VPN等都会用到。

2.2 BGP邻居建立过程

对等体关系建立
对等体关系建立

1、先启动BGP的一端先发起TCP连接,如左图所示,R1先启动BGP,R1使用随机端口号向R2的179端口发起TCP连接,完成TCP连接的建立。

2、三次握手建立完成之后,R1、R2之间相互发送Open报文,携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。每60秒发送keepalive报文。

其中Open报文中携带:

  • My Autonomous System:自身AS号
  • Hold Time:用于协商后续Keepalive报文发送时间
  • BGP Identifier:自身Router ID,Router ID大的为主动端。

3、BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体。

BGP Update(更新报文)
BGP Update(更新报文)

BGP建立对等体的对等体都会发起TCP三次握手,所以会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互。

2.3 指定TCP连接源地址:

缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。如果使用lookbak接口作为更新源,需要手动配置更新源接口。

在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。peer x.x.x.x connect lookback 1

在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题,默认TTL为1,需要手动设置,安全机制认为直连设备较为安全。peer x.x.x.x ebgp-max-hop 3

一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于冗余链路的存在,R1与R3之间的IP连通性其实并没有DOWN(仍然可以通过R4到达彼此)。

TCP源地址
TCP源地址

建议IBGP邻居手动指定使用lookback接口保持邻居关系稳定,ebgp邻居使用直连接口进行建立,否则需要手动指定源接口和最大条数TTL。

总结:BGP目前版本为BGP-4。与其它路由协议一致需要经历建立邻居关系、更新报文、保持连接关系等阶段。BGP对等体有IBGP邻居和EBGP邻居。建议IBGP使用lookback接口建立邻居,EBGP直连接口,非直连需要指定跳数。BGP基于TCP三次握手建立邻居关系,使用TCP 179端口。

本文由 mdnice 多平台发布

这篇关于计算机网络-BGP基础概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010437

相关文章

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ