http://blog.51cto.com/6930123/2115373

Vlan

“虚拟局域网”,二层交换机只能构建单一的广播域,不过使用VLAN功能后,它能够将网络分割成多个广播域。

 

分割广播域时,一般都必须使用到路由器,但是,通常情况下路由器上不会有太多的网络接口,其数目多在1~4个左右。随着宽带连接的普及,宽带路由器(或者叫IP共享器)变得较为常见,但是需要注意的是,它们上面虽然带着多个(一般为4个左右)连接LAN一侧的网络接口,但那实际上是路由器内置的交换机,并不能分割广播域。

 

与路由器相比,二层交换机一般带有多个网络接口。因此如果能使用它分割广播域,那么无疑运用上的灵活性会大大提高。用于在二层交换机上分割广播域的技术,就是VLAN。通过利用VLAN,我们可以自由设计广播域的构成,提高网络设计的自由度。

 

 

实现VLAN的机制

在理解了“为什么需要VLAN”之后,接下来让我们来了解一下交换机是如何使用VLAN分割广播域的。

首先,在一台未设置任何VLAN的二层交换机上,任何广播帧都会被转发给除接收端口外的所有其他端口(Flooding)。例如,计算机A发送广播信息后,会被转发给端口2、3、4。

家用路由器能划分vlan吗 路由器可以划分vlan么_数据帧

这时,如果在交换机上生成红、蓝两个VLAN;同时设置端口1、2属于红色VLAN、端口3、4属于蓝色VLAN。再从A发出广播帧的话,交换机就只会把它转发给同属于一个VLAN的其他端口——也就是同属于红色VLAN的端口2,不会再转发给属于蓝色VLAN的端口。

同样,C发送广播信息时,只会被转发给其他属于蓝色VLAN的端口,不会被转发给属于红色VLAN的端口。

家用路由器能划分vlan吗 路由器可以划分vlan么_家用路由器能划分vlan吗_02

 

就这样,VLAN通过限制广播帧转发的范围分割了广播域。上图中为了便于说明,以红、蓝两色识别不同的VLAN,在实际使用中则是用“VLAN ID”来区分的。

 

 

2.2、直观地描述VLAN

如果要更为直观地描述VLAN的话,我们可以把它理解为将一台交换机在逻辑上分割成了数台交换机。在一台交换机上生成红、蓝两个VLAN,也可以看作是将一台交换机换做一红一蓝两台虚拟的交换机。

家用路由器能划分vlan吗 路由器可以划分vlan么_首部_03

在红、蓝两个VLAN之外生成新的VLAN时,可以想象成又添加了新的交换机。

但是,VLAN生成的逻辑上的交换机是互不相通的。因此,在交换机上设置VLAN后,如果未做其他处理,VLAN间是无法通信的。

明明接在同一台交换机上,但却偏偏无法通信——这个事实也许让人难以接受。但它既是VLAN方便易用的特征,又是使VLAN令人难以理解的原因。

交换机的端口

交换机的端口,可以分为以下两种:

■ 访问链接(Access Link)

■ 汇聚链接(Trunk Link)

1.访问链接

访问链接,指的是“只属于一个VLAN,且仅向该VLAN转发数据帧”的端口。在大多数情况下,访问链接所连的是客户机。

通常设置VLAN的顺序是:

●生成VLAN

●设定访问链接(决定各端口属于哪一个VLAN)

 

设定访问链接的手法,可以是事先固定的、也可以是根据所连的计算机而动态改变设定。前者被称为“静态VLAN”、后者自然就是“动态VLAN”了。

静态VLAN

静态VLAN又被称为基于端口的VLAN(Port Based VLAN)。顾名思义,就是明确指定各端口属于哪个VLAN的设定方法。

家用路由器能划分vlan吗 路由器可以划分vlan么_首部_04

