BGP 路由协议

农村四月闲人少,勤学苦攻把名扬。这篇文章主要讲述BGP 路由协议相关的知识,希望能为你提供帮助。
BGP概念AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
使用BGP传递路由
在AS之间专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:
BGP基于TCP ,只要能够建立TCP连接即可建立BGP。
只传递路由信息,不会暴露AS内的拓扑信息。
触发式更新,而不是进行周期性更新。
BGP的特点:BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议
BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。
BGP能够承载大批量的路由信息,能够支撑大规模网络。
BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。
BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性


BGP对等体关系
BGP对等体关系建立

TCP连接源地址
BGP报文类型

BGP报文格式 - 报文头格式
【BGP 路由协议】


BGP报文格式 – Open

能力参数的协商:1.多协议扩展能力:IPV4,unicast。
                            2.路由刷新能力:手动刷新
?                        3.是否支持4字节AS号能力?


BGP报文格式 – Update





BGP报文格式 – Notification


BGP报文格式 – Keepalive
keepalive 报文60秒一次


BGP报文格式 - Route-refresh

BGP状态机

1)ldle状态
ldle(空闲)状态,?BGP拒绝任何进入的连接请求,IdIe状态是BGP的初始状态。在ldle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件(如运行BGP协议)后,BGP才开始尝试和其他BGP对等体进行TCP连接,并转至Connect状态。任何状态中收到NOtification报文或TCP重连通知等Error事件后,BGP都对转至ldle状态。


2)Connect状态
Connect(连接)状态下,?BGP等待TCP连接的建立完成后再决定后续操作。在Connect状态下,BGP启动连接重传定时器(通常计时器为30s),等待TCP完成连接。如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent(开放)状态;如果TCP连接失败,那么BGP转至Active(活跃)状态;如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其他BGP对等体进行TCP连接,停留在Connect状态。


3)Active状态
Active(活跃)状态下,BGP?将尝试进行TCP连接的建立,是BGP的中间状态。在Active状态下,BGP总是在试图建立TCP连接,如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态;如果TCP连接失败,那么BGP停留在Active状态;如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。


4)OpenSent状态
在OpenSent(开放集)状态下,?BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、Holdtime等进行检查。如果收到的Open报正确,那么BGP发送KeepAlive报文,并转至OpenConfirm(打开确认)状态;如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至IdIe状态。

5)OpenConfirm状态
?OpenConfirm(打开确认)状态下,BGP等待KeepAlive或Notification报文。如果收到KeepAlive报文,则转至Established(确认)状态;如果收到Notification报文,则转至ldle状态。
6)Established状态
在Established(确认)状态下,?BGP可以在对等体之间交换Update、KeepAlive、Route-refresh报文和Notification报文。如果收到正确的Update或KeepAlive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接;如果收到错误的Update或KeepAlive报文,那么BGP发送Notification报文通知对端,并转至ldle状态
?在BGP对等体建立的过程中,通常可见的三种状态是ldle、Active、Established。BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方通过Update报文交换路由信息

BGP路由的生成不同于IGP路由协议,BGP?自身并不会发现并计算产生路由?,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。BGP注入路由的方式有两种:Network    import-route
BGP路由表
BGP传递路由规则:?BGP在给邻居传递路由时的下一跳是路由?出接口=???更新源?。?
?在EBGP间传递时会修改下一跳为自己的更新源。?
??EBGP传给IBGP邻居路由,然后IBGP路由器在IBGP间传递时?不会修改?下一跳为自己的更新源(解决方法是将下一跳更改为本地接口peer1.1.1.1 next-hop-local)??
BGP路由通告原则(传递路由)?1.只有?明确通告?的网络才会发送给邻居;通告的网络必须能够精确地在路由表中找到;多条路径时,只选择最优的给自己使用;只 把自己使用的最优路由通告给邻居;?
?2.从EBGP学习到的最优的路由会通告给所有BGP邻居;*强调内容*
?3.从IBGP邻居学习到路由默认不会通告给IBGP邻居(BGP水平分割原则);
?4.从IBGP学习的路由同步检测IGP是否存在此路由,然后在决定是否传给EBGP邻居?
?5.同步功能关闭,从IBGP学习的路由只有下一跳可达并最优,传递给EBGP邻居。?

BGP路由黑洞:IBGP单播建立邻居,可以跨路由建立邻居,被跨的路由无法获取BGP路由,导致数据报文无法通过路由转发。?
?它会默默的将数据包丢弃,使所有数据包有去无回。我们知道传统的IP路由查找,它是逐跳查找的,通俗一点就是当数据包到达路由设备的时候,每一台设备都要查找路由表,并且在路由设备有路由的前提下才能转发报文。对BGP来说由于存在iBGP水平分割规则,只把路由传递一跳,这是一种防环机制,所以在BGP的设计上有些设备就不会运行BGP。BGP是一种TCP的连接或者说是一种host-to-host的连接(可以跨越设备进行连接),所以路由传递是没有问题的,但是数据包的路由却是有问题的。通常我们可以看到的现像是iBGP邻居关系可以正常建立,也就是说控制平面看起来是正常的,但是数据平面确不可达?
解决路由黑洞方法:1.将BGP路由引入IGP协议,让没有BGP路由的路由器学习到目标网络。
BGP路由引入防环:在做路由引入时从IBGP学习到的路由不会引入到IGP协议.

IGP(ospf)引入bgp路由后,由于优先级的原因,会使用IGP路由进行转发

2.IBGP邻居全互联。?路由黑洞的原因,为了保证所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联。然而实现IBGP全互联存在诸多短板:路由器需维护大量的TCP及BGP连接,尤其在路由器数量较多时;AS内BGP网络的可扩展性较差。?
为此可以采用路由反射器技术。?
2.1 简化IBGP全互连:反射器和联盟
?3.MPLS 多协议标签交换
?MPLS LDP  ?
?  运行LDP动态协议,在全局和接口开启MPLS和MPLS LDP?
BGP的基本配置
Display bgp peer verbose 查看邻居信息
Display bgp routing-table 查看bgp路由表
BGP路由属性(Path Attribute)
??1.next-hop??

?2.MED  (相当于IGP协议COST)

?3.Community 团体属性?


BGP的选路原则如下:
(0)若去往目的网络的路由下一跳不可达,则可以忽略此路由;
(1)Preferred-Value优先级以数值高的路由优先;



(2)Local-Preference优先级以数值高的路由优先;




(3)聚合路由优先级高于非聚合路由;
本地始发手动聚合路由的优先级高于本地自动聚合的路由;
本地始发通过Network命令引入的路由的优先级高于本地通过Import-route命令引入的路由;


(4)AS路径长度最短(最少个数)的路径优先级高;
(5) 比较Origin属性,IGP优先级高于EGP,EGP优先级高于Incomplete;
(6)选择MED优先级较小的路由;
          MED规则:始发可以发给EBGP对等体,然后在发给IBGP对等体。

                      收到MED值不能发给EBGP对等体,只能传给IBGP邻居

(7)EBGP路由优先级高于IBGP路由;
(8)BGP优先选择到BGP下一跳的IGP度量低的路径;
(9)负载均衡
当以上全部相同,则为等价路由,可以负载分担(注:AS-PATH必须一致),当负载分担时,以下3条原则无效
(10)比较Cluster-List长度,短者优先;
(11)比较Originator_ID(如果没有Originator_ID,则用Router ID比较),选择数值较小的路径;
(12)比较对等体的IP地址,选择IP地址数值最小的路径;



    推荐阅读