一、BGP协议基础
1、路由的分类
1)直连路由
2)⾮直连路由(间接路由)
静态路由
动态路由
IGP: 内⽹⽹关路由协议(在企业内部或数据中⼼内部使⽤)
DV:距离⽮量路由协议
——RIP(v1/v2)
——IGRP—⽹络直径:100—255(思科的私有协议)
——EIGRP—思科的私有
LS: 链路状态路由协议
——ISIS- 中间系统到中间系统
——OSPF —开放式最短路径优先
EGP : 外部⽹关路由协议:在不同公司之间使⽤,在不同的城市之间
BGP:边界⽹关协议 (路径⽮量路由协议)
2、为什么要使用BGP协议
我们要在不同 AS 之间实现⽹络通信,需要使⽤ EGP-BGP 协议,BGP还有⼀些更重要的优势
1)⾮常稳定
2)可以传输⼤量的路由,⽀持⼤规模⽹络
3)具有⾮常丰富的路由控制策略,可以实现灵活的选路
3、BGP概述
-BGP:边界⽹关协议
-BGP 是公有协议,任何⼚商的设备都⽀持 BGP
-BGP 位于 OSI 的第 7 层 (应⽤层)
备注:
OSPF 基于 IP 协议,为了可靠性,数据库同步:协商主从关系,序列号、有确认机制
4、AS号
AS 号(Autonomous System Number): ⾃治系统:
——是互联⽹中的⼀种标识符,⽤于标识⼀个⾃治系统(AS)的唯⼀数字。⾃治系统是指由⼀组⽹络和路由器组成的⽹络。
——AS 号可以帮助互联⽹中的路由器找到要到达⽬的地的 IP 地址的最短路径。
——AS 号由互联⽹分配机构 IANA(互联⽹分配号码管理局)分配。
——AS 号的范围被划分为两类:**公共 AS 号和私有 AS 号** 。
——公共 AS 号是指由 IANA 分配的 AS 号,可⽤于在全球范围内标识⾃治系统。
——私有 AS 号是指由互联⽹注册机构(IR)分配的 AS 号,⽤于在私有互联⽹中标识⾃治系统。
——AS 通常使⽤“数字”来表示,称为 AS 号
——AS 号的范围是**从 0 到 65535,其中 0 被保留不使⽤**
-AS 编号取值范围
之前 —2 字节表示,取值范围:1-65535
私有 AS 号:64512-65534,可以⽤于在私有互联⽹中标识⾃治系统, 但不会在公共互联⽹中出现。这些私有 AS 号通常⽤于连接组织的内部⽹络。
⽬前是 4 个字节:1-4294967295
4 字节 AS 号的范围是从 0 到 4294967295,其中 0 号 AS 被保留不使⽤ ,私有 AS 号范围是 4200000000 ⾄ 4294967294
4 字节 AS 号由 IANA 管理,并由全球 RIR(区域互联⽹注册局)负责分配
在国内,中国的运营商通常将 AS 号按照不同的地理区域划分。
例如,中国电信在各省市设⽴了不同的⾃治系统,每个⾃治系统都有⾃⼰独⽴的
AS 号。⽽中国联通则将其⽹络划分为北⽅、南⽅、⻄南、东北、华东、华中六
个区域,每个区域都分配了不同的 AS 号 。
AS 号的划分⽅式取决于运营商的具体管理需求和⽹络架构,可以按照城市、区
域、⽹络、⼦⽹等不同的维度进⾏划分。
截⽌ 2021 年 9 ⽉,中国共分配了超过 37,000 个 AS 号。要查询中国已分配的
AS 号,可以使⽤以下⽅法:
访问 CNNIC 官⽹:CNNIC 是中国国家互联⽹信息中⼼
⼆、BGP 协议概述
1、使用场景
⼀:遍布全国⼤型政企单位之间, 或⼤型数据中⼼
⼆:运营商⻣⼲网络
2、作用
在AS之间动态的交互路由信息,实现公司与公司之间的互访
3、优势
1)稳定,基于 TCP 协议建⽴的,使⽤端⼝号 TCP179,所以⾮常稳定
2)传递⼤量路由,可以跨多跳建⽴邻居关系
3)路由控制策略丰富
4、BGP 邻居类型
EBGP: 运⾏于不同的 AS
IBGP: 运⾏于同⼀ AS 内部
5、BGP 特征
——BGP 使⽤传输层协议为 TCP,TCP 端⼝号179。路由器之间的 BGP 会话基于 TCP 连接⽽建⽴。
——运⾏ BGP 的路由器被称为 BGP 发⾔者(BGP Speaker),或 BGP 路由器。
——两个建⽴ BGP 会话的路由器互为对等体(Peer),简单理解,就是 BGP 邻居
——BGP 对等体之间交换 BGP 路由信息 , 简单理解,BGP 在邻居之间传递路由
——BGP 路由器只发送增量的 BGP 路由更新,或进⾏触发式更新(不会周期性更新)。
——BGP 能够传递⼤批量的路由,可在⼤规模⽹络中应⽤。
6、BGP 报⽂类型
和OSPF协议联系起来理解
-open : ⽤于建⽴邻居关系 (类似于 hello 报⽂)
-keep alive : ⽤于维护邻居关系,周期性发送,保持 BGP 连接 (类似于hello) ,默认60S发送一次。
-update : ⽤于传递路由和撤销路由 (类似于 LSU 报⽂)
-notification : 通知报⽂,⽤于通知 BGP 邻居之间的报错信息,⽤于断开BGP 连接
这里我把连接的路由器BGP协议关闭
-router-refresh : 重传报⽂,请求邻居重新发送路由信息
<R1>refresh bgp all { export | import } //手动重传BGP路由触发 {出 | 入} 方向的软复位
注意:配置peer keep-all-routes命令后,设备通过执行refresh bgp命令刷新路由表功能将不会生效
报文名称 | 作用 | 发送时刻 |
---|---|---|
Open | 协商BGP对等体参数,建⽴对等体关系 | BGP TCP 连接建⽴成功之后 |
Update | 发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
Notification | 报告错误信息,中⽌对等体关系 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体 |
Keepalive | 标志邻居建⽴,维持BGP邻居关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
Route-refresh | ⽤于在改变路由策略后请求对等体重新发送路由信息。只有⽀持路由刷新能⼒的 BGP 设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
7、BGP ⼯作过程
8、BGP 状态
1)idle :初始化状态
tcp 未连接状态,邻居的状态为 idle , 当 bgp 设备和邻居进⾏ tcp 连接时,会从当前的状态转为 connect 状态
2)connect 状态: tcp 连接状态
如果 tcp 建⽴连接成功,bgp 设备会向邻居发送 open 报⽂,状态也会转为 opensent 状态
如果 tcp 建⽴连接失败,bgp 设备的状态会转为 active 状态
3)active 状态:活跃状态
在当前状态下,bgp 设备依然没有放弃希望,依然试图继续建⽴ tcp 连接, 如果成功,状态依然可以转为 opensent 状态
如果依然失败,bgp 会停留在 active 状态
如果重传计时器超时,依然没有收到邻居回应,bgp 设备会⼼灰意冷的返回上⼀个状态,上⼀个是 connect 状态
4)opensent 状态: open 报⽂已发送状态,已向邻居发送 open 报⽂
如果 bgp 设备给邻居发送 open 报⽂后,如果收到来⾃邻居的回复,并且回复的报⽂是正确的,bgp 设备会继续发送报⽂, 发送 keepalive 报⽂,状态转为 open comfirm 状态
如果 bgp 设备给邻居发送 open 报⽂后,如果收到来⾃邻居的回复,但是回复的报⽂有错误,bgp 设备会向邻居发送 notification 报⽂(⽤于断开 bgp 连接状态),断开后会跳转到最初的 idle 状态
5)open comfirm : open 报⽂确认状态
如果收到邻居发来的 keep alive 报⽂,状态会转为 established 建⽴状态
如果收到邻居发来的 notification 报⽂,状态会跳转为 idle 状态
6)established : 连接已建⽴状态
如果收到邻居发来的正确的 update 报⽂或者 keepalive 报⽂,bgp 就会认为邻居是正常的
如果收到邻居发来的错误的 update 报⽂或者 keepalive 报⽂,bgp 设备会发送 notification 报⽂,通知邻居,我们结束吧,不做邻居了,会回到 idle初始化状态
9、BGP 的⼯作原理
建⽴邻居
传递路由
10、BGP 路由默认优先级为 255
IBGP 路由的默认优先级为 255
EBGP 路由的默认优先级为 255
11、BGP 邻居关系建⽴的完整流程
三、BGP 基础配置案例
1.BGP 实验1
需求
1)配置 EBGP 邻居关系
2)实现⽹络互通
配置步骤
1)配置接⼝ IP 地址
2)配置 EBGP 邻居
3)注⼊路由
-
配置命令
R1:sysname R1
interface GigabitEthernet0/0/0
ip address 192.168.12.1 255.255.255.0interface GigabitEthernet0/0/1
ip address 192.168.10.254 255.255.255.0bgp 100
router-id 1.1.1.1
peer 192.168.12.2 as-number 200
network 192.168.1.0
R2:
sysname R2
#
interface GigabitEthernet0/0/0
ip address 192.168.12.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 192.168.20.254 255.255.255.0
#
bgp 200
router-id 2.2.2.2
peer 192.168.12.1 as-number 100
network 192.168.2.0
-
验证:查看邻居表
display bgp peer
邻居表解析
BGP local router ID : //表示的BGP给当前这台设备分配的名字
Local AS number : //表示的是当前这个设备所属的AS号
Total number of peers : //表示当前设备⼀共有多少邻居
Peers in established state : //表示当前设备有效的邻居
Peer : //表示的是对端邻居的IP地址
V : //表示的是版本
AS: //表示的是邻居设备所在的AS号
MsgRcvd: //表示的是从邻居设备收到的消息数⽬
MsgSent: //表示的是向邻居设备发送的消息数⽬
OutQ: //表示的是 出向队列 (等待发往指定邻居的消息—出向数据—排队的数据 )
bgp要求稳定,所以如果邻居设备无法向对端发送⼀个稳定的报⽂,那么这个报⽂就会被要求重传。
哪些需要重传的报⽂,就会放到这个出向队列中,所以正常情况下,这个参数的值是0, 如果这个参数不是0,说明和邻居之间的链路非常不稳定,容易出现⽹络拥塞和丢包
State: //表示的是邻居的状态,最完美的状态,就是established (建立)
PrefRcv: //表示的是从邻居设备所接受过来的路由条⽬的数量
⽬前这个值为0,就代表对端设备还没有给我们传递路由信息,就是没有给我们发路由
也可以这样理解:本段从对端设备上收到的路由前缀的数⽬(接收到的路由的数量)
-
验证:查看路由表
display bgp routing-table
路由表字段解析:
BGP Local router ID : 标识的BGP路由器⾃⼰的Router-id
Status codes : 状态代码
valid : 表示BGP路由是有效的,能⽤
> - best: 表示BGP路由是最优的,⾃⼰可以⽤,别⼈也可以⽤
Origin : 起源代码,表示该BGP路由是通过什么⽅式宣告进BGP协议的
i - IGP :最优的 (通过network注入)
e - EGP :次优的
? - incomplete :最差的 (import 引入)
Network :表示BGP路由⽹段和掩码
NextHop :表示BGP路由的下⼀跳地址(如果是0.0.0.0 表示该路由是⾃⼰产⽣的)
后面的都是BGP路由条⽬的属性
MED: 路由度量值,表示去往⼀个BGP路由的距离,类似于其他协议的cost
LocPrf : 本地优先级,表明路由器的BGP本地优先级
PrefVal :协议⾸选值,表示的是⼀个BGP路由的优选值,最⾼的路由
**协议⾸选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效
Path:AS路径,表示的是⼀个BGP路由AS_Path属性,
AS_Path属性按顺序记录了⼀个BGP路由从本地到⽬的地址所要经过的所有AS编号。
Ogn:表示的是⼀个BGP路由的起源属性,主要⽤来定义路径信息的来源。
标记⼀条路由是怎么成为BGP路由的。它有以下3种类型:
IGP:具有最⾼的优先级。通过network命令注入到BGP路由表的路由,其Origin最高
EGP:优先级次之,通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete:优先级最低。通过其他⽅式学习到的路由信息。
比如BGP通过import-route命令引入的路由
- 验证:PC1和PC2 可以ping通
如果按照这个拓扑和命令配置以后依然无法ping通可以查看IP路由表中有无EBGP的路由,
如没有可能是禁止BGP路由下发到IP路由表导致的(我配置完了以后后面导入打开top发现没有EBGP路由),可以在配置的命令中看是否有‘bgp-rib-only’,undo命令就可以了
bgp-rib-only //命令用来禁止BGP路由下发到IP路由表
四、IBGP 全互联案例:
1、IBGP 全互联实验
-
需求
实现 R4 的 10.10.4.4 和 R5 的 10.10.5.5 互通
思路:思路 1:R4 和 R1 建⽴ EBGP 邻居 (外部的 EBGP 邻居)
思路 2:R3 和 R5 建⽴ EBGP 邻居 (外部的 EBGP 邻居)
思路 3:AS200 内部的 R1-R2-R3 配置 ospf-建⽴ ospf 邻居关系
思路 5:R1 和 R2 建⽴ IBGP 邻居 (内部的 IBGP 邻居)
思路 6:R2 和 R3 建⽴ IBGP 邻居 (内部的 IBGP 邻居)
思路 4:R1 和 R3 建⽴ IBGP 邻居 (内部的 IBGP 邻居)
思路 7:在 R4 和 R5 中注⼊路由 -
配置步骤
1)配置路由器的接⼝ IP 地址
2)在 AS200 内部配置 OSPF
3)配置 BGP 邻居关系
——开启 BGP 功能,进⼊ AS
——配置 Router-id
——配置邻居关系,指定邻居 IP 地址,指定邻居的 AS 号
4)在 R4 和 R5 中注⼊路由 -
配置命令
R4的配置:
1)R4的接⼝配置:
[R4]int g0/0/0
[R4-G0/0/0]ip add 192.168.14.4 24
[R4-G0/0/0]int lo0
[R4-LoopBack0]ip add 10.10.4.4 32
2)R4的BGP配置:
[R4]bgp 100
[R4-bgp]router-id 4.4.4.4
[R4-bgp]peer 192.168.14.1 as 200 //和R1建立外部邻居
[R4-bgp]network 10.10.4.4 32 //注入路由
R1的配置:
1)R1的接⼝配置:
[R1]int g0/0/0
[R1-G0/0/0]ip add 192.168.12.1 24
[R1-G0/0/0]int g0/0/1
[R1-G0/0/1]ip add 192.168.14.1 24
2)R1的OSPF配置:
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]quit
[R1-ospf-1]quit
3)R1的BGP配置:
[R1]bgp 200 //开启BGP,配置AS200
[R1-bgp]router-id 1.1.1.1
[R1-bgp]peer 192.168.14.4 as 100 //和R4建立外部邻居
[R1-bgp]peer 192.168.12.2 as 200 //和R2建立内部邻居
[R1-bgp]peer 192.168.12.2 next-hop-local //修改下⼀跳
[R1-bgp]peer 192.168.23.3 as 200 //和R3建立内部邻居
[R1-bgp]peer 192.168.23.3 next-hop-local //修改下⼀跳
R2的配置:
1)R2的接⼝配置:
[R2]int g0/0/0
[R2-G0/0/0]ip add 192.168.12.2 24
[R2-G0/0/0]int g0/0/1
[R2-G0/0/1]ip add 192.168.23.2 24
2)R2的ospf配置:
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]quit
3)R2的BGP配置:
[R2]bgp 200
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 192.168.12.1 as 200 //和R1建立内部邻居
[R2-bgp]peer 192.168.23.3 as 200 //和R3建立内部邻居
R3的配置:
1)R3的接⼝配置:
[R3]int g0/0/0
[R3-G0/0/0]ip add 192.168.23.3 24
[R3-G0/0/0]int g0/0/1
[R3-G0/0/1]ip add 192.168.35.3 24
2)R3的OSPF配置
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit
3)R3的BGP配置:
[R3]bgp 200
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 192.168.23.2 as 200 //和R2建立内部邻居
[R3-bgp]peer 192.168.23.2 next-hop-local //修改下⼀跳
[R3-bgp]peer 192.168.12.1 as 200 //和R1建立内部邻居
[R3-bgp]peer 192.168.12.1 next-hop-local //修改下⼀跳
[R3-bgp]peer 192.168.35.5 as 300 //和R5建立外部邻居
R5的配置:
1)R5的接⼝配置:
[R5]int g0/0/0
[R5-G0/0/0]ip add 192.168.35.5 24
[R5-G0/0/0]int lo0
[R5-LoopBack0]ip add 10.10.5.5 32
2)R5的BGP配置:
[R5]bgp 300
[R5-bgp]router-id 5.5.5.5
[R5-bgp]peer 192.168.35.3 as 200 //和R3建立外部邻居
[R5-bgp]network 10.10.5.5 32 //注入路由
-
验证:
1)display ospf peer brief //在R2中查看ospf 邻居
2)<R1>ping 192.168.23.3 //在R1 ping R3 通
3)<R1>display bgp peer //R1和R2 R3 R4 都是BGP邻居
<R3>display bgp peer //R3和R1 R2 R5 都是BGP邻居
<R4>display bgp routing-table //所有的路由器都有这两条路由
<R4>ping -a 10.10.4.4 10.10.5.5 //可以通
- 解析修改下⼀跳: Next_Hop
1)始发路由器在给邻居传递 BGP 路由时,默认修改下⼀跳地址
2)从外部邻居哪⾥学来的路由,在传递给⾃⼰的内部邻居时,默认不修改下⼀跳地址
1)在R4的始发路由器上注入路由10.10.4.4 下⼀跳为0.0.0.0
dis bgp routing-table
2)R1查看路由表,发现10.10.4.4的这条路由下⼀跳地址改为192.168.14.4
display bgp routing-table
始发路由器在给邻居传递BGP路由时,默认修改下⼀跳地址,
修改为和对端设备建立邻居的那个接⼝的IP
2)从外部邻居哪⾥学来的路由,在传递给⾃⼰的内部邻居时,默认不修改下⼀ 跳地址
3)在R3中查看路由表,发现10.10.4.4的这条路由下⼀跳地址改为192.168.14.4 (这里我在R1 undo 了 192.168.23.3 next-lop-local,也就是恢复了初始状态)
display bgp routing-table
在R3中,认为10.10.4.4 这条路由不是最优的,也不是有效的路由
为什么?
因为下⼀跳不可达,R3和下⼀跳地址192.168.14.4之间⽹络不可达
为什么会出现这个问题?
因为BGP路由器从外部邻居哪⾥学来的路由,在传递给⾃⼰的内部邻居时,默认不修改
因为R1从外部邻居R4哪⾥学来的路由,在传递给内部邻居R3时,默认不修改下⼀跳
解决的方法:
[R1]bgp 200
[R1-bgp]peer 192.168.23.3 next-hop-local //修改下⼀跳
4)外部邻居在传递路由的时候,默认修改下⼀跳地址
可以在下载里面下载和文章标题相同的TOP压缩包配合使用,请大家监督我学习