由于需要一个个端口地指定,因此当网络中的计算机数目超过一定数字(比如数百台)后,设定操作就会变得烦杂无比。并且,客户机每次变更所连端口,都必须同时更改该端口所属VLAN的设定——这显然静态VLAN不适合那些需要频繁改变拓补结构的网络。

 

3.2.2、动态VLAN

另一方面,动态VLAN则是根据每个端口所连的计算机,随时改变端口所属的VLAN。这就可以避免上述的更改设定之类的操作。动态VLAN可以大致分为3类:

 

● 基于MAC地址的VLAN(MAC Based VLAN)

● 基于子网的VLAN(Subnet Based VLAN)

● 基于用户的VLAN(User Based VLAN)

 

其间的差异,主要在于根据OSI参照模型哪一层的信息决定端口所属的VLAN。

 

①、基于MAC地址的VLAN,就是通过查询并记录端口所连计算机上网卡的MAC地址来决定端口的所属。假定有一个MAC地址“A”被交换机设定为属于VLAN“10”,那么不论MAC地址为“A”的这台计算机连在交换机哪个端口,该端口都会被划分到VLAN10中去。计算机连在端口1时,端口1属于VLAN10;而计算机连在端口2时,则是端口2属于VLAN10。

家用路由器能划分vlan吗 路由器可以划分vlan么_首部_05

②、基于子网的VLAN,则是通过所连计算机的IP地址,来决定端口所属VLAN的。不像基于MAC地址的VLAN,即使计算机因为交换了网卡或是其他原因导致MAC地址改变,只要它的IP地址不变,就仍可以加入原先设定的VLAN。

 

因此,与基于MAC地址的VLAN相比,能够更为简便地改变网络结构。IP地址是OSI参照模型中第三层的信息,所以我们可以理解为基于子网的VLAN是一种在OSI的第三层设定访问链接的方法。

 

③、基于用户的VLAN,则是根据交换机各端口所连的计算机上当前登录的用户,来决定该端口属于哪个VLAN。这里的用户识别信息,一般是计算机操作系统登录的用户,比如可以是Windows域中使用的用户名。这些用户名信息,属于OSI第四层以上的信息。

 

总的来说,决定端口所属VLAN时利用的信息在OSI中的层面越高,就越适于构建灵活多变的网络。

 

 

3.2.3、访问链接的总结

综上所述,设定访问链接的手法有静态VLAN和动态VLAN两种,其中动态VLAN又可以继续细分成几个小类。

其中基于子网的VLAN和基于用户的VLAN有可能是网络设备厂商使用独有的协议实现的,不同厂商的设备之间互联有可能出现兼容性问题;因此在选择交换机时,一定要注意事先确认。

 

下表总结了静态VLAN和动态VLAN的相关信息。

种类

解说

静态VLAN(基于端口的VLAN)

 将交换机的各端口固定指派给VLAN

动态VLAN

 基于MAC地址的VLAN

 根据各端口所连计算机的MAC地址设定

 基于子网的VLAN

 根据各端口所连计算机的IP地址设定

 基于用户的VLAN

 根据端口所连计算机上登录用户设定

 

VLAN的汇聚链接

4.1、设置跨越多台交换机的VLAN

到此为止,我们学习的都是使用单台交换机设置VLAN时的情况。那么,如果需要设置跨越多台交换机的VLAN时又如何呢?

 

在规划企业级网络时,很有可能会遇到隶属于同一部门的用户分散在同一座建筑物中的不同楼层的情况,这时可能就需要考虑到如何跨越多台交换机设置VLAN的问题了。假设有如下图所示的网络,且需要将不同楼层的A、C和B、D设置为同一个VLAN。

家用路由器能划分vlan吗 路由器可以划分vlan么_家用路由器能划分vlan吗_06

这时最关键的就是“交换机1和交换机2该如何连接才好呢?”

最简单的方法,自然是在交换机1和交换机2上各设一个红、蓝VLAN专用的接口并互联了。

