BGP
AS(自治系统号)
指的是在同一个组织管理下使用相同策略的设备的集合。
(在一个自治系统内使用相同选路策略)
作用 用于管理规模不断扩大的网络。网络被分成了不同的自治系统。
自治系统 AS 1-65535 占 2字节
其中64512-65535 私用用于IPV6
私有的AS号 64512-65535 占 4字节
占4字节(64 bit)的AS号能够支持与2字节(32bit)AS号设备兼容
BGP 边界网关协议
BGP是一种基于策略的距离(路径)矢量(向量)路由协议
为啥会自身设计防环(彻底)?
环路产生原因:从自身发布的内容,又从别处学习到自身发送回来的
BGP 可以记录AS路径(距离)—— 该路由所经过的AS号
AS: R1:AS100--> R2:AS200 会记录AS1 到AS2的距离
当BGP speaker收到携带自己AS号的路由时,不接收条AS路径信息
优点 主要用于对内部路由的传播及选路最佳路由(可根据BGP的属性 Attribute判断)
BGP特征
-
工作在应用层,基于TCP,端口号为179的距离矢量协议,继承了TCP的可靠性和面向连接的特征
-
路由更新可靠机制
针对 IGP: RIP--> 采用周期性更新(30s)
OSPF,EIGRP,IS-IS --> 内部的路由可靠更新机制(如 类似 ack确认更新报文)
EGP: BGP 基于TCP连接, 没有周期性的更新,使用keepalive报文检验TCP连接维持邻居关系
BGP采用的单播更新(一对一)
增量更新及触发更新 --BGP只发送update 更新报文更新路由。
(好处:大大减少 BGP 传播路由所占用的带宽,所以BGP适合在Internet上传播大量的路由信息)
-
BGP通告路由必须跟接口配置的网段一致
-
支持VLSM及CIDR
-
BGP邻居的建立和路由通告是分开的,并且采用 手动指定邻居(/手动建立对等体)
-
BGP邻居建立只要路由可达,不一定需要依靠背物理连接,也可以用环回口建立(分EBGP、IBGP情况)
-
BGP 采用路由聚合和路由衰减防止路由振荡(Route Flaps)有效提高了网络的稳定性
-
BGP 易于扩展,能够适应网络新技术的发展
BGP 术语
-
BGP发言者(speaker): 运行BGP协议的路由器设备
-
BGP邻居(neighbor)=BGP对等体 (peer):二台运行BGP的路由器之间建立了一条基于TCP(179)连接的后,建立的关系
-
不同类型的BGP的对等体类型
-
IBGP对等体: 同一AS号内建立对等体
- 通常情况下IBGP对等体是一般使用回环口建立邻居,但邻居之间必须路由可达
(IBGP 用环回口建立不会受物理链路断开所影响,稳定性好)
- BGP发言者从IBGP获得的路由不会在传给其他的IBGP对等体
(也可以说IBGP 学习到路由不会在本AS系统传递—防环机制)
- 从IBGP对等体学习到的路由,下跳保持不变,同时不会记录AS号(相同AS号之间)
-
EBGP对等体:不同AS号间建立对等体
- 通常情况下EBGP对等体是直连物理口建立
- BGP发言者从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP), 从EBGP对等体学习到的路由,会记录AS距离 —设计防环
-
-
对等体组(peer group)是一组采用相同策略更新的BGP邻居。
当一个对等体加入对等体组中时,该对等体将会获得所在对等体相同的配置,当对等体组的策略配置发生改变时,组内成员也会发生改变
注意点 若采用直连链路建立邻居关系,一旦接口或链路出现故障,接口状态也会down,BGP邻居会话就会断开。 在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用环回口建立EBGP对等体关系,则应注意EBGP多跳问题。
BGP 五种 报文
BGP报文分析
BGP中除了keepalive为周期更新,其他都是为触发更新(需要一定的触发条件)
- open 用于发现、建立邻居关系
- keepalive 维护邻居关系
每60s发送一次更新,hold time(保持时间):180s
-
update 用来路由更新(删减、增加),携带路由的属性
-
notification 当设备检测到错误状态(BGP邻居建立过程中的报错状态),发送该报文,用来显示错误情况
-
route-refresh(路由重置)向邻居重新请求路由信息
软清 --> 重新请求路由信息思科设备更新效率较慢,一般需要软清
#思科 clear ip bgp * soft
硬清–> 重新请求建立邻居更新
#思科 clear ip bgp *
BGP 的六种状态
- idle 空闲状态 刚刚启用BGP协议,但未建立邻居关系 – >处于正在查找路由
- connect 连接状态 正在和对等体建立TCP连接阶段
- open-sent 发送状态 open报文,open报文中携带邻居建立的参数,等待邻居的open报文
- open-comfirm 确认状态 收到对方的open报文,收到的open报文中的参数匹配,发送keepalive报文,等待对方keepalive报文
- established 已建立状态 收到对方的keepalive报文,开始使用update报文进行路由更新
- active 活跃状态 设备已发送open报文,但是一直等待对方的响应
BGP 邻居关系建立过程
R1 (AS 200) R2 (AS 100) ---> idle 状态--正在查找路由
1、-----TCP 三次握手 ——————
先启动BGP的一端先使用随机端口号向对端的179端口发起TCP连接,完成TCP连接的建立
R1 TCP SYN --> R2
R2 TCP SYN + ACK --> R1
R1 ACK --> R2
----完成TCP三次握手后 ---> connect 状态
2、-----对等体建立阶段一 ——————
三次握手建立完成之后,邻居之间相互发送open报文,携带参数用于对等体建立
R1 open --> R2 ---> active 状态处于等待对方响应,为建立邻居关系
R2 open --> R1
-----等待邻居建立 ———> open-sent 状态双方都收到 open报文
3、-----对等体建立阶段二 ——————
参数协商正常之后双方相互发送Keepalive报文 ---> open-comfirm 状态 --针对收到后的open报文中的参数匹配
R1 keeplive --> R2
R2 keeplive --> R1
收到对端发送的Keepalive报文之后对等体建立成功 --->established 状态 双方都收到对端的keeplive
双方定期发送Keepalive报文用于保持连接。
4、----BGP对等体的维护
R1 update --> R2
R2 update --> R1
BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体。
R1 与 R2 建立过程图
BGP 三张表
1、邻居表
存放邻居的信息
查看命令
思科 show ip bgp summary
State/PfxRcd:邻居状态/从邻居学习到的路由信息数量
!!思科设备如果是邻居关系正常的话state不会显示、只有PfxRcd
华为/华三 display bgp peer ipv4
而华为、华三设备只有Established状态显示
2、BGP转发表
存放通过BGP学习到的信息
查看
华为/华三 display bgp routing-table ipv4
思科 do show ip bgp
只有标记 *> 有效且最优的才能加入进路由表
i inter 内部学习到(IBGP)
e exter 由EBGP学习到了
3、BGP 路由表
-
将通过BGP学习到的最优且有效的路由加入进路由表
-
从EBGP对等体获取的路由,会发布给所有BGP对等体。
-
IBGP水平分割(防护机制): 从IBGP对等体获取的BGP路由,不会再发送给其他IBGP对等体。(目的防止AS内产生环路)
-
BGP同步原则:当一台路由器从自己的 IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由), 它将不能使用该条路由或把这条路由通告给自己的EBGP对等体
(除非它需要从IGP协议(例如OSPF、静态路由等)学习到这条路由 否则会造成BGP 路由黑洞
路由黑洞:指当数据报文被转发到某个路由器时,
该路由器没有关于目标网络的路由而造成丢包的现象。
- 当路由器学习到BGP路由后,需对路由的下一跳进行检查
下一跳在路由表中可达,正常加表
下一跳在路由表中不可达,丢弃该路由
扩展1
!!!注意:
# 为什么需要将IBGP下一跳改成自己
原因: 从IBGP对等体学习到的路由,下一跳保持不变
------------
R1:AS100 --> R2:AS100 ---> R3:AS200 ---> R4:AS200
------------
R4 要想从从R1 学习到的路由,由于从IBGP对等体学习到的路由,下一跳保持不变(一般以环回口通告,且环回口路由可达)
需要R2、R3 IBGP边界设备上将下一跳改为自己
*修改下一跳为自己条件
1、本台设备是边界
2、传递给IBGP邻居时
#配置命令
思科 neighbor 1.1.1.1 next-hop-self
华为/华三 peer 4.4.4.4 next-hop-local (需要进入IPv4地址族中)
IBGP学习到的AD 及路由优先级 AD :200, pre:255
#而针对从EBGP对等体学习到的路由,下一跳是EBGP对等体的地址(一般以物理口通告)
EBGP学习到的AD 及路由优先级 AD :20 ,pre :255
扩展2
# BGP 路由黑洞
产生
一台没有启用BGP协议的设备,收到通过BGP方式学习到的路由,那么进行查看,发现没有匹配上的路由信息,那么将收到的数据包进行丢弃
同时 也可以解决IBGP对等体连接数量过多问题
------------------
R4:AS100 --> R2:AS200 ---> R1:AS200 ---> R3:AS200 --> R5:AS300
R4与R2 之间建立EBGP R2 与 R3 之间建立IBGP·azsx R3 与 R5建立EBGP
------------------
R5 要学习到 R4的路由信息
# 1. 首先会查找前往R4的路由条目,R5会发update更新报文给R3对等体
2. R3 收到R5的update报文会去查找路由表,再同一AS中会出现一条BGP和IGP路由条目
3. R3会收到 二条路由条目下一跳 来自同一IGP(如OSPF)R1的IGP路由条目,另一条来自对等体IBGP R2的BGP路由条目
但是对于R3来说,R2为非直连下一跳,需要进行路由迭代,通过IGP学习到的路由迭代出下一跳为R1。
4. R3将报文发送给R1 R1收到报文后查找路由表,因为R1并非BGP路由器,未与R2建立IBGP对等体关系。因此R1上并无BGP路由,
针对R1来说没有发现去往R4的路由,会查询失败,造成了R5去往R4的路由时没有匹配的路由信息,然后进行丢弃。
解决BGP路由黑洞
1、通过IGP学习 将IGP路由信息重分布进 BGP中
2、通过BGP学习
* IBGP全互联: 两两设备建立IBGP对等体关系
R2、R3之间建立非直连的IBGP对等体关系,以此让BGP路由器R2将路由传递给BGP路由器R3。
(利用IBGP的水平分割,从IBGP对等体获取的BGP路由,不会再发送给其他IBGP对等体,所以要采用全互联)
(如果拓扑较大,实现起来比较复杂,不推荐)
* BGP路由发射器
RR(Route Reflector) 路由反射器:RR将学习到的路由,反射给每一个IBGP对等体(client)
RR客户端条件 不需要做任何配置,只需要与RR建立邻居关系,由路由反射器学习到路由给客户端。
在R2和R3之间建立RR路由反射器,R3就不会将路由传给R1,而是通过传给与IBGP建立对等体的R2,由R2去查找去往R4的路由
(回来是R2传给IBGP对等体R3,由R3——> R5,所以需要在R2、R3上同时建立)
思科配置 neighbor 4.4.4.4 route-reflector-client
后续属性内容可以看
BGP属性