BGP-----
边界网关协议
AS----
自治系统
AS
定义:由一个单一的机构或组织所管理的一系列
IP
网络及其设备所构成的集合
。
AS
划分的原因
整个网络规模较大,伴随的是路由表中的路由数量进一步增加,路由表规模变大,路由收敛速度变
慢,设备性能消耗加大。
-----
范围太大。
AS
之间可能是由不同的机构、公司,相互之间无法完全信任,使用
IGP
协议可能存在暴露
AS
内部的
网络信息的风险。
不同的
AS
通过
AS
号进行区分,
AS
号存在
16bit
、
32bit
两种
。
IANA----
互联网数字分配机构。
16
位
AS
号,取值范围
1-65534
(其中
0
和
65535
保留),其中
64512-65534
为私有的
AS
号,可以自
行使用,公有的
AS
号为
1-64511
保留
AS
号
RFC4893
标准,
23456
该
AS
号为保留
AS
号
RFC5398
标准
16
位
AS
号:
64496-64511-----16
个
32
位
AS
号:
65536-65551-----16
个
BGP
基础
![](https://i-blog.csdnimg.cn/blog_migrate/279c124387706e6aa456a185baa4745a.png)
BGP-1------RFC1105
BGP-2------RFC1163
BGP-3------RFC1267
BGP-4------RFC1771----4271
BGP
协议介绍
1
、首先
RIP
是基于
UDP
进行数据传输的,而
UDP
是一个不可靠的协议,他在传输过程中可能会丢失某些
数据。
2
、缺省情况下,
RIP
协议的路由更新报文的发送间隔是
30S
,而如果两个
AS
内部的路由表非常大,
30
秒
的时间可能还不够将所有的路由信息传递给对方
AS
,这样,整条链路完全就是为了
RIP
的通告报文服
务,而不能转发数据流量。
解决方法:
将
UDP
协议更换为
TCP
协议。不用担心数据丢失,并且
TCP
会预先建立连接,也就让路由器有一个
准备的时间而不是像
RIP
一样毫无准备的接收大量更新数据。
取消周期更新,改为触发更新。
在第一次路由数据同步完成后,如果有路由增加,就发送通告路由增加的报文。如果路由删
除,就发送一个通告路由删除的报文。
如果路由信息发生改变,就先发送一个通告路由删除的报文,在发送一个通告路由增加的报
文。
运行
BGP
协议之间的设备传递路由信息,原因在于若传递拓扑信息,会导致路由器负载过高,并且会让
对端
AS
看到本端的拓扑信息,引发安全问题。
BGP
需要传递所有的通过
BGP
学习到的路由信息,并且运行了
BGP
协议的路由器,所维护的路由表是包
含了整个互联网的所有路由信息的。
BGP
特点
BGP
基于
TCP
,只要能够建立
TCP
连接,就可以建立
BGP
连接
触发式更新,不再进行周期更新
只传递路由信息,而不会暴露
AS
内的拓扑信息
不传递拓扑的原因
拓扑信息资源占用量大
会暴露
AS
内部的拓扑连接情况
无类别的路径矢量型协议
无类别
-----
传递时携带真实子网掩码
矢量
-----
方向性,谁传递的路由,谁为下一跳
距离矢量
----
将一个路由器看做一个单位计算距离
路径矢量
----
将一个
AS
看做一个整体,从而计算一跳。
IGP
协议的主要任务是将
AS
内部的未知网段信息计算获取到,而
BGP
则主要是将
IGP
协议计算出来的
路由信息进行搬运和传递,并不去计算路由
。
BGP
的特征
IGP
协议特点
选路佳
收敛快
占用资源少
可控性
因为在重发布的过程中,由于会抹除原有度量值,会导致出现选路不佳的情况。而
BGP
为了弥补这个
不足点,直接舍弃了开销值。取而代之的是设计了很多的
路径属性
。
可靠性
BGP
因为只有触发更新,而不存在周期更新。所以,需要确保其可靠性,使用
TCP
为传输层协议。
端口号
179
。
-------
BGP
会话的建立是手工指定的(单播形式)
。
IGP
协议不选择使用
TCP
的原因:
TCP
传输效率低
TCP
传输占用资源大
TCP
协议只能实现单播,所以,无法通过组播或广播的形式发送数据,将导致
IGP
协议无法自
动发现邻居关系,只能手工指定。
AS-BY-AS
BGP
将一个
AS
看做是一个整体
。
BGP
协议不支持负载均衡
。
![](https://i-blog.csdnimg.cn/blog_migrate/4013ed459694df759e61ec0fa85859e6.png)
BGP
的对等关系
BGP
因为传输层使用的是
TCP
协议,所以只要在
TCP
协议可以正常建立会话的基础上就可以完成
BGP
的
建邻工作。
BGP
支持非直连建邻(网络可达)
-----BGP
的非直连建邻是建立在
IGP
(静态)之上的。
BGP
存在两种对等体关系类型:
EBGP
、
IBGP
。
EBGP
对等体关系
位于不同自治系统的
BGP
路由器之间的
BGP
对等体关系。
EBGP
对等体一般使用直连建立对等体关系。
EBGP
邻居之间的报文中
TTL
值被设置为
1
。
两台路由器之间要建立
EBGP
对等体关系,需要满足如下条件:
两个路由器属于不同
AS
在配置时,
peer
命令所指定的对等体的
IP
地址必须路由可达,
TCP
连接必须正常建立。
IBGP
对等体关系
位于相同自治系统的
BGP
路由器之间的
BGP
对等体关系。
IBGP
对等体一般使用非直连建邻。
IBGP
邻居之间的报文中
TTL
值被设置为
255
。
在
IBGP
对等体中,常使用环回接口地址作为源目
IP
地址。
环回接口稳定
并且可以借助
AS
内部的
IGP
和冗余拓扑来保证可靠性。
BGP
特点
1.
无类别路径矢量协议
-----AS-BY-AS
2.
使用单播更新来发送消息;基于
TCP 179
号端口工作。
3.
增量更新机制
----
仅触发更新,无周期更新
4.
具有丰富的路径属性来取代
IGP
中的度量值进行选路,可以由多个属性共同控制协议
5.
可以在流量的进出口实行路由策略
----
可控性
6.
默认不被用于负载均衡
-----
会通过各种选路规则仅仅产生一条最佳路径
7. BGP
支持认证和聚合
BGP
的数据包
![](https://i-blog.csdnimg.cn/blog_migrate/8a98a6524fbc092ef987f297f1a05384.png)
BGP报文头部
Route-refresh
包
-----
路由刷新包
作用:用来要求对等体重新发送指定地址族的路由信息。
一般为本端修改了相关路由策略之后让对方重新发送更新报文,本端执行新的路由策略重新计算
BGP
路由。
双方均支持路由刷新功能
。
OSPF
中的
hello
报文
------
可以周期性的发现、建立和保活邻居关系。
Open
包
是
TCP
连接建立之后发送的第一个报文,用于建立
BGP
对等体之间的连接关系。
![](https://i-blog.csdnimg.cn/blog_migrate/98172486461b4a6e947d52da5107c130.png)
Hold Time-----
保活时间
BGP Identifier-----BGP
的标识符(
RID
)
与
OSPF
中的
RID
用法相同
全网唯一。
获取方式:手工配置
>
最大环回接口
>
最大物理接口
BGP
需要协商的参数
AS
号
BGP
的
open
报文会携带本地的
AS
号,通过比较两端的
AS
号可以判断对端是否和本端处于相同
AS
。
不管这个
AS
号与本地的
AS
号是否相同,都不影响
BGP
对等体的建立。
另外,
如果对方的
AS
号和本地指定对等体时写的
AS
号不同,则会导致邻居关系无法建立
。
peer 12.0.0.2 as-number 100
RID
通过对比
open
报文中的
RID
值,可以判断是否相同,若相同则会导致建邻失败
。
认证字段
BGP
也可以进行认证,认证口令不同,则也会
导致建邻失败
。
该字段永远以
MD5
值的方式保存在
TCP
的选项字段。
保活时间
-----
并不影响
BGP
对等体的建立。
BGP
在建立对等体关系时,需要协商该参数。
如果在该时间内未收到对端发来的
keepalive
报文或者
update
报文,则认为
BGP
连接中断。
-
---180S
。
报文更新时间
----
三分之一保活时间
----60S
。
若双方保活时间不一致,则按照小的时间进行。
该参数可以设置为
0
,若设置为
0
,则代表不发送
keepalive
报文。
路由刷新功能
keepalive
包
作用:用来进行周期保活
。
除了保活机制外,
keepalive
报文还在
open
报文协商参数时,临时充当确认报文
-----
确认
open
报文中
的参数是否认可
。
update
包
---
更新包
作用:用于在对等体之间传递路由信息,可以用于发布、撤销路由。
-----
携带需要传递的路由信息。
需要携带的参数主要就是目的网络号、子网掩码信息和路径属性。
![](https://i-blog.csdnimg.cn/blog_migrate/6d7808e90b748be8521c7bd0afc8505c.png)
Notification
包
纯粹的告警机制。当
BGP
检测到错误状态时(对等体关系建立时、建立之后都可能发送该报文),就
会向对等体发送该报文,告知对端错误原因。之后
BGP
连接会
立即
中断。
![](https://i-blog.csdnimg.cn/blog_migrate/d03861bdb79ad057a41424be8cae68a0.png)
BGP的状态机
BGP
的角色
Speaker
发送
BGP
报文的设备被称为
BGP Speaker
(发言者)
它接收或产生新的报文信息,并发布给其他
BGP Speaker
。
Speaker
角色是针对具体报文发送
过程而言的,网络中每台
BGP
路由器均可称为自己发送
BGP
报文的
Speaker
。
Peer
相互交换报文的
Speaker
之间互相称为
peer
(对等体)
BGP
的状态机仅描述的是对等体关系建立过程的状态变化
。
BGP
可以将邻居建立过程和
BGP
路由收发
过程分开
。
![](https://i-blog.csdnimg.cn/blog_migrate/b9b05b9170ce30be928b185ee8f4702f.png)
IDLE-----
空闲状态
所有设备启动
BGP
进程后,首先进入该状态。
进入该状态后,等待手工指定邻居。
当手工指定邻居之后,将会进入到一个
检查环节
。需要检查手工指定的
IP
地址在本地全局路由
表中是否可达,只有可达,才可以正常建立
TCP
的会话,如果不可达,则邻居关系建立失败,
停留在
IDLE
状态。
若检查成功,则进入
Connect
状态。
Connect-----
连接状态
建立
TCP
会话连接
在该状态下,会开启一个
连接重传定时器
。
----32
秒。
如果成功建立
TCP
会话,会关闭连接重传定时器,并进入
OpenSent
状态。
如果建立失败,则进入
Active
状态。
如果重传定时器超时,
BGP
仍然没有收到对等体的响应,那么
BGP
会继续尝试与对等体建立
TCP
会话,并一直处于
Connect
状态
。
Active
状态
----
尝试状态
该状态是因为第一次
TCP
会话建立失败进入的,在该状态会重新尝试建立
TCP
会话。
如果成功建立,则进入
OpenSent
状态,并会关闭连接重传定时器。
如果失败,则停留在
Active
状态。
与
Connect
状态共同使用同一个连接重传定时器。
OpenSent-----
发出本地的
Open
报文
也将收到对端发送的
open
报文,并会查看其中的参数,如果参数没有问题,则本地将发送
keepalive
报文进行确认,之后进入
openconfirm
状态。
如果发现收到的
open
报文中的参数不认可,那么
BGP
会发送
notification
报文给对等体,并进
入
idle
状态。
对等体关系的指定是双向的,所以当双方都使用
peer
命令指定了对等体后,均会主动与对等
体建立
TCP
连接。但是这样就会建立两条
TCP
的双向连接,所以
BGP
会选择第一个
TCP
链接断
开
。
OpenConfirm----
等待确认状态
在该状态机是,等待对方发送的
keepalive
报文。如果接收到对端发送的
keepalive
报文,则代
表参数协商通过,会进入最终状态。
如果收到的是
notification
报文,则转至
idle
状态。
Established------
连接建立完成状态
对等体关系建立完成的标志。
在该状态下,
BGP
可以和对等体交互
Update
报文、
keepalive
报文、
Route-refersh
报文和
Notification
报文。
![](https://i-blog.csdnimg.cn/blog_migrate/f418f8a046a3459a640314fa093d4908.png)
BGP
的工作过程
1.
基于
IGP
协议或静态路由实现邻居
IP
可达
2.
启动
BGP
协议,并指定邻居关系
1.
邻居之间单播传输报文,通过三次握手机制,建立
TCP
会话通道。
2.
后续
BGP
所有的通讯都将基于
TCP
会话通道来传输。包括传输所需要的可靠性机制。
3.
使用
open
报文和
keepalive
报文进行对等体关系的建立。
open
报文用来携带建立对等体关系时所需
要使用的参数,
keepalive
报文用于参数的确认。最终完成对等体关系的建立。生成
邻居表
。
4.
使用
update
报文来共享路由信息。信息中将携带目标网络号、掩码及路径属性;之后,设备会将所
有的自己发送的以及接收的路由信息记录在一张表中
-----
BGP
表
。
5.
将
BGP
表中的最优路由信息(通过路径属性选择)加载到
全局路由表
中。
6.
此时路由收敛完成,将使用
keepalive
报文进行周期保活,默认保活时间为
180S
,周期发送时间默
认为保活时间的
1/3
,即
60S
。
7.
如果出现错误信息,则将使用
notification
报文进行告警
8.
如果出现结构突变,则将使用
update
报文进行触发更新
BGP
的防环机制
EBGP
的水平分割
AS_Path
属性
-----
记录
AS
路径的一个属性
当路由信息再一次传回本地
AS
时,路由器通过查看
AS_Pathshux1
,可以清楚的知晓该属性包含本地
AS
号,故拒绝学习该路由信息。
IBGP
的水平分割
![](https://i-blog.csdnimg.cn/blog_migrate/1b0d664e8ab82fc58e1eede23bac5ddb.png)
BGP
规定,当路由器从一个
IBGP
对等体学习到某条
BGP
路由时,它将不能再把这条路由通告给任何
IBGP
对等体
。
-----IBGP
水平分割机制。
解决方案
1.
构建全联的
IBGP
对等体关系
1.
当
AS
内部设备数量巨大时,
IBGP
邻居关系会呈指数型增长,而非直连建邻之间传递的数据还
是要依靠物理链路,故全连接建邻会导致占据大量的链路资源,并且路由器维护大量的
TCP
和
BGP
会话连接,需要消耗大量的设备资源。
2.
网络的可扩展性差。
2.
打破
IBGP
水平分割
1.
联邦
2.
路由反射器
BGP
的路由黑洞
![](https://i-blog.csdnimg.cn/blog_migrate/15fab4f0488af3936a0a975610958f0e.png)
由于
BGP
协议可以非直连建邻,所有导致
BGP
协议可能出现跨越未运行
BGP
协议的设备,导致
BGP
路
由传递后,控制层面可达。但是数据层面,流量流经未运行
BGP
协议的设备时,无法通过,形成路由黑
洞。
避免路由黑洞的方式
----
-BGP
同步更新规则
----
当一台路由器从自己的
IBGP
对等体学习到一条
BGP
路由
时,它将不能使用该条路由或把这条路由信息通告给自己的
EBGP
对等体,除非它又从
IGP
协议学习到这
条路由,也就是要求
IBGP
路由与
IGP
路由同步
。
在华为数通设备上,
BGP
同步更新规则缺省是被关闭的,并且华为也不允许开启
BGP
同步规则
。
解决方案
1.
让未运行
BGP
协议的设备运行
BGP
协议
---
建立全连接的
IBGP
环境。
2.
物理或逻辑拓扑全联
3.
在
IGP
协议中,重发布
BGP
协议的路由信息
4.
MPLS----
多标签标记交换
。
BGP
基本配置
BGP
建邻的基本配置
![](https://i-blog.csdnimg.cn/blog_migrate/0b2ee39befdad6d9236dee7ff9a38042.png)
使用直连接口
IP
地址建立
EBGP
对等体关系
1
、启动
BGP
协议
[r1]bgp 100 -----
启动
BGP
进程,且标准本设备所在的
AS
号
2
、设置
Rid
[r1-bgp]router-id 1.1.1.1
3
、配置
BGP
对等体,并指定对等体所在的
AS
号
[r1-bgp]peer 12.0.0.2 as-number 200
[r1]display bgp peer ----
查看
BGP
的邻居表
IBGP
对等体的建立
由于直连接口建立对等体时,若链路终端,则会中断
BGP
会话。故在实际工程中,一个
AS
内部正常具
有较为复杂的网络拓扑结构,设备到设备之间存在大量的备份和负载均衡路径,因此建立
IBGP
邻居关系
时,
建议使用双方的环回接口来作为源
/
目
IP
地址
。
[r2]bgp 200
[r2-bgp]peer 3.3.3.3 as-number 200
[r3]bgp 200
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 2.2.2.2 as-number 200
手工建立邻居关系时,所指定的建邻的
IP
地址必须和收到的数据包中的源
IP
地址相同才能正常建立邻
居关系。否则,邻居关系建立失败
。
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 -----
将
R2
发送的数据包的源
IP
地址修改为
loopback 0
接口的
IP
地址
抓包后会发现一个问题,就是
BGP
此时仅建立了一次
TCP
连接,就完成了
BGP
会话的建立。这也就意
味着,
BGP
会话的建立仅仅是依靠
TCP
会话,而并没有对这个
TCP
会话建立的方式有要求,该
TCP
会话是
由谁发起的,谁是客户端,谁是服务端并不影响
BGP
对等体的建立。
-------
在
BGP
协议中,
TCP
会话建立
两次完全是多余的,而建立两次的原因也是因为双方路由器均会指定对等体(均将自己看做是客户
端),从而发起建立连接请求
。
而在当下场景中,
R3
作为
TCP
会话的服务端,已经认知到了自己本地已经有接口
3.3.3.3
,与自己本地
配置的对等体建立了连接,所以本地也不会在发送所谓的
TCP
连接建立请求。
一般情况下,双方均要修改本地数据包的源
IP
地址
。
使用环回接口
IP
地址建立
EBGP
对等体关系
若
EBGP
对等体之间存在多条直连链路时,才可使用环回接口建立对等体关系
。
1
、实现路由可达
ip route-static 5.5.5.5 255.255.255.255 45.0.0.5
ip route-static 4.4.4.4 255.255.255.255 45.0.0.4
2
、对等体配置
[r4]bgp 200
[r4-bgp]peer 5.5.5.5 as-number 300
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r5]bgp 300
[r5-bgp]router-id 5.5.5.5
[r5-bgp]peer 4.4.4.4 as-number 200
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
因为
EBGP
之间的数据包的
TTL
值为
1
,故此时虽然可以建立
TCP
连接和
BGP
会话,但是路由器会认为该
连接和会话存在异常,在
BGP
对等体建立完成后,发送
notification
报文断开连接,从而会产生一个现象
-
---
状态机震荡
。
解决方法:修改
TTL
值
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
如果未标明参数值,则代表将
TTL
值修改为最大值
255
[r5-bgp]peer 4.4.4.4 ebgp-max-hop 2
两边均要修改,不然无法建立对等体关系,还存在状态机震荡。
BGP
的路由发布
通过
network
命令发布路由
路由发布
----
对于
BGP
而言,只要是路由表中存在的路由信息,都可以通过
network
命令发布
。
[r1-bgp]network 1.1.1.1 32
目标网络号
路由表中的掩码信息
注意:
BGP
使用
network
命令宣告时,该路由信息必须与
全局路由表
中存在的路由项一致。
[r1-bgp]display bgp routing-table ---
查看
BGP
表
![](https://i-blog.csdnimg.cn/blog_migrate/3a9094a5ae67a6f3315964bbc2b75e35.png)
network-----
目标网络号及掩码
nexthop-----
下一跳,谁发送的路由信息,则下一跳就写谁;如果是本地发布的路由,则下一跳写
0.0.0.0
状态码
----
*
代表可用
所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的
可达性。如果本地路由表中可达,则代表该路由信息可用;若本地不可达,则代表该路由信息
不可用。
如果该路由条目不可用,则将不会参与到路由信息的优选过程
。
>
代表优选
当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的路由信
息进行
加表及传递
。
i
代表该路由信息是通过
IBGP
对等体学习到的
对于
R3
而言,
R2
传递来的路由信息是不可用且不优的,原因在于下一跳属性未修改,无法递归。
解决思路:
[r2-bgp]peer 3.3.3.3 next-hop-local
将路由传递给自己的
3.3.3.3
邻居时,将路由中的下一跳属性该为本地。
总结一下配置逻辑
:
1.
完成所有路由器的
IGP
配置
2.
使用直连接口建立
EBGP
对等体关系
3.
使用环回接口建立
IBGP
对等体关系
4.
使用
connect-interface
命令修改
IBGP
建邻源
IP
地址,双方均修改
5.
使用
next-hop-local
命令修改路由传递的下一跳属性
6.
若存在使用环回接口建立
EBGP
对等体关系,则需要建立通讯条件,并且使用
ebgp-max-hop
命令
修改
TTL
值
使用
import
命令引入路由
[r2-bgp]import-route ospf 1
ONG----
起源码属性
----
标识一条路由信息的起源类型
i----
代表这条路由信息起源于
AS
内部使用
network
命令通告出来
不限于
IGP
、静态、直连
e-----
代表这条路有信息起源于
EGP
协议
----
现在几乎看不到该标识
?-----
除了以上两种方式,其他方式获取的路由信息都是该标识
BGP
路由通告原则
当一条
BGP
路由器发现了多条可以到达同一地址的路由条目,该设备会通过一个路由选择过程在这
些路由条目中选择一条最优的路由,将这条路由加入到全局路由表中,并且在向其他
BGP
对等体通
告该路由条目时,也只会通告最优的路由。
通常情况下,路由器只会将最优的路由加载到路由表中,除了激活了负载均衡情况外。
当一台路由器从
EBGP
邻居学习到了
BGP
路由时,缺省情况下,会将该路由条目通告给所有的
IBGP
对等体以及
EBGP
对等体。
当一台路由器从
IBGP
邻居学习到了
BGP
路由时,缺省情况下,不会将这条路由信息通告给其他的
IBGP
对等体。
因为
IBGP
水平分割原则
当一台路由器从自己的
IBGP
学习到
BGP
路由时,如果同步规则被激活,只有从
IGP
协议也学习到该
路由条目后,才会将
BGP
路由激活,并学习到本地,以及通告到
EBGP
对等体。如果同步规则被关
闭,即使没有从
IGP
学习到该路由,也会将
BGP
路由通告给
EBGP
对等体。