家用路由器能划分vlan吗 路由器可以划分vlan么_家用路由器能划分vlan吗_07

但是,这个办法从扩展性和管理效率来看都不好。例如,在现有网络基础上再新建VLAN时,为了让这个VLAN能够互通,就需要在交换机间连接新的网线。建筑物楼层间的纵向布线是比较麻烦的,一般不能由基层管理人员随意进行。并且,VLAN越多,楼层间(严格地说是交换机间)互联所需的端口也越来越多,交换机端口的利用效率低是对资源的一种浪费、也限制了网络的扩展。

 

为了避免这种低效率的连接方式,人们想办法让交换机间互联的网线集中到一根上,这时使用的就是汇聚链接(Trunk Link)。

 

 

4.2、何谓汇聚链接?

汇聚链接(Trunk Link)指的是能够转发多个不同VLAN的通信的端口。

汇聚链路上流通的数据帧,都被附加了用于识别分属于哪个VLAN的特殊信息。

 

现在再让我们回过头来考虑一下刚才那个网络如果采用汇聚链路又会如何呢?用户只需要简单地将交换机间互联的端口设定为汇聚链接就可以了。这时使用的网线还是普通的UTP线,而不是什么其他的特殊布线。图例中是交换机间互联,因此需要用交叉线来连接。

 

接下来,让我们具体看看汇聚链接是如何实现跨越交换机间的VLAN的。

①、A发送的数据帧从交换机1经过汇聚链路到达交换机2时,在数据帧上附加了表示属于红色VLAN的标记。

 

②、交换机2收到数据帧后,经过检查VLAN标识发现这个数据帧是属于红色VLAN的。

 

③、因此去除标记后根据需要将复原的数据帧只转发给其他属于红色VLAN的端口。

 

这时的转送,是指经过确认目标MAC地址并与MAC地址列表比对后只转发给目标MAC地址所连的端口。

 

只有当数据帧是一个广播帧、多播帧或是目标不明的帧时,它才会被转发到所有属于红色VLAN的端口。

 

同理,蓝色VLAN发送数据帧时的情形也与此相同。

 

家用路由器能划分vlan吗 路由器可以划分vlan么_IP_08

 

 

通过汇聚链路时附加的VLAN识别信息,有可能支持标准的“IEEE 802.1Q”协议,也可能是Cisco产品独有的“ISL(Inter Switch Link)”。如果交换机支持这些规格,那么用户就能够高效率地构筑横跨多台交换机的VLAN。

 

另外,汇聚链路上流通着多个VLAN的数据,自然负载较重。因此,在设定汇聚链接时,有一个前提就是必须支持100Mbps以上的传输速度。

 

另外,默认条件下,汇聚链接会转发交换机上存在的所有VLAN的数据。换一个角度看,可以认为汇聚链接(端口)同时属于交换机上所有的VLAN。由于实际应用中很可能并不需要转发所有VLAN的数据,因此为了减轻交换机的负载、也为了减少对带宽的浪费,我们可以通过用户设定限制能够经由汇聚链路互联的VLAN。

 

 

VXLAN

