EGP:早期的外部网关协议,用于在自治系统间动态交换路由信息,但设计简单,无法避免环路问题
BGP:取代EGP的另外一种外部网关协议,能够进行路由优选,避免路由环路,提供更高效的路由传递,不产生路由,只传递路由,提供丰富的路由策略
概述
AS:自治系统,同一个组织管理管理下,使用统一选路由策略的设备集合
如果使用IGP传递路由:
AS之间需要直连链路,或者通过VPN协议构造逻辑直连
AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险
VPN(virtual private network):使用虚拟专业网络技术可以从逻辑上建立一个直接连接的网络
使用BGP传递路由:
BGP是基于TCP的,只要建立TCP就可以建立BGP
传递的只有路由信息,不会暴露AS内的信息
触发式更新
触发更新就是当检测到网络拓扑发生变动时,路由器会立即发送一个更新信息给邻居路由器,并依次产生触发更新通知它们的邻居路由器
周期更新就是周期性扫描网络拓扑,当扫描到拓扑发生变化时,才进行更新
BGP基本原理:
2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)
BGP的特点:
使用TCP作为传输协议,端口号179,触发式路由更新
能够承载发批量的路由信息,支撑打规模的网络
提供了丰富路由策略,可以灵活的进行路由选择,指导对等体发布路由
能够支撑MPLS/VPN的应用,传递客户VPN路由
提供了路由聚合和路由衰减功能,可以防止路由振荡,有效提高了网络的稳定性
BGP通常被称为路径矢量路由协议,每条路由都携带多种路由属性,可以根据这些路由属性控制路径,区别于IS-IS和OSPF只能通过开销来控制路径,所有BGP在路径选择控制上具有丰富的可操作性
BGP对等体
BGP对等体是指共享相同出站策略的BGP邻居,可以在对等体组中进行分组,以便对不同对等体应用不同的策略,从而简化配置并提高更新计算的效率,对等体之间无需直连,只需要IP可达,然后手动配置建立对等体关系
BGP对等体关系建立:
首先进行TCP三次握手,由于是两个对等体会同时发送TCP,会根据router ID(数值大的)来选择一个设备来进行TCP连接
两个设备之间相互发送Open报文进行协商
协商成功后,相互发送keep alive报文,收到后即成功建立对等体,双方定期发送keep alive保持联系
对等体建立成功后,互相发送BGP Update报文通告
BFP报文类型
Open : 协商BGP对等体参数,用于建立对等体,在TCP建立成功后发送的
Update : 发送BGP路由更新,有需要时,一般是路由变化或者是需要发送时才发送
Notification : 报告错误信息,中止对等体关系, 发现错误时,使用该报文通告对等体
Keepalive : 标志着对等体建立,维持BGP对等体关系,建立关系后会定期发送
Route-refresh : 在改变路由策略后请求对等体重新发送路由信息 , 当路由策略发生变化时,触发请求对等体重新通告路由
BGP报文格式:
报文头:五种都有相同的报文头
Marker:168Byte , 用于标志报文边界
Length : 2Byte, 包含BGP报文的长度信息
Type : 1Byte, 标志着BGP的报文类型
Open的报文格式:
Version : BGP的版本号
My AS : 本地自治系统号码,可以哦按段是否处于相同AS
Hild Time : 保持时间,由对等体协商,在时间内未收到其他报文,可以任务BGP中断
BGP Identifier:BGP标识符,以IP地址的形式表示,用来识别BGP路由器
Update的报文格式:
Unfeasible route length : 不可达路由字段的长度,如果为零说明没有不可达的路由
Withdrawn routes: 不可达路由列表
Path attributes : 于NLRI相关的所有路径属性列表
NLRI : 可达路由的前缀和前缀长度二元组
Withdrawn Routes Length:标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由
Total path attribute length:路径属性字段的长度
Notification的报文格式:
Error Code、Error subcode:差错码、差错子码,用于告知对端具体的错误类型
Data:用于辅助描述详细的错误内容,长度并不固定
Keepalive的报文格式
只包含报文头,没有附件其他任何字段
Rooute-refresh的报文格式
AFI : 地址族标识,比如IPV4
Res : 保留位
SAFI :子地址族标识
BGP状态机
Idle状态 :
启用BG后,开始准备建立TCP的连接时的状态
任何状态中收到No报文或TCP拆链等错误事件后,BGP都会转至idle状态
Connect状态:
TCP三次建立的过程中属于Connect状态,发送TCP时会开启定时器
如果建立TCP连接成功,BGP像对等体发送Open报文, 进入opensent状态,如果建立TCP连接失败或者error,会转到Activeh状态
这种状态一直持续,可以判断邻居没有配置BGP,或者由中间设备拦截了BGP报文
Active状态 :
从connect状态转过来后,BGP一九会继续尝试建立TCP连接
建立TCP连接成功,转换到Opensent状态
建立TCP连接失败,一直停留到该状态,直到定时器超时返回到Connect状态
OpenSent状态:
TCP连接成功后,发送Open报文等待keep alive报文,转到Opensent
如果发送的open报文出错,发送No报文,转到idle状态
OpenConfirm状态 :
发送keep alive报文后等待对方回复的状态
成功则进入established状态,出错或收到No报文转至idle报文
established状态:
对等关系建立完毕,update更新信息
定期发送keep alive报文保持联系
一蛋出错或者收到表示错误的报文,就会进入idel状态
BGP路由的生成:
BGP自身是不会发现并计算产生路由的,而是将IGP路由表的路由注入到自己的路由表中,有两种注入方式
network注入方式:
用network命令通告 , network + 地址
已经获得路由的BGP路由器通过update报文将路由传递给其他AS的BGP路由
import-route方式注入路由:
是为了改善network方式只能一条条配置注入的复杂性
可以将直连路由,静态路由,OSPF路由、IS-IS等协议的路由注入到BGP路由
BGP路由聚合
执行聚合之后,在本地的BGP路由表中除了原本的明细路由条目之外,还会多出一条聚合的路由条目
如果在执行聚合时指定了detail-suppressed,则BGP只会向对等体通告聚合后的路由,而不通告聚合前的明细路由
被update通告的BGP路由无法看到聚合前的路由明细
BGP路由通告原则:
-
只发布最优且下一跳地址可达的路由
-
从EBGP对等体的update获取的路由 ,会发给所有的对等体
-
水平分割 : 从IBGP对等体获取的路由,不会再发送给其他BGP,因为如果互传会形成路由环路,最终自己又会收到这个路由
-
BGP同步规则:当一台路由器从自己的IBGP对等体学习的IBGP路由通告给自己的EBGP对等体
如有问题,谢谢指正