【CCNP】第七章 动态路由协议-BGP

第一节 BGP的基本概念

BGP(Border Gateway Protocol),边界网关协议

是运行在网络和网络之间的协议,是一款EGP(外部网关协议)

BGP基于TCP协议工作,目的端口号179。源端口随机,由路由器自行选择,一般来说在万以上(如20000)。

TCP可以基于不可靠的连接去建立一种可靠的连接关系,BGP需要跨越广域网,因此可靠就显得尤为重要。

BGP的AS域:

复制代码
BGP的AS号:
公有AS号:0~64511
私有AS号:64512~65535

BGP的报文:

复制代码
Open:用于建立BGP邻居关系
​
Keepalive:用于维护BGP邻居关系
​
Update:用于更新路由条目
​
Notification:用于差错控制,只要在BGP运行过程中发送了
​
Notification报文,BGP就会立马断开邻居关系,不再继续运行。
​
Route-Refresh:刷新路由,当路由出现变更时刷新路由(一般来说就是属性的改变)

BGP的邻居状态机:

复制代码
Idle:该状态下,运行BGP的路由器会查找到达BGP邻居的路由,如果找到了就进入下一个状态(connect),如果找不到,没路由,就始终卡在Idle状态。
​
Connect:该状态下,运行BGP的路由会发送TCP报文,进行TCP的三次握手,如果握手成功进入Opensent状态,如果握手失败则进入Active状态。
​
Active:当TCP连接建立失败时置为该状态,且在该状态下一直重新尝试建立TCP连接关系,一直重新尝试进行TCP三次握手。
​
OpenSent:发送Open报文。该状态下等待对端的Open报文,如若能够收到对端邻居的Open报文则进入OpenConfirm状态;如若收不到对端的Open报文,则发送Notification报文并且断开邻居关系
​
OpenConfirm:发送Keepalive包欧文,收到对端Keepalive报文进入Established状态,否则回到Idle状态。此状态下可能会发生Keepalive时间的选举,默认为180s,如若遇到两端Keepalive时间不一致,则选择较小的。
​
Established:交换Update报文,互相传递路由信息。

第二节 BGP邻居的建立

BGP的邻居关系分为两种,即内部邻居关系(iBGP)和外部邻居关系(eBGP)

iBGP:内部BGP,即运行的BGP AS号相同的设备之间建立的邻居关系。

eBGP:外部BGP,即运行的BGP AS号不同的设备之间建立的邻居关系。

传统的IGP协议(EIGRP、OSPF)可以自动地发现网络中的其它设备,从而形成邻居关系。但BGP并不具备该功能,因此BGP所有的邻居都需要进行手工指定。

建立eBGP邻居:

复制代码
(config)#router bgp AS号
(config-router)# bgp router-id x.x.x.x # 手动指定router-id
(config-router)# neighbor 对端设备的物理接口的IP地址 remote-as 对端设备的AS号

在建立eBGP邻居关系时,建立eBGP邻居时发出的数据包,其TTL(Time To Live)值为1,当数据包每经过一台三层设备(路由器或三层交换机),其TTL值就会减去1,当TTL值为0时候,该数据包会被三层设备丢弃,不再继续转发。

而在建立iBGP邻居关系时候,建立iBGP邻居时发出的数据包,其TTL(Time To Live)值为255,为最大值,没有此顾虑。

因此,如果在建立eBGP邻居关系时,出现跨设备建立,而TTL值不满足条件,可修改TTL值。

复制代码
(config)#router bgp AS号
(config-router)# neighbor 对端设备的物理接口的IP地址 ebgp-multihop a(1-255) # 调整eBGP报文的TTL值。

建立iBGP邻居关系:

复制代码
(config)#router bgp AS号
(config-router)# bgp router-id x.x.x.x # 手动指定router-id
(config-router)# neighbor 对端设备的环回口IP地址 remote-as 对端设备的AS号 # 在内部邻居时,往往推荐使用环回口地址,更加稳定。
(config-router)# neighbor 对端设备的环回口IP地址 update-source 接口编号,如lo0  # 修改更新源,确保TCP连接的正常建立。
​

