BGP的原理与应用

  • 一、BGP动态路协议
  • 1. BGP概述
  • 1.1自治系统
  • 1.2动态路由的分类
  • 1.2.1 按自治系统分类
  • 1.2.2 按协议类型分类
  • 1.3 BGP的概念
  • 1.4 BGP的特征
  • 2、BGP工作原理
  • 1.1 BGP报文
  • 1.1 BGP数据库
  • 1.2 BGP的类型
  • 3、BGP配置
  • 二、BGP在ENSP中实验验证
  • 1.实验目标
  • 2.实验环境与拓扑图
  • 3.实验步骤
  • 三、配置总结


一、BGP动态路协议

1. BGP概述

1.1自治系统

自治系统(AS)是由一个技术管理机构管理,使用统一选路策略的一组路由器集合,自治系统编号范围:1-65535,其中1-64511是互联网上注册公有AS号,类似公网IP地址。64512-65535是私有AS号,类似私网IP地址。

1.2动态路由的分类

1.2.1 按自治系统分类
  • IGP:自治系统内部路由协议,主要:RIP1/RIP2、OSPF、ISIS、EIGRP(思科私有协议)IGP是运行在AS内部的路由协议,主要解决AS内部的选路问题,发现、计算路由。
  • EGP:自治系统之间的路由协议,通常:BGP。EGP是运行在AS与AS之间的路由协议,他解决AS之间选路问题。
1.2.2 按协议类型分类
  • 距离矢量路由协议:rip1/2、BGP(路径矢量协议)、EIGRP(高级距离矢量协议)
  • 链路状态路由协议:OSPF、ISIS // 使用SPF最短路径算法。

1.3 BGP的概念

BGP是一种运行在AS与AS之间的动态路由协议,主要作用是在AS之间自动交换无环路由信息
以此来构建AS的拓扑图,从而消除路由环路并实施用户配置的路由策略。目前公网网络条目众多,IGP协议无法承载,而BGP可以轻松应对,通常BGP协议用于ISP和ISP之间或跨域地域总、分公司之间的路由信息交换。

1.4 BGP的特征

  • 传输协议:TCP,端口号179
  • BGP是外部路由协议,用来在AS之间传递路由信息
  • 是一种增强的路径矢量路由协议
  • 拥有可靠的路由更新机制
  • 具备丰富的Metric度量方法
  • 无环路协议设计
  • 为路由条目附带多种属性信息
  • 支持CIDR(无类别域间选路)
  • 丰富的路由过滤和路由策略
  • 无需周期性更新
  • 路由更新时只发送增量路由
  • 周期性发送KeepAlive报文以保持 TCP连通性

2、BGP工作原理

1.1 BGP报文

  • Open报文
    OPen报文是TCP建立后发送的第一个报文,用于建立BGP对等体之间的连接关系,
    主要包含BGP版本号、本地AS编号、Holdtime等信息。
  • UPdate报文
    Update报文用来在BGP之间更新路由信息,Updata报文可以通告多条属性相同的可达路由信息,也可以撤销多条路由不可达的路由信息。
  • Notification报文
    报文的作用是当BGP检测到错误状态时候,立即向对等体发送NOtification报文,之后BGP就会中断,只要收到Notification报文就会返回idle状态。
  • Route-Refresh
    用来告知对等体所支持路由的刷新能力,BGP的入口策略路由发生变化,本地的BGP路由会向对等体发送Route-Refresh报文,收到信息后,对等体将其路由信息重新发送给本地BGP路由器。
  • KeepAlive
    该报文在对等体之间周期的发送报文,用以保持连接的有效性并维护其连接,KeepAlive报文只有一个BGP报文头,默认KeepAlive报文发送周期为60S,保持时间180S,这个类似于OSPF中的Hello报文。

1.1 BGP数据库

  • IP路由表:全局路由信息库,包括最优的IP路由信息。
  • BGP路由表:BGP路由信息库,包括本地BGPSpeak通告的路由信息,将其最优的添加到路由表中。
  • 邻居表:对等体邻居清单表,包括对等体两端的邻居信息及邻居列表。
  • Adi-RIB-In:对等体宣告给本地的Speak的未处理的路由信息库。
  • Adjust-RIB-OUT:本地Speak宣告给指定的对等体路由信息库。

