tnblog
首页
视频
资源
登录

BGP 协议

7021人阅读 2022/10/8 17:29 总访问:3659504 评论:0 收藏:0 手机
分类: 网络

BGP 协议

BGP 协议介绍


BGP 全称是 Border Gateway Protocol, 对应中文是边界网关协议。
BGP是互联网上一个核心的去中心化自治路由协议。
从这个解释来看,首先这是一个用于互联网(Internet)上的路由协议。它的地位是核心的(目前是最重要的,互联网上唯一使用的路由协议),它的目的是去中心化,以达到各个网络自治。不过还是有点抽象。
先看看几个相关的概念:

名词概念 描述
AS(Autonomous system)
自治系统
指在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体,它们对互联网执行共同的路由策略。也就是说,对于互联网来说,一个AS是一个独立的整体网络。而BGP实现的网络自治也是指各个AS自治。每个AS有自己唯一的编号。
IGP(Interior Gateway Protocol)
内部网关协议
在一个AS内部所使用的一种路由协议。一个AS内部也可以有多个路由器管理多个网络。各个路由器之间需要路由信息以知道子网络的可达信息。IGP就是用来管理这些路由。代表的实现有RIP和OSPF。
EGP(Exterior Gateway Protocol)
外部网关协议
在多个AS之间使用的一种路由协议,现在已经淘汰,被BGP取而代之。


由于BGP就是为了替换EGP而创建,它的地位与EGP相似。
但是BGP也可以应用在一个AS内部。
因此BGP又可以分为IBGP(Interior BGP :同一个AS之间的连接)和EBGP(Exterior BGP:不同AS之间的BGP连接)。
既然EGP已经被替代了,那EBGP的存在比较好理解,但是IGP协议都还活得好好的(这里指的是OSPF),那IBGP的意义何在?
IGP的协议是针对同一个AS网络来设计的,一个自治网络的规模一般都不大,所以设计的时候就没有考虑大规模网络的情况。
而当一个自治网络足够大时,OSPF存在性能瓶颈(后面会说明)。
BGP本身就是为了在Internet工作,其设计就是为了满足大型网络的要求,所以大型私有IP网络内部可以使用IBGP。总的来说,这几类路由协议,小规模私有网络IGP,大规模私有网络IBGP,互联网EBGP。

定义


边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。早期发布的三个版本分别是BGP-1、BGP-2和BGP-3,1994年开始使用BGP-4,2006年之后单播IPv4网络使用的版本是BGP-4,其他网络(如IPv6等)使用的版本是MP-BGP。
MP-BGP是对BGP-4进行了扩展,来达到在不同网络中应用的目的,BGP-4原有的消息机制和路由机制并没有改变。
MP-BGP在IPv6单播网络上的应用称为BGP4+,在IPv4组播网络上的应用称为MBGP(Multicast BGP)。

目的


为方便管理规模不断扩大的网络,网络被分成了不同的自治系统。1982年,外部网关协议EGP(Exterior Gateway Protocol)被用于实现在AS之间动态交换路由信息。
但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。
BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。
虽然BGP用在AS之间传递路由信息,但并非所有AS之间传递路由信息都要运行BGP。如数据中心上行到Internet的出口上,为了避免Internet海量路由对数据中心内部网络影响,设备采用静态路由代替BGP与外部网络通信。

受益


BGP从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性:
BGP采用认证和GTSM的方式,保证了网络的安全性。
BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由。
BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性。
BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Tracking和BGP GR和NSR,提高了网络的可靠性。
在邻居数目多、路由量大且大多邻居有相同出口策略场景下,BGP用按组打包技术极大提高了BGP打包发包性能
更多名词定义:

