首页
视频
资源
登录
原
精
BGP 协议
2713
人阅读
2022/10/8 17:29
总访问:
1737583
评论:
0
收藏:
0
手机
分类:
网络
 >#BGP 协议 [TOC] ##BGP 协议介绍 tn2>BGP 全称是 Border Gateway Protocol, 对应中文是边界网关协议。 BGP是互联网上一个核心的去中心化自治路由协议。 从这个解释来看,首先这是一个用于互联网(Internet)上的路由协议。它的地位是核心的(目前是最重要的,互联网上唯一使用的路由协议),它的目的是去中心化,以达到各个网络自治。不过还是有点抽象。 先看看几个相关的概念: | 名词概念 | 描述 | | ------------ | ------------ | | AS(Autonomous system)<br/>自治系统 | 指在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体,它们对互联网执行共同的路由策略。也就是说,对于互联网来说,一个AS是一个独立的整体网络。而BGP实现的网络自治也是指各个AS自治。每个AS有自己唯一的编号。 | | IGP(Interior Gateway Protocol)<br/>内部网关协议 | 在一个AS内部所使用的一种路由协议。一个AS内部也可以有多个路由器管理多个网络。各个路由器之间需要路由信息以知道子网络的可达信息。IGP就是用来管理这些路由。代表的实现有RIP和OSPF。 | | EGP(Exterior Gateway Protocol)<br/>外部网关协议 | 在多个AS之间使用的一种路由协议,现在已经淘汰,被BGP取而代之。| tn2>由于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。  >### 定义 tn2>边界网关协议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)。 >### 目的 tn2>为方便管理规模不断扩大的网络,网络被分成了不同的自治系统。1982年,外部网关协议EGP(Exterior Gateway Protocol)被用于实现在AS之间动态交换路由信息。 但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。 BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。 虽然BGP用在AS之间传递路由信息,但并非所有AS之间传递路由信息都要运行BGP。如数据中心上行到Internet的出口上,为了避免Internet海量路由对数据中心内部网络影响,设备采用静态路由代替BGP与外部网络通信。 >### 受益 tn2>BGP从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性: BGP采用认证和GTSM的方式,保证了网络的安全性。 BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由。 BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性。 BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Tracking和BGP GR和NSR,提高了网络的可靠性。 在邻居数目多、路由量大且大多邻居有相同出口策略场景下,BGP用按组打包技术极大提高了BGP打包发包性能 更多名词定义: | 名词概念 | 描述 | | ------------ | ------------ | | BGP | 1. 边界网关协议(Border Gateway Protocol)是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或前缀表来实现自治系统(AS)之间的可达性 <br/> 2. 大多数ISP使用BGP来与其他ISP创建路由连接,特大型的私有IP网络也可以使用BGP <br/> 3. BGP的通信对端(对等实体,Peer)通过TCP(端口179)会话交换数据,BGP路由器会周期地发送19字节的保活消息来维护连接。在路由协议中,只有BGP | | IBGP | 内部边界网关协议。同一个AS内部的两个或多个对等实体之间运行的BGP被称为IBGP | | IGP | 1. 一个IGP内部应该仅有数十(最多小几百)个对等实体 <br/> 2. 对于端点数,也存在限制,一般在数百(最多上千)个Endpoint级别 <br/> IBGP和IGP都是处理AS内部路由的,仍然需要IGP的原因是:<br/>(1) IBGP之间是TCP连接,也就意味着IBGP邻居采用的是逻辑连接的方式,两个IBGP连接不一定存在实际的物理链路。所以需要有IGP来提供路由,以完成BGP路由的递归查找 | | EBGP | 外部边界网关协议。归属不同的AS的对等实体之间运行的BGP称为EBGP。 | | Border Router | 边界路由器,在AS边界上与其他AS交换信息的路由器 | | AS | 自治系统(Autonomous system),一个组织(例如ISP)管辖下的所有IP网络和路由器的整体。<br/>参与BGP路由的每个AS都被分配一个唯一的自治系统编号(ASN)。对BGP来说ASN是区别整个相互连接的网络中的各个网络的唯一标识。64512到65535之间的ASN编号保留给专用网络使用 | | Route Reflector | 1. 同一AS内如果有多个路由器参与BGP路由,则它们之间必须配置成全连通的网状结构——任意两个路由器之间都必须配置成对等实体。由于所需要TCP连接数是路由器数量的平方,这就导致了巨大的TCP连接数 <br/> 为了缓解这种问题,BGP支持两种方案:Route Reflector、Confederations <br/>路由反射器(Route Reflector)是AS内的一台路由器,其它所有路由器都和RR直接连接,作为RR的客户机。RR和客户机之间建立BGP连接,而客户机之间则不需要相互通信 <br/> RR的工作步骤如下:<br/>(1)从非客户机IBGP对等实体学到的路由,发布给此RR的所有客户机 <br/>(2)从客户机学到的路由,发布给此RR的所有非客户机和客户机<br/>(3)从EBGP对等实体学到的路由,发布给所有的非客户机和客户机<br/>RR的一个优势是配置方便,因为只需要在反射器上配置 | | 工作负载 | Workload,即运行在Calico节点上的虚机或容器 | | 全互联 | 全互联网络(Full node-to-node Mesh)是指任何两个Calico节点都进行配对的L3连接模 | tn2>通过下面的这副图中关于BGP的理解将会更加清晰。  tn2>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包的格式  tn2>BGP报文类型字段解释: | 报文名称 | 作用 | 发包场景 | | ------------ | ------------ | ------------ | | Open | 协商BGP邻居的各项参数,建立邻居关系。 | BGP对等体之间需先建立TCP连接,如果TCP连接成功,那么BGP向对等体发送Open报文。 | | Update | 用于发送BGP路由信息。 | 连接建立后,有路由需要发送或路由变化时,发送UPDATE通告对端路由信息。 | | Notification | 报告错误,中止对等体关系。 | 当BGP在运行中发现错误时,要发送NOTIFICATION报文通告BGP对端。 | | Keepalive | 维持BGP对等体关系。 | 定时发送Keepalive报文以保持BGP对等体关系的有效性。 | | Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文。 | 当路由策略发生变化时,触发请求对等体重新通告路由。 | ## IBGP 与 EBGP  tn2>IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。 两台路由器之间要建立IBGP对等体关系,必须满足两个条件: 1.两个路由器所属AS需相同(也即AS号相同)。 2.在配置BGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立<br/> EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP邻接关系。 两台路由器之间要建立EBGP对等体关系,必须满足两个条件: 1.两个路由器所属AS不同(也即AS号不同)。 2.在配置BGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立. tn>这里可能有疑问的是IBGP既然能够使R1与R3邻接相通,那关OSPF什么事情? 我们可以把IBGP想象成IGP的更上一层的抽象,IGP的具体实现这里是OSPF,作用在于主动学习路由。 通过IBGP开放的端口更新相关路由表,但学习是ospf学习得到的。 当与不同的AS进行连接时,对方可以不需要加入OSPF网络。 还有就是不同的路由协议它可以进行宣告,OSPF当宣告的数量一多会造成严重的性能问题(它的宣告容量是有限的),而BGP不会。 ## BGP的路由学习  tn2>为了保证中转AS300内所有路由器都能学习到完整的BGP路由信息,我们不得不在该AS内的每一台路由器上运行BGP并且建立全互联的IBGP对等体关系。 为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接 tn>简单来讲C与B、D、E成为对等体,我直接从BDE中拿取它们的路由表,并且不让他们告诉其他人。 B、D、E以此内推。 ## Demo 配置演示  tn2>需要完成如下要求: 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对等体关系  tn2>配置AR1 设备的 g0/0/0 接口的IP为`10.1.12.1`,并添加Loopback0接口地址为`1.1.1.1`。 ```bash system-view sysname AR1 int g0/0/0 ip a 10.1.12.1 24 dis this int L 0 ip a 1.1.1.1 32 dis this q ```  tn2>配置AR2 设备的 g0/0/0 接口的IP为`10.1.12.2`,g0/0/1 接口的IP为`10.1.23.2`,并添加Loopback0接口地址为`2.2.2.2`。 ```bash system-view sysname AR2 int g0/0/0 ip a 10.1.12.2 24 int g0/0/1 ip a 10.1.23.2 24 int L 0 ip a 2.2.2.2 32 dis this q ```  tn2>配置AR3 设备的 g0/0/0 接口的IP为`10.1.23.3`,并添加Loopback0接口地址为`3.3.3.3`。 ```bash system-view sysname AR3 int g0/0/0 ip a 10.1.23.3 24 dis this int L 0 ip a 3.3.3.3 32 dis this dis ip int b q ```  tn2> 直连ping测试。 ```bash # AR3 ping 测试 ping 10.1.23.2 # AR1 ping 测试 ping 10.1.12.2 ```   tn2>配置AR1的OSPF,设置router-id为`1.1.1.1`,区域为0,并宣告所有的网络。 ```bash ospf router-id 1.1.1.1 # 相当于 area 0.0.0.0 A 0 network 0.0.0.0 255.255.255.255 dis this q ```  tn2>配置AR2的OSPF ```bash ospf router-id 2.2.2.2 A 0 network 0.0.0.0 255.255.255.255 dis this q q ```  tn2>配置AR3的OSPF ```bash ospf router-id 3.3.3.3 A 0 network 0.0.0.0 255.255.255.255 dis this dis ospf peer dis ospf peer B ```  tn2>配置AR1的BGP,由于我们需要映射AR1与AR3的通信所以我们需要peer AR1的,以此类推。 ```bash bgp 123 router-id 1.1.1.1 peer 3.3.3.3 as-number 123 peer 3.3.3.3 connect-interface L0 ``` tn2>配置AR3的BGP ```bash bgp 123 router-id 3.3.3.3 peer 1.1.1.1 as-number 123 peer 1.1.1.1 connect-interface L0 # 查看bgp peer dis bgp peer # 进入bgp内部 dis this int L 11 ip a 33.33.33.33 32 q bgp 123 router-id 3.3.3.3 network 33.33.33.33 32 # 查看当前peer dis this # 查看当前BGP peer dis bgp routing-table ```  tn2>这里符号的意义 | 符号 | 描述 | | ------------ | ------------ | | `*` | 可用的(不可用:R,从更小AD值的IGP中学到了该路由,因此不用BGP路由;s,聚合时明细路由被抑制)| | `>` | 优化的(要确保>号出来,才能放进路由表,才能继续传给EBGP邻居)| | `i` | >号后面的i代表从IBGP学到的路由,本地通告的/从EBGP学到的路由不打i | | `?` | 重发布得来的 | tn2>然后我们到AR1中查看路由表,发现它已经发现了`33.33.33.33`但是并不是IBGP协议,而是ofsp协议。 ```bash system-view bgp 123 dis ip routing-table ```  tn>我们还会在后面说到这个问题。 tn2>AR3与AR4打通EBGP连接 ```bash system-view sysname AR4 int g0/0/0 ip a 10.1.34.4 24 int L0 ip a 4.4.4.4 32 q ```  tn2>设置AR3与AR4的直连,并设置直连区域为400 ```bash system-view int g0/0/1 ip a 10.1.34.3 24 dis this ping 10.1.34.4 # 配置BGP bgp 123 peer 10.1.34.4 as-number 400 ``` tn2>设置AR4的EBGP ```bash bgp 400 router-id 4.4.4.4 network 4.4.4.4 32 peer 10.1.34.3 as-number 123 dis bgp peer # 测试直连 ping 10.1.34.3 dis bgp peer dis bgp routing-table ```  tn2>我们发现它还是OSPF的连接,而不是IBGP的连接。 问题在于我们宣告的时候是`0.0.0.0`。 所以我们需要先解除`0.0.0.0`的网络宣告对应到每个32位,然后将我们的环卫口(`3.3.3.3`)添加到我们的bgp中,最后再刷新bgp。 ```bash # AR2 ospf router-id 2.2.2.2 a 0 undo network 0.0.0.0 255.255.255.255 network 10.1.12.0 0.0.0.255 network 10.1.23.0 0.0.0.255 dis this dis ospf peer b # AR1 刷新 bgp 123 refresh bgp external import # 去掉AR3的ospf 0.0.0.0 配置 ospf router-id 3.3.3.3 area 0 undo network 0.0.0.0 255.255.255.255 network 10.1.23.0 0.0.0.255 # AR3 配置环卫口 network 3.3.3.3 0.0.0.0 ```  
欢迎加群讨论技术,群号:677373950
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
155篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
27篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
38篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2023
TNBLOG.NET
技术交流:
群号677373950
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术