浅谈网络虚拟化
Posted 非功能之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈网络虚拟化相关的知识,希望对你有一定的参考价值。
前言
VLAN技术
网络虚拟化
网络虚拟化是一种重要的网络技术,在物理网络上虚拟多个相互隔离的虚拟网络,使得不同用户之间使用独立的网络资源切片;从而提高网络资源利用率,实现弹性的网络。
VLAN(Virtual Local Area Network)虚拟局域网
VLAN虚拟局域网是一种将局域网设备从逻辑上划分(注意,不是从物理上划分)成一个个网段(或者说是更小的局域网),从而实现虚拟工作组(单元)的数据交换技术。
VLAN的优点
1)限制广播域。广播域被限制在一个VLAN内,提高了网络处理能力。
2)增强局域网的安全性。VLAN内部的广播和单播流量不会被转发到其它VLAN中,从而有助于控制网络流量、减少设备投资、简化网络管理、提高网络安全性。
3)灵活构建虚拟工作组。用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。
同一VLAN内的主机通信(A->B)流程
图1、同一VLAN内的主机通信
VLAN技术的弊端
1)单个物理设备支持VLAN数目不足:虚拟化技术的发展促使大数据、云计算技术公司采用单个物理设备虚拟多台虚拟机的方式来进行组网,随着应用模块的增加,对于支持VLAN数目的要求也在提升,802.1Q标准中的最多支持4094个VLAN的能力已经无法满足当下需求。
VXLAN技术
VLAN之后兴起的vxlan技术,可以解决上述的问题,其中x就是extensible,也就是扩展的虚拟局域网。vxlan是一种网络叠加技术,与其相似的还有gre和stt技术,在这里主要以vxlan举例。vxlan基于三层网络结构来构建二层虚拟网络,将处于不同网段网络设备整合在同一个逻辑链路层网络中,对于终端用户而言,这些网络设备似乎“真实地”部署在了同一个链路层网络中。
2.1 VXLAN解决的问题
1)针对网络隔离能力限制:vxlan引入了类似VLAN ID的用户标识,称为vxlan网络标识VNI(VXLAN Network ID),由24比特组成,支持多达16M的vxlan段,从而满足了大量的用户标识。
2.2 VXLAN实现
接下来,就介绍下vxlan的具体实现,图中两台终端T1和T2位于不同的网络中,二者通过路由器来实现互通,通过vxlan可以使得这两台终端在“逻辑上”位于“同一个”链路层网络中而与两台终端直接相连的路由器也在逻辑上构建了一条在虚拟链路中的通道(vxlan tunnel),这样的路由器我们称之为“vxlan隧道终端”(VXLAN Tunnel End Point, VTEP)。在包含vxlan的网络中,vxlan的实现机制仅仅对VTEP节点可见。
图2、VXLAN的实现
2.3 VXLAN报文格式
Vxlan的报文格式如下图3所示,Original L2 Frame部分是虚拟机发送的原始报文(二层帧,包含了MAC 头部、IP 头部和传输层头部的报文),前面加了vxlan 头部用来专门保存vxlan 相关的内容,再前面是标准的UDP 协议头部(UDP 头部、IP 头部和MAC 头部)用来在底层网络上传输报文。
图3、VXLAN的报文格式
2.4VXLAN通信(相同VNI)
接下来具体讲一下相同VNI的两台虚拟主机,处于不同的物理网络下,如何进行通信。
第一步是Host-A 向 Host-B 发送数据时,Host-B 的 MAC 和 IP 作为数据包的目标 MAC 和 IP,Host-A 的 MAC 作为数据包的源 MAC 和 IP,然后通过 VTEP-1 将数据发送出去。
上面的流程我们也可以看出来 VTEP 是VXLAN 的最核心组件,负责数据的封装和解封。
至于不同VNI的通信,流程相对复杂一点,涉及到3层网关,在此就不再赘述。
图4、XVLAN的通信
SDN与网络虚拟化
现在,在网络虚拟化领域还有一个非常火的概念,叫SDN,很多人把网络虚拟化与SDN划等号,实际上这是个误区。SDN翻译成中文就是软件定义网络。值得注意的是,SDN不是一种具体的技术或协议,而是一种新的网络设计理念。SDN的核心思想是控制和数据转发的分离。产生的原因是由于传统网络变得庞大的时候,维护起来非常困难,尤其是在云计算的环境下,虚拟化带来的高密度、业务的高速增长、对快速响应能力的高要求,用户对网络安全隔离和灵活管理的需求,使传统网络的慢和业务发展的快之间产生了越来越大的矛盾,因此,把SDN应用于网络虚拟化的场景是非常合适的。
比如说下面的这张网络图,每一个节点都有一个控制功能和与其它节点交互的网络信息,也可以认为这样的节点是我们刚才提到的vtep。有这样一个场景,右边的H节点获知一个新的网络(10.2.3.x)存在,现在它需要将这一信息告诉给网络中的其它节点。然而,节点H只和节点F和G直接相连,F和G再将信息传递给它们的邻近节点,最终该消息传达到整个网络。这样,网络内每个节点都会更新自己的路由表,以确保数据可以传送到新加入的网络。如果节点C和E之间的链路中断,尽管C和E知道C-E链路中断,但节点A并不知道,节点A会继续通过C-E链路向网络10.2.3.x/24传送数据包,数据会在C堆积,这需要花一些时间来向整个网络传送网络状态的更新信息并且完成纠错。网络越大,这种情况就越容易发生。
图5、网络示意图(1)
软件定义网络(SDN)将网络控制面整合于一体。这样,网络控制面对网络数据面就有一个宏观全面的视野。路由协议交换、路由表生成等路由功能均在统一的控制面完成。实现控制平面与数据平面分离的协议叫OpenFlow,OpenFlow是SDN一个网络协议。如下图所示:我们可以看到,首先需要通过OpenFlow将网络拓扑镜像到控制面,控制面初始化网络拓扑,初始化完成后,控制面会实时更新网络拓扑。会向每个转发节点发送转发表,根据转发表用户数据在网络内传送。假设现在节点H获知新的网络 (10.2.3.x/24)。节点H将通过OpenFlow告知控制面,因为控制面统领全局,它可以快速的为每一个转发节点创建新的路由表,这样用户数据就可以传送到这个新网络。如果某个链路中断,节点也会告知控制面,以便控制面快速的告知所有节点。
图6、网络示意图(2)
SDN的优点主要有以下几点
1)提供网络结构的统一视图:对整个网络架构实现统一的查看,从而简化配置、管理和优化。
2)高利用率:集中化的流量工程使得我们能够有效地调整端到端的流量路径,从而达到网络资源的高效利用。
3)快速故障修复:链路、节点故障都能实现快速修复。而且系统能够快速的聚合网络资源,实现平均分配,并且对于一些网络行为可进行预测。
4)平滑升级:控制平面和转发/数据平面的分离可以做到软件平滑升级的同时保证没有数据丢包或者性能衰减
介绍完SDN之后,相信大家也对它和网络虚拟化的概念有了一个初步的区分:SDN不是网络虚拟化,网络虚拟化也不是SDN。SDN是一种集中控制的网络架构,可将网络划分为数据层面和控制层面。网络虚拟化是一种网络技术,可以在物理拓扑上创建虚拟网络。
毋庸置疑,sdn的出现不再需要人力成本很高的手动部署,使得数据中心公有云等场景的自动快速部署和动态调整,成为了可能。openstack的网络组件neutron,就用到了SDN的思想,支持local,vlan和vxlan等类型。如果对这部分感兴趣的话也可以看下neutron这一部分的源码和详解。
结束语
本文主要介绍了网络虚拟化技术vlan与vxlan的实现机制,并且简要介绍了容易与虚拟化混淆的SDN技术,希望能够对公有云方面的学习提供一些帮助。
以上是关于浅谈网络虚拟化的主要内容,如果未能解决你的问题,请参考以下文章
浅谈OpenStack T版服务组件--Neutron计算服务(#^.^#) 持续更新中