名词概念 描述
BGP 1. 边界网关协议(Border Gateway Protocol)是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或前缀表来实现自治系统(AS)之间的可达性
2. 大多数ISP使用BGP来与其他ISP创建路由连接,特大型的私有IP网络也可以使用BGP
3. BGP的通信对端(对等实体,Peer)通过TCP(端口179)会话交换数据,BGP路由器会周期地发送19字节的保活消息来维护连接。在路由协议中,只有BGP
IBGP 内部边界网关协议。同一个AS内部的两个或多个对等实体之间运行的BGP被称为IBGP
IGP 1. 一个IGP内部应该仅有数十(最多小几百)个对等实体
2. 对于端点数,也存在限制,一般在数百(最多上千)个Endpoint级别
IBGP和IGP都是处理AS内部路由的,仍然需要IGP的原因是:
(1) IBGP之间是TCP连接,也就意味着IBGP邻居采用的是逻辑连接的方式,两个IBGP连接不一定存在实际的物理链路。所以需要有IGP来提供路由,以完成BGP路由的递归查找
EBGP 外部边界网关协议。归属不同的AS的对等实体之间运行的BGP称为EBGP。
Border Router 边界路由器,在AS边界上与其他AS交换信息的路由器
AS 自治系统(Autonomous system),一个组织(例如ISP)管辖下的所有IP网络和路由器的整体。
参与BGP路由的每个AS都被分配一个唯一的自治系统编号(ASN)。对BGP来说ASN是区别整个相互连接的网络中的各个网络的唯一标识。64512到65535之间的ASN编号保留给专用网络使用
Route Reflector 1. 同一AS内如果有多个路由器参与BGP路由,则它们之间必须配置成全连通的网状结构——任意两个路由器之间都必须配置成对等实体。由于所需要TCP连接数是路由器数量的平方,这就导致了巨大的TCP连接数
为了缓解这种问题,BGP支持两种方案:Route Reflector、Confederations
路由反射器(Route Reflector)是AS内的一台路由器,其它所有路由器都和RR直接连接,作为RR的客户机。RR和客户机之间建立BGP连接,而客户机之间则不需要相互通信
RR的工作步骤如下:
(1)从非客户机IBGP对等实体学到的路由,发布给此RR的所有客户机
(2)从客户机学到的路由,发布给此RR的所有非客户机和客户机
(3)从EBGP对等实体学到的路由,发布给所有的非客户机和客户机
RR的一个优势是配置方便,因为只需要在反射器上配置
工作负载 Workload,即运行在Calico节点上的虚机或容器
全互联 全互联网络(Full node-to-node Mesh)是指任何两个Calico节点都进行配对的L3连接模


通过下面的这副图中关于BGP的理解将会更加清晰。


BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。
两个建立BGP会话的路由器互为对等体(Peer)。BGP对等体之间交换BGP路由表。
BGP路由器只发送增量的BGP路由更新,或进行触发更新(不会周期性更新)。
BGP具有丰富的路径属性和强大的路由策略工具。
BGP能够承载大批量的路由前缀,用于大规模的网络中
BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。
每条BGP路由都携带着多种路径属性(Path attribute),在各种路径属性中,AS_Path属性是非常关键的一个。AS_Path属性记录了BGP路由传递过程中所经过的AS号,实际上它是一个AS号的列表。
BGP路由器不接受AS_Path中包含其自身AS号的路由更新。AS_Path属性值的长短(AS号的个数)会作为一个比较的依据,影响BGP路由选择的决策。

关于BGP包的格式


BGP报文类型字段解释:

报文名称 作用 发包场景
Open 协商BGP邻居的各项参数,建立邻居关系。 BGP对等体之间需先建立TCP连接,如果TCP连接成功,那么BGP向对等体发送Open报文。
Update 用于发送BGP路由信息。 连接建立后,有路由需要发送或路由变化时,发送UPDATE通告对端路由信息。
Notification 报告错误,中止对等体关系。 当BGP在运行中发现错误时,要发送NOTIFICATION报文通告BGP对端。
Keepalive 维持BGP对等体关系。 定时发送Keepalive报文以保持BGP对等体关系的有效性。
Route-refresh 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文。 当路由策略发生变化时,触发请求对等体重新通告路由。

IBGP 与 EBGP


IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。
两台路由器之间要建立IBGP对等体关系,必须满足两个条件:
1.两个路由器所属AS需相同(也即AS号相同)。
2.在配置BGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立

EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP邻接关系。
两台路由器之间要建立EBGP对等体关系,必须满足两个条件:
1.两个路由器所属AS不同(也即AS号不同)。
2.在配置BGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立.