查看BGP邻居表:

复制代码
show ip bgp summary 

其中字段State/PfxRcd:如果是State(邻居状态机中的状态中的任何一个),表明邻居建立的过程还没有完全结束。但如果是PfxRcd(数字),表明邻居已经建立完成。Tips:即便该数字是0都是正常的。


BGP报头:

复制代码
Marker:全F
Length:报文长度
Type:指明BGP的报文类型

OEPN报文:

复制代码
Version:BGP的版本,现网运行的一般都是BGP-4的版本。
My AS:本地的AS号
Hold Time:协商keepalive的时间间隔,默认是180s。
BGP Identifier:BGP Router-id

第三节 BGP的路由传递

1.路由传递

BGP路由传递为两种方式:本地宣告和重分发,其中重分发较多。

(1)本地宣告

复制代码
(config)# router bgp AS-Number
(config-router)#network 网络号 mask 掩码

需要注意的是,BGP本地宣告中的网络号和掩码必须和现有的IP地址完全一致,如需要宣告1.1.1.1/32,则可以键入"network 1.1.1.1 mask 255.255.255.255"

(2)重分发

复制代码
(config)# router bgp AS-Number
(config-router)# redistribute 路由来源(static/rip/eigrp x /ospf y)  # BGP协议无Metric值概念,BGP内部选路依靠BGP特有的选路原则。

2.查看BGP路由

查看BGP路由表:

复制代码
#show ip route bgp

查看BGP数据表:

复制代码
#show ip bgp    

通过BGP传递来的路由会先被放进BGP的数据表中,由BGP进行判断,如果判断该路由为优选路由,再将其放入BGP路由表中。


3.eBGP和iBGP在传递路由时的区别:

eBGP在传递路由时,下一跳属性会自动进行改变。

iBGP在传递路由时,下一跳属性是不会改变的。所以,为了保证iBGP路由的正常传递,在同时拥有eBGP和iBGP邻居的路由器上在和iBGP邻居建立时需要加"next-hop-self"参数来调整下一跳。

复制代码
(config)#router bgp 200
(config-router)# neighbor 4.4.4.4 next-hop-self

4.BGP路由黑洞解决方法:

(1)IBGP全互联

内部邻居每两两之间建立iBGP邻居关系

复制代码
(config)#router bgp 200
(config-router)# neighbor 对端环回口地址 remot 200
(config-router)# neighbor 对端环回口地址update-source lo0
(config-router)# neighbor 对端环回口地址next-hop-self

(2)物理链路全互联

(3)MPLS(多协议标签交换,IE内容,暂不要求掌握)

复制代码
(config)# ip cef # 开启思科快速转发,默认开启。
(config)# mpls label protocol ldp # 指定标签分发协议为LDP
(config)# mpls ldp router-id lo0 force # 强制使用lo0地址建立LDP邻居
(config)# int eX/y 
(config-if)# mpls ip

(4)开启BGP同步(不推荐)

复制代码
(config)# router bgp 300
(config-router)# synchronization # 开启BGP同步,默认关闭。

第四节 BGP的防环机制

BGP的防环分为eBGP防环和iBGP防环

1.eBGP防环

根据AS-Path属性,AS-Path属性描述了经过的AS,如 200 100,则代表先穿越100,再穿越200,最终来到本AS。

eBGP含有水平分割机制:

如果一条BGP路由中的AS-Path已经由本地的AS号,则拒绝接收该路由


打破eBGP防环规则:

1.allowas-in # 允许带有AS-Path属性和自己本地AS号相同的路由进入

部署位置:接收路由的设备上

复制代码
(config)# router bgp 100
(config-router)# neighbor 对端物理接口地址/环回口地址 allowas-in

2.as-override # AS号覆盖,将不同于自己AS号的值用本地AS号进行覆盖

部署位置:发送路由的设备上

复制代码
(config)# router bgp 100
(config-router)# neighbor 对端物理接口地址/环回口地址 as-override

2.iBGP防环

iBGP的水平分割机制:

从一个iBGP邻居收到的路由不会再发送给另一个iBGP邻居


打破iBGP防环机制:

1.iBGP邻居全互联

两两内部邻居建立邻居关系

复制代码
(config)# router bgp 200
(config-router)# neighbor 对端环回口地址 remot-as 200
(config-router)# neighbor 对端环回口地址 update-source lo0
(config-router)# neighbor 对端环回口地址 next-hop-self

2.路由反射器

路由反射器会将收到的路由条目反射出去,具体情况如下:

如若是从非客户发来的路由,则RR(路由反射器)只会反射给客户,不会反射给其它的非客户;

如若是从客户发来的路由,则RR(路由反射器)是可以同时传递给客户和非客户的。

路由反射器的配置:

路由反射器的配置思路为在反射器上设置客户端,如需要将2.2.2.2这个邻居设置成客户端。

复制代码
(config)# router bgp AS-Number
(config-router)# neighbor 2.2.2.2 route-reflector-client # 将2.2.2.2这个邻居设置本台反射器的客户端

3.联盟

联盟的核心思想是在一个大的AS中划分若干个小的AS,每个小的AS之间独立开来,舍弃从前的iBGP邻居关系,改为eBGP邻居关系,就不会出现由于iBGP防环机制导致不发送路由的问题。

复制代码
(config)# router bgp AS-Number # 此处写小AS号
(config-router)# bgp confederation identifier AS号 # 声明自己处于哪一个联盟(大AS)中
(config-router)# bgp confederation peers AS-Number # 此处如果要在联盟内部和别的小的AS建立eBGP邻居关系,则需要在此处声明自己和哪个AS相连

第五节 BGP的对等体组

对等体组

作用:用来简化邻居建立的配置命令。

复制代码
(config)# router bgp AS-Number
(config-router)# neighbor Name peer-group # 定义名为Name的对等体组

接下来可以开始定义对等体组内的语句

复制代码
(config-router)# neighbor Name remote-as 200
(config-router)# neighbor Name update-source lo0
……………… # 此处还可以有其它命令
(config-router)# neighbor 4.4.4.4 peer-group Name # 将名为Name的对等体组调用4.4.4.4邻居之上 / 将邻居4.4.4.4加入对等体组

第六节 BGP的聚合

BGP的聚合(汇总)部署思路和之前完全一致。

配置语法:

复制代码
(config)# router bgp AS-Number 
(config-router)# aggregate-address 聚合后的网络号 聚合后网络号的掩码 
# 发送聚合路由,但同时也会发送明细路由

要想只收到聚合路由,不收明细路由,则可以在后面加上参数"summary-only",意为只发送聚合路由

复制代码
(config-router)# aggregate-address 聚合后的网络号 聚合后网络号的掩码 summary-only 

第七节 BGP的属性

BGP属性分为四大类

1.公认必遵属性

指所有运行BGP的设备都必须能够支持和识别的属性,如Origin等

2.公认自决属性

指运行BGP的设备在发送Update报文时可以自由选择是否包含的属性,如本地优先级

3.可选可传递属性

指运行BGP的设备可以不支持此类属性,但必须原模原样的传递给其它运行BGP的设备

4.可选非传递属性

指运行BGP的设备若不支持该属性,则可以选择忽略掉这类属性


属性详解:

公认必遵属性

(1)Origin,起源属性

用于标识路由的来源。

起源属性属性值:

复制代码
i:指通过network进BGP的路由
e:指来自EGP的路由
?:Incomplete,指未知来源,常见于重分发进BGP的路由

起源属性的属性值是可以进行修改的,结合工具Route-map

复制代码
(config)# ip prefix-list Origin permit 1.1.1.1/32
(config)# route-map Origin permit 10
(config-route-map)# match ip address prefix-list Origin
(config-route-map)# set origin <igp/incomplete>
(config)# route-map Origin permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map Origin in/out #

在和x.x.x.x邻居关系下调用Route-map,注意进方向和出方向,如果该路由是要发送给邻居就是出方向,反之,如果是从邻居接收该路由,则是进方向。

