桓楠百科网

编程知识、经典语录与百科知识分享平台

以太网虚拟专用网——EVPN

EVPN( Ethernet Virtual Private Network,以太网虚拟专用网)是新一代全业务承载的 VPN 技术,它统一了各种 L2VPN、L3VPN 业务的控制平面,利用BGP 扩展协议来传递二层或三层可达信息,实现了转发平面和控制平面的分离。它有两件基本武器:ESI( Ethernet Segment Identifier,以太网段标识)和 EVPN 路由

ES & ESI

如图 1 所示,当一个 CE 通过一组以太网链路连接到一个或多个 PE 时,这一组链路就称为一个以太网段( Ethernet Segment,ES);全局唯一标识一个 ES 的ID,称作 ESI。

EVPN 路由

BGP 在原有协议的基础上进行了扩展,为 EVPN 定义了新的地址族:BGP-EVPN 地址族,在该地址族下定义了新的 EVPN NLRI( Network Layer Reachability Information,网络层可达信息),其中包含下表所示的 5 种常用的 EVPN 路由类型

表1 EVPN 路由类型

类型

路由名称

主要功能

Type1

以太自动发现路由( Ethernet Auto-Discovery Route, A-D Route),分为两种子类型:

Per ES A-D Route

Per EVI( EVPN Instance) A-D Route

水平分割、故障快速收敛、别名、指导二层流量转发( EVPN VPWS)

Type2

MAC/IP 通告路由( MAC/IP Advertisement Route,MAC/IP Route)

MAC 通告、 ARP 通告、 ND( Neighbor Discovery,邻居发现)通告、 IRB 通告

Type3

集成多播以太标记路由( Inclusive Multicast Ethernet Tag Route, IMET Route)

邻居自动发现、指导 BUM( Broadcast, Unknown unicast and Multicast,广播&未知单播&组播)流量转发

Type4

以太网段路由( Ethernet Segment Route, ES Route)

ES 成员自动发现、 DF( Designated Forwarder,指定转发者)选举

Type5

IP 前缀路由( IP Prefix Route, Prefix Route)

IP 主机路由通告、 IP 网段路由通告

相对于传统VPN它具有以下优点:

  1. 具有网络邻居自发现功能
  2. 支持CE多活模式接入
  3. 减少了网络间的广播报文
  4. 可以很好地支持双活链路的负载均衡
  5. 收敛速度快
  6. 无需PE全连接
  7. 支持的各类业务场景

邻居自动发现

EVPN通过IMET Route(Type3 路由)实现邻居自动发现,如图2所示,各 PE 启动 EVPN 之后会互相发布 IMET Route,其携带的关键信息包括 EVPN 实例的 RD、PE 的源地址和隧道转发用的标签值。PE 收完该路由之后,感知到了所有 EVPN 邻居,并在本地生成基于某个 EVPN 实例(标识业务)的邻居列表,此邻居列表主要作用是指导 BUM 流量的转发,因此它被称为 BUM 流量转发表。假设 PE1 收到一份BUM 流量时,它就照着 BUM 流量转发表,给每个邻居都发一份。

多活模式接入CE

如图3所示,CE1 双归接入 PE1 和 PE2,首先 PE1 和 PE2 互相发送 ES Route(Type4 路由),携带的关键信息PE 本地的 ESI 和 PE 的EVPN 源地址,双方收到路由后发现ESI相同,属于相同的 ES,于是各自把对方的 EVPN 源地址加入到本地的 ES 成员列表中;然后, PE1 和 PE2 互相发送 Per ES A-D Route(Type1 路由),携带的关键信息 PE 本地的 ESI 和 PE 为 ESI 分配的标签值,双方收到路由后还是先对一下ESI,对上了就把路由携带的标签值贴到对应的 ES 成员身上。

水平分割

如图4所示, CE1 接入PE1 和 PE2 的链路都活跃。假设 CE1 发送了一个广播报文, PE1 收到后在广播之前 PE1 要做一件事:检查一下广播的对象是否在本地的 ES 成员列表中,如果在ES 成员列表中,则发往广播报文时多加一个 ESI 标签值。PE2收到该广播报文后,发现了自己的 ESI 标签值,然后果断丢弃了这个报文。这就是传说中的水平分割,轻松击破了接入侧环路。