这里可能有疑问的是IBGP既然能够使R1与R3邻接相通,那关OSPF什么事情?
我们可以把IBGP想象成IGP的更上一层的抽象,IGP的具体实现这里是OSPF,作用在于主动学习路由。
通过IBGP开放的端口更新相关路由表,但学习是ospf学习得到的。
当与不同的AS进行连接时,对方可以不需要加入OSPF网络。
还有就是不同的路由协议它可以进行宣告,OSPF当宣告的数量一多会造成严重的性能问题(它的宣告容量是有限的),而BGP不会。

BGP的路由学习


为了保证中转AS300内所有路由器都能学习到完整的BGP路由信息,我们不得不在该AS内的每一台路由器上运行BGP并且建立全互联的IBGP对等体关系。
为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接

简单来讲C与B、D、E成为对等体,我直接从BDE中拿取它们的路由表,并且不让他们告诉其他人。
B、D、E以此内推。

Demo 配置演示


需要完成如下要求:
1.R1、R2及R3属于AS123,R4属于AS 400;
2.AS123内的R1、R2及R3运行OSPF,通告各自直连接口(包括三台设备的Loopback0接口),注意OSPF域的工作范围;所有设备的Loopback0接口地址为x.x.x.x/32,其中x为设备编号(如R1的接口地址为1.1.1.1/32)。
3.R3与R4之间建立EBGP对等体关系,R2暂时不运行BGP,R1与R3之间建立IBGP对等体关系,所有的BGP对等体关系基于直连接口建立;R4将直连路由4.4.4.4/32通告到BGP,要求R1能学习到BGP路由4.4.4.4/32;
4.修改BGP配置,使得R1与R3基于Loopback0接口建立IBGP对等体关系


配置AR1 设备的 g0/0/0 接口的IP为10.1.12.1,并添加Loopback0接口地址为1.1.1.1

  1. system-view
  2. sysname AR1
  3. int g0/0/0
  4. ip a 10.1.12.1 24
  5. dis this
  6. int L 0
  7. ip a 1.1.1.1 32
  8. dis this
  9. q


配置AR2 设备的 g0/0/0 接口的IP为10.1.12.2,g0/0/1 接口的IP为10.1.23.2,并添加Loopback0接口地址为2.2.2.2

  1. system-view
  2. sysname AR2
  3. int g0/0/0
  4. ip a 10.1.12.2 24
  5. int g0/0/1
  6. ip a 10.1.23.2 24
  7. int L 0
  8. ip a 2.2.2.2 32
  9. dis this
  10. q


配置AR3 设备的 g0/0/0 接口的IP为10.1.23.3,并添加Loopback0接口地址为3.3.3.3

  1. system-view
  2. sysname AR3
  3. int g0/0/0
  4. ip a 10.1.23.3 24
  5. dis this
  6. int L 0
  7. ip a 3.3.3.3 32
  8. dis this
  9. dis ip int b
  10. q


直连ping测试。

  1. # AR3 ping 测试
  2. ping 10.1.23.2
  3. # AR1 ping 测试
  4. ping 10.1.12.2


配置AR1的OSPF,设置router-id为1.1.1.1,区域为0,并宣告所有的网络。

  1. ospf router-id 1.1.1.1
  2. # 相当于 area 0.0.0.0
  3. A 0
  4. network 0.0.0.0 255.255.255.255
  5. dis this
  6. q


配置AR2的OSPF

  1. ospf router-id 2.2.2.2
  2. A 0
  3. network 0.0.0.0 255.255.255.255
  4. dis this
  5. q
  6. q


配置AR3的OSPF

  1. ospf router-id 3.3.3.3
  2. A 0
  3. network 0.0.0.0 255.255.255.255
  4. dis this
  5. dis ospf peer
  6. dis ospf peer B


配置AR1的BGP,由于我们需要映射AR1与AR3的通信所以我们需要peer AR1的,以此类推。

  1. bgp 123
  2. router-id 1.1.1.1
  3. peer 3.3.3.3 as-number 123
  4. peer 3.3.3.3 connect-interface L0


配置AR3的BGP

  1. bgp 123
  2. router-id 3.3.3.3
  3. peer 1.1.1.1 as-number 123
  4. peer 1.1.1.1 connect-interface L0
  5. # 查看bgp peer
  6. dis bgp peer
  7. # 进入bgp内部
  8. dis this
  9. int L 11
  10. ip a 33.33.33.33 32
  11. q
  12. bgp 123
  13. router-id 3.3.3.3
  14. network 33.33.33.33 32
  15. # 查看当前peer
  16. dis this
  17. # 查看当前BGP peer
  18. dis bgp routing-table


