BGP EVPN报文解析

BGP EVPN报文解析

一、概述

在学习SRv6过程中,接触到大量BGP EVPN路由,常见的BGP EVPN路由如下表所示:

IMG_256

另外,每个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结构如下:

IMG_256

以太网自动发现路由包含两种子类型,分别是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。

IMG_256

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

IMG_256

IMG_256

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

 

Per EVI A-D Route

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

1673594248239

 

 

MAC/IP通告路由(Type2)

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

IMG_256

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

1673595052412

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

IMG_256

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

1673595474345

 

集成多播以太标记路由(Type3)

注意:此类路由未携带ESI。

一个集成多播以太标记路由类型的EVPN NLRI结构如下:

IMG_256

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

1673595310510

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

1673595980010

一个PMSI_TUNNEL属性的例子如下:

1673596023894

上图中,Tunnel Identifier字段长度为16字节,是一个IPv6地址,wireshark将其错误的解析成了IPv4地址。

 

以太网分段路由(Type4)

格式和字段说明

注意:此类路由不携带BGP Prefix-SID路径属性。

一个以太网分段路由类型的EVPN NLRI结构如下:

IMG_256

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

1673596350869

注意:按照RFC7432,此类路由中的RD必须是RFC4364中说明的Type 1的RD。值字段由一个PE上的IP地址(一般是loopback地址)后跟在PE上唯一的数字构成。(示例中的RD值为172.16.123.48:0)。

此类路由会携带一个ES-Import Route Target扩展团体,此团体的结构如下:

IMG_256

此扩展团体的值“ES-Import”从ESI的9位字节值中取高6字节。

下面是一个ES-Import Route Target扩展团体的例子:

1673605498428

 

 路由作用和用法

首先,以太网分段路由(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成员列表中。这样就完成了自动发现。

1674960839996

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字节)。

posted @ 2025-08-25 16:16  苍然满关中  阅读(72)  评论(0)    收藏  举报