BGP EVPN报文解析
BGP EVPN报文解析
一、概述
在学习SRv6过程中,接触到大量BGP EVPN路由,常见的BGP EVPN路由如下表所示:

另外,每个BGP Update消息中都会包含多个路径属性(Path Attribute),常见的路径属性如下表所示:
|
属性名称 |
属性类型码 |
属性分类 |
作用 |
|
ORIGIN |
1 |
公认必遵 |
指明路由的来源。 |
|
AS_PATH |
2 |
公认必遵 |
包含路由在传递过程中经过的自治系统的ASN列表。此属性可用于路由防环。 |
|
NEXT_HOP |
3 |
公认必遵 |
包含路由的下一跳地址。 |
|
MULTI_EXIT_DISC |
4 |
可选非过渡 |
也叫MED,用于控制流量进入本AS的路径。对端在收到多条到本AS的路由后,进行路由决策时,优选MED值小的路由。 |
|
LOCAL_PREF |
5 |
公认自决 |
用于控制AS内流量外出时的路径。 |
|
ATOMIC_AGGREGATE |
6 |
公认自决 |
指明路由聚合。 |
|
AGGREGATOR |
7 |
可选过渡 |
指明进行路由聚合的路由器。 |
|
COMMUNITY |
8 |
可选过渡 |
指明路由的团体属性。 |
|
ORIGINATOR_ID |
9 |
可选非过渡 |
路由反射器在反射路由时添加此属性,包含被反射的路由生成者的BGP标识符(router-id) |
|
CLUSTER_LIST |
10 |
可选非过渡 |
包含路由在传递过程中被经过的路由反射器的CLUSTER_ID列表。此属性可用于路由防环。 |
|
MP_REACH_NLRI |
14 |
可选非过渡 |
由MP-BGP定义,携带多协议可达性信息。 |
|
MP_UNREACH_NLRI |
15 |
可选非过渡 |
由MP-BGP定义,携带要撤销的多协议路由。 |
|
EXTENDED COMMUNITIES |
16 |
可选过渡 |
BGP扩展团体属性,如RT等。 |
|
AS4_PATH |
17 |
可选过渡 |
BGP为支持4字节ASN新增的属性,与AS_PATH类似。 |
|
AS4_AGGREGATOR |
18 |
可选过渡 |
BGP为支持4字节ASN新增的属性,与AGGREGATOR属性类似。 |
|
PMSI_TUNNEL |
22 |
可选过渡 |
用于多播。 |
|
BGP Prefix-SID |
40 |
可选过渡 |
用于SR(分段路由)。 |
完整的路径属性列表请参考Border Gateway Protocol (BGP) Parameters (iana.org)。
二、常见路由
以太网自动发现路由(Type1)
一个以太网自动发现路由类型的EVPN NLRI结构如下:

以太网自动发现路由包含两种子类型,分别是Per ES A-D Route和Per EVI A-D Route。
两者的区别如下:
|
区别 |
Per ES A-D Route |
Per EVI A-D Route |
|
用途 |
用于快速收敛和水平分割(结合ESI标签扩展团体)。 |
用于别名和备份路径。 |
|
以太网标签ID |
必须设置为MAX-ET(0xFFFFFFFF)。 |
EVPN使用的以太网标签值或0。 |
|
MPLS Label |
必须被设置为0。 |
|
|
必须携带的路径属性 |
必须包含ESI标签扩展团体。 必须携带一个或多个RT属性。 |
必须携带一个或多个RT属性。 |
|
其它 |
一般被包含在单独的UPDATE报文中发送。 |
Per EVI A-D路由MP_REACH_NLRI属性中的Next Hop字段必须被设置为宣告此路由的PE的IPv4或IPv6地址。 一般与Type2路由合并在一个UPDATE报文中发送。 |
|
RD |
在华为设备上,Per ES A-D Route的RD值是设备IP:0; 在H3C设备上,Per ES A-D Route的RD值和EVPN实例配置的相同。 |
在华为和H3C设备上,Per EVI A-D Route的RD值是和EVPN实例配置的相同。 |
华为和H3C设备发送的Per ES A-D Route的区别
|
字段 |
华为设备 |
H3C设备 |
|
RD |
RD值和Type4路由相同,是IPv4地址后跟数字,如1.1.1.11:0 |
使用EVPN实例的RD值 |
|
MPLS标签 |
前20位值为0,最后4位值为1 |
前20位值为3,最后4位值为1 |
|
ESI标签扩展团体中ESI label |
未配置peer srv6-label-compatible时,缺省情况下Per ES路由的MPLS Label字段的取值为ESI标签值; 配置peer srv6-label-compatible后,前20位值为3,最后4位值为1; |
前20位值为0,最后4位值为3 |





Per ES A-D Route
下面是一个Per ES A-D Route的例子。此路由中以太网标签ID值为0xFFFFFFFF。

另外,此路由也携带了一个ESI标签扩展团体,此扩展团体的格式如下:


最后,此路由的BGP Prefix-SID属性如下:


Per EVI A-D Route
下面是一个Per EVI A-D Route的例子:


MAC/IP通告路由(Type2)
一个MAC/IP通告路由类型的EVPN NLRI结构如下:

一个MAC/IP通告路由的例子如下:

在宣告静态MAC时,会携带一个MAC Mobility扩展团体,此扩展团体的格式如下:

Flags字节的低位被定义为“Sticky/static”标志位,可以被设置为1。此标志位值为1表示MAC地址是静态的,不能被删除。序列号(sequence number字段)用于确保PE在收到针对同一MAC地址的多个更新时,能够保留正确的MAC/IP通告路由。


集成多播以太标记路由(Type3)
注意:此类路由未携带ESI。
一个集成多播以太标记路由类型的EVPN NLRI结构如下:

一个集成多播以太标记路由的例子如下:

在SRv6中,此类路由会携带一个路径属性PMSI_TUNNEL,此路径属性的格式如下:

一个PMSI_TUNNEL属性的例子如下:

上图中,Tunnel Identifier字段长度为16字节,是一个IPv6地址,wireshark将其错误的解析成了IPv4地址。
以太网分段路由(Type4)
格式和字段说明
注意:此类路由不携带BGP Prefix-SID路径属性。
一个以太网分段路由类型的EVPN NLRI结构如下:

一个以太网分段路由的例子如下:

注意:按照RFC7432,此类路由中的RD必须是RFC4364中说明的Type 1的RD。值字段由一个PE上的IP地址(一般是loopback地址)后跟在PE上唯一的数字构成。(示例中的RD值为172.16.123.48:0)。
此类路由会携带一个ES-Import Route Target扩展团体,此团体的结构如下:

此扩展团体的值“ES-Import”从ESI的9位字节值中取高6字节。
下面是一个ES-Import Route Target扩展团体的例子:

路由作用和用法
首先,以太网分段路由(Type4)携带了下列信息:
- PE本地的ESI;
- PE的EVPN源地址;
- ES-Import Route Target扩展团体
- DF Election扩展团体
ES成员自动发现
下图中,CE1双归接入PE1和PE2,PE1和PE2互相发送以太网分段路由,双方发送的以太网分段路由中,携带了相同的ESI信息(根据ES-Import Route Target扩展团体匹配引入?),故PE1和PE2都将对端的EVPN源地址加入到本地的ES成员列表中。这样就完成了自动发现。

DF选举
RFC7432定义了简单的DF选举方式,基于VLAN粒度来进行选举。从以太网分段路由中提取出EVPN源地址,针对同一个ES,将所有的EVPN源地址按照数值大小组成一个升序的列表。然后使用简单的取模算法来选取DF。
RFC8584更新了DF选举算法,引入了DF Election扩展团体用来进行DF选举。
水平分割
SRv6 EVPN使用Per ES A-D Route来进行水平分割(配合集成多播以太标记路由)。在CE双归到多个PE的场景下,PE从CE收到BUM报文后,会发送一份给通过以太网分段路由(Type4)自动发现的其它ES成员一份。发送时使用的目的IP是将集成多播以太标记路由宣告的SID和Per ES A-D Route宣告的SID组合后的地址。
下列例子中,某个PE(地址为172.16.124.46)发送的集成多播以太网标记路由(Type3)宣告的SID是20AA:AAAA::101:0,如下图所示。

同一个路由器发送的Per ES A-D Route宣告的SID是::6,如下图所示:

这个PE在收到BUM报文后,会将此报文发送给同属于一个ES的其它PE,使用的目的地址是上面两个地址的组合,即20AA:AAAA::101:6,如下图所示。对端PE在收到此类报文后,会丢弃,不再转发给CE侧,从而避免了接入侧环路。

上图中,同一份报文,一份发给其它PE,一份发给远端。发给远端时,使用的地址是远端宣告的DT2M地址:


别名和备份路径
需要了解的是,在EVPN中,PE一般是通过数据面从CE学习MAC地址的。
在CE双归双活场景下,CE设备上到PE的两个接口会加入到同一个链路聚合组(一般使用Eth-trunk)。CE发送给PE的流量会被哈希到其中一条链路上。可能仅有PE1学习到CE侧的MAC地址,PE2学习不到。
这样会导致流量无法完全负载分担。为了解决这个问题,使用Per EVI A-D Route。在这种路由中,携带了ESI,远端PE在收到此类路由后,会认为通过PE2也可以到达PE1宣告的MAC地址。
在双归双活场景下,这个功能叫别名。
在双归单活场景下,这个功能叫备份路径。
PE1会将MAC/IP通告路由(Type2)也宣告给PE2,这样PE2虽然没有通过数据面学习到MAC,但可以根据这些信息进行MAC重定向,将收到的目的是这些MAC的流量从CE侧接口发送出去。
远端PE3在收到PE2发送的Per EVI A-D Route后,形成负载分担路径或备份路径。在将流量发给PE2时,使用的目的地址就是此路由携带的BGP Prefix-SID中指定的DT2U地址。此类路由一般和MAC/IP通告路由(Type2)一起被集成在单个UPDATE报文中发送。
RD类型举例
类型0
类型0的RD,格式是2+4。两个部分都是数字。

类型1
类型1的RD,格式是4+2。前一部分4字节包含一个IPv4地址。

类型2
类型2的RD,格式是4+2。两个部分都是数字。

End-of-RIB
这是一个UPDATE报文。根据RFC4724,针对IPv4单播地址族,End-of-RIB标记是最小长度的UPDATE消息(UPDATE消息的最小长度是23字节--19字节的定长头部+2字节的撤销路由长度字段+2字节的路径属性总长度字段(此时撤销路由长度字段和路径属性总长度字段的值均为0))。针对任何其它地址族,End-of-RIB标记是仅包含MP_UNREACH_NLRI属性,但没有要被撤销的路由的UPDATE消息(长度是固定的30字节)。


浙公网安备 33010602011771号