BGP工作原理
BGP路由有许多属性,这些属性影响着最终的路由选择。BGP本身不产生、发现路由,它是将各种IGP路由、静态路由、直连路由引入后向其他AS或本地AS的对等体进行发布。
一、BGP协议的选路规则
由于BGP连接的是一个非常复杂,且可能混合多种IGP路由协议的网络,因此就可能通过不同接口学习到多条到达同一目的地的不同路径、不同协议的路由。这就决定了BGP在路由选择方面要考虑到许多方面。
为了指导路由选择,BGP规定了下一跳策略(即“首先丢弃下一跳(Next_Hop)不可达的路由”的策略)和路由选路规则,其中下一跳策略的优先级比BGP路由选路规则高。在执行完下一跳策略后,BGP使用如下选路规则进行路由选择(由上至下优先级依次降低)。
⑴优选协议首选值(Preferred-value)属性值最高的路由。协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。
⑵优选本地优先级(Local_Pref)属性值最高的路由。如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。通过执行default local-preference修改BGP路由的缺省本地优先级。
⑶依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。
⑷优选AS路径(AS_Path)最短的路由。
⑸依次优选Origin类型为IGP、EGP、Incomplete的路由。
⑹对于来自同一AS的路由,优选MED属性值最低的路由。
⑺依次优选EBGP路由、IBGP路由。
⑻优选到BGP下一跳IGP度量值(metric)最小的路由。但在IGP类型路由协议中,对到达同一目的地址的不同路由,不同IGP路由协议会根据本身的路由算法计算路由的度量值。
⑼优选Cluster_List最短的路由。
⑽优选RouterID最小的设备发布的路由。但如果该路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小,不比较RouterID,优选Originator_ID最小的路由。
⑾优选从具有最小IP Address的对等体学来的路由。
当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。形成BGP等价负载分担的条件是以上“BGP选择路由的策略”中1~8条规则中需要比较的属性值完全相同。
二、BGP对等体交互原理
BGP对等体的建立、更新和删除等交互过程主要有5种报文、6种状态机和5个原则。
1、5种BGP的报文
BGP对等体间通过以下5种报文进行信息交互,其中Keepalive报文为周期性发送,其余报文为触发式发送。
①Open报文:用于建立BGP对等体连接。
②Update报文:用于在对等体之间交换路由信息。
③Notification报文:用于中断BGP连接。
④Keepalive报文:用于保持BGP连接。
⑤Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
2、6种BGP状态机
在BGP对等体的交互过程中存在6种状态机:空闲(Idele)、连接(Connect)、活跃(Active)、Open报文已发送(OpenSent)、Open报文已确认(OpenConfirm)和连接已建立(Established)。在BGP对等体建立的过程中,使用了Idle、Active和Established三种状态机。
①Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start(开始)事件后,BGP才开始尝试和其他BGP对等体进行TCP连接,并转换至Connect(连接)状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程,或者路由器软件重置BGP过程引发的。任何状态中收到Notification报文或TCP拆链通知等Error(错误)事件后,BGP都会转至Idle状态。
②在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
◆如果TCP连接成功,那么本地BGP向BGP对等体发送Open报文,并转换至OpenSent状态。
◆如果TCP连接失败,那么本地BGP转换至Active状态。
◆如果里拦截重传定时器超时后本地BGP仍没有收到BGP对等体的响应,那么本地BGP会继续尝试和其他BGP对等体进行TCP连接,停留在Connect状态。
③在Active状态下,本地BGP总是在试图建立TCP连接。
◆如果TCP连接成功,那么本地BGP向BGP对等体发送Open报文,关闭连接重传定时器,并转换至OpenSent状态。
◆如果TCP连接失败,那么本地BGP停留在Active状态。
◆如果连接重传定时器超时后本地BGP仍没有收到BGP对等体的响应,那么本地BGP转换至Connect状态。
④在OpenSent状态下,本地BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
◆如果收到的Open报文正确,那么本地BGP向BGP对等体发送Keepalive报文,并转换至OpenConfirm状态
◆如果发现收到的Open报文有错误,那么本地BGP向BGP对等体发送Notification报文给对等体,并转换至Idle状态。
⑤在OpenConfirm状态下,本地BGP等待来自BGP对等体的Keepalive或Notification报文。如果收到Keepalive报文,则转换至Established状态;如果收到收到Notification报文,则转换至Idle状态。
⑥在Established状态下,本地BGP可以和BGP对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
◆如果收到正确的Update或Keepalive报文,那么本地BGP就认为对端处于正常运行状态,将保持BGP连接。
◆如果收到错误的Update或Keepalive报文,那么本地BGP发送Notification报文通知对端,并转换至Idle状态。
◆Route-refresh报文不会改变BGP状态。
◆如果收到Notification报文,那么本地BGP转换至Idle状态。
◆如果收到TCP拆链通知,那么本地BGP断开连接,转换至Idle状态。
3、BGP对等体之间的5种交互原则
BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与BGP对等体间成功建立邻居关系后,缺省情况下将采取以下5种交互原则:
◆从IBGP对等体获得BGP路由,只发给它的EBGP对等体。
◆从EBGP对等体获得的BGP路由,发给它所有EBGP和IBGP对等体。
◆当存在多条到达同一目的地址有效路由时,BGP设备只将最优路由发布给对等体。
◆路由更新时,BGP设备只发送要更新的BGP路由,不是发送整个路由表。
◆所有对等体发送的路由,BGP设备都会接收。
三、BGP与IGP交互原理
由于BGP与IGP在设备中使用不同的路由表,因此为了实现不同AS间相互通信,BGP需要与IGP进行交互,即BGP路由表和IGP路由表相互引入。
1、BGP引入IGP路由
BGP协议本身不产生、发现路由,因此需要将其他路由引入BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为更好规划网络,BGP在引入IGP路由时,可使用路由策略进行路由过滤和路由属性设置,也可以设置MED属性指导EBGP对等体判断流量进入AS时选路。
BGP引入路由时支持Import和Network两种方式:
①Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
②Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。
2、IGP引入BGP路由
当一个AS需要引入其他AS的路由时,AS边缘路由器会在IGP路由表中引入BGP的路由。为避免大量BGP路由对AS内设备造成影响,当IGP引入BGP路由时,可以使用路由策略进行路由过滤和路由属性设置。
如上图,某公司海外市场部所在区域AS100部署OSPF网络,国内研发部所在区域AS200部署IS-IS网络,现要求AS100与AS200通过部署BGP实现互通。
这同时涉及到BGP引入IGP路由,IGP引入BGP路由。必须让AS100中的设备知道AS200的路由,同时AS200中的设备知道AS100的路由。配置方法是在RouterC上部署BGP引入本地AS中的IGP IS-IS路由,使RouterC的BGP路由表中存在AS200中的路由,并通过EBGP把引入的路由发布给RouterB,然后在RouterB上部署OSPF引入BGP路由,实现AS100内设备知道AS200的路由;同理,要在RouterB上部署BGP引入本地AS中的IGP OSPF路由,使RouterB的BGP路由表中存在AS100中的路由,并通过EBGP把引入的路由发布给RouterC,然后在RouterC上部署IS-IS引入BGP路由,实现AS200内设备知道AS100的路由,最终实现两个AS中的设备能够互通。
BGP的基本功能配置与管理
要建立一个基本的BGP网络,配置比较简单,仅需配置BGP的一些基本功能。同时,BGP基本功能的配置也是组建BGP网络的基础,是能够使用BGP其他功能的前提。在配置BGP的基本功能之前,也需要先配置接口的IP地址,使相邻节点的网络层可达。
因为BGP中可以把一些需要配置相同属性的对等体配置为一个对等体组(一般是仅在比较大,存在较多BGP设备的网络中使用对等体组进行配置),同时又有EBGP对等体组和IBGP对等体组之分,所以在BGP基本功能的配置上,要有所区分。BGP基本功能所包括的配置任务如下表(要注意配置顺序)。
一、启动BGP进程
BGP是一种用于域间的动态路由协议。当BGP设备各接口连接的都是位于同一AS中的设备时,其运行的是IBGP,当设备至少有一个接口连接的是其他AS中的设备时,其运行的是EBGP。但每台BGP设备只能运行于一个AS内,即只能指定一个本地AS号。同时,BGP是单进程路由协议,所以它本身没有进程号,只是用所处的AS号来进行标识。
BGP进程的配置其实就是为设备指定所处AS,配置用于在BGP网络中唯一标识设备的路由器ID的过程。
二、配置BGP对等体
BGP中“对等体”就是类似于RIP、OSPF和IS-IS中的邻居,但是BGP的对等体不一定就是直连的设备,所以在BGP中需要手动指定对等体,且需要在对等体双方分别配置。
配置BGP对等体时,如果指定的对等体所属的AS编号与本地AS编号相同,表示配置IBGP对等体;如果指定对等体所属的AS编号与本地AS编号不同,表示配置EBGP对等体。为了增强BGP连接的稳定性,推荐使用路由可达的Loopback接口地址建立BGP连接。
BGP对等体可以一个个单独配置,如果有大量对等体的属性配置相同,可采用BGP对等体组配置方式。
三、配置BGP对等体组
在大型网络中,对等体数目众多,对于那些存在相同配置的BGP对等体可以通过一次性配置将它们加入一个BGP对等体组进行批量配置。但对等体组中的成员可以配置不同的路由接收策略,也可以配置不同的路由发布策略。
四、配置BGP引入路由
BGP协议本身不发现路由,因此需要将位于本地设备IP路由表中的其他路由(如IGP路由等)引入到BGP路由表中,从而将这些路由在AS之内或AS之间通过BGP协议传播。
BGP引入路由时支持Import和Network两种方式:
①Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
②Network方式是逐条将IP路由表中已经存在的路由(可能是静态路由、直连路由,也可能是RIP、OSPF、IS-IS路由)引入到BGP路由表中,比Import方式更精确。
在network路由引入方式中,如果在本地设备IP路由表中存在多条不同协议发现的到达同一目的网段的路由,则最终引入BGP路由表的将是他们之中最优的那条。对于不同协议发现的路由,它们是通过外部优先级的值进行比较的,优先级值越小,优先级越高。
五、BGP基本功能管理
①display bgp peer [verbose]:查看所有BGP对等体的信息。
②display bgp peer ipv4-address {log-info | verbose}:查看指定BGP对等体信息。
③display bgp routing-table [ipv4-address [mask | mask-length]]:查看指定或所有BGP路由信息。
④display bgp group [group-name]:查看指定或所有对等体组信息。
⑤display bgp multicast peer [ [peer-address] verbose ]:查看指定或所有MBGP对等体的信息。
⑥display bgp multicast group [group-name]:查看指定或所有MBGP对等体组的信息
⑦display bgp multicast network:查看MBGP发布的路由信息。
⑧display bgp multicast routing-table [ip-address [mask-length[longer-prefixes] | mask [longer-prefixes]]]:查看指定或所有MBGP路由表信息。
六、BGP基本功能配置示例
如上图拓扑,需要在所有Router间运行BGP协议(如果没有在系统视图下全局配置路由器ID的话,需要专门在BGP视图下为设备配置由BGP路由使用的路由器ID),其中RouterA、RouterB之间建立EBGP连接,RouterB、RouterC和RouterD之间建立IBGP全连接。
1、基本配置思路
需要在各路由器上启动BGP进程,然后根据要求在各路由器上配置EBGP或IBGP对等体,引入必要的路由即可。
2、具体配置步骤
①配置各路由器的IP地址,以A为例
[RouterA]interfacegigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0]ipaddress 8.1.1.1 8
②配置RouterB、RouterC和RouterD之间的IBGP连接。注意,每个对等体连接均需要在双方设备上分别配置,且IBGP对等体中,双方处于同一个AS中。本例没有配置Loopback接口,也没有在系统视图下全局配置路由器ID,所以需要在BGP视图下手动配置各路由器ID,设B、C、D的路由器ID分别为2.2.2.2、3.3.3.3、4.4.4.4,IBGP连接的源接口和源IP地址均缺省采用设备的物理接口和物理接口IP地址。
③配置RouterA与RouterB之间的EBGP连接,也需要在双方分别配置,此处采用缺省的物理接口和物理接口IP地址作为EBGP连接源接口和源IP地址。RouterA的路由器ID设为1.1.1.1。
配置好BGP对等体后,可通过display bgp peer查看各个设备上的BGP对等体的连接状态。
④配置RouterA发布与EBGP对等体之间的非直连路由8.0.0.0/8。注意,这里要在对应的地址视图下进行配置,因为如果是在BGP视图下发布,将在多种地址族下生效。
[RouterA-bgp]ipv4-family unicast
[RouterA-bgp-af-ipv4]network 8.0.0.0255.0.0.0
此时可通过display bgprouting-table查看各路由器上的BGP路由表信息。(RouterC和RouterD相同)
从以上路由表信息可看出,RouterA上的8.0.0.0/8路由的下一跳为0.0.0.0,因为这条路由是本地设备上通告的,没有经过下一跳,而RouterB和RouterC上的8.0.0.0/8路由的下一跳均为200.1.1.2,那是因为在EBGP对等体之间的EBGP路由发布时,下一跳将为发送路由器的出接口IP地址,在IBGP对等体之间的EBGP路由发布时,下一跳不变。而IBGP对等体之间进行IBGP路由发布时只能进行单跳通告,收到IBGP路由的设备不再通告给它自己的对等体。
在路由表最后一列的“Path/Ong”用来表示路由的AS路径和路由源类型,因为8.0.0.0/8路由是通过network通告的,所以显示为i,代表IGP类型。
⑤为了解决RouterC和RouterD可以到达8.0.0.0/8路由的下一跳200.1.1.2,只须在它们共同连接的RouterB上使BGP协议引入直连路由即可。
[RouterB-bgp]ipv4-familyunicast
[RouterB-bgp-af-ipv4]import-routedirect
此时在RouterA的BGP路由表除了有原来自己通告的8.0.0.0/8路由表项外,还有RouterB引入的三条直连路由。
在RouterC的BGP路由表中也可见到RouterB所引入的三条直连路由。另外原来的8.0.0.0/8路由变为有效、可达了(前面有一个*号)
七、MBGP基本功能配置示例
如上图拓扑,接收者(Receiver)通过组播方式接收视频点播信息,接收者与组播源(Source)位于不同的AS中,现需要在两个AS之间传输组播路由信息。
1、基本配置思路
本例是一个组播BGP路由配置示例,且跨越两个AS,主要有两个方面的配置:一是配置组播BGP路由,二是配置IP组播功能。在组播路由方面,AS200内部可采用OSPF路由(当然也可以是其他路由协议)来实现AS内部IBGP对等体间的路由互通,然后在两个AS的边界路由器配置EBGP对等体连接,实现AS间的组播网络连接。配置任务如下:
①配置各路由器IP地址以及AS200内B、C、D之间通过OSPF协议实现网络互通。
②配置两个AS中各路由器的MBGP对等体,建立AS内、AS间的组播路由。
③配置各路由器在MBGP视图下要引入的路由。
④使能各路由器的组播功能。
⑤在各AS内部配置PIM-SM基本功能,在主机侧接口上使能IGMP功能。
⑥在两个AS的PIM域间相连的接口上配置BSR服务边界。
⑦在两个AS的PIM域间边界路由器上配置MSDP对等体,实现传输域间组播源信息。
2、具体配置步骤
①配置各路由器的接口IP地址以及AS200内三台路由器上的OSPF协议。注意,RouterB的GE1/0/0接口上运行的不是OSPF协议,而是EBGP协议。
然后是AS200中各路由器的OSPF路由配置。因为没有划分区域,所以所有设备在骨干区域0中。
RIP、OSPF和IS-IS协议中的network命令其实就是用来指定哪个接口上要运行对应的路由协议,然后以对应路由协议向邻居通告这些接口上所连接网络的路由信息。
②在各路由器上使能MBGP协议,配置MBGP对等体。
配置MBGP对等体前必须先在BGP视图下创建BGP对等体,然后在BGP-IPv4组播地址族下使能与BGP对等体交换组播路由信息的功能。因为创建BGP对等体后缺省只是使能BGP-IPv4单播地址族下与BGP对等体的路由信息交换功能,所以其他地址族的该功能使能必须手动配置。
③在各路由器上配置要引入的路由,包括在BGP视图下引入的路由,用于IPv4单播通信(当然,如果不需要进行IPv4单播通信也可不配置)的路由以及在IPv4组播地址族下引入的路由,用于组播通信。
RouterA上的配置,因为RouterA与RouterB之间建立的是EBGP连接是,所以必须要在组播地址族下引入RouterA上的直连路由,以便向RouterB通告其连接的直连路由,然后由RouterB在AS200内部通告,使得AS200中的所有设备可以访问到RouterA上连接的网络。
RouterB上的配置,因为RouterB与RouterA之间建立的是EBGP连接,所以必须要在组播地址族下同时引入它的直连路由以及AS200内部的OSPF路由,以便向RouterA通告其直连路由和所学习到的OSPF路由,实现RouterA可以访问到AS200中所有设备的目的。因为直连路由的优先级高于OSPF路由,如果仅引入OSPF路由,则直连网段部分仍然无法实现互通。
RouterC和RouterD上的路由引入配置与RouterB上的配置有些区别,因为它们上面均只需要在AS200内部进行组播通信,无需与外界进行IPv4单播OSPF通信,所以无需在BGP-IPv4单播地址族下引入OSPF路由,仅需在组播地址族下引入。但直连路由必须同时在BGP-IPv4单播地址族和组播地址族下分别引入,同样是因为直连路由的优先级高于OSPF路由。
④使能各路由器及其相连接口的组播功能。同时,要在RouterC连接接收者主机的GE2/0/0接口上使能IGMP功能。
⑤在两个PIM域中分别配置BSR和RP。BSR位于PIM域边界,通常是把BSR与RP配置成一样。
在AS100和AS200这两个PIM域中配置域间相连接口为各自PIM域的BSR服务边界。
⑥配置MSDP对等体
因为PIM域间是通过MSDP服务进行连接的,所以在PIM域间的边界设备上要分别使能MSDP功能,并且要分别配置MSDP对等体。对等体就是对端接口的IP地址。
配置好以上内容后,可通过使用displaybgp multicast peer 查看两个PIM域边界路由器之间MBGP对等体的关系。
使用display msdp brief查看路由器之间MSDP对等体建立情况