1.2 BGP的类型

两种邻居:IBGP和EBGP

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

3、BGP配置

  • 启用BGP,后面跟AS系统号
  • 宣告Route-id,建立邻居关系用
  • 宣告和谁建立邻居关系,
  • 通告BGP路由,(network、import)
    配置实例 1
[R1]router id 1.1.1.1
[R1]bgp 100
[R1-bgp] peer 7.7.7.7 as-number 100  ###环回口建邻居,环回口地址不会掉
[R1-bgp] peer 7.7.7.7 connect-interface LoopBack 0 ###我用自己的环回口和你建邻居
[R1-bgp] network 1.1.1.1 32
[R1] display bgp peer     ####查看BGP邻居
[R1] display routing-table     ####查看BGP路由表
[R1-bgp] import-route ospf 110    ###注入ospf 中的路由或者注入ISIS

配置实例 2
R1、R2建立IBGP邻居关系
R1与R2建立对等体关系

[R1] router id 1.1.1.1
[R1] bgp 100
[R1-bgp] peer 2.2.2.2 as-number 100
[R1-bgp] peer 2.2.2.2 connect-interface LoopBack 0

R2与R1建立对等体关系

[R2] router-id 2.2.2.2
[R2] bgp 100
[R2-bgp] peer 1.1.1.1 as-number 100
[R2-bgp] peer 1.1.1.1 connect-interface LoopBack 0

配置实例 3
R2和R3建立EBGP邻居关系

[R2]
[R2] router id 2.2.2.2
[R2] bgp 100
[R2-bgp] peer 23.0.0.2 as-number 200
[R3]
[R3] router id 3.3.3.3
[R3] bgp 200
[R3-bgp] peer 23.0.0.1 as-number 100

二、BGP在ENSP中实验验证

1.实验目标

学习掌握BGP的应用,了解IBGP和EBGP的区别并在实验环境中配置这两种路由协议,知道在不同的分区,在相同的分区BGP的配法

2.实验环境与拓扑图

  • 实验环境 ensp
  • 实验拓扑

3.实验步骤

1.搭建拓扑图,并配置R1,R2,R3,R5的端口IP地址和loopback 0的地址

