二、Vxlan

1. 概念

VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。从用户的角度来看,接入网络的服务器就像是连接到了一个虚拟的二层交换机的不同端口上(可把蓝色虚框表示的数据中心VXLAN网络看成一个二层虚拟交换机),可以方便地通信。


2. Vxlan报文格式

VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段,提供多达16M租户的标识能力,远大于VLAN的4000;另一方面,VXLAN本质上在两台交换机之间构建了一条穿越数据中心基础IP网络的虚拟隧道,将数据中心网络虚拟成一个巨型“二层交换机”,满足虚拟机大范围动态迁移的需求。



如上图所示,VTEP对VM发送的原始以太帧(Original L2 Frame)进行了以下“包装”:

VXLAN Header
增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN网络中不同的租户。此外,还包含VXLAN Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特)。

UDP Header
VXLAN头和原始以太帧一起作为UDP的数据。UDP头中,目的端口号(VXLAN Port)固定为4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。

Outer IP Header
封装外层IP头。其中,源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。

Outer MAC Header
封装外层以太头。其中,源MAC地址(Src. MAC Addr.)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC Addr.)为到达目的VTEP的路径中下一跳设备的MAC地址。

3. VTEP和VNI

VXLAN在两台TOR交换机之间建立了一条隧道,将服务器发出的原始数据帧加以“包装”,好让原始报文可以在承载网络(比如IP网络)上传输。当到达目的服务器所连接的TOR交换机后,离开VXLAN隧道,并将原始数据帧恢复出来,继续转发给目的服务器。


3.1 VTEP

VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点)是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN对用户原始数据帧的封装和解封装均在VTEP上进行。

VTEP是VXLAN网络中绝对的主角,VTEP既可以是一台独立的网络设备,也可以是在服务器中的虚拟交换机。源服务器发出的原始数据帧,在VTEP上被封装成VXLAN格式的报文,并在IP网络中传递到另外一个VTEP上,并经过解封转还原出原始的数据帧,最后转发给目的服务器。

3.2 VNI

以太网数据帧中VLAN只占了12比特的空间,这使得VLAN的隔离能力在数据中心网络中力不从心。而VNI的出现,就是专门解决这个问题的。

VNI(VXLAN Network Identifier,VXLAN 网络标识符),VNI是一种类似于VLAN ID的用户标识,一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信。VXLAN报文封装时,给VNI分配了24比特的长度空间,使其可以支持海量租户的隔离。

另外,在分布式网关部署场景下,VNI还可分为二层VNI和三层VNI,它们的作用不同。

3.2.1 二层VNI

二层VNI是普通的VNI,以1:1方式映射到广播域BD,实现VXLAN报文同子网的转发。

3.2.2 三层VNI

每个租户VRF实例映射到网络中的唯一第3层VNI。此映射需要在网络中的所有VTEP上保持一致。所有VXLAN间的路由流量使用VXLAN报头中的第3层VNI封装,并为接收的VTEP提供VRF实例。接收的VTEP使用此VNI确定转发内部IP数据包时需要处于的VRF实例。此VNI为在数据平面中实施第3层分段提供基准。

VTEP 路由器 MAC 地址:每个 VTEP 均有唯一的系统 MAC 地址,其他 VTEP 可以将其用于 VNI 间的路
由。此 MAC 地址在此处称为路由器 MAC 地址。路由器 MAC 地址用作路由的 VXLAN 数据包的内部目标
MAC 地址。


如图所示,在将数据包从 VNI A 发送到 VNI B 时,入口 VTEP 将数据包路由到第 3 层 VNI。它会将内部目标MAC 地址改写为出口 VTEP 的路由器 MAC 地址,并将 VXLAN 报头中的第 3 层 VNI 编码。在出口 VTEP 接收封装的 VXLAN 数据包后,它首先通过删除 VXLAN 报头解封数据包。然后它查看内部数据包报头。由于内部数据包报头中的目标 MAC 地址是其自己的 MAC 地址,因此它执行第 3 层路由查找。VXLAN 报头中的第 3 层 VNI 提供执行此路由查找时所处的 VRF 实例。

3.3 数据包的转发

当 EVPN VTEP 为它从其本地终端主机接收的数据包执行转发查找和 VXLAN 封装时,它使用第 2 层 VNI 或 VXLAN报头中的第 3 层 VNI,具体取决于是需要桥接还是路由数据包。

3.3.1 使用二层VNI

如果原始数据包报头中的目标 MAC 地址不属于本地VTEP,则本地 VTEP 执行第 2 层查找并将数据包桥接到与源主机位于同一第 2 层 VNI 的目标终端主机。本地VTEP 在 VXLAN 报头中嵌入此 第 2 层 VNI。在这种情况下,源和目标主机位于同一第 2 层广播域。

3.3.2 使用三层VNI

如果目标 MAC地址属于本地 VTEP 交换机,换句话说,如果本地 VTEP 是源主机的 IP 网关,并且源主机和目标主机位于不同的IP 子网,则数据包将由本地 VTEP 进行路由。在这种情况下,它执行第 3 层路由查找。然后它使用 VXLAN 报头中的第 3 层 VNI 封装数据包,并将内部目标 MAC 地址改写为远程 VTEP 的路由器 MAC 地址。在接收封装的 VXLAN数据包后,远程 VTEP 会根据内部 IP 报头执行另一个路由查找,因为接收的数据包中的内部目标 MAC 地址属于远程 VTEP 本身。

4. BD域

VXLAN中的“同一大二层域”,就类似于传统网络中VLAN(虚拟局域网)的概念,叫做Bridge-Domain,简称BD。BD域用于桥接不同的二层网络,不同的BD是通过VNI来区分的,BD与VNI是1:1的映射关系。

bridge-domain 10   //表示创建一个“大二层广播域”BD,其编号为10
 vxlan vni 5000    //表示在BD 10下,指定与之关联的VNI为5000
#
<HUAWEI> display vxlan vni
Number of vxlan vni : 1 
VNI            BD-ID            State  
--------------------------------------- 
5000           10               up  

BD与VNI是绑定关系,将交换机上不同的二层接口划分到BD域下,就能确定报文要经过的VXLAN隧道。



如图所示,将不同的二层接口(Vlan)划分到不同的BD下,实现VM通过进入不同的Vxlan隧道。

interface 10GE1/0/1.1 mode l2   //创建二层子接口10GE1/0/1.1
 encapsulation dot1q vid 10   //只允许携带VLAN Tag 10的报文进入VXLAN隧道
 bridge-domain 10   //指定报文进入的是BD 10
#
interface 10GE1/0/1.2 mode l2   //创建二层子接口10GE1/0/1.2
 encapsulation untag   //只允许不携带VLAN Tag的报文进入VXLAN隧道
 bridge-domain 20   //指定报文进入的是BD 20
#

5. VXLAN隧道建立

手工配置

interface Nve1   //创建逻辑接口NVE 1
 source 1.1.1.1   //配置源VTEP的IP地址(推荐使用Loopback接口的IP地址)
 vni 5000 head-end peer-list 2.2.2.2   
 vni 5000 head-end peer-list 2.2.2.3   
#

<HUAWEI> display vxlan vni 5000 verbose
    BD ID                 : 10 
    State                  : up 
    NVE                    : 288
    Source Address      : 1.1.1.1
    Source IPv6 Address    : -
    UDP Port               : 4789 
    BUM Mode               : head-end
    Group Address          : -  
    Peer List            : 2.2.2.2 2.2.2.3  
    IPv6 Peer List         : -

自动方式建立VXLAN隧道
使用EVPN

6. EVPN-VXLAN

6.1 基本概念

最初的VXLAN方案(RFC7348)中没有定义控制平面,是手工配置VXLAN隧道,然后通过流量泛洪的方式进行主机地址的学习。这种方式实现上较为简单,但是会导致网络中存在很多泛洪流量、网络扩展起来困难。

