就不干开发

导航

2.vxlan网络详解

Vxlan解决了什么问题

如图为传统虚机的二三层网络环境,为了实现网络隔离,将办公区和生产区的主机划分在不同的vlan,但这种环境无法实现虚机的全范围迁移,虚机只能在给定的vlan范围内进行迁移,且这种环境的网络隔离无法满足海量租户隔离的网络,因为vlan数量只能在10-4096,约为4000个,数量有限
vxlan就是为了解决这些问题而生:
1.vxlan在2个具有交换机功能的设备间打通一条隧道,其余用户或主机无法进入,隔离了所有用户,大大提升隔离范围
2.vxlan提供了16M左右的id供用户使用,解决了id数不足的问题
vxlan报文

vxlan包头:封装了VNI标识,供隧道两端识别
UDP包头:记录了用于转发的源端口(哈希值,通过随即哈希均匀使用所有源端口,充分利用所有端口)、目的端口(默认为4789)
外部IP包头:源虚机、目的虚机所属VTEP设备的IP地址
外部MAC包头

VXLAN网络传输流程

s主机与d主机中间的两个交换机就是两端的VTEP设备(vxlan tunnel endpoints),他对原始报文进行封装,对端VTEP通过解封将原始报文恢复出来,然后发送给目的主机
VTEP概述
vxlan隧道传输的端点:起点和终点,它可以对数据报文进行封装和解封装
VNI(vxlan network identifier)概述
类似于vlan的网络标识,在vxlan中主机要实现相互通信必须要在同一VNI
二层VNI:常见的VNI,以1:1映射到bridge domain
三层VNI:和VPN关联,用于vxlan跨网段传输
疑问:既然vxlan可以对原始报文进行封装,那么对端并不关心真实源地址是多少,也就无需考虑是否是同一子网,个人认为是可以实现跨网段转发,为什么只有三层才可以?

大二层域

也叫做bridge domain,一个BD下对应一个VNI,它们在VTEP配置如下

哪些报文要进入VXLAN隧道
cloud engine系列交换机可以实现vxlan技术,它有一个逻辑上的二层子接口,这个接口对发来的报文做2件事
1.根据自身配置确认报文是否要进入VXLAN隧道
2.对检查通过的报文做什么操作
cloud engine的4种流封装类型

疑问:IEEE 802.1Q协议规定在目的MAC地址和源MAC地址之后封装4个字节的VLAN Tag,用以标识VLAN的相关信息。Mac地址属于数据链路层。为什么还有两层vlan标签的报文?都在哪两层?

内层VLAN Tag为用户私网VLAN Tag,外层VLAN Tag为运营商分配给用户的VLAN Tag。在公网中,报文只根据外层VLAN Tag进行转发,并将报文的源MAC地址表项学习到外层Tag所在VLAN的MAC地址表中,而用户的私网VLAN Tag在传输过程中将被当作报文中的数据部分来进行传输。
QinQ主要可以解决如下几个问题:
1、缓解日益紧缺的公网VLAN ID资源问题。
2、用户可以规划自己的私网VLAN ID,不会导致和公网VLAN ID冲突。
3、为小型城域网或企业网提供一种较为简单的二层VPN解决方案。
将二层子接口加入BD:示例

虚机VM1和VM2分别位于不同vlan,如何实现两台虚机都可以访问其他虚机?
1.将管理VM1和VM2的交换机设为trunk模式,因为trunk模式可以整合所有vlan,这样可以接收所有vlan的报文,且设置pvid为20
2.vlan10的报文与pvid不匹配,会被打上标签,属于dot1q封装类型;vlan20则与pvid匹配,不会打标签,属于untag类型;在VTEP设备配置2个二层子接口
10GE1/0/1.1和10GE 1/0/1.2这两个接口要想将报文加入vxlan隧道,需要配置类型分别为dot1q和untag
具体命令如下

建立vxlan隧道的2种方式

手动建立

根据peer list这张列表,交换机就会知道对应BD域中都有哪些VTEP设备,VTEP设备收到BUM(Broadcast&Unknown-unicast&Multicast,广播&未知单播&组播)报文时会将报文复制并发给列表中所有VTEP,所以这张列表叫做头端复制列表
当VTEP收到单播报文时,会根据VTEP的MAC表判断要发给哪个VTEP,进而确定要走哪个vxlan隧道

自动建立

vxlan网关

不同VNI的主机,以及不同vxlan网络中的主机不能直接通信,需要vxlan网关
二层网关:处理同一vxlan网络通信
三层网关:处理不同vxlan网络间通信

三层网关的分类

Spine节点:VXLAN中的三层网关,关注于高速IP转发,强调的是设备的高速转发能力。
Leaf节点:作为VXLAN网络中的二层网关设备,与物理服务器或VM对接,用于解决终端租户接入VXLAN虚拟网络的问题。
作为VXLAN网络中的三层网关设备,进行VXLAN报文封装/解封装,实现跨子网的终端租户通信,以及外部网络的访问。
vxlan集中式网关:将三层网关部署在同一设备,对跨子网传输进行统一管理

优点:对跨子网流量进行集中管理,网关的部署和管理比较简单。
缺点:转发路径不是最优: 同一二层网关下跨子网的数据中心三层流量都需要经过集中三层网关绕行转发(如图中蓝色虚线所示)。
ARP表项规格瓶颈: 由于采用集中三层网关,通过三层网关转发的终端的ARP表项都需要在三层网关上生成,而三层网关上的ARP表项规格有限,这不利于数据中心网络的扩展。

VXLAN分布式网关

