一、VXLAN概述
1、VXLAN概述
VXLAN(Virtual eXtensible Local Area Network)技术由VMware、Cisco、Arista三家共同提出和开发的覆盖层协议,提交至IETF(RFC 7348)后被其他厂商广泛拥护,其中包括Huawei、Broadcom、Citrix、Dell、OpenBSD、RedHat、Juniper。VXLAN用以解决二层域扩展的问题,二层网络域的容量从4096扩展至1600万。VXLAN通过将原始二层帧封装到UDP(即MAC-in-UDP),并经过IP路由传输后实现二层网络扩展的技术。你可以理解其本质是一种隧道技术,在IP网络之上构建了隧道实现二层互通;也可以理解其本质是一种网络叠加技术,可以将多个隧道合并看作为一个更高层次的网络。
VXLAN所带来的优势前所未有,包括:
突破VLAN数量限制:传统VLAN技术由于首部VLAN id仅定义了12bits,最多支持VLAN数量只有4096个(部分系统预留,因此实际能够部署的VLAN会少于4096个),虚拟化和云计算技术需要更多VLAN,因此无法满足日益增长的需求。VXLAN报文首部VNI定义了24bits,可以支持约1600万个广播域。
解决STP带宽浪费和性能缺陷:生成树协议由于诞生在早期网络中,因此它的各项设计参数和表现特性已经无法满足现代数据中心的要求,这些要求包括但不限于带宽浪费、收敛速度慢。
虚拟机迁移、多租户技术得以实现。
2、VXLAN术语
1)EP
Endpoint/Workload:即端点/工作负载,指接入到网络中的具有计算和处理功能的裸金属、虚拟机、容器等。后续内容将以EP作为Endpoint或Workload全称。
2)VTEP
VTEP(VXLAN Tunnel Endpoints):即VXLAN隧道端点,是指VXLAN网络的转发/边缘设备。VTEP负责VXLAN隧道的建立和终结以及封装和解封装VXLAN数据。物理交换机或虚拟交换机均可以作为VTEP。VTEP通常具备两种类型的接口:
Fabric Interface:矩阵接口是指用于构建底层IP网络互联互通的接口,该接口会进行VXLAN数据包的交互。
Access Interface:接入接口是指用于关联BD和VNI的接口,通过将传统二层网络的数据和VXLAN网段进行映射。
3)BUM
BUM:即广播、未知单播、组播(Broadcast、Unknownunicast、Multicast)三种多播流量的简称。传统交换机针对BUM流量往往采用泛洪这种简单粗暴的处理方式,而VXLAN网络则利用更高效的组播网络传递BUM流量,也可以通过封装BUM到单播数据包中发送给各个VTEP(这种行为也叫单播复制/头端复制)。
4)VNI
VNI(VXLAN Network Identifier):即VXLAN网络标识符,一个VNI唯一标识一个BD。VNI位于VXLAN首部中,定义了一个24bits的空间用于标识1600万个不同的VNI,换种说法就是用来识别1600万个不同的二层网络域,这一特性使得VXLAN能够支持海量租户以及租户间的网络隔离。BD对应到VNI后,VTEP在进行VXLAN封装时会根据配置进行封装VNI。
L2 VNI(Network VNI):实现VXLAN中同子网的互通,即同BD之间互通,不同BD之间无法互通。L2 VNI和BD 1:1映射。
L3 VNI(VRF VNI):实现VXLAN中不同子网的互通以及VXLAN子网同Non-VXLAN子网的互通。L3 VNI和VRF 1:1映射,一个L3 VNI可以对应到多个L2 VNI,通常用于BGP EVPN分布式网关场景。
5)BD
BD(Bridge Domain):即桥接域,是一种工作在二层的多租户服务。一个BD就是一个广播域/二层域,表示某一个特定的二层网络范围。传统以太网通过封装802.1Q(作用字段为VID)来区分VLAN,通过VLAN隔离不同的二层网络/租户,同理VXLAN通过封装VXLAN首部(作用字段为VNI)来区分不同的BD。802.1Q和VNI的本质功能类似,但是由于字段长度的不同,导致两者支持识别的二层域数量有所不同。同时VNI在VXLAN中也会被用于区分服务,所谓区分服务是指区分路由和桥接服务,当VNI封装为L2 VNI则表示桥接流量,当VNI被封装为L3 VNI则表示路由流量。
VNI所在的作用范围位于VXLAN或者说是矩阵,而802.1Q所在的作用范围是传统以太网。通常部署会采用网络覆盖层,所谓网络覆盖层即网络交换机配置为VTEP,相反主机覆盖层则是裸金属配置为VTEP,通俗的说就是将VXLAN扩展至了裸金属。采用网络覆盖层的VXLAN网络以网络交换机为VXLAN网络终结点,即VTEP上联VXLAN,下联Ethernet。传统以太网环境中,VID是全局有效的,区分了4096个二层域。在VXLAN环境中,VLAN只具有本地意义,即VLAN只在某一台VTEP作用。二层域的全局标识符被VNI取代,但是VNI只能作用在VXLAN中,无法对Ethernet链路起到隔离作用,因此需要一种机制来实现802.1Q和VNI的映射。通过这种映射可以将两种不同数据传输协议定义的二层网络命名空间进行桥接。
前面提到VXLAN环境中的二层多租户是由VNI所展现,VNI只能作用于VXLAN矩阵,因此需要进行二层域到VNI的映射操作。映射操作分为两种操作模式:
以VLAN为导向的模式
以BD为导向的模式
以VLAN为导向的模式
以VLAN为导向的模式是指VTEP会以VLAN作为桥接域,通过VID-to-VNI进行1:1映射,从而提供端到端的二层服务模式。按照类似传统以太网中的端到端VLAN的配置方式,需要依次创建VLAN、SVI(可选,如果需要三层服务)以及VID-to-VNI的映射方式,随后VTEP会根据配置对VID-to-VNI进行映射。VID-to-VNI的映射方式分为两种:
Per-Switch VID-to-VNI
Per-Port VID-to-VNI
Per-Switch VID-to-VNI:即每交换机VID-to-VNI映射,将VLAN的命名空间扩展至整个矩阵,但是这种方式只能创建4000个VID-to-VNI映射。根据综合考量以及高级设计,整个VXLAN网络中的VNI数量不超过4000可以采用这种方式。举个例子,VTEP1上配置了VLAN 10、20、30,分别映射到VXLAN L2VNI 30010、30020、30030;VTEP2上配置了VLAN 10、30,分别映射到VXLAN L2VNI 30010、30030;VTEP3上配置了VLAN 10、20,分别映射到VXLAN L2VNI 30010、30020。所有配置了VLAN 10的VTEP上,该VLAN都被映射到了L2 VNI 30010,同理其他VID类似。当规划不超过4000个时,建议将每台交换机上的VID-to-VNI的映射设成一致。
根据综合考量以及高级设计,整个VXLAN网络中的VNI数量超过交换机所能承载的最大VLAN时也可以采用这种方式,这是根据VLAN命名空间本地有效所决定的,但是会受到限制。超过VTEP交换机所能承载的最大VLAN时,VID仍然可以复用,但是复用的xVID不可以在已经创建了xVID-to-xVNI的VTEP上重复创建,因为这不符合VID-to-VNI的1:1映射原则。复用的xVID仍然可以在没有创建xVID-to-xVNI的VTEP上创建,但是其VNI必须唯一。举个例子,VTEP1上配置了VLAN 10、20、30,分别映射到VXLAN L2VNI 30010、30020、30030;VTEP2上配置了VLAN 10、30,分别映射到VXLAN L2VNI 30010、30030;VTEP3上配置了VLAN 10、20,分别映射到VXLAN L2VNI 30010、30020。现在需要重复利用VID 30,但是其子网和VTEP1和VTEP2上的子网并不相同,需要将其映射到新的L2 VNI上,但是VID 30并不能配置在VTEP1和VTEP2上,因为已经有了VID 30并映射到了L2VNI 30030中。因此只能在VTEP3上配置VID 30并将其映射到L2VNI 31030,如果此时VTEP2上有该VID 30所规划的子网怎么办?在VTEP2上创建VID 20并将其映射至L2VNI 31030这样就能使得相同子网中的主机相互通信了。通过这个案例可以更加深入的了解VID的命名空间被限制在了VTEP上,只具有本地意义,VNI才是二层域的全局标识符。
Per-Port VID-to-VNI:即每端口VID-to-VNI映射,将VID的命名空间从以交换机为单位变为以端口为单位,将端口和VLAN组合映射成一个L2 VNI。通过这种方式,可以将同一个VLAN映射成不同的L2 VNI,大幅提升灵活性。举个例子,VTEP上配置了VLAN 10、20,分别映射到VXLAN L2VNI 30010、30020,E1/9配置了将802.1Q为100的数据重新封装为802.1Q为10,并将其映射为L2VNI 30010;E1/10配置了将802.1Q为100的数据重新封装为802.1Q为20,并将其映射为L2VNI 30020。通过每端口VID-to-VNI映射的方式也可以实现重复利用VID,每台交换机能达到的映射可以到4096*48=196608个,而Per-Switch VID-to-VNI的可用映射数仅有4096个。
Per-Switch VID-to-VNI以及Per-Port VID-to-VNI两种映射方式配置有所差别。
以BD为导向的模式
以BD为导向的模式是指VTEP会以BD作为桥接域,通过BD-to-VNI进行1:1映射,从而提供端到端的二层服务模式。突破了以VLAN的形式分配也就突破了每个VTEP最多只能有4000组VNI映射的限制,理论情况下VTEP上的桥接域数量往往限制在16000~32000,即使有三层服务实例,也不会基于SVI,而是基于BDI。
以BD为导向的模式配置步骤:
创建BD和VNI:创建本地标识符和全局标识符;
关联BD和VNI:BD和VNI的映射关系仍然是1:1;
创建封装配置文件(encapsulation profile):线路VLAN映射至VNI,实现Per-Port VID-to-VNI;
LAN接口创建虚拟服务实例(VSI):实现多封装网关;
VSI调用封装配置文件。
步骤一:创建BD和VNI以及关联。
vni 10010
bridge-domain 10
member vni 10010
步骤二:创建封装配置文件。
encapsulation profile vni from10to10010
dot1q 10 vni 10010
步骤三:LAN接口创建VSI以及调用封装配置文件。
interface Ethernet 1/8
no switchport
service instance 1 vni
encapsulation profile from10to10010 default
6)Flood&Learn
Flood&Learn:泛洪学习也被称为数据驱动式学习,是一种基于数据包交互生成控制转发表项的方式。传统交换机本地学习源MAC的形成二层转发表项就是一种数据驱动式学习。
二、VXLAN帧格式
VXLAN Header数据的封装和解封装操作都是由VTEP来执行。VTEP角色可以是虚拟交换机也可以是物理交换机担任,考虑到性能要素,建议物理交换机担任。VXLAN Header中的VNI长度为24bits,能够标识1600万个VXLAN网段,该特性满足了网络多租户的功能。VTEP将原始数据包依次进行VXLAN封装,即加上VXLAN Header和UDP首部,在此基础上继续封装Underlay所需的IP首部和MAC首部。Underlay的IP首部中封装的是源IP是本地VTEP NVE地址,目的IP是远端VTEP NVE地址(因此Underlay网络中的VTEP NVE地址需要被发布,VTEP之间的NVE地址需要互通)。Underlay的UDP首部中目的端口为VXLAN应用程序的4789端口,接收方收到后解封装发现是VXLAN封装的数据包会直接交给VXLAN应用程序处理二次解封装,二次解封装后的数据就是原始数据帧。VTEP则根据VXLAN中的VNI和原始数据帧中的D-VM-MAC进行本地数据帧转发。
VXLAN数据封装格式分为五个部分,分别是Outer Ethernet Header(14B)、Outer IP Header(20B)、Outer UDP Header(8B)、VXLAN Header(8B)、Original Frame、CRC(4B)。
以下是五个部分的详细内容:
Outer Ethernet Header:Underlay L2网络通信封装
Destination MAC:下一跳IP对应的MAC
Source MAC:自身出接口MAC
Outer IP Header:Underlay IP网络通信封装
Destination IP:远端VTEP地址(单播)/组播地址(组播)
Source IP:本地VTEP地址
Protocol:0x11,表示UDP
Outer UDP Header:源端口由VTEP提供,目的端口则为4789。
Destination Port:4789;IANA为VXLAN分配了一个著名端口。
Source Port:通常VTEP会使用动态端口范围[49152,65535]
UDP Checksum:UDP数据校验和
VXLAN Header:
Flags(8bits):I位必须置1,表示VNI有效。其他7位为保留字段,传输时必须置 0,接收时忽略。
VXLAN Segment ID/VXLAN Network Identifier,VNI(24bits):用于指定通信VM所在的单个VXLAN网络,默认不同的VXLAN网络VM无法通信。根据Original Frame中的802.1Q信息进行映射。
Original Frame:原始数据帧
Outer Ethernet Header和Outer IP Header是VXLAN数据被Underlay转发的关键首部。Underlay主要构建了VTEP之间网络层可达。Outer IP Header的Destination IP填写的是远端VTEP地址/组播地址,Source IP填写的是本地VTEP地址。VTEP地址是标识唯一的VTEP,而这个参数就需要NVE去实现。Outer Ethernet Header中的Destination MAC是根据下一跳IP所解析的对应的MAC,Source MAC则是填写VTEP自身出接口的MAC。
Outer UDP Header和VXLAN Header则是VXLAN数据被本地和远端VTEP识别转发的关键首部。从VXLAN数据转发角度来看,本地VTEP始发前会对原始数据帧进行识别(判断是否需要进行VXLAN封装)、本地封装VXLAN Header、继续封装UDP Header。UDP Header其实目的是为了远端VTEP收取后判断是否是VXLAN数据,如果是则交由VXLAN应用进程处理;VXLAN Header则是让远端VTEP了解如何解封装和转发VXLAN数据,例如发现VNI的数值为10010,本地进行的配置VNI 10010对应VLAN tag是10,则会解封装VXLAN数据裸露Original Frame,并在Original Frame中的802.1q字段中添加VLAN tag=10的内容,随后交换机执行本地转发。
三、VXLAN数据转发
数据驱动式学习是数据平面典型的表项学习途径,而VXLAN就是一种数据平面传输协议。VTEP作为VXLAN的主要组成部分,承担着数据驱动式学习的职责。VTEP通过Flood&Learn学习二层域中的主机信息的方式和传统VLAN环境中交换机学习二层域中的主机信息的方式是类似的。传统VLAN环境中的交换机主要学习来自数据包中的源MAC地址以及其关联的接口和VLAN,最终形成的CAM表作为后续的单播流量转发依据,如果CAM表中没有找到对应表项,则将其作为BUM流量泛洪处理(会执行源端口过滤)。
VXLAN环境中的VTEP执行数据包的学习和转发受到L2 VNI的限制。L2 VNI可以全局标识二层网络,因此VXLAN中的表项需要做出一些修改。VTEP学习本地EP发送过来的数据包和远端VTEP发送过来的数据包,本地学习和传统VLAN环境类似,远端学习需要将远端VTEP的NVE地址加入,因为后续VXLAN单播流量转发需要该信息。因此VTEP中的二层转发表项的主要内容有MAC、VLAN/L2 VNI、Ports。
根据VTEP中的二层转发表项执行单播流量转发:
查询数据帧DMAC表项,Ports为本地接口则判断为本地二层转发。
查询数据帧DMAC表项,Ports为NVE接口则判断为VXLAN封装后二层转发。
1、相同子网内通信
EP之间的单播通信的前提就是依赖多播流量通信。当S-EP(即Source Endpoint)不知道D-EP(即Destination Endpoint)的MAC地址时,就需要运行ARP进程来执行ARP查询,ARP查询时会发送ARP请求,这个ARP请求的目的MAC就是广播MAC,这就是一个多播流量。正常的二层网络中,交换机会针对该流量进行广播域内泛洪。在VXLAN网络中,处理多播流量有两种方式:Underlay构建组播网络或者VTEP单播复制。
Underlay构建组播网络:即Underlay配置组播网络;VXLAN中的部分VTEP配置相同的VNI,通过配置每一个VNI都和一个组播组建立映射,以达到不同VTEP,同一个VNI下的多播流量能够通信。只要某个VTEP上的VNI下关联了组播组,对于Underlay来说就表示该VTEP加入了特定组播组,那么就表示该VTEP配置特定的二层域。当多播流量被某一个VTEP发送到组播组地址后,有相关感兴趣的VTEP就会收到该数据包,从而实现组播流量转发。
入站VTEP单播复制:在Underlay因为某种原因未配置组播网络的情况下,VXLAN仍然能够处理多播流量,即仍然能够将多播流量传递到配置了相同VNI的不同VTEP上。VXLAN提供入站复制(ingress replication)/头端复制(head-end replication)/单播复制功能,单播复制是指将多播流量封装成单播流量直接发送给VTEP对等体,这些VTEP对等体需要手动配置。例如源VTEP配置了4台目的VTEP,那么转发BUM流量时,就会本地先复制四份BUM流量,并封装上不同的外层IP头部后转发到Fabric中。在仅配置VXLAN的情况下,头端复制的方式使得配置和维护需要花费大量的人力成本,因此如果没有引入控制协议的场景下不建议采用该方式。
当Underlay能够处理底层多播流量通信后,VTEP就能学习到源EP和目的EP的主机信息或转发依据,从而形成转发表项,EP之间的单播流量通信得以开展。
头端复制
Server-1和Server-2处于相同子网10.0.0.0/24,所属VLAN 10,VLAN 10映射到L2 VNI 10010,以下是通信过程:
Server-1查询本地ARP表项,发现没有有关10.0.0.2的MAC地址,启动ARP进程发送ARP请求(广播报文)
VTEP1收到该ARP请求后首先将其S-MAC、接口、VLAN关联并形成二层转发表项;随后判断其D-MAC为广播MAC地址,执行BUM流量泛洪转发,泛洪转发包含了本地所属VLAN 10的所有接口(除E1/1源接口)以及VXLAN封装泛洪。VXLAN泛洪数据包内容在Original Frame的基础上追加VXLAN Header和Outer Header。VXLAN Header中UDP源端口任意,这里是50000,目的端口为4789,以及唯一标识桥接域的VNID 10010(因为这是从VID 10中收到的报文)。Outer Header中包含出接口源MAC,目的MAC为下一跳MAC,源IP为VTEP1的NVE地址,目的IP为VTEP2的NVE地址。VXLAN会根据头端复制列表中的对等体数量封装复制多个数据包(目的IP填写对等体NVE地址),完成复制后发送到Underlay,由Underlay高速转发。
每经过一跳,Underlay只会修改覆盖层源目MAC地址,最终将数据包送到目标VTEP,这里是VTEP2。
VTEP2收到数据包后,检查D-IP为自身NVE地址。首先将数据包中的S-MAC、接口、VLAN(VNID映射至VID)关联并形成二层转发表项;随后将VXLAN首部进行解封装,根据VXLAN首部中的VNID将10010桥接至VLAN 10中泛洪。
数据包抵达目标主机,目标主机随后回复ARP响应。
Note:VTEP2的NVE地址需要手动配置,因为本环境Underlay没有部署组播网络。
Server-2需要给Server-1以ARP响应报文,以下是通信过程:
Server-2将Server-1的IP和MAC记录到ARP表中,并回复ARP响应报文(单播报文)。
VTEP2收到该ARP响应后首先将其S-MAC、接口、VLAN关联并形成二层转发表项;随后判断其D-MAC为已知单播MAC地址,查询发现属于远端VTEP1下的主机,需要执行VXLAN封装。VXLAN单播数据包内容会在Original Frame的基础上追加VXLAN Header和Outer Header。VXLAN Header中UDP源端口任意,这里是55555,目的端口为4789以及唯一标识桥接域的VNID 10010(因为这是从VID 10中收到的报文)。Outer Header中包含出接口源MAC,目的MAC为下一跳MAC,源IP为VTEP2的NVE地址,目的IP为VTEP1的NVE地址。VXLAN封装完成后发送到Underlay,由Underlay高速转发。
每经过一跳,Underlay只会修改覆盖层源目MAC地址,最终将数据包送到目标VTEP,这里是VTEP1。
VTEP1收到数据包后,检查D-IP为自身NVE地址。首先将数据包中的S-MAC、接口、VLAN(VNID映射至VID)关联并形成二层转发表项;随后将VXLAN首部进行解封装,根据VXLAN首部中的VNID将10010桥接至VLAN 10中单播转发给目的主机,这里是Server-1。
数据包抵达目标主机,由此Server-1和Server-2开始单播通信。
Note:VTEP1的NVE地址需要手动配置,因为本环境Underlay没有部署组播网络。
每一次流量的命中都会刷新转发表项老化时间。VTEP1和VTEP2的二层转发表项会根据流量的命中而刷新,如果超过30minutes没有命中就会删除表项,需要重新触发Flood&Learn。
组播网络
Server-1和Server-2处于相同子网10.0.0.0/24,所属VLAN 10,VLAN 10映射到L2 VNI 10010。Underlay配置了组播网络,并在VTEP1和VTEP2上将L2 VNI 10010映射到组播组地址239.1.1.1(0100.5E01.0101),以下是通信过程:
Server-1查询本地ARP表项,发现没有有关10.0.0.2的MAC地址,启动ARP进程发送ARP请求(广播报文)
VTEP1收到该ARP请求后首先将其S-MAC、接口、VLAN关联并形成二层转发表项;随后判断其D-MAC为广播MAC地址,执行BUM流量泛洪转发,泛洪转发包含了本地所属VLAN 10的所有接口(除E1/1源接口)以及VXLAN封装泛洪。VXLAN泛洪数据包内容会在Original Frame的基础上追加VXLAN Header和Outer Header,VXLAN首部UDP源端口任意,这里是50000,目的端口为4789以及唯一标识桥接域的VNID 10010,Outer Header中包含出接口源MAC,目的MAC为组播组MAC地址0100.5E01.0101,源IP为VTEP1的NVE地址,目的IP为组播组地址239.1.1.1。VXLAN封装完成后发送到Underlay,由Underlay高速转发。
数据包由组播网络分发,最终将数据包送到目标VTEP,这里是VTEP2和VTEP3,因为VTEP2和VTEP3都配置了L2 VNI 10010以及相同的组播组地址。
VTEP2和VTEP3收到数据包后,检查D-IP为组播组地址。首先将数据包中的S-MAC、接口、VLAN(VNID映射至VID)关联并形成二层转发表项;随后将VXLAN首部进行解封装,根据VXLAN首部中的VNID将10010桥接至VLAN 10中泛洪。
数据包最终抵达目标主机,也仅有目标主机会回复ARP响应。
Server-2需要给Server-1以ARP响应报文,其过程同之前类似,因为响应报文为单播报文。
尽管VXLAN使得二层域得到了扩展,但是利用F&L机制形成转发表项在大规模网络中仍然是个问题,因为这会导致很多不必要的泛洪流量和计算资源浪费。VXLAN自身无法解决这个问题,需要通过一种新的方式来学习远端VTEP下的主机信息,并且这种方式不需要执行频繁泛洪,通过引入控制协议来解决这个问题。
2、不同子网间通信
传统网络中不同VLAN间的通信需要进入汇聚交换机的集中式网关上路由,类似,VXLAN网络中不同VNI之间互通或VXLAN网络和Non-VXLAN网络互通理论是也是需要经过集中式网关路由才能互通。所谓集中式网关是指所有网络网关都落在同一台或两台设备(配置FHRP)上,所有跨子网的流量都需要经过这一台或两台设备,实现流量的集中管理。单从仅部署VXLAN的网络来说,建议Spine或多冗余Border Leaf充当集中式网关,执行数据转发。集中式网关优缺点:
优点:对子网流量进行集中管理、网关部署和管理较为简单
缺点:
转发路径次优问题:转发流量需要经过集中式网关绕行,这对采用Spine-Leaf架构的数据中心来说难以接受。
ARP表项规格瓶颈:部署集中式网关的设备转发表项规格有限,尤其是虚拟化的发展使得这种情况进一步加重,不利于数据中心的扩展。
只部署VXLAN的环境中如果有不同子网之间的通信需求就需要依赖集中式网关。集中式网关通常可以选择部署在VXLAN环境外部设备、Spine以及任意Leaf上,当然为了提供网关冗余性可以考虑部署了vPC环境的成对Leaf上。以Leaf部署集中式网关为例,该Leaf需要部署VXLAN中所有的VNI,这样就能实现不同子网内的EP之间的通信。不同子网内的EP相互通信往往需要经历如下过程:
源EP解析网关MAC(完成源VTEP和集中式网关设备的VXLAN二层转发表项学习)
源EP将数据发送至网关(数据交互阶段)
集中式网关设备执行路由查找操作,修改某些数据包头部发送至目标子网(期间完成目标VTEP和集中式网关设备的VXLAN二层转发表项学习)
网关将数据发送至目标EP
源EP解析网关MAC,如下是相关流程:
由于Server-1不知道自身网关的MAC,因此需要发送ARP请求解析网关MAC地址(广播报文)。
VTEP1收到数据包后查询D-MAC是广播报文,需要执行本地泛洪和VXLAN泛洪。VTEP1追加封装VXLAN Header以及Outer Header。VXLAN Header中UDP源端口50000,UDP目标端口4789,VNID封装10010(因为这是来自VID 10的报文)。Outer Header中源IP为VTEP1的NVE地址,目的IP则是头端复制列表中的对等体地址(底层不支持组播为例),源MAC为出接口MAC,目的MAC为下一跳MAC。完成封装后将数据包发送至Underlay,最终被路由到VTEP3。
VTEP3收到数据包后解封装发现是VXLAN数据包,学习5254.0007.06fc到自身的二层转发表中。
VTEP3将其桥接到VLAN 10,查询D-IP是SVI 10的IP,于是发送ARP响应。ARP响应数据包被封装为源IP为10.0.0.254,即SVI 10的IP,目的IP为10.0.0.1,即Server-1的IP,源MAC为SVI 10的MAC,目的MAC为Server-1的MAC。VXLAN Header封装根据二层转发表执行,目的MAC查询到属于VLAN 10,VLAN 10被映射至L2 VNI 10010,于是VNID被设置为10010,UDP源端口任意,这里是55555,UDP目的端口4789。Outer Header封装,源IP为VTEP3的NVE地址,目的IP为VTEP1的NVE地址,源MAC为出接口MAC,目的MAC为下一跳MAC。完成封装后将数据包发送至Underlay,最终被路由到VTEP1。
VTEP1收到数据包后解封装发现是VXLAN数据包,学习5254.0007.3010到自身的二层转发表中。VXLAN根据其VNID将其桥接至VID,随后根据二层转发表执行查表转发。
数据包被最终发送至VTEP1的E1/1接口,此时的数据包应当是Ethernet/802.1Q帧。最终Server-1了解到网关的MAC,后续判断为路由流量会被直接封装扔给网关。
Server-1判断流量为路由流量,如下是相关流程:
Server-1将数据包封装,源IP为自身IP,目的IP为Server-2的IP,源MAC为自身MAC,目的MAC为网关MAC。封装完成后发送至以太网链路。
VTEP1收到数据包后查询D-MAC需要进行VXLAN封装。
VTEP1追加封装VXLAN Header以及Outer Header;VXLAN首部中VNID为10010,UDP源端口50000,UDP目的端口4789。Outer Header中源IP为VTEP1的NVE地址,目的IP为VTEP3的NVE地址,源MAC为出接口MAC,目的MAC为下一跳MAC。数据包被发送至Underlay,由Underlay路由到目标VTEP。
VTEP3收到数据包后查询VNID为10010,将其桥接至VID 10。
VTEP3解封装Original Frame;查询D-MAC为SVI 10的MAC,执行路由查询,根据D-IP进行最长掩码匹配。
VTEP3重新封装Original Frame;修改源MAC为SVI 20的MAC,目标MAC为Server-2的MAC,二层转发表项匹配需要执行VXLAN封装。
VTEP3追加封装VXLAN Header以及Outer Header;VXLAN Header中UDP源端口54521,UDP目的端口4789,VID映射的VNID为10020。Outer Header中源IP为VTEP3的NVE地址,目的IP为VTEP2的NVE地址,源MAC为出接口MAC,目的MAC为下一跳MAC。
VTEP2收到数据包后查询VNID为10020,将其桥接至VID 20。
VTEP2解封装Original Frame;查询D-MAC为Server-2的MAC,直接将数据包转发至E1/1接口。
Server-2收到数据包,并开始响应。
回包过程类似,不再做过多解释。
参考文档:
评论