BGP状态机和邻居建立过程
-
BGP报文头部19byte
-
类型:1-open,2-update,3-notification,4-keepalive
-
-
BGP消息
-
Open消息:TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系并进行参数协商(BGP版本号,自己所属的AS号,RID,Hold time值,认证信息等)
-
Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,主要作用是让BGP邻居直到自己的存在,保持邻居稳定性;还有一个作用是对收到的Open消息回应;其消息格式中只包含消息头,没有附加其他任何字段(标记,长度,类型,无数据域)19字节;
-
Update消息:在对等体之间交换路由信息;它既可以发布可达路由信息,也可以撤销不可达路由信息;一条update消息可以通告一类具有相同路径属性的可达路由,同时可以携带多条不可达路由;
-
Notification消息:作用为错误通知;BGP发言者如果检测到对方发过来的消息有错误或者主动断开BGP连接,都会发出Notification消息来通知BGP邻居,并关闭连接回到Idle状态;如果收到邻居发来的Notification消息,也会间状态变为Idle;消息内容包含错误信息
-
Route-refresh消息:用来要求对等体重新发送指定地址族路由信息;(BGP只在第一次建立好发送路由,后续有变化才更新,如果都没有变化就不会发送路由,特殊情况需要发送)
-
-
BGP协议状态机
-
BGP协议有限状态机共包含6个状态,他们之间转换过程关系即建立过程:
-
Idle状态(空闲)下,BGP聚合任何的连接请求,是BGP的初始状态,停留30s
-
当BGP收到开始事件后,BGP启动到对等体的TCP连接,启动连接重传定时器,监听来自对等体的TCP消息,并且转移到connect状态;
-
-
Connect状态(连接)下,BGP等待TCP连接的建立完成后再决定后续操作;本端为TCP被动方等待对方和我握手;
-
如果TCP建立成功,BGP将停止连接重传定时器,然后发送一个Open消息给对等体,并且转移到Open-sent状态
-
如果TCP建立失败,BGP将重置连接重传定时器,监听对等体发起的TCP连接,并且转移到active状态
-
-
Active状态(活跃)下,BGP将尝试主动进行TCP连接的建立,主动发出握手请求,是BGP的中间状态
-
如果TCP连接建立成功,BGP将重置连接重传定时器,然后发送一个Open消息给对等体,并且转移到Open-sent状态
-
如果连接重传定时器超时,BGP将重新开始连接重传定时器计时,并转移到Connect状态
-
如果BGP试图与一个未知的IP地址建立TCP会话,则TCP连接失败,连接重传定时器被重置,并且BGP保持在active状态
-
-
Open-sent状态(open消息已发送)状态下,BGP已经向对等体发送了一个Open消息,并且等待对等体的Open消息
-
如果BGP收到正确的Open消息,则向对端发送一个keepalive消息,并转移到Open-confirm状态
-
如果BGP收到的Open消息有错误,则给对等体发送一个notification消息,并且转移到Idle状态
-
-
Open-confirm(open消息确认):此状态下,BGP等待一个Notification消息,或keepalive消息;
-
如果BGP收到Notification消息或者TCP连接断开消息,则转移到Idle状态
-
如果BGP收到Keepalive消息,则转移到Established状态
-
-
Established状态(连接建立):BGP对等体间可以交换Update消息,Notification消息,和keepalive消息
-
如果BGP收到update消息或者keepalive消息,则继续保持在Established状态
-
如果BGP收到Notification消息,则转移到Idle状态
-
-
-
除了Idle状态以外的其他5个状态出现任何错误的时候,BGP状态会退回到Idle状态
BGP是否有计算路由的能力
-
BGP没有路由计算的能力,IGP中的动态路由协议使用各自的算法进行路由计算
-
BGP主要作用是支持庞大路由条目的处理,以及非常灵活的路由选路和控制
-
BGP基于路径矢量算法进行路由选择。
-
BGP路由来源:手动宣告network,路由引入,直连
BGP减少对等体的方法有哪些
-
BGP对等体过多的问题?
-
CPU内存消耗过大,影响路由器性能
-
会话建立时间长,收敛慢(TCP179建立,大量的TCP连接)
-
配置复杂,维护难度大,扩展性差
-
-
1.使用路由反射器(RR)
-
在路由反射器的场景,客户端只需要跟RR之间建立对等体关系即可,无需对整个环境的AS重新规划,配置更加精简,实际应用中比较常见;
-
RR:能够将从IBGP邻居学习的路由反射给其他IBGP邻居,客户机只需要和路由反射器建立IBGP连接;
-
反射规则:
-
从非反射客户端接收的路由仅反射给客户端;
-
从反射客户端收到的路由,反射给所有客户端和非客户端,(始发者除外)
-
从EBGP接收的路由,反射给所有客户端和非客户端
-
-
-
注意:反射器由无法使用策略去更改路由属性
-
2.使用BGP反射集群:Cluster
-
一个RR及其所有客户端组成一个反射集群
-
一个集群可以配置多个的反射器增加可靠性
-
缺省情况下使用自己的RID作为集群ID,如果存在多个反射器配置相同的Cluster-id防止环路
-
-
$防环机制:
-
RR打破了BGP水平分割规则,可能使某个集群发出的路由在经过多次反射后回到该群,需要添加originator_id,和cluster_list属性防止环路
-
Originator_id属性:
-
由路由反射器反射的一条路由添加时产生,使用AS内路由始发者的Router-id来标识
-
当路由器收到BGP路由时,对比本机Router-id和该路由的Originator-id,一致则丢弃路由
-
Originator_id还用于路由优选,小的优先
-
-
Cluster_list属性:
-
路由传递过程中,把经过的反射器的Cluster_id一次记录在Cluster_list中
-
当反射器收到BGP路由时,如果本机的Cluster_id出现在Cluster_list中,则丢弃该路由,Cluster_list用于路由优选,短的优先
-
-
-
-
3.使用联盟的方式
-
在使用联盟的场景中,将一个大的AS分出多个小的AS,小AS内建立联盟内的全互联IBGP对等体关系,小AS之建立联盟的EBGP关系,联盟内的结构对外部网络不可见
-
但是使用联盟需要进行小AS的规划,以及需要将原有的BGP配置删除,进行重新配置,比较麻烦,应用比较少见
-
-
需要注意:子AS使用私有AS编号,内部路由器的BGP运行在子AS中,其他真实AS的路由器仍然和联盟AS建立EBGP邻居,跨越子AS的EBGP邻居仍然需要更改下一跳为本机
(64512-65534)
-
-
4.使用MPLS标签的方式
-
在PE之间建立IBGP关系,在AS内部启用MPLS
-
在PE之间建立隧道,在隧道上建立BGP邻居关系
-
用什么机构分发的AS号
-
AS是指由同一个技术管理机构管理,使用统一选路策略的一些路由器的集合;通常AS指的是运营商或大型机构
-
BGP网络中每个AS都被分配一个唯一的AS号,用于区分不同的AS
-
由IANA(互联网数字分配机构)复制AS号的分发
什么是BGP路由黑洞以及BGP同步
-
路由黑洞是指路由器收到数据包时,查找路由表,因为没有前往目标的相应路由信息,导致将数据包丢弃的现象称为路由黑洞
-
BGP路由黑洞产生的原因:
-
BGP路由和IGP不同步
-
-
AS34567内部署OSPF,R4R5R6不运行BGP,R3,R7建立IBGP连接; R1将AS100内的1.0.0.0/8的路由发布到BGP,将该路由通告给了R3,R3通过IBGP连接直接通告给R7(R3下一跳已改),R7再将该路由通告给R2; R2将其加入到自己路由表中,去往该路由下一跳R7,R7查表下一跳R3,非直连,递归查询R3路由,假设下一跳R4,R4因为没有运行BGP,没有该目的网段的路由;产生路由黑洞
-
-
-
在MPLS VPN场景,MPLS域的某些设备接口没有正确的启用MPLS
-
-
BGP同步:
-
BGP同步指的是IGP和BGP表的同步,BGP在收到IBGP路由发送给外部EBGP对等体之前,要先判断发送的路由更新,在IGP表中是否存在,存在则发送,如果IGP表中不存在,则不发送,用来避免路由黑洞的产生
-
现在的设备默认是关闭同步,即使IGP和BGP表不同步,BGP在收到IBGP路由更新时可以直接发送给EBGP对等体;
-
-
解决路由黑洞方案:
-
将BGP引入到IGP,因为BGP可以处理庞大的路由条目,而IGP不支持,所以对于大规模网络,不建议将BGP引入到IGP
-
建立全互联的 IBGP 对等体关系,全互联IBGP 对等体只 AS内的所有路由两两之间都建立IBGP 对等体关系,对于大规模的网络环境,会导致需要消耗大量的资源去维护众多的IBGP 对等体关系,并且不利于网络的维护和扩展,可以采用路由反射器或联盟的方式进行优化。
-
可以采用 MPLS,只需要在 PE之间建立IBGP 对等体关系,在 AS 内采用基于标签交换处理,通过这种方式可以无需启用 BGP 同步。
-
也可以在 PE之间采用隧道技术,基于隧道建立IBGP 关系,来传递 BGP 路由更新。
-
-
场景题目: