EVPN工作流程和报文
总结
EVPN当中常用到路由表项(按照出现的先后顺序排名):
关键信息 | 形成表项 | 作用 | |
---|---|---|---|
三类 | 实例的RD/RT/LABLE | BUM表 | BUM流量转发 |
四类 | ESI | ESI成员信息表 | 多活,DF选项时使用 |
一类 | ESI的LABLE | ESI成员信息表 | 环路避免,快速收敛,负载分担 |
二类 | MAC/IP 地址 | MAC-VRF表 | ARP抑制、主机迁移 |
VXLAN当中的VPN没有TYPE-1和TYPE-4的,为什么呢?
TYPE-1里面传的主要内容是ESI,ESI是防环的,而VXLAN在部署的CE和PE之间会采用M-LAG或堆叠这种技术,这种技术就能防环,所以用不到TYPE-1;TYPE-4是用来先DF,而M-LAG或堆叠也能实现这种效果,所以也用不到TYPE-4.
- EVPN工作流程概述:
- 配置实例的RD/RT/LABLE
- 配置MP-BGP,之后type-3将实例的RD/RT/LABLE,通告给所有的PE,形成BUM表;
- 绑定AC接口与VPN实例获得站点信息并分配ESI,通过type-4通告给所有PE,
- 形成ESI成员信息转发表
- ESI进行DF选举;
- PE会再给站点分配一个标签,通过type-1通告给所有的PE,同ESI下的PE学习后会修改;
- 最后的二类就比较简单了,当PE学到了MAC之后立马通过type-2进行通告
很多人在学习EVPN的时候会发现怎么会有两个标签呢?其实不是两个标签应该是三个标签;如果承载网络使用的MPLS,那最外层必须有一个MPLS标签,此外还有两个标签,其实一个标签是标签站点的,还有一个标签是用来标识实例的。
连接不同的站点的PE通信时往往会携带两个标签,最外层的标签是MPLS标签,内部的标签就是BUM当中为实例所分配的标签,BUM表当中的标签主要是为了区分实例。而连接同一个站点的PE通信时往往携带三个标签,还要再加一个ESI的标签,ESI的标签是为了区分站点的,让两个PE认识到自己连接了同样的站点,这样可以防止环路。
EVPN启动过程—控制平面
PS:控制平面基本上都是MP-BGP报文
第一步:RD和RT配置
- 给EVPN实例配置RD和RT
- 实例当然这也是通过VRF来对应实现的,只不过这里叫EVN实例;
- 由于我们是做二层VPN,这个VRF当中最重要的表是MAC地址表,这张表也叫MAC-VRF表。
第二步:创建MP-BGP
- 在各个PE上创建BGP进程,并指定对等体
-
开始发送3类路由信息了,发送给所有的对等体
-
3类的路由信息里面有RD,同时还有MP-BGP给实例分配的一个标签,这个标签其实就标识实例,其实就数据转发时的内层标识,与MPLS-VPN当中内层标识是一个意思。
-
其它的邻居收到之后就学习到了:“如果想去往这个实例,报文的内层标签是用这个”,其实这个学习到了会体现在一个表当中,这张表叫—BUM流量转发表,如下所示:
-
如果所有的PE上都有实例的话,最终的效果是这样,如下所示:
-
第三步:绑定AC接口到EVPN实例
- 这一步很好理解呀,每一个示例都要拥有一个物理接口来对应CE
-
完成后,每个PE都会通过type-4来通知其它的PE一个关键信息—ESI
-
收到ESI也会形成一个表格—ESI成员信息表,也就是是ESI用来标识站点,BUM用来标识实例。
-
ESI有了之后,接下来就晃DF的选举,就是PE1和PE2都收到报文,那么到底哪个PE将信息传给CE1呢?所以PE1和PE2之间要有一个选举。
- 基于设备,比IP,比小。
- 基于VALN:不同的VLAN使用不同的DF
-
ESI其实就是站点的标识,从同一个CE发出去的报文ESI是一样的,你看上图当中PE1和PE2都连接着CE1,而PE1给PE2通知的ESI,与PE2给PE1通知的ESI是一样的,这样PE1和PE2就能意识到它们两个连接了同一个站点。
接下来就是type-1的路由信息了,PE会给ESI一个标签:
注意,这个标签是用来标识站点的,前面那个标签是用来标识实例的。
而且这个标签只有PE2会学习,PE3和PE4不学习,因为PE3和PE4通过对比ESI发现PE1发送的带有标签的报文当中ESI不是我本地的,所以不学习,而PE2则会学习,如下所示:
最终收敛状态如下:
总结状态
假如说现在PE1已经学习到了MAC地址,接下来要进行第四步了
第四步:向对等体通告MAC地址
PE1会通过MP-BGP向对等体通告type-2的信息,里面主要就是MAC地址,这个MAC地址是通过MP-BGP通告给对等体,也就是说EVPN的MAC的通告地址是控制层面完成的,而不是在数据层面。
注意看,又出现一个标签,注意这个标识是用来标识这个MAC地址的,就是上图当中的301,其它的PE进行学习,注意PE3和PE4会进行学习并形成MAC地址表,而PE2是个特殊,PE2学完了之后会发现ESI是相同的,意识到自己与PE2连接是同一个站点,既然是这样,那就没有必要通过PE1到处,自己也能到达,所以它会自动把出接口修改成自己对于CE的出接口并且把标签去掉,如下所示:
PE2学习到MAC之后,它也会发送给所有的PE,PE1发现自己有了这条MAC就不会学习了,而PE3和PE4则会再学一条,尽管这一条与刚才那一条有是重复的,但是在PE3和PE4看来这并不是重复的,因为lable并不一样,这样在PE3和PE4看上去,有点像等价路由了,如下所示:
控制平面-报文
三类
TYPE3的路由信息与VXLAN的关系
如果是在VXLAN环境当中,当我们完成第一步和二步之后,也就是说现在MP-BGP的隧道已经起来了,而且所有PE本地的RD、RT、LABEL都已经分配好了,VXLAN会借助TYPE-3的路由信息,把本端的RD、RT、LABEL必给MP-BGP对等体,这时候,MP-BGP对等体之间就会再次建立隧道,这个隧道是建立在MP-BGP基础之上的,也就是—VXLAN隧道。
四类
一类
EVPN启动过程-转发平面-广播
第一步:ARP请求
第一步:CE1开始发送ARP报文了,CE1连接了两个PE,到底发给哪一个呢?全都发!我们下面就用PE1来举例子
-
PE1收到报文之后,会根据源IP地址进行学习, 这个地方的行为与VPLS是一样的,都是在数据层面进行的学习,形成MAC-VRF表,如下所示:
第二步:PE1泛洪
注意,第二步是在控制平面完全完成之后才进行的
-
PE1看到报文是一个广播报文,PE1会泛洪给所有的对等体,也就是P1会发给PE2、PE3、PE4,泛洪的时候会查询BUM表,因为BUM表里面有各个PE的VRF的内部标签,在发送的时候要携带这个内部标签的,外部标签有可能就是LDP形成的标签。
-
PE4因为一个NO-DF,而且看到PE1给的报文是一个广播报文,PE4会丢弃掉,PE3会正常学习到。PE1发给PE2的时候也有点特殊,除了刚才那二层标识之外,还会再打上一个ESI标签,所以是三层标签,如下所示:
PE2收到之后发现ESI与自己相同,PE2又是DF,所以PE2会收下,且不会再次广播 ,因为它已经知道了已经有PE学到了。
EVPN启动过程-转发平面-单播
第一步:CE2回复ARP
CE2回复ARP Reply,PE3会通过数据面学习CE2的MAC,PE4也有可能收到,因为是双活效果,我们假设发送到PE3
学习到了之后会通过MP-BGP通告给所有的PE,如下所示:
PE4会学习,再接着通告,PE3不学,PE1和PE2会学习,如下所示:
第二步:PE3查到表项
CE2的单播报文到达PE3,PE3已经查到表项,发现通过PE1和PE2都可以,一般也是都会发送,这也是双活的体现。
PE1或PE2就会收到,收到之后PE发现这个MAC对应的VRF,去掉标签之后,然后转给VRF,PE2收到之后也会这么做。