这里符号的意义

符号 描述
* 可用的(不可用:R,从更小AD值的IGP中学到了该路由,因此不用BGP路由;s,聚合时明细路由被抑制)
> 优化的(要确保>号出来,才能放进路由表,才能继续传给EBGP邻居)
i >号后面的i代表从IBGP学到的路由,本地通告的/从EBGP学到的路由不打i
? 重发布得来的


然后我们到AR1中查看路由表,发现它已经发现了33.33.33.33但是并不是IBGP协议,而是ofsp协议。

  1. system-view
  2. bgp 123
  3. dis ip routing-table

我们还会在后面说到这个问题。


AR3与AR4打通EBGP连接

  1. system-view
  2. sysname AR4
  3. int g0/0/0
  4. ip a 10.1.34.4 24
  5. int L0
  6. ip a 4.4.4.4 32
  7. q


设置AR3与AR4的直连,并设置直连区域为400

  1. system-view
  2. int g0/0/1
  3. ip a 10.1.34.3 24
  4. dis this
  5. ping 10.1.34.4
  6. # 配置BGP
  7. bgp 123
  8. peer 10.1.34.4 as-number 400


设置AR4的EBGP

  1. bgp 400
  2. router-id 4.4.4.4
  3. network 4.4.4.4 32
  4. peer 10.1.34.3 as-number 123
  5. dis bgp peer
  6. # 测试直连
  7. ping 10.1.34.3
  8. dis bgp peer
  9. dis bgp routing-table


我们发现它还是OSPF的连接,而不是IBGP的连接。
问题在于我们宣告的时候是0.0.0.0
所以我们需要先解除0.0.0.0的网络宣告对应到每个32位,然后将我们的环卫口(3.3.3.3)添加到我们的bgp中,最后再刷新bgp。

  1. # AR2
  2. ospf router-id 2.2.2.2
  3. a 0
  4. undo network 0.0.0.0 255.255.255.255
  5. network 10.1.12.0 0.0.0.255
  6. network 10.1.23.0 0.0.0.255
  7. dis this
  8. dis ospf peer b
  9. # AR1 刷新
  10. bgp 123
  11. refresh bgp external import
  12. # 去掉AR3的ospf 0.0.0.0 配置
  13. ospf router-id 3.3.3.3
  14. area 0
  15. undo network 0.0.0.0 255.255.255.255
  16. network 10.1.23.0 0.0.0.255
  17. # AR3 配置环卫口
  18. network 3.3.3.3 0.0.0.0


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

BGP RR路由反射与Calico的初探

BGP RR路由反射与Calico的初探[TOC] BGP RR路由反射介绍由于IBGP水平分割的存在,为了保证所有的BGP路由器都能学习到完整...

Kubernetes Calico BGP Full Mesh模式

Kubernetes Calico BGP Full Mesh模式[TOC] Full Mesh模式简介Full Mesh - 全互联模式,启用了 BGP 之后,Calico 的默认行...

Kubernetes Calico BGP RR路由反射器模式

Kubernetes Calico BGP RR路由反射器模式[TOC] RR路由反射器模式简介Calico 维护的网络在默认是(Node-to-Node Mesh)全互...

Soap、Http、TCP/IP 三个基本的通讯协议有什么区别?

TCPTCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯...

什么是CC-BY-NC-SA协议?有什么规定?

前言:他来了 他来 他骑着Tomcat 走来了 没错就是我 你们幽默风趣的小付早上给各位大爷们分享了堆和栈 虽然是是转载的但是确...

HTTP协议

前 言HTTP HTTP协议简介:超文本传输协议(英文全称:HyperTextTransferProtocol,缩写:HTTP),是一种用于分布式、协作...

动态主机配置协议 DHCP (扩展OVS)

动态主机配置协议 DHCP[TOC] DHCP简介动态主机设置协议(英语:Dynamic Host Configuration Protocol,缩写:DHCP),又称...

OSPF 协议

OSPF 协议[TOC] OSPF 协议简介开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内...

Kubernetes Calico VPP软协议

Kubernetes Calico VPP软协议栈[TOC] VPP简介VPP(Vector Packet Processor)是一个高性能、开源的用户空间网络数据平面,...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术