BGP概念
BGP---边界网关路由协议,无类别的路径矢量EBP协议
BGP类别的路由协议,用于AS与AS间进行路由条目共享;
AS指的是在同一个组织管理下,使用统一选路策略的设备集合,不同AS号通过AS号来区分,AS号存在16bit、32bit两种标识,IANA负责AS号的分发。
AS编号范围:0-65535,其中1-64511为公有,64512-64513私有。
http://www.cidr-report.org IANA---可以通过次网站查看全球的AS号
中国第一个AS号:4134
BGP设计特性
1、可靠性
大量的路由共享,取消周期更新,基于TCP单播通信,179端口工作;
BGP需要单播建立邻居关系(手工指定邻居的IP地址),BGP可以非直连建邻,BGP承载于IGP之上;
BGP协议虽然像距离矢量协议一样仅传递路由条目,但更新量依然很大;
为了避免对设备资源的占用选择了增量更新---仅触发、无周期
故需要保障所有的路由传递到位—可靠 因此BGP协议基于TCP工作
TCP的三次握手条件使得TCP只能基于单播工作,同时BGP需要非直连建邻;
BGP基于IGP之上,先IGP使BGP设备间IP可达,然后BGP才能基于TCP建立非直连邻居关系;
2、可控性
BGP协议不是路由的产生者,仅为搬运者,且AS间正常应该存在大量的链路来保障稳定性;故BGP协议传递的路由条目很难默认最佳选路;需要管理员对路由进行大量的策略来干涉选路;
3、AS BY AS
以一个AS为下一跳。
BGP特点
- 无类别路径矢量 -----距离矢量的升级版---AS--BY--AS
- 使用单播更新来发送所有信息;基于TCP 179端口工作
- 增量更新--仅触发无周期
- 具有丰富的属性来取代IGP中度量进行选路----多个参数控制协议
- 可以在进项和出项对流量实施强大的策略--可控性
- 默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
- BGP支持认证和聚合(汇总)
BGP对等体关系
与OSPF、IS-IS等协议不同,BGP的会话是基于TCP建立的,建立BGP对等体关系的两台路由器并不要求必须直连,通常使用环回接口来建立对等体关系。
缺省情况情况下,BGP使用报文接口作为TCP连接的本地接口。
BGP 使用报文出接口作为TCP连接的本地接口。
BGP存在存在两种对等体关系:EBGP和IBGP。
EBGP
位于不同自治系统中的BGP系统的BGP路由之间的BGP对等体关系,两台路由器之间要建立EBGP对等体关系,必须满足三个条件:
两个路由器所属AS不同(即AS号不同);
在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
在部署对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用环回接口建立EBGP对等体关系,则应该逐一多跳问题,发送数据包中的TTL值通常修改为2。
IBGP
位于相同自治系统的BGP路由之间的BGP邻接关系。
在部署IBGP对等体时,建议使用环回地址来作为更新源地址,环回接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。
一般在AS内部,网络具备一定的冗余性,在两个个路由器之间有多条线路到达,如果采用直连接口建立IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就会断开,但事实上,由于冗余链路的存在,两个路由器之间的IP连通性其实也没有DOWN(仍然可以通过其他路径到达)。
BGP数据包
基于TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;首先通过TCP的三次握手来寻找到邻居;
BGP存在5中数据包类型,常见的是前四种数据包。
Open报文
是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系。
需要对比协商的参数如下:
AS号--BGP的Open报文会携带本地的AS号。通过比较两端的AS号可以判断对端是否和本端处于相同的AS号。另外,如果对方的AS号和本地建邻时写的AS号不同,则将导致邻居关系无法建立。
RID--被称为BGP的标识符,和OSPF的RID相同,由32位二进制构成,按照IP地址格式来写,这个值也会在数据包中携带,将对比两端值是否相同,相同则表示存在冲突,将导致建邻失败。
BGP也可以进行认证,认证口令不同,则也将导致建邻失败。
open报文中还会携带Hold Time--保活时间,在建立对等体关系时两端要协商Hold Time,并保持一致,如果在这个时间内未收到对端发来的Keepalive报文或者Update报文,则认为BGP连接中断---该时间默认时是180S,双方保活时间不一致,则将按照小的执行。
Keepalive报文
用来来周期保活
周期保活时间默认是保活时间的1/3,默认60s。
该报文还将在open报文协商参数时,临时充当确认报文--确认open报文中的参数是否认可。
Update报文
用于在对等体之间传递路由信息,可以用于发布、撤销路由。
一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(网络层可达信息)中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
Notiflcation报文
是当BGP检测到错误状态时(对等体关系建立,建立之后都可能发生),就会向对等体发送Notification,告知对端错误原因。之后BGP连接将会立即中断。
Route-refresh报文
用来要求对等体重新发送指定地址族的路由信息,一般为本端修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。
BGP状态机
BGP的状态机和OSPF的状态机不同之处在于--BGP的状态机仅描述的是对等体关系建立过程的状态变化--主要因为BGP可以将邻居建立过程和BGP路由收发过程分开。
BGP存在6中状态机
BGP的工作过程
1、基于IGP实现IP可达。
2、指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道,BGP之后所有的通信都将基于TCP会话通道来传输,包括提供传输可靠性。
3、使用OPEN报文和Keepalive报文进行邻居关系的建立。OPEN报文来携带建邻使用参数,Keepalive报文用于参数的确认。最终完成对等体关系的建立。生成邻居表。
4、使用Update报文来共享路由信息。信息中将携带目标网络号,掩码及路径属性;之后,将发送以及收集到的路由信息记录在一张表中---BGP表。
5、之后,将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。
6、收敛完成后,将使用Keepalive报文进行周期保活,默认的保活时间为180S,发送周期为60S。
7、如果出现错误,将使用notification报文进行警告。
8、若出现结构突变,则将使用Update报文进行触发更新。
BGP的结构突变
1、新增网段 – BGP更新源设备将使用update来告知本地所有的邻居
2、断开网段 – BGP更新源设备将使用update来告知本地所有的邻居
3、无法沟通 – 3min hold time到时时断开邻居关系和TCP会话,之后删除从该邻居处学习到的所有信息;
BGP的路由黑洞
由于bgp协议可以非直连建立邻居关系,故若两台BGP邻居间存在未运行BGP协议的路由时;可能出现路由条目可以在控制层面正常单播传递,但数据层面流量经过未运行BGP协议的设备时,无法通行;
也就是控制层面可达,数据层面不可达;
解决方法:
1、物理或逻辑链路全连
2、全连的BGP邻居关系,所有设备运行bgp;
3、将BGP路由条目重发布到IGP协议中(LAB)
4、最佳方案---MPLS 多协议标签交换
BGP的防环机制
水平分割
1、EBGP水平分割—防止EBGP环路
利用BGP条目中的as-path 属性,该属性将记录所有经过的AS编号;接收到的路由条目中若as-path中存在本地的AS号,将拒绝接收;
2、IBGP水平分割—防止IBGP环路
基于AS-BY-AS特性,BGP的路由条目默认在一个AS内部传递时,其属性不变化;
IBGP水平分割--- 从一个IBGP邻居处学习到的路由条目不得传递给本地其他IBGP邻居;
因为BGP协议具有非直连建立邻居的能力,故在一个AS内部只要设备运行BGP协议,那么其必然存在EBGP邻居关系(一定连接了其他的AS);IBGP水平分割规则将导致在一个AS内部所有运行了BGP协议的路由器间,均需要建立IBGP邻居关系,才能正常传递路由条目---建立邻居关系的配置成指数增长;
可以使用联邦和路由反射器来解决该问题;