在VXLAN中引入了EVPN作为VXLAN的控制平面,EVPN借用了MP-BGP的机制,在L2VPN地址族下定义了新的子地址族——EVPN地址族,在这个地址族下又新增了一种NLRI,即EVPN NLRI。EVPN NLRI定义了几种BGP EVPN路由类型,这些路由可以携带主机IP、MAC、VNI、VRF等信息。这样,当一个VTEP学习到下挂的主机的IP、MAC地址信息后,就可以通过MP-BGP路由将这些信息发送给其他的VTEP,从而在控制平面实现主机IP、MAC地址的学习,抑制了数据平面的泛洪。

采用EVPN作为VXLAN的控制平面具有以下优势:

  • 可实现VTEP自动发现、VXLAN隧道自动建立,从而降低网络部署、扩展的难度。
  • EVPN可以同时发布二层MAC信息和三层路由信息。
  • 可以减少网络中的泛洪流量。

6.2 BGP EVPN中的5种路由类型

路由类型 路由描述 RFC/Draft
Type1 Ethernet auto-discovery (AD) route,以太自动发现路由 RFC 7432
Type2 MAC/IP advertisement route,MAC/IP路由 RFC 7432
Type3 Inclusive multicast Ethernet tag route,Inclusive Multicast路由 RFC 7432
Type4 Ethernet segment route,以太网段路由 RFC 7432
Type3 IP prefix route,IP前缀路由 draft-ietf-bess-evpn-prefix-advertisement

Type2 路由
EVPN Type2路由,也就是MAC/IP路由,主要用于VTEP之间相互通告主机IP、MAC信息。

字段 说明
Route Distinguisher 该字段为EVPN实例下设置的RD(Route Distinguisher)值。作用类似于L3VPN的RD值,这里的RD是区分不同的EVPN实例。一个二层广播域BD就对应一个EVPN实例。
Ethernet Segment Identifier 该字段为当前设备与对端连接定义的唯一标识。
Ethernet Tag ID 该字段为当前设备上实际配置的VLAN ID。
MAC Address Length 该字段为此路由携带的主机MAC地址的长度。
MAC Address 该字段为此路由携带的主机MAC地址。
IP Address Length 该字段为此路由携带的主机IP地址的掩码长度。
IP Address 该字段为此路由携带的主机IP地址。
MPLS Label1 该字段为此路由携带的二层VNI,用于标识不同的BD。
MPLS Label2 该字段为此路由携带的三层VNI,用于标识不同的VRF。VXLAN网络中为了实现不同租户之间的隔离,需要通过不同的VRF(L3VPN)来隔离不同租户的路由表,从而将不同租户的路由存放在不同的私网路由表中,而三层VNI就是用来标识这些VRF的。
  • 主机MAC地址通告
    要实现同子网主机的二层互访,两端VTEP需要相互学习主机MAC。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机MAC。其中,MAC Address字段为主机MAC地址。

  • 主机ARP通告
    MAC/IP路由可以同时携带主机MAC地址+主机IP地址,因此该路由可以用来在网关设备之间传递主机ARP表项,实现主机ARP通告。其中,MAC Address字段为主机MAC地址,IP Address字段为主机IP地址。此时的MAC/IP路由也称为ARP类型路由

  • 主机IP路由通告
    在分布式网关场景中,要实现跨子网主机的三层互访,网关设备需要互相学习主机IP路由。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机IP路由。其中,IP Address字段为主机IP路由的目的地址,同时MPLS Label2字段必须携带三层VNI。此时的MAC/IP路由也称为IRB(Integrated Routing and Bridge)类型路由

  • 主机IPv6路由通告
    在分布式网关场景中,要实现跨子网IPv6主机的三层互访,网关设备需要互相学习主机IPv6路由。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机IPv6路由。其中,IP Address字段为主机IPv6路由的目的地址,同时MPLS Label2字段必须携带三层VNI。此时的MAC/IP路由也称为IRBv6类型路由。

ARP类型路由携带的有效信息有:主机MAC地址+主机IP地址+二层VNI;
IRB类型路由携带的有效信息有:主机MAC地址+主机IP地址+二层VNI+三层VNI。
因此,IRB类型路由包含着ARP类型路由,不仅可以用于主机IP路由通告,也能用于主机ARP通告。

Type3 路由
EVPN Type3路由主要用于在VTEP之间相互通告二层VNI、VTEP IP信息,以建立头端复制列表,即用于VTEP的自动发现和VXLAN隧道的动态建立:如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。

Type3路由的NLRI是由“前缀”和“PMSI”属性组成。其中VTEP IP信息体现在NLRI的Originating Router's IP Address字段中,二层VNI信息则体现在PMSI属性的MPLS Label中。

字段 说明
Route Distinguisher 该字段为EVPN实例下设置的RD(Route Distinguisher)值。
Ethernet Tag ID 该字段为当前设备上的VLAN ID。在此路由中为全0。
IP Address Length 该字段为此路由携带的本端VTEP IP地址的掩码长度。
Originating Router's IP Address 该字段为此路由携带的本端VTEP IP地址。
Flags 该字段为标志位,标识当前隧道是否需要叶子节点信息。在VXLAN场景中,该字段没有实际意义。
Tunnel Type 该字段为此路由携带的隧道类型。目前,在VXLAN场景中,支持的类型只有“6:Ingress Replication”,即头端复制,用于BUM报文转发。
MPLS Label 该字段为此路由携带的二层VNI。
Tunnel Identifier 该字段为此路由携带的隧道信息。目前,在VXLAN场景中,该字段也是本端VTEP IP地址。

Type5 路由
EVPN Type5路由又称IP前缀路由,主要用于传递网段路由。不同于Type2路由只传递32(IPv4)/128(IPv6)位的主机路由,Type5路由可传递0~32/0~128掩码长度的网段路由。

字段 说明
Route Distinguisher 该字段为EVPN实例下设置的RD(Route Distinguisher)值。
Ethernet Segment Identifier 该字段为当前设备与对端连接定义的唯一标识。
Ethernet Tag ID 该字段为当前设备上实际配置的VLAN ID。
IP Prefix Length 该字段为此路由携带的IP前缀掩码长度。
IP Prefix 该字段为此路由携带的IP前缀。
GW IP Address 该字段为默认网关地址。该字段在VXLAN场景中没有实际意义。
MPLS Label 该字段为此路由携带的三层VNI。

应用说明:
该类型路由的IP Prefix Length和IP Prefix字段既可以携带主机IP地址,也可以携带网段地址:

  • 当携带主机IP地址时,主要用于分布式网关场景中的主机/网段路由通告。
  • 当携带网段地址时,通过传递该类型路由,可以实现VXLAN网络中的主机访问外部网络。

6.3 EVPN中的ARP抑制

在为 VNI 启用 ARP 抑制后,其 VTEP 各保存已知 IP 主机的一个 ARP 抑制缓存表及其在 VNI 网段中的关联 MAC地址。当 VNI 中的一台终端主机为另一终端主机 IP 地址发送 ARP 请求时,其本地 VTEP 会截取ARP 请求并在其 ARP 抑制缓存表中检查经过 ARP 处理的 IP 地址。如果它找到匹配项,则本地 VTEP 会代表远程终端主机发送一个 ARP 响应。本地主机在 ARP 响应中学习远程主机的 MAC 地址。如果本地 VTEP 未在其 ARP 抑制表中包含经过 ARP 处理的 IP 地址,则它会使 ARP 请求涌入到 VNI 中的其他 VTEP。对于发送给网络中的静默主机的初始 ARP 请求,此 ARP 泛洪可能发生。网络中的 VTEP 看不到来自静默主机的任何流量,直到另一台主机为其 IP 地址发送 ARP 请求,并且它发回 ARP 响应。在本地 VTEP 学习静默主机的 MAC 和 IP 地址后,信息通过MP-BGP EVPN 控制平面分发给所有其他 VTEP。任何后续的 ARP 请求均不需要泛洪。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容