BGP
- 一、BGP的基本概述
- 二、BGP分类
- 三、BGP的工作原理
- BGP报文类型:
- BGP状态机:
- 四、BGP对等体之间的交互原则
- 解决BGP路由黑洞方法:
- 五、路由反射器
- 路由反射规则
- 路由反射器下防环
- 联邦
- 六、BGP属性特点
- 优选协议首选值(PrefVal)最高的路由
- 优选本地优先级(Local_Pref)最高的路由
- 优选本地生成的路由
- 优选AS路径(AS_Path)最短的路由
- 比较Origin属性
- 优选MED值最低的路由
- 优选从EBGP邻居学来的路由(EBGP路由优于IBGP路由)
- 优选到下一跳IGP Cost较小的路由
- 优选Cluster_List最短的路由
- 优选邻居Router-ID小的
- 比较对等体的IP Address
- 总结:
一、BGP的基本概述
1、BGP使用TCP作为其传输层协议(监听端口号为179),提高了协议的可靠性,且不需要专门机制来确保连接的可控性。BGP进行域间的路由选择,对协议的稳定性要求非常高。因此用TCP协议的高可靠性来保证BGP协议的稳定性。BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。
2、路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
3、BGP从设计上避免了环路的发生。AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。
4、支持CIDR 无类域间路由
5、BGP提供了丰富的路由策略;提供了防止路由振荡的机制;BGP也易于扩展
二、BGP分类
1、EBGP:运行在不同的AS之间的BGP路由器建立的邻居关系为EBGP(External BGP外部BGP邻居)。
2、IBGP:运行在相同AS内的BGP路由器建立的邻居关系为IBGP(Interna BGP)。
三、BGP的工作原理
BGP报文类型:
Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。应用:通过TCP建立BGP连接时,发送OPEN消息。
Update消息:用于在对等体之间交换路由信息。Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。应用:连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端。
Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。应用:稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性。
Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。应用:当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体。
Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。应用:ROUTE-REFRESH消息用来通知对等体自己支持路由刷新。
BGP状态机:
- BGP 对等体的交互过程中存在 6 种状态机:
空闲状态(Idle)
连接状态(Connect)
活跃(Active)
Open报文已发送(OpenSent)
Open报文已确认(OpenConfirm)
连接已建立(Established)
在 BGP 对等体建立的过程中,通常可见的 3 个状态是:Idle、 Active 和 Established。
① Idle 状态是 BGP 初始状态。在 Idle 状态下, BGP 拒绝邻居发送的连接请求。只有在收到本设备的 Start 事件后, BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接,并转至 Connect状态。
②在 Connect状态下, BGP 启动连接重传定时器(Connect Retry),等待 TCP 完成连接。
-
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态;
-
如果 TCP 连接失败,那么 BGP 转至 Active 状态;
-
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和其它 BGP 对等体进行 TCP 连接,停留在Connect 状态。
-
如果其他事件(如BGP系统或者操作者重置时),退回到Idle状态。
③ 在 Active 状态下, BGP 总是在试图建立 TCP 连接。
-
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至 OpenSent 状态;
-
如果 TCP 连接失败,那么 BGP 停留在 Active 状态;
-
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至 Connect状态。
-
如果其他事件(如BGP系统或者操作者重置时),退回到Idle状态。
④ 在 OpenSent 状态下, BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的 AS 号、版本号、 认证码等进行检查。
-
如果收到的 Open 报文正确,那么 BGP 发送 Keepalive 报文,并转至 OpenConfirm 状态;
-
如果发现收到的 Open 报文有错误,那么 BGP 发送 Notification 报文给对等体,并转至Idle 状态。
⑤ 在 OpenConfirm 状态下, BGP 等待 Keepalive 或 Notification 报文。
-
如果收到 Keepalive 报文,则转至 Established 状态。
-
如果收到 Notification 报文,则转至 Idle 状态。
⑥ 在 Established 状态下, BGP 可以和对等体交换 Update、 Keepalive、 Route-refresh 报文和Notification 报文。
-
如果收到正确的 Update 或 Keepalive 报文,那么 BGP 就认为对端处于正常运行状态,将保持 BGP 连接。
-
如果收到错误的 Update 或 Keepalive 报文,那么 BGP 发送 Notification 报文通知对端,并转至 Idle
状态。 -
Route-refresh 报文不会改变 BGP 状态。
-
如果收到 Notification 报文,那么 BGP 转至 Idle 状态。
-
如果收到 TCP 拆链通知,那么 BGP 断开连接,转至 Idle 状态。
四、BGP对等体之间的交互原则
BGP 设备将最优路由加入 BGP 路由表,形成 BGP 路由。BGP 设备与对等体建立邻居关系后,采取以下交互原则:
① 从 IBGP 对等体获得的 BGP 路由, BGP 设备只发布给它的 EBGP 对等体。
② 从 EBGP 对等体获得的 BGP 路由, BGP 设备发布给它所有 EBGP 和 IBGP 对等体。
③ 当存在多条到达同一目的地址的有效路由时, BGP 设备只将最优路由发布给对等体。
④ 路由更新时, BGP 设备只发送更新的 BGP 路由。
⑤ 所有对等体发送的路由, BGP 设备都会接收。
解决BGP路由黑洞方法:
(1)、把EBGP的路由引入到IBGP协议OSPF中(5类LSA),比较消耗设备资源,BGP路由数量特别庞大(该方法基本被淘汰)。
(2)、引入到IGP协议中,增加计算路由的负担,BGP路由振荡,IGP路由也会产生振荡。
(3)、AS内所有路由器均运行BGP协议,IBGP全互联(主流方案)。
总结:只要能解决BGP路由黑洞问题,BGP同步检查功能,开启和关闭就不再重要了。
五、路由反射器
引入路由反射器之后存在三种角色:
RR (Route Reflector) :路由反射器
Client:客户端
Non-Client:非客户端
1、RR会将学习的路由反射出去,从而使得IBGP路由在AS内传播无需建立IBGP全互联。
2、将一台BGP路由器指定为RR的同时,还需要指定其Client,至于Client本身,无需做任何配置,它并不知晓网络中存在RR。
路由反射规则
- RR在接收BGP路由时:如果路由反射器从自己的非客户对等体学习到一条IBGP路由,则它会将该路由反射给所有客户
- 如果路由反射器从自己的客户学习到一条IBGP路由,则它会将该路由反射给所有非客户,以及除了该客户之外的其他所有客户
- 如果路由学习自EBGP对等体,则发送给所有客户、非客户IBGP对等体。
非非不传
路由反射器下防环
RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:
- Originator_ID
- Cluster_List
RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID,其值为本地AS中通告该路由的BGP路由器RouterID。
若AS内存在多个RR,则Originator_ID属性由第一个RR创建,并且不被后续的RR (若有)所更改。
当BGP路由器收到一条携带Originator_ID属性的IBGP路由,并且Originator_ID属性值与自身的RouterID相同,则它会忽略关于该条路由的更新。
路由反射族包括反射器RR及其Client。一个AS内允许存在多个路由反射族。
每一个簇都有唯一的簇ID (Cluster_ID,缺省时为RR的BGP RouterID )。
当一条路由被反射器反射后,该RR (该族)的CIuster ID就会被添加至路由的Cluster list属性
当RR收到一条携带Cluster list属性的BGP路由,且该属性值中包含该族的Cluster_ID时,RR认为该条路由存在环路,因此将忽略关于该条路由的更新。
联邦
联邦已被淘汰,IE考试中不会涉及,若需要学习可在其他资源进行补充。
六、BGP属性特点
- BGP路由属性 是一套参数,它是对路由的进一步描述
- 公认必遵 ORIGIN AS-PATH NEXT-HOP
- 所有BGP路由器都可以识别,且必须存在于Update消息中
- 缺少这种属性,路由信息就会出错
- 公认任意 Local-preference Atomic-aggregate
- 所有BGP路由器都可以识别,且不要求必须存在于Update消息中
- 缺少这种属性,路由信息也不会出错
- 可选过渡 Aggregator Community
- 在AS之间具有可传递性
- BGP路由器可以不支持此属性,但他仍然会接收这类属性,并传递给其他对等体
- 可选非过渡 MED Originator-ID Cluster-List
- 如果BGP路由器不支持此属性,则相应的这类属性会被忽略,且不会传递给其他对等体
注:属性均是为做防环和选路,以及做过滤
优选协议首选值(PrefVal)最高的路由
- 本地有意义,不会离开本路由器,default=0(从IBGP/EBGP/本地) 越大越优
- HUAWEI特有
优选本地优先级(Local_Pref)最高的路由
- 在BGP路由中,LP属性是公认任意,任何一条路由都是可选携带
- 通过IBGP/EBGP/本地注入的,LP分别具备:
- LP是一个内部值,从EBGP PEER传递的update不会携带LP属性(本地赋予default=100的LP属性值,如果需要更改属性值,需要单独配置default local-preference *),本地也是一样。
- 只在IBGP PEER传递(只在一个AS内起作用)。
- 越大越优
优选本地生成的路由
- 依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。
优选AS路径(AS_Path)最短的路由
- BGP设备对AS-PATH的计算方法如下:
1、本AS内注入的路由,其AS-PATH为空,仅当该路由器离开本AS,会打上自己的AS号。且AS号出现在AS-PATH属性列表的最左边。
2、在AS内通告,AS-PATH属性不变。(其余可查找相关资料进行详细了解)
比较Origin属性
-
定义路径信息的来源
-
Origion只是用来描述BGP路由的获悉来源方式,并不描述BGP路由的优劣
-
依次优选Origin类型为IGP、EGP、Incomplete的路由,
-
“i”:通过路由始发AS的IGP(RIP、OSPF、ISIS等 )学习到的路由信息
- “e”:通过EGP(BGP)学习到的路由信息
-
“?”:通过其他方式学习到的路由信息
-
注:i>e>?
优选MED值最低的路由
-
MED值相当于IGP的代价值,用于判断流量在进入AS时的最佳路由,即用MED来影响邻居AS流量进入本AS的最佳路径
-
越小越优,default=0
优选从EBGP邻居学来的路由(EBGP路由优于IBGP路由)
优选到下一跳IGP Cost较小的路由
优选Cluster_List最短的路由
PS:有RR环境先比较Cluster_List
-
Cluster List一样长时,比较起源ID。
-
如果二条路径,一个带cluster-list,一个不带,也是需要比较的。不带按0算。
优选邻居Router-ID小的
当有RR的环境时,不比较RR的Router-ID,比较Originator-ID
- 优选Router ID或Origin ID最小的路由器发布的路由
比较对等体的IP Address
- 优选从具有较小IP Address的对等体学来的路由