[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 12.0.0.1 30
[R1-GigabitEthernet0/0/0]un sh
[R1]int g0/0/1
[R1-GigabitEthernet0/0/1]ip add 15.0.0.1 30
[R1-GigabitEthernet0/0/1]un sh
[R1]int loo 0
[R1-LoopBack0] ip add 1.1.1.1 32 
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 12.0.0.2 30
[R2-GigabitEthernet0/0/0]un sh
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 23.0.0.1 30
[R2-GigabitEthernet0/0/1]un sh
[R2]int loo 0 
[R2-LoopBack0]ip add 2.2.2.2 32
[R3]int g0/0/1
[R3-GigabitEthernet0/0/1]ip add 23.0.0.2 30
[R3-GigabitEthernet0/0/1]un sh
[R3]int loo 0 
[R3-LoopBack0]ip add 3.3.3.3 32 
[R5]int g0/0/1
[R5-GigabitEthernet0/0/1]ip add 15.0.0.2 30
[R5-GigabitEthernet0/0/1]un sh
[R5]int loo 0 
[R5-LoopBack0]ip add 5.5.5.5 32 
[R5]int loo 1
[R5-LoopBack1]ip add 202.0.0.1 24
[R5]int loo 2
[R5-LoopBack2]ip add 202.0.1.1 24

2.配置R1,R2,R5的OSPF协议
R1

[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]a 0
[R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0]network 15.0.0.0 0.0.0.3
[R1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.3

R2

[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]a 0
[R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.3

R5

[R5]ospf 1 router-id 5.5.5.5
[R5-ospf-1]a 0
[R5-ospf-1-area-0.0.0.0]network 5.5.5.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0]network 202.0.0.1 0.0.0.255
[R5-ospf-1-area-0.0.0.0]network 202.0.1.1 0.0.0.255
[R5-ospf-1-area-0.0.0.0]network 15.0.0.0 0.0.0.3

3.配置AS 100里面的R1,R2,R5的BGP
R1

[R1]bgp 100
[R1-bgp]router-id 1.1.1.1
[R1-bgp]peer 2.2.2.2 as-number 100
[R1-bgp]peer 2.2.2.2 connect-interface loopback 0
[R1-bgp]peer 5.5.5.5 as-number 100
[R1-bgp]peer 5.5.5.5 connect-interface loopback 0

R2

[R2]bgp 100
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 1.1.1.1 as-number 100
[R2-bgp]peer 1.1.1.1 connect-interface loopback 0
[R2-bgp]peer 5.5.5.5 as-number 100
[R2-bgp]peer 5.5.5.5 connect-interface loopback 0

R5

[R5]bgp 100
[R5-bgp]router-id 5.5.5.5
[R5-bgp]peer 1.1.1.1 as-number 100
[R5-bgp]peer 1.1.1.1 connect-interface loopback 0
[R5-bgp]peer 2.2.2.2 as-number 100
[R5-bgp]peer 2.2.2.2 connect-interface loopback 0

4.在BGP协议中将R5的Loopback 1和Loopback 2引入直连路由,使得能够被BGP的R1,R2路由学习到

没有引入前,没有学习到

BGP工作原理 bgp工作原理和作_路由算法

[R5]bgp 100
[R5-bgp]import-route direct

引入后,IBGP中的路由器R1,R2学习到了业务段的路由

BGP工作原理 bgp工作原理和作_bgp_02


5.配置R2与R3建立对等体关系

R2

[R2]bgp 100
[R2-bgp]peer 3.3.3.3 as-number 200 //R2和R3建立EBGP关系
[R2-bgp]peer 3.3.3.3 connect-interface loopback 0

R3

[R3]bgp 200
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 2.2.2.2 as-number 100
[R3-bgp]peer 2.2.2.2 connect-interface loopback 0

6、将R2和R3建立RIP关系

[R2]rip 1 
[R2-rip-1]v 2
[R2-rip-1]network 2.0.0.0 
[R2-rip-1]network 23.0.0.0
[R3]rip 1
[R3-rip-1]v 2
[R3-rip-1]network 3.0.0.0
[R3-rip-1]network 23.0.0.0

R2和R3相互学习到了各自的路由,R3学习到R2宣告的RIP路由

BGP工作原理 bgp工作原理和作_路由算法_03


7.配置对等体R2和R3为EBGP,EBGP用环回地址建立邻居关系,设置EBGP跳数为2

R2

[R2]bgp 100
[R2-bgp]peer 3.3.3.3 ebgp-max-hop 2

R3

[R3]bgp 200
[R3-bgp]peer 2.2.2.2 ebgp-max-hop 2

8、AS200里面的R3成功学习到AS100里面的路由表,实验完成

三、配置总结

在配置过程中需要注意以下几点,以免出现错误:
(1)在建立邻居关系,指定对端路由器地址前,务必保证可以ping通对端路由器。
(2)AS内部建立BGP邻居关系时,最好指定对方的Loopback地址,但不要忘记更新源,参考命令: “[R2-bgp]peer 5.5.5.5 connect-interface loopback 0 ” 。
(3)若在AS内部有一个以上的的路由器运行着BGP协议,对于AS内部来说,这也是IBGP协议,不要忘记更改下一跳的属性,也就是前面提到的“保证IBGP下一跳可达”,命令参考:“[R1-bgp]peer 15.0.0.1 next-hop-local”
(4)前面说到,若在两个不同AS区域的路由器上建立邻居关系,哪怕这两个路由器是直连的,也要改变它的TTL值,目的是让路由器之间用来建立邻居关系的数据包,可以多经过几个路由器,再被丢弃,因为,虽然不同AS的路由器是直连的,只有一跳即可,但是由于指定的是对端路由器的loopback地址,loopback地址的网段肯定与路由器直连的网段不是同一个网段,路由器收到该数据包后就把它当成另一个路由器上的地址了,所以在两个AS间建立邻居关系时,一定要改变它的跳数,IBGP之间建立邻居关系就不用改变TTL值了,因为在IBGP中,数据包的TTL值默认为255。改变TTL值的参考命令:“ [R3-bgp]peer 2.2.2.2 ebgp-max-hop 2 ”这条命令,需要跳几下就把数值设置为几就行,可以比实际跳数大,但是不能比实际跳数小。