BGP-4 提供了一套新的机制以支持无类域间路由。这些机制包括支持网络前缀的通告、取消 BGP 网络中 “ 类 ” 的概念。 BGP-4 也引入机制支持路由聚合,包括 AS 路径的集合。
BGP属于外部网关路由协议,主要用于因特网路由信息交换。属于路径向量路由协议。
BGP头部主要字段解释如下:
Marker:长度:16-Byte;用于标明 BGP 报文边界,所有 bit 均为“1”;
Length:长度:2-Byte;BGP 报文总长度(包括报文头在内),以 Byte 为单位。
Type:长度:1-Byte;BGP 报文的类型。
其取值从 1-5 来表示 5 种报文,分别表示 Open、Update、Notification、Keepalive、Route-refresh 报文;
1、Version:协议的版本号
2、My Autonomous System:发送者自己的AS号
3、Hold Time:死亡时间,在收到BGP对等体的OPEN报文后,对收到的BGP报文和发出BGP报文二者的Hold Time时间作比较,选择较小的作为协商结果,默认Hold Time时间为180s
4、BGP Identifier:发送者的router-id
5、Opt Parm Len:表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数。
6、Optional Parameters:此值为BGP可选参数列表,每一个可选参数是一个TLV格式的单元
Parm. Type:占1个字节(无符号位),为可选参数类型。我们现在的实现中,只在type值为2时有意义,表示携带的参数为协商能力。
Parm. Length:占1个字节(无符号位),为Parameter Value的长度。
Parameter. Value:根据Parm.Type的不同值填写不同的参数内容,在Parm.Type为2表示协商能力时,Parameter.Value是表示所支持的各种协商能力的列表,列表中的每一个单元是如下的一个TLV三元组:
保活,维持BGP邻居关系。周期发送,默认周期时间为60s,保持时间为180s。keepalive消息只包含19个8位的BGP 头,没有其他数据。
BGP使用Update消息来发送和撤销路由信息。
● 撤销路由的长度(Withdrawn Routes Length):Update报文中可以包含0条、1条或者多条准备撤销的BGP路由。该字段是一个无符号整数,它指示了Update报文中所包含的“撤销的路由条目”字段的长度(字节数)。
● 撤销的路由条目(Withdrawn Routes):这个字段用于存放需要被撤销的BGP路由前缀,如果有多条BGP路由需要使用这个Update报文来撤销,那么这个字段将包含一个BGP路由前缀的列表,每条BGP路由前缀包含两元,分别是前缀长度及路由前缀。
● 总路径属性长度(Total Path Attribute Length):这个字段指示了Update报文中路径属性的总长度。
● 路径属性(Path Attributes):当BGP路由器使用Update报文向邻居通告BGP路由时,该报文中就包含着路径属性字段。BGP定义了丰富的路径属性类型。本章将在“路径属性”一节中详细介绍常见的BGP路径属性。
● 网络层可达信息(Network Layer Reachability Information):这个字段用于存放需要被通告的BGP路由前缀,如果有多条BGP路由需要使用这个Update报文来通告,那么这个字段将包含一个BGP路由前缀的列表,每条BGP路由前缀包含两元,分别是前缀长度及路由前缀,当然,一个Update报文用于通告拥有相同路径属性的路由前缀。
Error code:占1个字节(无符号位),定义错误的类型,非特定的错误类型用零表示。
Error subcode:占1个字节(无符号位),指定错误细节编号,非特定的错误细节编号用零表示。
Data:指定错误数据内容。
用来通知对等体自己支持路由刷新能力;用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
主要字段的解释如下:
AFI(Address Family Identifier):地址族标识符(2字节)。
Res.(Reserved field):保留区域(1字节),发送方应将其设置为0,接收方应当忽略该区域的信息。
SAFI(Subsequent Address Family Identifier):子地址族标识符(8字节)。
BGP状态机描述的是BGP邻居的建立过程,BGP状态机共有有六种状态,如图:
下面详细介绍BGP的六种状态:
注意:Route-refresh报文不会改变BGP状态。如果收到Notification报文,那么BGP转至ldle状态。如果收到TCP拆链通知(FIN),那么BGP断开连接,转至ldle状态。
在BGP对等体建立的过程中,通常可见的三种状态是ldle、Active、Established。BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方通过Update报文交换路由信息。
BGP协议本身不发现路由,因此需要将其他路由(如IGP路由等)引入到BGP路由表中,从而将这些路由在AS之内和AS之间传播。BGP协议支持通过以下两种方式引入路由:
Import方式:按协议类型,将RIP路由、OSPF路由、ISIS路由等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
import-route protocol [ process-id ] [ med med | route-policy route-policy-name ]
Network方式:逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。
network ipv4-address [ mask | mask-length ] [ route-policy route-policy-name ] 或
network ipv6-address prefix-length [ route-policy route-policy-name ]
当到达同一个目的网段存在多条路由时,BGP通过如下的次序进行路由优选:
前提:丢弃下一跳不可达的路由
上述规则依序排列,BGP进行路由优选时,从第一条规则开始执行,如果根据第一条规则无法作出判断,例如路由的Preferred-Value属性值相同,则继续执行下一条规则,如果根据当前的规则,BGP能够决策出最优的路由,则不再继续往下执行。
记忆口诀:PL-lao-men,前2条取值越大越优,后几条取值越小越优,当前8条属性全部相同时,可以形成路由负载分担
注 意:
在公网中到达同一目的地的路由形成负载分担时,系统会首先判断最优路由的类型。若最优路由为IBGP路由则只是IBGP路由参与负载分担,若最优路由为EBGP路由则只是EBGP路由参与负载分担,即公网中到达同一目的地的IBGP和EBGP路由不能形成负载分担。
属性可以是公认的或可选的、强制的或自由决定的、传递的或非传递的。属性也可以是部分的。
Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
当BGP Speaker传播自身引入的路由时:
当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。
当BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。
当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:
当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。
Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常,Next_Hop属性遵循下面的规则:
BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS。Local_Pref属性可以手动配置,默认为100。
有时BGP发布者会收到两条重叠的路由,其中一条路由包含的地址是另一条路由的子集。一般情况下BGP发布者会优选更精细的路由(前者),但是在对外发布时,如果它选择发布更粗略的那条路由(后者),这时需要附加上ATOMIC-AGGREGATE属性,以知会对等体。它实际上是一种警告,因为发布更粗略的路由意味着更精细的路由信息在发布过程中丢失了。在进行路由聚合时,对于聚合的路由信息会添加ATOMIC-AGGREGATE属性。
MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,默认为0。
团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。团体属性分为自定义团体属性和公认团体属性。自定义团体属性为4个字节AA:NN(前两个字节一般代表AS号。)
公认团体属性分为4类,
1,Internet : 缺省属性,所有属性都属于Internet,此属性的路由可以通告给所有BGP邻居。
2,No_Export : 收到此属性的路由后,不将该路由发布给其他 AS。
3,No_Advertise : 收到此属性的路由后,不将该路由通告给任何BGP邻居。
4,No_Export_Subconfed : 在联盟中使用,仅在成员 AS 内传递。
当路由器存在多个公认团体属性时,传递范围最小的生效。
扩展团体属性为八个字节(Type:Administrative:Assigned)。
Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题。
ORIGINATOR_ID
当反射器RR被部署时,ORIGINATOR_ID是在AS内部防止路由环路。
在RR环境中,第一个RR创建ORIGINATOR_ID属性,并用发起该路由的路由器标识router id设置它。
所谓发起该路由的路由器,满足以下一种情况时,ORIGINATOR_ID则是该路由器的标识router id。
CLUSTER_LIST
CLUSTER_LIST是另外一种BGP属性,它 记录了路由穿越的簇。如果列表中发现了本地CLUSTER_ID,路由就会被丢弃。
与ORIGINATOR_ID作为AS内部防环机制不同,CLUSTER_LIST只用于RR的防环,因为客户机和非客户机不了解它属于哪个簇。
RR在反射路由时会创建或更新CLUSTER_LIST。比如:RR从客户机反射路由到非客户机,或从非客户机反射路由到客户机,或从客户机反射路由到另一个客户机时,它都会把本地的CLUSTER_ID添加到CLUSTER_LIST里。
有一些情况RR不会被创建CLUSTER_LIST:
RR发起路由是不会创建CLUSTER_LIST;
当RR向外部AS通告路由时,已有的CLUSTER_LIST会清除;
当RR从外AS学到路由通告给客户机和非客户机时,它不会创建CLUSTER_LIST。
1)当执行路由聚合时,当前 Router 可以为该聚合路由添加 Aggregator 属性,并在其中记录本地 AS Number 及 Router-ID;
2)继续传递:在路由传递过程中,需要保存 Aggregator 属性。
1)IP路由表
全局路由信息库,包括所有最优的IP 路由信息。
2)BGP路由表
BGP路由信息看,包括本地BGP Speaker 通告的路由信息,将其中最优路由添加到IP路由表中。
3)邻居表
对等体邻居清单列表,包括对等体两端的邻居信息及邻居列表。
4)adi-RIB-IN
对等体宣告给本地speaker的未处理的路由信息库
5)adj-rib-out
本地speaker宣告给指定对等体的路由信息库。
鉴于IBGP水平分割规则,R3 不能向 R4 及 R5 通告从R2学来的路由,只有R2与R4和R5直接建立IBGP关系并通告。Router Reflector(RR,路由反射器)技术能够解决该问题,可以简化 IBGP Full Mesh 需求。
1)RR(Route Reflector):路由反射器;允许把从 IBGP 对等体学到的路由反射到其他 IBGP 对等体的 BGP 设备,类似 OSPF 网络中的 DR。
2)RR Client:路由反射器客户端;与 RR 形成反射邻居关系的 IBGP 设备。在 AS 内部客户机需要与 RR 直连。
3)Non-Client:非客户机;既非 RR 亦非 Client 的 IBGP 设备。在 AS 内部,非客户机与 RR 之间,以及所有的非客户机之间仍然必须建立全互联关系(不必直连)。
Originator(始发者):在 AS 内部始发路由的设备。
Cluster(集群):路由反射器及其客户机的集合。Cluster_ID,默认时为 RR 的 BGP Router ID。
当配置路由反射器时:
1)需要将一台 BGP Router 指定为 RR 的同时,还需要指定其关联 Client;
2)至于 Client 本身,无需做任何配置,它并不知晓网络中存在 RR 设备;
# BGP配置路由反射器及其客户。
[Huawei-bgp] peer {group-name | ipv4-address } reflect-client
# 缺省情况下,每个路由反射器使用自己的Router ID作为Cluster ID;
[Huawei-bgp] reflector cluster-id {cluster-id}
RR1 和 RR2配置相同的 Cluster ID,并互为客户端。
各集群的 RR 互为 Non-Client 的 IBGP Full Mesh
2 级-RR 同时是 1 级-RR 的客户机
peer 12.1.1.2 password cipher Huawei 或
peer 12.1.1.2 keychain 1
peer 12.1.1.2 valid-ttl-hops 1
gtsm default-action { drop | pass}