现有的虚拟接入的服务对象是虚机的网络流量,虚机运行在虚拟化平台软件中,而虚机又运行在物理服务器上,这就使得虚机的流量同时受到上联交换机、服务器网卡和Hypervisor的影响。在虚拟化服务器中一直有一个重要的概念称为VEB(Virtual Etherenet Bridges--虚拟桥接网络),VEB指代的是用于连接虚拟机到接入交换机的网络服务,VEB有软件和硬件两种实现方式。软件比如Open vSwitch。不管是硬件VEB还是软件VEB,它们目前都只能完成简单的二层网络转发,缺乏QoS机制和二层安全策略,流量镜像功能薄弱,但要在VEB里完全塞进一个接入交换机的功能特性,在短期内仍然具有很大难度;其次,网管人员没有独立的管理界面;最后,VEB形成了一个分类的网络接入层,如果VEB作为接入交换机,那么理应该在上面部署与接入交换机一样的端口策略,然而由于VEB与接入交换机的功能特性的不一致,网管人员往往难以把针对物理接口的策略平滑移植到VEB上。
软件或者硬件VEB虽然能够提供基本的二层服务,但是由于它的管理范围被限制在物理服务器内部,没法在整个数据中心提供针对虚机的端到端服务。同一台物理服务器上不同虚机的流量在离开服务器网卡后仍然混杂在一起。
1. VN-Tag
VN-Tag是由CISCO和VMware共同推出的标准,其核心思想是在标准以太网帧中增加一段专用的标记--VN-Tag,用以区分不同的VIF(虚拟网络接口:Virtual Interface),从而识别特定虚机的流量。
每个虚机对应唯一的VIF。VN-Tag中最重要的内容是一对新地址:dvif_id
和svif_id
,这个地址空间对应的不是交换机的端口或者IP网段,而是虚机的VIF。VN-Tag通过这一对地址说明了数据帧从何而来,到哪里去。
当数据帧从虚机流出来后,就被加上一个VN-Tag标签。基于VN-Tag的源地址dvif_id
就能区分出产生于不同虚机的流量。一台具备VN-Tag协议栈的接入交换机可以将VN-Tag于虚机的VIF对应起来,这样就形成了一个映射关系。
物理机的出口网卡称为Port Extender,而上联交换机被称为Controlling Switch。
级联是VN-Tag的另一大特点,Port Extender对应的Controlling Switch不必是直接连接服务器的接入交换机,可以是网络内的任意IP可达的设备。这种设计的好处是,接入层设备往往比较简单,通过级联可以将虚拟机的流量拉高到高端的汇聚甚至核心设备上,利用汇聚、核心设备丰富的功能特性对流量进行精细化的管理。
IEEE最初将VN-Tag标准称为802.1Qbh,后来改为802.1Br。
2. VEPA
VEPA由HP推出,核心机制有两条:修改生成树协议,重用Q-in-Q。分别针对标准版VEPA和增强版VEPA。
2.1 标准版VEPA
VEPA的目标也是将虚机之间的交换行为从服务器内部转移到上联交换机。
当两个处于同一服务器内的虚机要交换数据时,从虚机出来的数据帧首先会经过服务器网卡送往上联交换机,上联交换机通过查看帧头自带的MAC地址发现目的主机在同一台物理服务器中,因此又将这个帧送回原服务器,完成寻址转发。整个数据流好像发卡一样在上联交换机上绕了一圈,因此这种行为又称作『发卡弯』。
虽然发卡弯实现了对虚机的数据转发,但这种行为违反了STP协议的一项重要原则,即数据帧不能发往收到这个帧的端口。而目前虚拟接入环境基本都是二层环境,必须运行STP,因此不可能使用路由协议来实现这个发卡弯行为。
VEPA的办法就是重写生成树协议,或者说在接入交换机的下联端口上强制进行反射数据帧的行为。
2.2 增强版VEPA
除了将虚机的数据交换转移到上联交换机上之外。VN-Tag还做了一项重要工作,就是通过dvif_id
和svif_id
这对新定义的地址对不同虚机流量进行区分。在标准VEPA中,所有的虚机流量都混合在一起,上联交换机只能通过IP或MAC进行区分不同虚机的流量,而MAC和IP都是非常容易用作攻击和伪装的。
802.1ad是IEEE以太网协议集的一部分,是对802.1Q的一个增强。一个标准的802.1Q以太帧带有一个VLAN,而802.1ad则是在这个标签之外,再加上一个标签,所以被称为『VLAN堆叠』。
802.1ad的多个标签头,外层称为S-Tag,内层称为C-Tag。VEPA看重的就是外层的S-Tag。这个S-Tag除了指代不同的虚机流量外,还可以为共复杂的需求服务。例如,用户如果希望将一台服务器的部分流量交给上联服务器,而将另一部分流量留在服务器内部转发以降低时延,那么就可以搭建两个VEB,一个VEB依照VEPA将流量送到服务器网卡,由接入交换机来做转发;另一个VEB按照传统的方式为部分虚机流量做本地转发。这两个VEB分别连接到不同的S-Channel上,用户甚至可以在这样的环境中将某个虚机通过一条单独的S-Channel上联到交换机,针对其特定的业务等级提供特殊的网络服务。只要服务器网卡能够给数据帧打上S-Tag标记,上联交换机能够处理S-Tag帧,就可以将不同的虚拟流量区分开来,分别进行处理。
参考
《腾云》