BGP路由协议基本概念
BGP协议基本概念
BGP(Border Gateway Protocol)是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。与OSPF和RIP 等在自治区域内部运行的协议对应,BGP是一类EGP(Exterior Gateway Protocol)协议,而OSPF和RIP等为IGP(Interior Gateway Protocol)协议。BGP协议经常用于ISP之间。
BGP协议从1989年以来就已经开始使用。它最早发布的三个版本分别是RFC1105(BGP-1)、RFC1163(BGP-2)和RFC1267(BGP-3),当前使用的是RFC1771(BGP- 4)。 随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,影响了网络的性能。BGP支持无类别域间选路CIDR(Classless Interdomain Routing),可以有效的减少日益增大的路由表。BGP-4正迅速成为事实上的Internet边界路由协议标准。特性描述如下:
BGP是一种外部路由协议,与OSPF、RIP等的内部路由协议不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最好的路由。
通过携带AS路径信息,可以彻底解决路由循环问题。
为控制路由的传播和路由选择,它为路由附带属性信息。
使用TCP作为其传输层协议,提高了协议的可靠性。
BGP-4支持无类别域间选路CIDR(Classless InterDomain Routing),有时也称为supernetting,这是对BGP-3的一个重要改进。CIDR以一种全新的方法看待IP地址,不再区分A类网、B类网及C类网。例如一个非法的C类网络地址192.213.0.0(255.255.0.0)采用CIDR表示法192.213.0.0/16就成为一个合法的超级网络,其中/16表示子网掩码由从地址左端开始的16比特构成。CIDR的引入简化了路由聚合(Routes Aggregation),路由聚合实际上是合并几个不同路由的过程,这样从通告几条路由变为广告一条路由,减化了路由表。
路由更新时,BGP只发送增量路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
由于政治的、经济的原因,每个自治系统希望对路由进行过滤、选择和控制, 因此,BGP-4 提供了丰富的路由策略,它使得BGP便于扩展以支持因特网新的发展。
与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自治区域内部网络拓扑图其它各点的路由,同时向其它端点发送本端点(路由器)所知的路由,如直接路由、静态路由等。作为外部网关协议,BGP发送和引入路由的单位是整个AS自治区域,即BGP要发送本地路由器所在的AS内部的所有路由,引入其它AS自治区域的所有路由(假设不使用路由策略控制发送和引入)。其路由数量显然要远远大于IGP发送和引入的路由数量。因此,类似于IGP那样定时对外广播路由信息是不可取的。BGP采用发送路由增量(Incremental)的方法,完成全部路由信息的通告和维护:初始化时发送所有的路由给BGP对等体(BGP Peer),同时在本地保存了已经发送给BGP对等体的路由信息。当本地的BGP收到了一条新路由时(如通过IGP注入了新路由或加入了新的静态路由),与保存的已发送信息进行比较,如未发送过,则发送,如已发送过则与已经发送的路由进行比较,如新路由花费更小,则发送此新路由,同时更新已发送信息,反之则不发送。当本地BGP发现一条路由失效时(如对应端口失效),如此路由已发送过,则向BGP对等体发送一个撤消路由消息。
总之,BGP不是每次都广播所有的路由信息,而是在初始化全部路由信息后只发送路由的变化量(增量)。这样保证了BGP和对端的最小通信量,但同时也增加了BGP的复杂程度。因为对于IGP,本地路由协议只需发送发送时刻所知的全部路由,而不保存任何已发送信息,路由选择的工作由对端来完成;而BGP必须为每个BGP对端保存已经发送的路由信息,以便发送一条新路由前确认其是否真的应该发送。
为了减小路由表的体积和发送路由的通信量,BGP还支持CIDR(Classless InterDomain Routing)。它使用带有较短的掩码(相对于自然掩码)的路由来在一条路由中表达更多的路由信息。如从202.112.1.0/24-202.112.254.0/24可以使用202.112.0.0/16表示,从而减小了路由表的体积和发送路由信息时的网络流量。
同时,作为AS自治区域间的路由协议,由于政治的、经济的等原因,BGP需要按照不同的路由的属性控制路由的发送和引入。因此,BGP有丰富的路由策略控制手段。
自治系统
自治系统指的是:由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。每个自治系统都有唯一的自治系统编号,这个编号是由因特网授权的管理机构分配的。
引入自治系统的基本思想:就是通过不同的编号来区分不同的自治系统。这样,当网络管理员不期望自己的通信数据通过某个自治系统时,这种编号方式就十分有用了。或许,该网络管理员的网络完全可以访问这个自治系统,但由于它可能是由竞争对手在管理,或是缺乏足够的安全机制,因此,可能要回避它。通过采用路由协议和自治系统编号,路由器就可以确定彼此间的路径和路由信息的交换方法。
自治系统的编号范围是1到65535,其中1到65411是注册的因特网编号,65412到65535是专用网络编号。
BGP的工作机制
BGP系统作为应用层协议运行在一个特定的路由器上。系统初启时通过发送整个BGP路由表交换路由信息,之后为了更新路由表只交换更新消息(update message)。系统在运行过程中,是通过接收和发送keep-alive消息来检测相互之间的连接是否正常。
发送BGP消息的路由器称为BGP发言人(speaker),它不断的接收或产生新路由信息,并将它广告(advertise)给其它的BGP发言人。当BGP发言人收到来自其他自治系统的新路由广告时,如果该路由比当前已知路由好、或者当前还没有可接受路由,它就把这个路由广告给自治系统内所有其它的BGP发言人。一个BGP发言人也将同它交换消息的其它的BGP发言人称为同伴(peer),若干相关的同伴可以构成同伴组(group)。
一般情况下一条路由是从自治系统内部产生的,它由某种内部路由协议发现和计算,传递到自治系统的边界,由自治系统边界路由器(ASBR)通过EBGP连接传播到其它自治系统中。路由在传播过程中可能会经过若干个自治系统,这些自治系统称为过渡自治系统。如:AS5。若这个自治系统有多个边界路由器,这些路由器之间运行IBGP来交换路由信息。这时内部的路由器并不需要知道这些外部路由,它们只需要在边界路由器之间维护IP连通性。如:AS2、AS3、AS4。路由到达自治系统边界后,若内部路由器需要知道这些外部路由,ASBR可以将路由引入内部路由协议。外部路由的数量是很大的,通常会超出内部路由器的处理能力,因此引入外部路由时一般需要过滤或聚合,以减少路由的数量,极端的情况是使用默认路由。还有一种自治系统称为Stub AS,如:AS1、AS6、AS7。其内部只有一个ASBR通过EBGP连接外部,同外部其他AS的通信要靠过渡自治系统来转接。
对一个具体的ASBR来说,其路由的来源有两种:从对等体接收的或者从IGP引入的。对于接收的路由,根据其属性(如AS路径、团体属性等)进行过滤,并设置某些属性(如本地优先、MED值等),之后若需要的话,将具体的路由聚合为超网路由。BGP可能从多个对等体收到目的地相同的路由,根据规则选择最好的路由并加入IP路由表。对于IGP路由,则要经过引入策略的过滤和设置。BGP发送优选的BGP路由和引入的IGP路由给对等体。
BGP的两种邻居
BGP在路由器上以下列两种方式运行:
IBGP(Internal BGP)
EBGP(External BGP)
如果两个交换BGP报文的对等体属于同一个自治系统,那么这两个对等体就是IBGP对等体(Internal BGP) ,如RTB和RTD。
如果两个交换BGP报文的对等体属于不同的自治系统,那么这两个对等体就是EBGP对等体 (External BGP) ,如RTA和RTB。
虽然BGP是运行于自治系统之间的路由协议,但是一个AS的不同边界路由器之间也要建立BGP连接,只有这样才能实现路由信息在全网的传递,如RTB和RTD,为了建立AS100和AS300之间的通信,我们要在它们之间建立IBGP连接。
IBGP对等体之间不一定是物理上直连的,但必须保证逻辑上全连接。(TCP连接能够建立即可)。
一般的路由器(包括Quidway系列路由器)都默认要求EBGP对等体之间是有物理上的直连链路,同时他们一般也提供改变这个缺省设置的配置命令。
BGP路由通告原则
BGP 的路由通告原则:
多条路径时,BGP Speaker只选最优的给自己使用;
BGP Speaker只把自己使用的路由通告给相邻体;
BGP Speaker从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP);
BGP Speaker从IBGP获得的路由不向它的IBGP相邻体通告;
BGP Speaker从IBGP获得的路由是否通告给它的EBGP相邻体要依IGP和BGP同步的情况来决定;
连接一建立,BGP Speaker将把自己所有BGP路由通告给新相邻体。
这些通告原则都是BGP的设计者在设计BGP 路由协议时硬性规定的,这里我们不深究其原因。
BGP同步
BGP协议规定:一个BGP 路由器不将从内部BGP对等体得知的路由信息通告给外部对等体,除非该路由信息也能通过IGP得知。若一个路由器能通过IGP得知该路由信息,则可认为路由能在AS中传播,内部通达已有了保证。
BGP的主要任务之一就是向其它自治系统发布该自治系统的网络可达信息。同步是指BGP必须等待直到IGP在其所在自治系统中成功传播该选路信息,才向其它自治系统通告过渡信息。也就是说,当一个路由器从IBGP对等体收到一个目的地的更新信息,在把它通告给其它EBGP对等体之前,要试图验证该目的地通过自治系统内部能否到达(即验证该目的地是否存在于IGP,非BGP路由器是否可传递业务量到该目的地。若IGP认识这个目的地,才接受这样一条路由信息并通告给EBGP对等体,否则将把这个路由当作与IGP不同步,不进行通告。
实际上,同步和不同步是可以配置的。华为系列路由器缺省情况下BGP与IGP是同步的。
如何成为BGP路由
BGP 路由协议是运行在自治系统之间的路由协议,它的主要工作是在自治系统之间传递路由信息,而不是去发现和计算路由信息。发现和计算路由信息的任务由IGP (如:RIP、OSPF)路由协议来完成。BGP 的路由信息需要通过配置命令的方式注入到BGP中。
按照注入的方式可分为三类:纯动态注入、半动态注入、静态注入。
纯动态注入是指:路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中去。纯动态注入方式没有对路由信息做任何过滤和选择,它会把路由器获得的所有IGP 路由信息都引入到BGP系统中。从另一角度来说,这样一种路由注入方式配置简单,一次性引入了所有的路由信息。当然,在实际工程中可以根据需要选择。
半动态注入是指:路由器有选择性的将IGP发现的动态路由信息注入到BGP系统中去。它和纯动态注入的区别在于不是将IGP发现的所有路由信息注入到BGP中去。
如胶片所示,路由器B通过OSPF 协议动态地发现去往网络18.0.0.0/8的路由,再通过配置命令静态将其引入到BGP中,我们称这样一种路由注入方式为半动态注入。
静态注入是指:路由器将静态配置的某条路由注入到BGP系统中。