DF选举

如图5所示,在多活模式下,当 PE1 和 PE2 同时收到一份 BUM 流量时,它们会都发给 CE1,从而导致 CE1 重复收到相同的流量。重复传输的 BUM 流量不仅白白占用 PE 与 CE 间的链路带宽还会造成不良体验,如追剧屏幕老是重影,听歌时总是有回音,玩游戏时打掉一只怪兽却发现它又冲过来。

解决思路是在PE间进行选举,获胜者被称为 DF,只允许它向 CE1 转发 BUM 流量;落败者作为 Non-DF,不能转发 BUM。

如图6所示, PE1 和 PE2 交互完 ES Route 之后,会各自形成 ES 成员列表,DF 选举就基于这个表进行,有两种方式:

  1. 基于接口选举。首先淘汰掉接口状态为 Down 的 PE,然后在剩下PE中选举在 ES 成员列表里的 EVPN 源地址最小为 DF。
  2. 基于 VLAN 选举。首先淘汰掉接口状态为 Down 的 PE;然后在剩下PE中根据公式 V mod N = i 来计算,其中 V 是 VLAN ID, N 是连接同一个 CE 的 PE 数量, i 就是 ES 成员列表中被选为 DF 的 PE 序号。如图 6 中,假设有两个 VLAN,对于 VLAN10 的业务来说, 10 mod 2 = 0,因此序号为 0 的 PE1就是 DF;对于 VLAN11 的业务来说, 11 mod 2 = 1,因此序号为 1 的 PE2 就是DF。这种方式的好处是不同 VLAN 的业务可以有自己的 DF,便于更精细的控制。

有效减少广播

EVPN 通过控制平面学习MAC地址,尽量减少利用广播来学习 MAC 地址。承担这一光荣任务的是 MAC/IP Route(Type2 路由),它赖以取胜的“两板斧”是 MAC 通告和 ARP 通告。

MAC 通告路由

此形态的MAC/IP Route 携带 MAC 地址、 ESI 和二层转发标签。如图 7所示,假设CE1 双归接入 PE1 和 PE2。PE1 和 PE2通过转发平面学到的 CE1 的 MAC 地址 mac1,然后 PE1 和 PE2 分别生成 MAC/IP Route,向所有 EVPN 邻居通告 mac1。PE1 和 PE2收到彼此发来的MAC/IP Route,发现是 ESI相同,为了避免将来指导报文走弯路,于是仍优选本地学到的 mac1 路由。PE3 和 PE4,作为远端 PE学到了 mac1的不同下一跳的两条路由(为后续负载分担打下基础),此时它们无需通过广播就学到了 mac1,如果再收到发往 mac1 的报文,它们也可以直接发送单播报文至mac1,不用再当成未知单播报文进行广播了,显著减少了网络侧的广播报文。

ARP 通告路由

此形态的 MAC/IP Route 携带 MAC 地址、 IP 地址、 ESI 和二层转发标签。如图 8 所示, PE1 和 PE2 学习到 CE1 的 MAC 地址 mac1和 IP 地址 ip1, PE1 和 PE2 分别生成 MAC/IP Route,向所有EVPN 邻居通告 ARP 信息。

PE1 和 PE2都基于本地的 ARP 信息生成 ARP Snooping表项,用于 ARP 代答。PE3 和 PE4收到ARP信息后,由于 ARP“喜新厌旧”的性格,它们会基于较新的 ARP 信息来生成一条 ARP Snooping 表项。假设之后 PE3 或 PE4 再收到 ARP 请求报文,想获取 ip1 对应的 MAC 地址, PE3 或 PE4 会先检查一下本地的ARP Snooping 表项,回复ARP请求。这样一来就避免了 PE3 和 PE4 继续广播 ARP 请求,从而进一步减少了网络侧的广播报文。

MAC/IP Route 还有一种形态:IRB 通告路由,携带 MAC 地址、IP 地址、ESI、二层转发标签和三层转发标签,在后面会介绍。

实现负载均衡

如图 9 所示,假设有 4 条不同的单播业务流量从 CE2 发往 CE1,它们的转发过程如下:

  1. 流量在 CE2 上通过双活链路进行负载分担,分别发送到 PE3 和 PE4 上。
  2. 在 PE3 和 PE4 上已经有两条目的 MAC 地址都是 mac1 且下一跳不同的MAC 路由,因此流量会通过不同的路径发往 PE1 和 PE2。
  3. PE1 和 PE2 收到流量后,分别根据本地的 MAC 地址表转发给 CE1。

由于某种原因,如图10所示, PE2 没学到CE1的mac1。此时只有PE1 生成 MAC/IP Route 向 PE3 和 PE4 通告 mac1,这样下去 PE3 和 PE4 上单播流量的负载分担就出问题了。

EVPN通过“别名”的方法解决此问题,如图 11 所示:

  1. PE1 生成 MAC/IP Route,向 PE3 和 PE4 通告 mac1。
  2. PE2 向 PE3 和 PE4 发布 Per EVI A-D Route,携带的关键信息有 ESI、单播转发的标签值。
  3. PE3 和 PE4 虽然没有收到 PE2 发来的 MAC/IP Route,但是它们发现 PE1 发来的MAC/IP Route 携带的 ESI,与 PE2 的 ESI 相同,于是它们认定 PE2 也能到达mac1,并据此更新 MAC 地址表。
  4. PE3 和 PE4 再向 mac1 发送单播流量时,仍然会通过 PE1 和 PE2 进行负载分担。

虽然 PE3 和 PE4 向 PE2 分担到达 mac1 的单播流量,但是 PE2 并没有学到 mac1,那流量怎么转发?

EVPN 使用“ MAC 重定向”的方式解决此问题:PE1 生成MAC/IP Route 之后也会向 PE2 通告 mac1, PE2 发现这个路由携带的 ESI 自己也有,于是将 mac1 的出接口重定向为自己本地连接 CE1 的接口,这样再收到发往 mac1 的流量 PE2 就直接通过本地接口转发了。

加快网络收敛速度

如图 12 所示,假设 PE1 与 CE1 之间的链路发生了故障,传统 L2VPN 处理时:PE1 感知到故障后,发送 MAC 路由撤销消息给远端的 PE3;收到消息的PE3 删除对应的 MAC 表项。这里面有两个问题:

  1. PE1 会针对所有不再可达的 MAC 地址逐一发送撤销消息,如果 MAC 地址数量非常大,撤销消息会很多,既效率低下又浪费带宽。
  2. PE3 删了 MAC 表项之后,就没有到达这些 MAC 地址了,而传统 L2VPN 不能通过控制平面提前学习 MAC,PE3 只能通过广播,并在数据转发过程中慢慢学习那些删掉的 MAC 地址。

EVPN的故障收敛如图 13 所示,假设 PE1与 CE1 之间的链路发生了故障, PE1 感知到故障后,向 PE3 发布 Per ES A-D Route(Type1 路由),通知 PE3撤销所有下一跳是 PE1 的、标识 esi1 的MAC 路由。因为 PE3 上已存在通过 MAC/IP Route 提前学到的其他路径,因此业务流量可以自动切换到下一跳是 PE2 的路径上,无需重新学习 MAC 地址,更不需要广播。

避免全连接

EVPN 借助了 BGP 的路由反射器( Route Reflector, RR)机制,如图 14 所示,在引入了 RR 之后,各个 PE 只需要和 RR 建立邻居关系即可,然后由 RR 将大家的 EVPN 路由反射给彼此。

  1. 显著提升了 EVPN 网络的可扩展性:后续扩充 PE只需和 RR 之间建立 EVPN 邻居关系就行了。
  2. 大大减少了配置工作量。
  3. 由于 PE 上只需维持与 RR 的邻居关系,有效减轻了 PE 设备的负担。

统一承载各类业务

在 EVPN 产生之前,二层业务有 VPWS、VPLS 两种主要的L2VPN 协议,信令协议使用 LDP 或 BGP;三层业务主要是 MPLS L3VPN 协议,信令协议使用 BGP。如图15所示,在 EVPN 横空出世之后,业务层面的协议只有一个EVPN 就够了,信令协议也都统一为 BGP。简化网络协议带来的直接好处是业务部署更方便了,当网络发生故障时,定位业务层面的问题就直接排查EVPN 就可以了。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言