·概况 
    VXLAN(Virtual eXtential LAN)意为虚拟可拓展局域网。随着大数据、云计算技术的兴起以及虚拟化技术的普及,VLAN技术的弊端逐渐显现出来,具体表现为如下3个方面:
    (1) 虚拟化技术的发展促使大数据、云计算技术公司采用单个物理设备虚拟多台虚拟机的方式来进行组网,随着应用模块的增加,对于支持VLAN数目的要求也在提升,802.1Q标准中的最多支持4094个VLAN的能力已经无法满足当下需求。
    (2) 公有云提供商的业务要求将实体网络租借给多个不同的用户,这些用户对于网络的要求有所不同,而不同用户租借的网络有很大的可能会出现IP地址、MAC地址的重叠,传统的VLAN仅仅解决了同一链路层网络广播域隔离的问题,而并没有涉及到网络地址重叠的问题,因此需要一种新的技术来保证在多个租户网络中存在地址重叠的情况下依旧能有效通信的技术。
    (3) 虚拟化技术的出现增加了交换机的负担,对于大型的数据中心而言,单台交换机必须支持数十台以上主机的通信连接才足以满足应用需求,而虚拟化技术使得单台主机可以虚拟化出多台虚拟机同时运行,而每台虚拟机都会有其唯一的MAC地址。这样,为了保证集群中所有虚机可以正常通信,交换机必须保存每台虚机的MAC地址,这样就导致了交换机中的MAC表异常庞大,从而影响交换机的转发性能。
    基于以上需求,VXLAN技术被提出。
    VXLAN技术是网络Overlay技术的一种实现,对于Overlay技术,笔者的理解是:在基于物理网络拓扑的基础上通过一定的技术来构建虚拟的、不同于物理网络拓扑的逻辑网络,而物理网络的拓扑结构对于Overlay终端而言是透明的,终端不会感知到物理网络的存在,而仅仅能感知到逻辑网络结构。对于终端的视角,网络的情况和直接通过物理设备实现逻辑拓扑的效果是相同的。VXLAN技术可以基于三层网络结构来构建二层虚拟网络,通过VLAN技术可以将处于不同网段网络设备整合在同一个逻辑链路层网络中,对于终端用户而言,这些网络设备似乎“真实地”部署在了同一个链路层网络中。
·标准
    文档rfc7348详细地介绍了VXLAN的实现机制。本质上VXLAN是一种隧道技术。通过将虚拟网络中的数据帧封装在实际物理网络中的报文中进行传输。具体实现方式为:将虚拟网络的数据帧添加VXLAN首部后,封装在物理网络中的UDP报文中,然后以传统网路络的通信方式传送该UDP报文,到达目的主机后,去掉物理网络报文的头部信息以及VXLAN首部,将报文交付给目的终端。整个通信过程目的终端不会感知到物理网络的存在。
    利用VXLAN技术组网的方法可以用下图来描述:

    图中两台终端T1和T2位于不同的网络中,二者通过路由器来实现互通,通过VXLAN可以使得这两台终端在“逻辑上”位于“同一个”链路层网络中而与两台终端直接相连的路由器也在逻辑上构建了一条在虚拟链路中的通道vxlan tunnel,这样的路由器我们称之为“vxlan隧道终端”(VXLAN Tunnel End Point, VTEP)。在包含VXLAN的网络中,VXLAN的实现机制仅仅对VTEP节点可见。
    需要说明的是,VTEP节点可以由实现了VXLAN功能的交换机、路由器等硬件设备充当,但在更多的基于虚拟化技术实现的网络拓扑的应用中,VTEP节点的角色更多由部署了多台虚拟机的主机中的hypervisor进程来担任,如下图:
 
    接下来介绍VXLAN的通信原理。VXLAN通过将逻辑网络中通信的数据帧封装在物理网络中进行传输,封装和解封装的过程由VTEP节点完成。VXLAN将逻辑网络中的数据帧添加VXLAN首部后,封装在物理网络中的UDP报文中传送,VXLAN首部的格式如下:
 
VXLAN首部由8个字节组成,第1个字节为标志位,其中标志位I设为1表示是一个合法的VXLAN首部,其余标志则保留,在传输过程中必须置为0;第2-4字节为保留部分,第5-7字节为VXLAN标识符,用来表示唯一的一个逻辑网络;第8个字节同样为保留字段,暂未使用。
    VXLAN传输过程中,将逻辑链路网络的数据帧添加VXLAN首部后,依次添加UDP首部,IP首部,以太网帧首部后,在物理网络中传输,数据帧的封装格式可以用下图来描述:
 