VXLAN分布式网关特点:
同一个Leaf节点既可以做VXLAN二层网关,也可以做VXLAN三层网关,部署灵
活。
Leaf节点只需要学习自身连接服务器的ARP表项,而不必像集中三层网关一样,
需要学习所有服务器的ARP表项,解决了集中式三层网关带来的ARP表项瓶颈问
题,网络规模扩展能力强。

同子网通信

ARP 请求报文转发流程

VM_A、VM_B和VM_C同属于10.1.1.0/24网段,且同属于VNI 5000。此时,VM_A想与VM_C进行通信,由于是首次进行通信,VM_A上没有VM_C的MAC地址,所以会发送ARP广播报文请求VM_C的MAC地址

1. VM_A发送源MAC为MAC_A、目的MAC为全F、源IP为IP_A、目的IP为IP_C的ARP广播报文,请求VM_C的MAC地址。
2. VTEP_1收到ARP请求后,根据二层子接口上的配置判断报文需要进入VXLAN隧道。确定了报文所属BD后,也就确定了报文所属的VNI,这是知道将报文接入哪个隧道。同时,VTEP_1学习MAC_A、VNI和报文入接口(Port_1,即二层子接口对应的物理接口)的对应关系,并记录在本地MAC表中。之后,VTEP_1会根据头端复制列表对报文进行复制,并分别进行封装。可以看到,这里封装的外层源IP地址为本地VTEP(VTEP_1)的IP地址,外层目的IP地址为对端VTEP(VTEP_2和VTEP_3)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。
3. 报文到达VTEP_2和VTEP_3后,VTEP对报文进行解封装,得到VM_A发送的原始报文。同时,VTEP_2和VTEP_3学习VM_A的MAC地址、VNI和远端VTEP的IP地(IP_1)的对应关系,并记录在本地MAC表中。之后,VTEP_2和VTEP_3根据二层子接口上的配置对报文进行相应的处理并在对应的二层域内广播。VM_B和VM_C接收到ARP请求后,比较报文中的目的IP地址是否为本机的IP地址。VM_B发现目的IP不是本机IP,故将报文丢弃;VM_C发现目的IP是本机IP,则对ARP请求做出应答。下面,让我们看下ARP应答报文是如何进行转发的。
ARP 应答报文转发流程

1. 由于此时VM_C上已经学习到了VM_A的MAC地址,所以ARP应答报文为单播报文。报文源MAC为MAC_C,目的MAC为MAC_A,源IP为IP_C、目的IP为IP_A。
2. VTEP_3接收到VM_C发送的ARP应答报文后,识别报文所属的VNI(识别过程与步骤②类似)。同时,VTEP_3学习MAC_C、VNI和报文入接口(Port_3)的对应关系,并记录在本地MAC表中。之后,VTEP_3对报文进行封装。可以看到,这里封装的外层源IP地址为本地VTEP(VTEP_3)的IP地址,外层目的IP地址为对端VTEP(VTEP_1)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。
3. 报文到达VTEP_1后,VTEP_1对报文进行解封装,得到VM_C发送的原始报文。同时VTEP_1学习VM_C的MAC地址、VNI和远端VTEP的IP地址(IP_3)的对应关系,并记录在本地MAC表中。之后,VTEP_1将解封装后的报文发送给VM_A。
缺点:除了源VTEP设备,该子网内其余所有VTEP都要接收报文,并学习,造成不必要的网络开销

集中式 VXLAN 中不同子网互通

VM_A和VM_B分别属于10.1.10.0/24网段和10.1.20.0/24网段,且分别属于VNI 5000和VNI 6000。VM_A和VM_B对应的三层网关分别是VTEP_3上BDIF 10和BDIF 20的IP地址。VTEP_3上存在到10.1.10.0/24网段和10.1.20.0/24网段的路由。此时,VM_A想与VM_B进行通信
BDIF接口是bridge domain下的接口,用于实现跨vxlan通信和vxlan与非vxlan通信
过程:源主机发出ARP广播,请求目的IP的MAC地址,三层网关收到请求后根据配置确定需要发往哪个BD域和接口,并再次广播,学习目的主机的MAC地址表,注意:二层网关不会学习其他vxlan地址表,所以源主机对应的VTEP1不会学习目的主机的MAC地址。
接下来进行报文封装,封装过程相同,不再表述,回复报文过程相同,略。
报文转发流程

现在假设VM_A和VM_B均已学到网关的MAC、网关也已经学到VM_A和VM_B的MAC,下面就让我们看下数据报文是如何从VM_A发送到VM_B的
1 VM_A转发报文至当前vxlan二层网关VTEP1,源MAC为本机MAC,目的MAC为三层网关VTEP3 BDIF10接口的MAC,源IP和目的IP分别是VM_A和VM_B
2 VTEP1收到报文后,根据自身学习的VNI与MAC、接口映射表发现该报文所属VNI为5000,于是对原始报文封装:外层源IP为当前VTEP1IP,目的IP为三层网关VTEP3IP,外层源MAC为当前VTEP1的MAC,目的MAC为下一跳MAC,不是VTEP3的MAC
3 VTEP3收到报文后进行解封装,发现目的MAC为自身的10接口MAC,目的IP为VM_B的IP
查询路由表发现到达下一跳地址就是VM_B的IP,出接口为自身的20接口,VTEP修改原始报文:源MAC为自身20接口的MAC,目的MAC为VM_B的MAC
报文转发至20接口后,根据自身配置的映射表发现需要将报文进入VNI为6000的vxlan隧道,VM_B所属网关为VTEP2,于是对原始报文进行封装:外层源IP为当前VTEP的IP,目的IP为VTEP2的IP,源MAC为VTEP3的MAC,目的MAC为下一跳的MAC
4 报文到达VTEP2后,设备对其解封装,将原始报文转给VM_B

posted on 2023-04-25 15:01  专注运维20年  阅读(989)  评论(0编辑  收藏  举报