BGP工作流程——邻居状态机—览表
peer状态名称 | 发什么包 | 在做什么 |
ldle(空闲) | 尝试建立TCP连接 | 开始准备TCP的连接并监视远程peer启动TCP连接,启用BGP时,要准备足够的资源 |
connect(连接) | 发TCP包 | 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接不上则进入Active状态,反复尝试连接。 |
active(激活) | 发TCP包 | TCP连接没建设成功,反复尝试TCP连接。 |
OpenSent(打开发送) | 发Open包 | TCP连接建立已经成功,开始发送Open包,Open包携带参数协商对等体的建立。 |
OpenConfirm(打开确认) | 发Keepalive包 | 参数、能力特性协商成功,自己开始发送Keepalive包,等待对方的Keepalive包。 |
Established(已建立) | 发Update包 | 已经收到对方的Keepalive包,双方能力特性致,开始使用Update通告路由信息。 |
BGP术语
- 对等体(peer):当两台BGP路由器之间建立了一条基于TCP的连接后,就称它们为邻居或对等体;
- 自治系统(AS):是一组处于统一管理控制和策略下的路由器或主机,它们使用内部网关路由协议决定如何在自治系统内部路由数据包,并使用自治系统间路由协议决定如何把数据包路由到其他自治系统。AS号由因特网注册机构分配,16比特长度(在RFC4893描述了使用32位长度的AS号的扩展),范围为1~65535,其中64512~65535是私有使用的。
- IBGP:当BGP在一个AS内运行时,被称为内部BGP(IBGP)
- EBGP:当BGP运行在AS之间时,被称为外部BGP(EBGP)
- NLRI(网络层可达性信息):是BGP更新报文的一部分,用于列出通过该路径可到达的目的地集合。
- 同步:在BGP能够通告路由之前,该路由必须存在于当前的IP路由表中。也就是说,BGP和IGP必须网络能够被通告前同步。Cisco允许通过命令no synchronization来关闭同步
- IBGP水平分割:通过IBGP学到的路由信息不能通告给其他的IBGP邻居
- 对等体组(Peer Group):是一组采用相同更新策略的BGP邻居 当一个对等体加入对等体组中时,此对等体将获得与所在对等体组相同的配置 当对等体组的配置改变时,组内成员的配置也相应改变
BGP属性
BGP具有丰富的属性,为路由控制带来很大的方便,BGP路径属性分为以下4类:
公认必遵(well-Known Mandatory)
公认必遵是BGP更新中必须包含的,且必须被所有BGP厂商设备所能识别,包括ORIGIN,AS_PATH和Next_Hop以下以下3个属性。
ORIGIN(起源) :该属性说明了路由信息的来源,有3个可能的源一-IGP, EGP
和NNCOMPLETE。路由器在多个路由选择的处理中使用这个信息。路由器选择具有最低
ORIGIN类型的路径。ORIGIN类型从低到高的顺序为IGP<EGP<INCOMPLETE。
AS_ PATH (AS路径) :包含在Update中的路由信息所经过的自治系统的序列。
Next_HOP (下一跳) :路由器所获得的BGP路由的下一跳。对EBGP会话来说,下--跳就是通告该路由的邻居路由器的源地址。对于IBGP会话,有两种情况,一是起源AS内部路由的下一跳,就是通告该路由的邻居路由器的源地址;二是由EBGP注入AS的路由,它的下一-跳会不变地带入IBGP中。
公认自决(well-known discretionary)
公认自决指必须被所有BGP设备所识别,但是BGP更新中可以发送,也可以不发送的属性,包括LOCAL_AGGPREGATE两个属性
LOCAL _PREF (本地优先级) :用于告诉自治系统内的路由器在有多条路径时,怎
样离开自治系统。本地优先级越高,路由优先级越高。该属性仅在IBGP邻居之间传递。
ATOMIC_ AGGREGATE (原子聚合) :指出已被丢失了的信息。当路由聚合时将会
导致信息的丢失,因为聚合来自具有不同属性的不同源。如果一个路由器发送了导致信息丢
失的聚合,路由器将被要求把原子聚合属性附加到该路由上。
选过过渡(Optional Transitive)
可选过渡属性并不要求所有的BGP实现都支持。如果该属性不能被BGP进程识别,它
就会去看过渡标志。如果过渡标志被设置了, BGP进程会接受这个属性并将它不加改变地传
送,包括AGGREGATOR和COMMUNITY
AGGREGATOR (聚合者) :标明了实施路由聚合的BGP路由器ID和聚合路由的
路由器的AS号。
COMMUNITY (团体) :指共享- -一个公共属性的一组路由器。
可选非过渡(Optional Nontransitive)
可选非过渡属性并不要求所有的BGP都支持。如果这些属性被发送到不能对其识别的
路由器,这些属性将会被丟弃,不能传送给BGP邻居,包括MED、ORIGINATOR_ID和
CLUSTER_LIST
MED (多出口区分) :通知AS外的路由器采用哪一条路径到达AS。它也被认为是
路由的外部度量,低的MED值表示高的优先级。MED属性在自治系统间交换,但MED属
性不能传递到第三方AS。默认情况下,仅当路径来自同一个自治系统的不同邻居时,路由
器才比较它们的MED属性。
ORIGINATOR ID (起源ID) :路由反射器会附加到这个属性上,它携带本AS源路
由器的路由器ID,用以防止环路。
CLUSTER_ LIST (簇列表) :此属性显示了采用的反射路径。
BGP消息类型及格式
BGP报头
BGP消息类型主要包括Open、Keepalive、Update和Notification~这些消息具由相同的报头,长度为19字节,其格式如下图所示,各字段含义如下所述
0 7|8 15|16 23|24 31|
标记 |
||
长度 | 类型 |
- 标记:16字节,用来检测对等体之间同步的丢失。当支持验证功能用来验证消息,当不使用验证时所有比特均为”1“
- 长度:2字节,BGP消息总长度(包括报头在内),以字节为单位,范围为19~4096
- 类型:1字节,BGP消息的类型。其取值从1~5,分别表示Open、Update、Notification、Keepalive和Route-refresh消息
Open消息
Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系,
其格式如下图所示,各字段含义如下所述。
|0 7|8 15|16 23|24 31|
版本 | ||
自治系统号 |
BGP标识 | ||
可选参数长度 | ||
可选参数 |
- 版本: 1 字节,BGP的版本号对于BGP4来说其值为4。
- 我的自治系统: 2字节,邻居建立发起者的AS号,用来决定双方是IBGP邻居,还
是EBGP邻居。
- 保持时间: 2字节,是设备收到一个Keepalive消息之前允许等待的最长时间。如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。如果这个时间为0s,则不发送Keepalive消息,如果不为0,则至少是3s。在建立对等体关系时两端要协商保持时间,在协商时,采用OPEN消息中较小端的保持时间作为双方的保持时间。Cisco 默认保持时间是180 s。
- BGP标识符:4字节,发送者的BGP路由器ID,以IP地址的形式表示。BGP路由器ID的确定方法和OSPF路由器ID确定方法相同。
- 可选参数长度: 1 字节,可选参数的长度。如果为0,则没有可选参数。
- 可选参数:可变长度,用于BGP验证或多协议扩展等功能。包括一个可选参数列表,每个参数由1字节类型字段、1 字节长度字段和一个包含参数值的可变长度字段来确定,即TLV方式。
Update消息
Update消息用于在对等体之间交换路由信息 它既可以发布可达路由信息,也可以撤销不可达的路由信息,其格式如下图所示,个字段含义如下所述:
不可用路由长度 | |
撤销路由 | |
全部路径属性长度 | |
路径属性 | |
网络层可达 |
- 不可用路由长度: 2字节,撤销路由字段的整体长度,如果为0,说明没有路由被撤销,并且在该消息中没有撤销路由的字段。.
- 撤销路由:可变长度,包含不可达路由的列表。
- 全部路径属性长度: 2字节,路径属性字段的长度。如果为0,则说明没有路径属性字段。
- 路径属性:可变长度,列出与NLRI相关的所有路径属性列表,包括AS_ _PATH、本地优先级和起源等,每个路径属性由-一个TLV (Type-Length-Value) 三元组构成。路径属性是BGP用以进行路由控制和决策的重要信息。
- 网络层可达信息:可变长度,是可达路由的前缀和前缀长度二元组。
Notification消息
当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。其格式如下图所示,各字段含义如下所述。
- 错误编码: 1字节,错误类型。
- 错误子码:1字节,错误类型更详细的信息。
- 数据:可变长度,用于诊断错误的原因,内容依赖于具体的错误编码和错误子码。
Keepalive消息
BGP会周期性(Cisco默认为60 s)地向对等体发出Keepalive消息,用来保持连接的有
效性。其消息格式中只包含BGP包头,没有附加其他任何字段。Keepalive消息的发送周期
是保持时间的1/3,但该时间不能低于1 s。如果协商后的保持时间为0,则不发送Keepalive
消息。
BGP路由决策
BGP使用了描述路由特性的很多属性。这些属性和每-一个路由一起在BGP更新报文中被发送。路由器使用这些属性去选择到目的地的最佳路由。理解BGP路由判定的过程非常重要,下面按优先顺序给出了路由器在BGP路径选择中的判定过程:
- 如果下一跳不可达,则不考虑该路由。
- 优先选取具有最大权重(Weight) 值的路径,权重是Cisco专有属性。
- 优先选取具有最高本地优先级的路由。
- 优先选取源自于本路由器(即下- -跳为“0.0.0.0" )上BGP的路由。
- 优先选取具有最短AS路径的路由。
- 优先选取有最低起源代码(IGP<EGP< <INCOMPLETE)的路由。
- 优先选取具有最低MED值的路径。
- 在EBGP路由和联盟EBGP路由中,首选EBGP路由;在联盟EBGP路由和IBGP
路由中,首选联盟EBGP路由。
- 优先选取离IGP邻居最近的路径。
- 优先选取最老的EBGP路径。
- 优先选取具有最低BGP路由器ID的路径。
- 优先选取邻居IP地址最小的路径。
BGP路由抑制
BGP路由抑制(Route Dampening)用来解决路由不稳定的问题。路由不稳定的主要表现形式是路由振荡(Route Flaps),即路由表中的某条路由反复消失和重现。当发生路由振荡时,路由协议就会向邻居发布路由更新信息,收到更新信息路由器需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正,常工作。BGP使用路由抑制来防止持续的路由振荡带来的不利影响。BGP路由抑制的工作示意图如下图所示。
首先介绍几个术语:
- 半衰期:单位为min,每经过半衰期的时间,抑制值就会减半,Cisco 默认为15 min。
- 重新使用界限:当一条被抑制路由的惩罚值低于该值后,该路由重新使用。Cisco 默
认值为750。
- 抑制阈值:超过该值路由被抑制,不再向其他BGP对等体发布更新报文。Cisco 默
认值为2 000.
- 最大抑制时间:被抑制路由的抑制时间超过该值后,不管惩罚值为多少,都会重新
使用,Cisco 默认为60 min,即4倍的半衰期时间。
当一条路由出现振荡时,这条路由会被加上一个1 000的惩罚,这个惩罚会每5 s递减, .
等到15 min时,惩罚会减少到一半,也就是500。
如果这条路由连续出现Flap,每一次Flap这条路由的惩罚都会加1 000,例如,一条路由连续出现了3次振荡,那么这时候惩罚值就接近3000.当惩罚值大于2 000时,这条路由就会在BGP表中被标为Suppressed。经过了15 min后(没有发生Flap),这条路由的惩罚值会被减少- -半到1 500,这条路由还是被标为Suppressed.再经过15 min后,惩罚值减成750,这条路由才可以重新被使用。也就是说经过30 min,路由器认为这条路由是稳定的,才会重新使用它。如果这条路由不停地振荡,好比说15次。这时候惩罚值会接近15000.每过15 min惩罚值会减少一半,可是到了60 min时,惩罚值还是大于750,这时候因为经超过了最大抑制时间,所以这条路由会被重新使用。
需要注意的是,BGP路由抑制只对通过EBGP学到的路由起作用,对IBGP学到的路由不起作用。