需要注意的是,外部UDP首部的目的端口号为4789,该数值为默认VXLAN解析程序的端口,外层IP首部中的源IP和目的IP地址均填写通信双方的VTEP地址,协议的其余部分和传统网络相同。
·通信过程
    下面简要说明VXLAN网络中的通信过程。对于处于同一个VXLAN的两台虚拟终端,其通信过程可以概括为如下的步骤:
① 发送方向接收方发送数据帧,帧中包含了发送方和接收方的虚拟MAC地址。
② 发送方连接的VTEP节点收到了数据帧,通过查找发送方所在的VXLAN以及接收方所连接的VTEP节点,将该报文添加VXLAN首部、外部UDP首部、外部IP首部后,发送给目的VTEP节点。
③ 报文经过物理网络传输到达目的VTEP节点。
④ 目的VTEP节点接收到报文后,拆除报文的外部IP首部和外部UDP首部,检查报文的VNI以及内部数据帧的目的MAC地址,确认接收方与本VTEP节点相连后,拆除VXLAN首部,将内部数据帧交付给接收方。
⑤ 接收方收到数据帧,传输完成。
    通过以上的步骤可以看出:VXLAN的实现细节以及通信过程对于处于VXLAN中的发送方和接收方是不可见的,基于发送方和接收方的视角,其通信过程和二者真实处于同一链路层网络中的情况完全相同。 
    以上通信方式可以用下图来描述:
 
其中VTEP2中收到的报文和VTEP1中发送的报文相同,接受者收到的报文和发送者发出的报文也完全相同,这里为了便于描述,图中将其略去。
    需要说明的是,VTEP1同样需要将上述封装好的IP报文封装在以太网帧中才能进行传输,这里称之为“外层以太网帧(Outer Ethernet Frame)”,外层以太网帧中数据字段值取决于实际物理网络的实现,因此笔者为在图中给出。在VXLAN的实际实现中,VTEP1和VTEP2可以处于不同的物理网络中,只要保证VTEP1和VTEP2可以通信即可,而对于二者通信所经过的路径,我们不必关心。

