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消息来通知错误 。
推荐阅读
- 漂浮在天空中的一朵云可能有多重
- 对“关于1600万色到底有没有必要”的一些疑意
- 校内外app的具体操作步骤
- 在低端路由器上实现双机热备份和EIGRP的路由调整实例
- 儒家思想的创始人是谁
- 悲哀的近义词 悲哀的近义词是什么
- 84消毒液配比浓度表是怎样的
- 怎么补救淡盐的熟粽子
- 自定义函数的作用 自定义函数的作用是什么
- 如鱼得水意思相近的成语