BGP用户培训材料AS--AutonomousSystem使用相同路由管理策略的区域BGP--BorderGatewayProtocolDefinedinRFC1771CIDR--ClasslessInterdomainRouting无类型的域间选路EGP--ExteriorGatewayProtocolDefinedinRFC904IGP--InternalGatewayProtocolAS内部的路由协议EGP--ExternalGatewayProtocolAS外部的路由协议,对应于IGP一、概述BGP是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息。与OSPF和RIP等在自治区域内部运行的协议对应,BGP是一类EGP(EdgeGatewayProtocol)协议,而OSPF和RIP等为IGP(InteriorGatewayProtocol)协议。BGP是在EGP应用的基础上发展起来的。EGP在此以前已经作为自治区域间的路由发现协议,广泛应用于NFSNET等主干网络上。但是,EGP被路由环路问题所困扰。BGP通过在路由信息中增加自治区域(AS)路径的属性,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的策略。同时,随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,都影响了网络的性能。BGP支持无类型的区域间路由CIDR(ClasslessInterdomainRouting),可以有效的减少日益增大的路由表。BGP运行时刻分别与本自治区域外和区域内的BGP伙伴建立连接(使用Socket)。与区域内伙伴的连接称为IBGP(InternalBGP)连接,与自治区域外的BGP伙伴的连接称为EBGP(ExternalBGP)连接。本地的BGP协议对IBGP和EBGP伙伴使用不同的机制处理。二、BGP协议分析1、BGP协议的层次位置BGP,OSPF,RIP,TELNET,SNMPSOCKETTCP,UDPIP,IPXPPP,X.25等操作系统硬件接口及驱动BGP使用Socket服务建立连接,端口号为179。2、BGP的消息结构BGP有4种类型的消息。分别为OPEN,UPDATE,KEEPALIVE和NOTIFY。它们有相同的消息头。⑵OPEN消息结构:消息头加如下结构:Version:(1字节)发送端BGP版本号MyAutonomousSystem:(2字节无符号整数)本地AS号HoldTime:(2字节无符号整数)发端建议的保持时间BGPIdentifier:(4字节)发端的路由器标识符OptParmLen:(1字节)可选的参数的长度OptionalParameters:(变长)可选的参数⑶KEEPALIVE消息结构KEEPALIVE消息只有一个消息头。⑷NOTIFY消息结构消息头加如下结构:0123401234567012345670123456701234567ErrorcodeErrsubcodeDataErrorcode:(1字节)错误代码错误代码错误类型1消息头错2OPEN消息错3UPDATE消息错4保持时间超时5状态机错6退出Errsubcode:(1字节)辅助错误代码,略。Data:(变长)依赖于不同的错误代码和辅助错误代码。用于诊断错误原因。⑸UPDATE消息结构UnfeasibleRoutesLen:(2字节无符号整数)不可达路由长度WithdrawnRoutes:(变长)退出路由PathAttributeLen:(2字节无符号整数)路径属性长PathAttributes:(变长)路径属性(以下详细说明)NetworkLayerReachabilityInformation:(变长)网络可达信息(信宿)其中退出路由和信宿地址的表示方法为一length,prefix的二元组。length一个字节,指示地址前缀的长度。prefix为地址前缀,长度1至4字节。3、BGP协议路由属性的应用路由是用信宿地址来标识的。路由的属性即UPDATE消息中的路由属性部分,是用来帮助BGP进行路由选择的。它们在本地BGP选择路由时有不同的作用。当BGP通过不同的路由源收到了相同信宿地址的路由时,需要进行路由选择。(1)ORIGIN起点属性起点属性表示路由相对于发出它的自治系统的路由更新起点。-IGPBGP把聚合路由和用network定义的路由看成是AS内部的,起点类型设置为IGP。-EGPBGP把通过EGP得到的路由的起点设置为EGP。-INCOMPLETEBGP把通过其它IGP协议引入的路由的起点设置为INCOMPLETE。这是因为引入的路由可能从任何地方来,如OSPF的ASE路由。BGP在其它因素相同的情况下,按IGP,EGP,INCOMPLETE的顺序选择路由,因为IGP路由的位置更确定,EGP次之,而INCOMPLETE则很不确定。(2)AS路径属性路由的AS路径属性记录了此路由所穿过的所有AS区域,它可以避免路由环路的出现,即当BGP把一条路由通告给一个此路由曾穿越过的AS自治区域时,此AS又把这条路由当作新路由来处理了,这也正是困扰EGP问题。在加入了AS路径属性后,BGP可以根据AS路径属性中的信息来消除路由环路。BGP不会接受AS路径属性中包含了本AS自治区域号的路由,因为此路由已经被本自治区域处理过了,从而避免了生成路由环路的可能。为此,BGP在向EBGP对端,即向本AS外部通告一条路由时,要把本AS自治区域的AS号加入的AS路径属性中,以记录此路由通过的AS区域信息。同时,AS路径属性也在影响路由选择。显然,在其它因素相同的情况下,应该选择AS路径较短的路由,因为它穿过了较少的自治区域。这一点并不一定精确,因为穿过了的3个由高速网络构成的AS区域的路由,有可能比穿过了2个低速网络的AS区域的路由更好。这种情况要求恰当的配置,以在其它的因素中影响路由的选择。协议不可能自动完成一切,有经验的工程师的合理的配置对优化网络更重要。在AS路径属性中,AS_SEQUENCE属性的AS路径值表示此AS路径是有顺序关系的。通过它可以在本生成AS自治区域的拓扑结构图。当路由被发送到AS自治区域外时,一般要把本区域AS号加入到AS_SEQUENCE序列后。AS_SET属性是用于路由聚合的,它的AS路径信息无顺序关系,无法生成拓扑结构图,但用于检测AS路由环路是足够用的。(3)NEXTHOP下一跳属性对于EBGP,下一跳属性是本地BGP与对端连接的端口地址。如上图,RTC向RTA通过EBGP通告路由170.10.0.0时,下一跳属性为170.10.20.2;RTA向RTC通告150.10.0.0的路由时,下一跳为170.10.20.1。对于IBGP,本地BGP将从EBGP得到的路由的下一跳属性,直接注入IBGP的UPDATE路由更新消息。上图中,RTA通过IBGP向RTB通告路由170.10.0.0时,下一跳仍然为EBGP中的170.10.20.2,而不是150.10.30.1。对于RTB,此下一跳信息最终应该通过IGP得到。对于可以多路访问的网络,下一跳情况有所不同。在上图中,RTA和RTC运行BGP,AS300中IGP为OSPF。OSPF通告RTC通过下一跳170.10.20.3可以到达网络180.20.0.0。RTC在通过EBGP通告RTA路由180.20.0.0时,发现本地端口170.10.20.2和此路由的下一跳170.10.20.3为同一共享子网,因此使用170.10.20.3作为EBGP通告路由的下一跳,而非170.10.20.2。这种情况,对于NBMA非广播多点可达网络不适用。将以太网替换为FrameRelay桢中继网和其它NBMA网络,箭头指示方向有PVC永久虚电路。此时,RTC也发送下一跳为170.10.20.3的180.20.0.0路由给RTA,就会出现问题:RTA到RTD无可达链路!为了避免此问题,请使用Next-hop-self命令,强制RTA将路由180.20.0.0的下一跳设置为本地BGP端口地址170.10.20.2。(4)MED属性MULTI_EXIT_DISCRIMINATOR就是一条路由的Metric。当某AS自治区域有多个人口点时,此属性用来帮助选择一个较好的人口点。即,选择MED较小的人口点。如上图,网络路由180.10.0.0从RTC、RTD和RTB出发,通过EBGP通告给RTA。其中RTC的MED为120,RTD的MED为200,RTB的MED为50。缺省情况下,BGP只比较同一AS区域发送的MED,这是因为不同AS自治区域的度量Metric的方法可能不同,只有相同AS区域的Metric才有可比性。因此RTA选择MED较小的RTC发送的路由,将2.2.2.1作为路由180.10.0.0的下一跳(RTB的MED更小,但AS路径较长)。MED属性不会通过AS区域传播,因此,RTA发送路由180.10.0.0时的MED设置为其缺省的0。也可以使用always-compare-med命令来强制比较同一路由的所有的MED。上例中,最终会选择RTB作为路由180.10.0.0的下一跳,因为它具有最小的MED。总之,MED可以帮助本地BGP选择到达某一个AS区域的人口点。(5)LOCALPREFERENCE本地优先级属性本地优先级属性用来帮助AS区域内部的路由器,选择到AS区域外部使用的较好的出口。如上图例,当路由170.10.0.0通过RTC和RTD发送到AS256内部时,RTC将本地优先级设置为150;RTD将本地优先级设置为200。这可能是因为RTC连接的AS区域具有较高的速度或收费较低。因此,AS256内部的路由器选择本地优先级较高的RTC作为得到网络170.10.0.0的下一跳。和MED相反,较高的本地优先级的路由被选择。和MED对应,本地优先级用来帮助本地BGP在不同的相邻AS区域中选择较好的退出路由。在一个自治区域中的所有BGP路由器必须使用IBGP连通起来,已相互通过比较某条路由的本地优先级来就到达此信宿的AS出口点达成一致。(6)ATOMIC_AGGREGATE元聚合属性此属性用来表示一条路由是在某处被聚合形成的,丢失了部分信息。(7)AGGREGATOR聚合者属性此属性记录了一条路由被聚合的路由器的AS号和IP地址。综合起来,本地BGP路由选择的过程为:(1)如果此路由的下一跳不可达,忽略此路由;(2)选择本地优先级较大的路由;(3)选择本地路由器始发的路由(本地优先级相同);(4)选择AS路径较短的路由;(5)依次选择起点类型为IGP,EGP,INCOMPLETE类型的路由;(6)选择MED较低的路由;(7)选择RouterID较低的路由。4、BGP协议的特点BGP是一种AS(自治区域)外部路由协议,主要负责本自治区域和外部的自治区域间的路由可达信息的交换。因此,它所关心的拓扑结构是AS(自治区域)的拓扑结构,BGP通过UPDATE消息中路由的AS属性来构造AS的拓扑结构图,进一步通过此结构图来选择路由。与OSPF,RIP等IGP协议相比,BGP的拓扑图要更抽象和粗略一些。因为IGP协议构造的是AS内部的路由器的拓扑结构图。IGP把路由器抽象成若干端点,把路由器之间的链路抽象成边,根据链路的状态等参数和一定的度量标准,每条边配以一定的权值,生成拓扑图。根据此拓扑图选择代价(两点间经过的边的权值和)最小的路由。这里有一个假设,即路由器(端点)转发数据包是没有的代价的。而在BGP中,拓扑图的端点是一个AS区域,边是AS之间的链路。此时,数据包经过一个端点(AS自治区域)时的代价就不能假设为0了,此代价要由IGP来负责计算。这体现了EGP和IGP是分层的关系。即IGP负责在AS内部选择花费最小的路由,EGP负责选择AS间花费最小的路由。BGP作为EGP的一种,选择路由时考虑的是AS间的链路花费,AS区域内的花费(由BGP路由器配置)等因素。如上所述,内部网关协议IGP需引入AS自治