·VTEP节点工作机制
    通过以上通信步骤的描述可以看到,VTEP节点在VXLAN网络通信中起到了至关重要的作用。在VXLAN网络通信中,VTEP节的职责主要有3项:
    (1) 将虚拟网络通信的数据帧添加VXLAN头部和外部UDP和IP首部。
    (2) 将封装好的数据包转发给正确的VTEP节点。
    (3) 收到其他VTEP发来的VXLAN报文时,拆除外部IP、UDP以及VXLAN首部,然后将内部数据包交付给正确的终端。
    对于功能(1)和(3)只要按照上文中给出的封装和拆解规则进行处理即可,这里主要说明功能(2)的实现,即VXLAN数据包的转发过程。当VTEP节点收到一个VXLAN数据包时,需要根据内部以太网帧的目的MAC地址找到与拥有该目的地址的终端直接相连的VTEP地址,因此,这里需要一个目的MAC地址和VTEP节点IP地址的映射关系,VTEP节点利用一个转发表来存储此映射关系。转发表的格式为:<VNI, Inner Dst MAC, VTEP IP>,即给定VNI和目的MAC地址后映射到一个VTEP IP地址。
    需要说明的是,映射VTEP节点IP地址时,之所以需要VNI的信息,是因为当存在多租户的情况下,各个租户将会独立组网,此时,多个租户设定的MAC地址有一定的概率会出现重叠,此时我们必须保证每个租户的网络都能独立地正常通信,因此,在为每个租户配置唯一的一个VNI的情况下,给定VNI和目的MAC地址,唯一确定一个VTEP地址。
    下图是一个样例,对于下图中的网络拓扑,分别给出了两个VTEP节点的转发表:
    
    上图中给出了6个终端,分别属于2个租户,其中,终端T1、T2和T4属于租户1,分配VNI为1,终端T3、T5和T6属于租户2,分配VNI为2,两个VTEP节点的转发表已在图中给出。
    每一个VTEP节点都必须拥有完整的转发表才可以正确地进行转发的功能,转发表的学习过程可以基于这样一种简单的策略:通过ARP报文学习,当收到终端发送的数据帧时,首先根据收到数据的端口判定数据发送方的VNI值,根据VNI和数据帧中的目的MAC查找对应的VTEP节点,如果查找成功,则转发,否则,在当前VXLAN网络中广播ARP请求报文,这样,连接目的MAC终端的VTEP节点就会发送ARP回答报文,这样就学习到了新的转发表项。
   需要说明的是,在多租户的环境下,基于信息安全等因素,各个租户的流量必须实现隔离,因此在发送广播ARP请求报文时,不可以直接在多租户的环境中广播,必须保证只有当前VXLAN网络的终端可以收到广播报文,因此,和物理网络中的ARP广播请求的实现有所不同,这里需要通过IP组播机制来模拟广播,IGMP等相关组播协议这里会用到。
   因此,VTEP节点还需要保存对应于每个租户的VNI值的组播域,即对于每一个VNI值,存储包含当前VXLAN网络中终端的所有VTEP节点的IP,用于ARP广播时的组播操作。对于上文中的网络拓扑,两个VTEP的广播表如下图:
   
    最后,当一个VTEP节点收到其他VTEP节点的ARP请求报文时,需要在自己连接的虚拟网络中发送,此时,仅仅发送给当前VNI对应的终端,因此,VTEP中还需要保存当前接入设备的VXLAN网络情况,因此,上图中还给出了每个VTEP节点的设备表,该表中记录了每个VNI对应的设备。这样,当需要广播ARP请求时,首先根据设备表将ARP请求报文发送给VNI值对应的设备,然后根据广播表,将ARP请求发给VNI值对应的VTEP节点;而当收到其他VTEP节点发来的ARP请求时,根据设备表转发给对应的终端即可。这样就实现了基于ARP请求的VTEP转发的学习。而对于广播表,在VTEP配置组网时可以完成设置,对于设备表,则在终端接入VTEP时可以完成配置,得到广播表和设备表后,转发表可以基于ARP的通信中逐步学习和构建。

·VXLAN网关
    接下来简要说明一下VXLAN网关节点。VXLAN网关节点适用于这样一种应用场景:当一台处于VXLAN网络中的终端要和一台处于非VXLAN网络中的节点进行通信时,由于VXLAN网络中的终端使用的都是虚拟网络地址,而非VXLAN中的设备使用的是实际的物理地址,此时,VXLAN网关将起到地址转换的作用,通信时,临时将VXLAN终端的虚拟地址转换为物理地址,然后再与外网进行通信。地址转换的方式可基于NAT机制。关于网VXLAN网关的实现详细细节,笔者暂不明白,因此,这里仅简要描述。

·VXLAN技术的优势和局限性
    相比VLAN技术,VXLAN技术具有以下的优势:
    (1) 24位长度的VNI字段值可以支持更多数量的虚拟网络,解决了VLAN数目上限为4094的局限性的问题。
    (2) VXLAN技术通过隧道技术在物理的三层网络中虚拟二层网络,处于VXLAN网络的终端无法察觉到VXLAN的通信过程,这样也就使得逻辑网络拓扑和物理网络拓扑实现了一定程度的解耦,网络拓扑的配置对于物理设备的配置的依赖程度有所降低,配置更灵活更方便。
    (3) VLAN技术仅仅解决了二层网络广播域分割的问题,而VXLAN技术还具有多租户支持的特性,通过VXLAN分割,各个租户可以独立组网、通信,地址分配方面和多个租户之间地址冲突的问题也得到了解决。
    为了保证VXLAN机制通信过程的正确性,rfc7348标准中规定,涉及到VXLAN通信的IP报文一律不允许分片,这就要求物理网络的链路层实现中必须提供足够大的MTU值,保证VXLAN报文的顺利传输,这一点可以理解为当前VXLAN技术的局限性。