4. BGP的路由选择

BGP的消息报头由三个部分组成:标记、长度和类型。标记段占16个字节,用于安全检测和同步检测;长度段占2个字节,标明整个BGP消息的长度;类型段占一个字节,标明消息的类型。报头的后面可以不接数据部分,如Keepalive消息。

BGP消息有四种类型:OPEN,UPDATE,NOTIFICATION和KEEPALIVE,分别用于建立BGP连接,更新路由信息,差错控制和检测可到达性。

OPEN消息是在建立TCP连接后,向对方发出的第一条消息,它包括版本号、各自所在AS的号码(AS Number)、BGP标识符(BGP Identifier)、协议参数、会话保持时间(Hold timer)以及可选参数、可选参数长度。其中,BGP标识符用来标识本地路由器,在连接的所有路由器中应该是唯一的。这个标识符一般都使用接口上的最大的IP地址(常常使用loopback接口来防止地址失效)。而会话保持时间,是指在收到相继的Keepalive或者Update信号之间的最大间隔时间。如果超过这个时间路由器仍然没有收到信号,就会认为对应的连接中断了。如果把这个保持时间的值设为0,那么表示认为连接永远存在。UPDATE消息由不可到达路由(Withdrawn Route)、路由属性(Route Attributes)和网络层可到达性(Network Layer Reachability Information—NLRI)组成。

BGP路由属性是BGP 路由的核心概念。它是一组参数,在UPDATE消息中被发给连接对等体。这些参数记录了BGP路由信息,用于选择和过滤路由。它可以被看作选择路由的度量尺度(metric)。路由属性被分为四类:公认强制(Well-known mandatory attributes)、公认自由选择(Well-known discretionary attributes)、可选传递(Optional transitive attributes)和可选非传递(Optional nontransitive attributes)。公认的(Well-known)属性对于所有的BGP路由器来说都是可辨别的;每个UPDATE消息中都必须包含强制(mandatory)属性,而自由选择的(discretionary)属性则是可选的,可包括也可不包括。对于可选的(Optional)属性,不是所有的BGP工具都支持它。当BGP不支持这个属性时,如果这个属性是过渡性的(transitive),则会被接受并传给其他的BGP对等体;如果这个属性是非传递性的(nontransitive),则被忽略,不传给其他对等体。

在技术文档RFC1771定义了1~7号的BGP路由属性,依次是:1,ORIGIN(产生该路由信息的AS);2,AS_PATH(包已通过的AS集或序列);3,NEXT_HOP(要到达该目的下一跳的IP地址,IBGP连接不会改变从EBGP发来的NEXT_HOP);4,MULTI_EXIT_DISC(本地路由器使用,区别到其他AS的多个出口);5,LOCAL-PREF(在本地AS内传播,标明各路径的优先级);6,ATOMIC_AGGREGATE;7,AGGREGATOR。RFC1997还定义了8,COMMUNITY。其中,1、2号属性是公认强制;3、5、6是公认可选;7、8是可选过渡;4是可选非过渡。这些属性在路由的选择中,考虑的优先级是不同的,仅就这8个属性来说,其中优先级最高的是LOCAL-PREF,接下来是ORIGIN和AS_PATH。

BGP所使用到的路由属性并不仅仅是这8个,其他的具体内容可以参阅RFC文档(RFC1771、1996、1997、1966、1863、2283)。

网络层可到达性(NLRI)包含了<长度,前缀>这样的二维数组,使用CIDR(Classless Interdomain Routing)技术,来聚合路由,以减缓BGP表的增长速度。

BGP工作流程如下:首先,在要建立BGP会话的路由器之间建立TCP会话连接,然后通过交换OPEN信息来确定连接参数,如运行版本等。建立对等体连接关系后,最开始的路由信息交换将包括所有的BGP路由,也就是交换BGP表中所有的条目。初始化交换完成以后,只有当路由条目发生改变或者失效的时候,才会发出增量的触发性的路由更新。所谓增量,就是指并不交换整个BGP表,而只更新发生变化的路由条目;而触发性,则是指只有在路由表发生变化时才更新路由信息,而并不发出周期性的路由更新。比起传统的全路由表的定期更新,这种增量触发的更新大大节省了带宽。路由更新都是由UPDATE消息来完成。UPDATE包含了发送者可到达的目的列表和路由属性。当没有路由更新传送时,BGP会话用KEEPALIVE消息来验证连接的可用性。由于KEEPALIVE包很小,这也可以大量节省带宽。在协商发生错误时,BGP会向双方发送NOTIFICATION消息来通知错误。


相关内容