其中neighbor x.x.x.x route-map Origin in/out #为部署方式的其中一种,还可以在宣告进BGP的时候顺带做配置

复制代码
(config)# router bgp AS-Number
(config-router)# network 1.1.1.1 mask 255.255.255.255 route-map Origin

(2)AS-Path,路径属性

路径属性代表一条路由条目从源AS到目的AS过程所经过的路径,切记从右至左观察

AS-Path属性值可以进行增加,依旧需要结合route-map

复制代码
(config)# ip prefix-list AS-Path permit 1.1.1.1/32
(config)# route-map AS-Path permit 10
(config-route-map)# match ip address prefix-list AS-Path
(config-route-map)# set as-path prepend AS1 AS2 # 添加AS号
(config)# route-map Origin permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map AS-Path in/out

(3)Next-Hop,下一跳属性

下一跳属性的修改:

复制代码
(config)# ip prefix-list NH permit 1.1.1.1/32
(config)# route-map NH permit 10
(config-route-map)# match ip address prefix-list NH
(config-route-map)# set ip next-hop a.b.c.d # 设置下一跳地址为a.b.c.d
(config)# route-map NH permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map NH out/in  

公认自决属性:

(1)本地优先级(Local-Preference)

衡量路由的优先程度,越高越优先。

本地优先级值的修改:

复制代码
全局修改:
(config)# router bgp AS-Number
(config-router)# bgp default local-preference 150 # 将本地宣告进BGP的路由优先级设置为150
​
​
部分修改:
(config)# ip prefix-list LPF permit 1.1.1.1/32
(config)# route-map LPF permit 10
(config-route-map)# match ip address prefix-list LPF
(config-route-map)# set local-preference x # 设置本地优先级的值
(config)# route-map LPF permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map LPF out/in 

(2)原子聚合(atomic-aggregate):

是一个标志,表明该路由是否是聚合路由

可选可传递属性

(1)aggregator:聚合者,即聚合路由的起源路由器,是对公认自决属性中的原子聚合属性的补充说明

参数:

aggregator AS:聚合路由的起源AS

aggregator Origin:聚合者

(2)Community:团体属性

团体属性分为公有团体属性和私有团体属性

默认情况下,团体属性不会随着路由的传递而传递,如确需在传递路由时同时传递团体属性,则可以补充语句

复制代码
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x send-community # 发送团体属性
​

公有Community:

复制代码
Internet:默认属性,所有的路由都有此属性,同时不可变更。可随意传递给其它任何邻居(包括内部邻居和外部邻居)
No-Export:不能传递给其它的AS,但是联盟内可以互传。
No-Advertise:不能传递给任何邻居。
Local-AS:路由只能在本AS内进行传递,但联盟内不可以互传。

公有团体属性的配置:

复制代码
(config)# ip prefix-list A permit 8.8.8.8/32
(config)# route-map A permit 10
(config-route-map)# match ip address prefix-list A
(config-route-map)# set community no-advertise / no-export / local-as
(config)# route-map A permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map A in/out

私有Community:

(1)纯数字,如:123456

(2)aa:nn,如1:1

注:即使配置成aa:nn格式,也会自动转换成纯数字形式,若想查看团体属性时看到aa:nn形式,则需要在全局下输入命令来转换

复制代码
(config)# ip bgp new-format

私有团体属性的配置:

复制代码
(config)# ip prefix-list A permit 8.8.8.8/32
(config)# route-map A permit 10
(config-route-map)# match ip address prefix-list A
(config-route-map)# set community 1:1
(config)# route-map A permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map A in/out

团体属性列表:

复制代码
(config)# ip community-list 1 permit aa:nn 
(config)# route-map A permit 10
(config-route-map)# match community 1
(config)# router bgp AS-Number
(config-bgp)# neighbor x.x.x.x route-map in/out

可选非传递属性

(1)MED,Multi-exit-discrimination,多出口鉴别

当某一条路由在进入BGP之前已经有Metric值,则进入BGP后,该Metric值=MED值

