备注:以下资料整理自以下三个网站,有华为,华三,思科三个厂商官网的BGP相关资料。放这里是为了自己查看方便。同时,有需要的可以参考参考。
官方文档BGP相关资料:
华为:https://support.huawei.com/hedex/hdx.do?docid=EDOC1100101225&lang=zh&idPath=24030814|21782165|21782236|22318638|7542409
华三:http://www.h3c.com/cn/d_201601/909969_30005_0.htm
思科:https://www.cisco.com/c/en/us/tech/ip/ip-routing/index.html
BGP介绍
定义
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。
MP-BGP是对BGP-4进行了扩展,来达到在不同网络中应用的目的,BGP-4原有的消息机制和路由机制并没有改变。MP-BGP在IPv6单播网络上的应用称为BGP4+,在IPv4组播网络上的应用称为MBGP(Multicast BGP)。
目的
为方便管理规模不断扩大的网络,网络被分成了不同的自治系统。1982年,外部网关协议EGP(Exterior Gateway Protocol)被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。
BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。
虽然BGP用于在AS之间传递路由信息,但并不是所有AS之间传递路由信息都需要运行BGP。比如在数据中心上行的连入Internet的出口上,为了避免Internet海量路由对数据中心内部网络的影响,设备采用静态路由代替BGP与外部网络通信。
受益
BGP从多面保证了网络的安全性、灵活性、稳定性、可靠性和高效性:
BGP采用认证和GTSM的方式,保证了网络的安全性。 BGP提供了丰富的路由策略,能够灵活的进行路由选路。 BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性。 BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Auto FRR和BGP GR和NSR,提高了网络的可靠性。
BGP特点
BGP具有如下特点:
BGP是一种EGP(Exterior Gateway Protocol,外部网关协议),与OSPF、RIP等IGP(Interior Gateway Protocol,内部网关协议)不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由。 BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。 BGP是一种路径矢量(Path-Vector)路由协议,它采用到达目的地址所经过的AS列表来衡量到达目的地址的距离。 BGP支持CIDR(Classless Inter-Domain Routing,无类域间路由)。 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。 BGP路由通过携带AS路径信息彻底解决路由环路问题。 BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。 BGP易于扩展,能够适应网络新的发展。
BGP工作原理
BGP对等体的建立、更新和删除等交互过程主要有5种报文、6种状态机和5个原则。
BGP的报文
BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:
Open报文:用于建立BGP对等体连接。
Update报文:用于在对等体之间交换路由信息。
Notification报文:用于中断BGP连接。
Keepalive报文:用于保持BGP连接。
Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
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状态。
在Active状态下,BGP总是在试图建立TCP连接。 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。 如果TCP连接失败,那么BGP停留在Active状态。 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
在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发布路由时采用如下策略:
存在多条有效路由时,BGP发言者只将最优路由发布给对等体。如果配置了advertise-rib-active命令,则BGP发布IP路由表中的最优路由;否则,发布BGP路由表中的最优路由。 BGP发言者只把自己使用的路由发布给对等体。 BGP发言者会将从EBGP获得的路由发布给它的所有BGP对等体(包括EBGP对等体和IBGP对等体)。 BGP发言者会将从IBGP获得的路由发布给它的EBGP对等体,但不会发布给它的IBGP对等体。 会话一旦建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。
BGP安全性
BGP使用认证、通用TTL安全保护机制GTSM(Generalized TTL Security Mechanism)和RPKI(Resource Public Key Infrastructure)三个方法保证BGP对等体间的交互安全。
BGP认证
BGP认证分为MD5认证和Keychain认证,对BGP对等体关系进行认证是提高安全性的有效手段。MD5认证只能为TCP连接设置认证密码,而Keychain认证除了可以为TCP连接设置认证密码外,还可以对BGP协议报文进行认证。
BGP GTSM
BGP GTSM检测IP报文头中的TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合TTL值范围的报文进行允许通过或丢弃的操作,从而实现了保护IP层以上业务,增强系统安全性的目的。
例如将IBGP对等体的报文的TTL的范围设为254至255。当攻击者模拟合法的BGP协议报文,对设备不断的发送报文进行攻击时,TTL值必然小于254。如果没有使能BGP GTSM功能,设备收到这些报文后,发现是发送给本机的报文,会直接上送控制层面处理。这时将会因为控制层面处理大量攻击报文,导致设备CPU占用率高,系统异常繁忙。如果使能BGP GTSM功能,系统会对所有BGP报文的TTL值进行检查,丢弃TTL值小于254的攻击报文,从而避免了因网络攻击报文导致CPU占用率高的问题。
BGP属性
在BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。
华三BGP选路原则
目前,BGP选择路由的过程为:
丢弃下一跳(NEXT_HOP)不可达的路由; 优选首选值(Preferred-value)最大的路由; 优选本地优先级(LOCAL_PREF)最高的路由; 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由; 优选AS路径(AS_PATH)最短的路由; 依次选择ORIGIN类型为IGP、EGP、Incomplete的路由; 优选MED值最低的路由; 依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由; 优选IGP Metric值最小的路由; 优选迭代深度值小的路由; 如果路由都来自EBGP邻居,并且Router ID不相同,优选曾经的最优路由; 优选Router ID最小的路由器发布的路由。如果路由包含RR属性,那么在路由选择过程中,就用ORIGINATOR_ID来替代Router ID; 优选CLUSTER_LIST长度最短的路由; 优选IP地址最小的对等体发布的路由。
华为设备BGP选路原则:
当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由:
优选协议首选值(PrefVal)最高的路由。
协议首选值(**PrefVal)是华为设备的特有属性,该属性仅在本地有效。
优选本地优先级(Local_Pref)最高的路由。
如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。
依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。
优选AS路径(AS_Path)最短的路由。
依次优选Origin类型为IGP、EGP、Incomplete的路由。
对于来自同一AS的路由,优选MED值最低的路由。
依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。
PE上某个VPN实例的VPNv4路由的ERT匹配其他VPN实例的IRT后复制到该VPN实例,称为LocalCross;从远端PE学习到的VPNv4路由的ERT匹配某个VPN实例的IRT后复制到该VPN实例,称为RemoteCross。
优选到BGP下一跳IGP度量值(metric)最小的路由。
优选Cluster_List最短的路由。
优选Router ID最小的设备发布的路由。
如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由。
优选从具有最小IP Address的对等体学来的路由。
路由反射器(有空在做实验)
为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台设备,那么建立的IBGP连接数就为n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源的消耗都很大。在IBGP对等体间使用路由反射器可以解决以上问题。