当某一条路由在进入BGP之前无Metric值,则MED=0

MED值是可以修改的

复制代码
(config)# ip prefix-list MED permit 1.1.1.1/32
(config)# route-map MED permit 10
(config-route-map)# match ip address prefix-list MED
(config-route-map)# set metric x # 设置MED的值
(config)# route-map MED permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map MED out/in  

(2)Originator_ID:起源者的标识,标识路由发送者和的Router-id,用于防环

(3)Cluster-List:集群列表,当路由每经过一台路由反射器,该反射器就会将自己的Router-id添加到集群列表中。

如果Cluster-List中已有本地的Router-id,则拒绝接收该路由,达到防环的效果。

第八节 BGP的选路原则

BGP选路将依据如下顺序进行选路

1.Weight(权重值,Cisco私有属性)

权重值越大,则该条路由越优先

权重值默认:

32768,始发于本地的路由 ​ 0,其它路由

修改权重值:

复制代码
(config)# ip prefix-list 8 permit 8.8.8.8/32
(config)# route-map 8 permit 10
(config-route-map)# match ip address prefix-list 8
(config-route-map)# set weight x # 设置权重值
(config)# route-map 8 permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map in # 权重值只有在in方向上调用才会生效。

2.本地优先级(Local Preference)

越大越优

修改本地优先级的方法:

全局修改:

复制代码
(config)# router bgp AS-Number
(config-router)# bgp default local-preference 200 # 将本地传递出去的路由优先级设置为200

部分修改:

复制代码
(config)# ip prefix-list LPF permit 1.1.1.1/32
(config)# route-map LPF permit 10
(config-route-map)# match ip address prefix-list LPF
(config-route-map)# set local-preference x # 设置本地优先级的值
(config)# route-map LPF permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map LPF out/in  

3.优选始发于本地的路由

当Next-hop字段内容为0.0.0.0的时候,代表下一跳是本身

如果同一目标网络前缀,有多个下一跳,且0.0.0.0存在时,则下一跳是0.0.0.0的路由会被优选。

4.AS-Path:越短越优

5.Origin:IGP>EGP>Incomplete

6.MED:越小越优

7.EBGP路由优先于IBGP路由

8.优选IGP路径最优的

9.优选配置了BGP的负载均衡(最大路径数)的

复制代码
maximum-paths 2 # 针对EBGP路由(常用)
maximum-paths ibgp 2 # 针对iBGP路由(不常用)

10.对于eBGP路由,优选最老的

11.Router-ID,越小越优

12.Cluster-List,越少越优

13.邻居的物理接口地址,越小越优

第九节 BGP的下放默认

BGP下放默认路由的方式:

前提是下发默认路由的设备本地路由表中有默认路由

1.重分发加下发

复制代码
(config)# router bgp 100
(config-router)# redistribute static
(config-router)# default-information originate

2.邻居上强制下发

复制代码
(config)# router bgp 100
(config-router)# neighbor 1.1.1.1 default-originate
相关推荐
Cry丶3 小时前
ubuntu安装vsftpd
服务器·网络·ubuntu
SHENGWEI胜为6 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
IMPYLH8 小时前
Linux 系统备份与镜像
linux·服务器·网络
淘气包海鸟9 小时前
水声网络框架
网络·ns3·水
国科安芯10 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
中屹指纹浏览器svip10 小时前
网络抖动会标记账号异常?分清两种波动
网络
承渊政道10 小时前
Linux网络学习【传输层协议UDP】
linux·网络·网络协议·学习·ubuntu·udp
小此方11 小时前
Linux网络(三十三):告别O(n)噩梦:从select/poll的挣扎到epoll红黑树+回调的降维打击,一文打通IO多路复用
linux·网络·驱动开发
2301_7779983411 小时前
Linux 网络:数据链路层
linux·服务器·网络
国科安芯11 小时前
空间锂离子电池组管理系统CANFD通信网络的辐射可靠性设计
网络·信息与通信·canfd·电池·低轨卫星·抗辐射