简洁易懂说VLAN

1. VLAN概述


虚拟局域网(Virtual Local Area Network,VLAN),VLAN最主要的作用是分割局域网中广播域。传统交换机组成的LAN中,往往包含了成千上万的主机,当主机越来越多时广播帧对网络的影响将会越来越严重,造成网络传输性能下降。VLAN的出现使得这一问题得到了解决,因此VLAN的提出主要是用来分割广播域,使得一个VLAN对应一个广播域,不同VLAN之间不通过路由或者三层交换设备无法进行通信,使得广播域减小对网络的影响大幅度下降,增强了网络的灵活性和易用性。


2. VLAN原理


从第一节可以看出,VLAN是属于二层的一种标准,因此VLAN主要应用于交换机。VLAN的端口访问类型为访问链接和汇聚链接两种类型。
2.1 访问链接
访问链接(Access Link),指的是端口类型为访问链接的,仅转发数据给当前端口所属的VLAN,访问链接类型端口通常与客户机相连。设置访问链接的方法分为静态VLAN和动态VLAN。
2.1.1 静态VLAN
静态VLAN又被称为基于端口的VLAN。是指明确指定某个端口属于某个特定的VLAN的一种方法。由于需要将交换机每个端口都指定VLAN,因此当网络中的计算机数目过多(比如数百台)后,这种一一设定的操作就会变得很复杂;而且,客户机每次变更所连端口,必须同时修改该端口所属VLAN。这显然不适合需要频繁改变网络拓扑的网络。
2.1.2 动态VLAN
为了解决静态VLAN存在的上述问题, 提出了动态VLAN。动态VLAN根据每个端口所连接的客户机的信息随时改变所属的VLAN,来避免静态VLAN的需要频繁变更VLAN标识的操作。动态VLAN分为三类,具体如下:

(1) 基于MAC地址的VLAN

  基于MAC地址的VLAN,通过查询并记录端口所连接的主机MAC地址来决定端口属于哪个VLAN。如主机A的MAC地址被设定为VLAN10,那么不论主机A连接在交换机的哪个端口A都会被划分到VLAN10中,即主机A连接1端口时,1端口属于VLAN10,连接2端口时,2端口属于VLAN10,以此类推。由于该划分方法基于MAC地址划分来决定VLAN所属,在设定时必须调查所连接的所有计算机的MAC,并且如果主机更换了网卡或MAC地址还是需要再更改配置。该方法属于OSI参考模型二层设定访问链接的方法。

(2) 基于IP地址的VLAN

  基于IP地址的VLAN,通过所连接的计算机IP地址来划分VLAN所属。不像基于MAC地址的VLAN,即使主机更换了网卡,只要其MAC地址不变就可以加入原先的VLAN中。该方法属于OSI参考模型三层设定访问链接的方法。

(3) 基于用户的VLAN

  基于用户的VLAN,则是根据当前交换机各个端口所连接的主机当前登录的用户,来区分VLAN所属。这里的用户,一般是指计算机的操作系统用户。该方法属于OSI参考模型四层设定访问链接的方法。
一般而言,决定端口所属VLAN时使用的信息所属层次越高,对构建VLAN网络就越灵活。

2.2汇聚链接
  访问链接主要用来单个交换机的VLAN所属时的设置。如果需要设置跨越多台交换机的VLAN时,如果使用访问链接,则不同VLAN之间都需要使用网线来实现互联。如果VLAN数目很多,浪费了网线不说也占有了交换机的大量端口来实现VLAN互联,这是对交换机端口资源的一种浪费,同时也限制了网络的扩展。
为了避免上述情况发生,提出了一种新的端口链接类型,即汇聚链接(Trunk Link)。链接类型为汇聚链接的端口能够转发多个不同VLAN之间的数据包。这种情况下要构建多台交换机组成VLAN网络只需将相连接的交换机端口设置为汇聚链接类型即可。不需要像访问链接那样针对不同的VLAN进行链接,从而提高交换机的端口利用率。
在交换机的汇聚链接上,通过对数据帧附加VLAN信息,构建跨越多台交换机的VLAN。附加VLAN信息的方法最具代表性的有如下两种:
(1) ISL
  ISL即Inter Switch Link,是Cisco产品支持的一种在汇聚链路上增加的VLAN协议,由于该方式是属于Cisco私有,故不做深入介绍。
(2) IEEE 802.1Q
  IEEE 802.1Q,是经过IEEE工作组认证的对数据帧附加VLAN识别信息的一种协议。802.1Q的数据帧结构与以太帧结构对比如图2.1所示。

图 2.1 以太帧与802.1Q帧结构对比图
  

  IEEE802.1Q协议通过在以太帧中增加4个字节的附加信息来作为VLAN识别信息。附加信息位于“源MAC”于“TYPE”字段之间。具体内容为2个字节的TPID(Tag Protocol IDentifier)和2个字节的TCI(Tag Control Information)。TPID字段的固定值为0x8100表明以太帧使用了802.1Q协议。通过识别该字段判断是否为VLAN数据帧。TCI中主要包含了三个子字段分别为PRIO、CFI和VLAN ID。其中:
  ① PRIO占3bit,表示报文的优先级,分为8个等级,取值0到7,7为最高优先级,0为最低优先级。
  ② CFI为规范格式指示符标识,占1bit,为0表示规范格式,应用于以太网;为1表示非规范格式,应用于Toekn Ring。
  ③ VLAN ID占12位,用于表示VLAN的归属,最多可以识别4096个VLAN即VLAN0到VLAN4095,由于VLAN0和VLAN4095保留,因此最多有4094个VLAN。
  VLAN数据包结构如图2.2所示。图中红色部分带有VLAN标识的数据。
  

图2.2 VLAN数据包结构

3. VLAN通信机制

  VLAN通信分为VLAN内的通信和VLAN之间的通信。

3.1 VLAN内通信

  VLAN内的通信如图3.1所示。

 图3.1 VLAN内通信

  如图3.1中,主机A与主机B同属于VLAN1,主机C与主机D同属于VLAN2。当主机A与主机B通信时,首先主机A会广播ARP请求获取主机B的MAC地址,由于主机A与主机B在同一VLAN内,该ARP请求会被发送至主机B处,主机B收到ARP请求后,发送ARP回应给主机A告诉主机A它的MAC地址。此时主机A向主机B发送数据包到端口1经过交换机查询目的MAC可知,主机B连接在端口2上,并将数据包转发到端口2,此时主机B则收到了主机A的数据。表明主机A与主机B可以进行通信。

3.2 VLAN间通信

  VLAN间通信指的是不同VLAN之间的主机进行通信。如图3.2所示,主机A与主机B属于同一VLAN自然能够进行通信。当主机A与主机C需要进行通信时,由于这两台主机属于不同的VLAN,意味着分属于不同的广播域。当主机A发送ARP广播获取主机C的MAC地址时,ARP请求到达不了主机C上就会被丢弃。因此VLAN间的通信无法在二层技术上完成,需要借助三层设备,路由器或者三层交换机。具体拓扑如图3.2所示。

图3.2 VLAN间通信

  由于VLAN将交换机从逻辑上分为了多个虚拟的交换机,因此不同VLAN的IP应属于不同网段。假设VLAN1属于192.168.2.0/24网段,VLAN2属于192.168.3.0/24网段。当主机A与主机C通信时,首先主机A会发送数据到端口1,由于主机A与C属于不同VLAN属于不同网段,则需要将数据包发送网关上进行路由,此时交换机端口5链接类型为Trunk类型,表明该端口可以同时接收和发送VLAN1与VLAN2的数据包。因此将端口5与路由器相连,此时交换机会将该数据包发送到端口5上,由于为汇聚链接数据包发出时会被附加上VLAN1的标识,路由器收到该包时确认VLAN识别信息,得知该包时属于VLAN1的,因此交给路由器上提前设定好的VLAN1子接口接收处理该数据包;紧接着判断路由,由于主机C处于192.168.3.0/24网段,VLAN1子接口会将该数据包发往VLAN2子接口,由于是汇聚链接VLAN2子接口发送出去时会将该数据包附加上VLAN2的标识,发送到端口5上,此时只需将数据包转发到端口3处链接的主机C即可。综上所述,不同VLAN之间的通信即使双方链接在同一交换机上也必须经过“发送方 - 交换机 - 路由器 - 交换机 - 接收方”流程。其实质是不同网络之间的通信。
  三层交换机处理VLAN间通信与路由器相似,三层交换机集成了路由功能因此可以不需要路由器就可以进行不同VLAN之间的数据通信,但其实质与路由器的情况类似,这里不再赘述。

4. VLAN总结

  总的来说,VLAN划分是为了分割广播域,减小广播对网络影响。路由器的VLAN功能主要是为了与支持VLAN的交换机进行互联而设计的,其创建的VLAN子接口属于一种三层接口可以具有路由功能为不同VLAN间通信服务。各个VLAN子接口为各个VLAN网络中的网关,类似于传统LAN网络中的网关,这样才可以实现不同VLAN间主机通信。

简洁易懂说VLAN的更多相关文章

  1. sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)

    sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂) 測试环境:sql 08, 08 R2, 2010,  2012, 2014 等 declare @agent t ...

  2. Leetcode2.两数相加——简洁易懂

    > 简洁易懂讲清原理,讲不清你来打我~ 输入两个链表,相同位置相加,进位给下一个位置,输出相加后的链表![在这里插入图片描述](https://img-blog.csdnimg.cn/f43b7 ...

  3. Leetcode3.无重复字符的最长子串——简洁易懂

    > 简洁易懂讲清原理,讲不清你来打我~ 输入字符串,找到无重复.最长.子串,输出长度 ![在这里插入图片描述](https://img-blog.csdnimg.cn/c0565c943c654 ...

  4. Leetcode1.两数之和——简洁易懂

    > 简洁易懂讲清原理,讲不清你来打我~ 输入一个数组和一个整数,从数组中找到两个元素和为这个整数,输出下标![在这里插入图片描述](https://img-blog.csdnimg.cn/img ...

  5. 【简洁易懂】CF372C Watching Fireworks is Fun dp + 单调队列优化 dp优化 ACM codeforces

    题目大意 一条街道有$n$个区域. 从左到右编号为$1$到$n$. 相邻区域之间的距离为$1$. 在节日期间,有$m$次烟花要燃放. 第$i$次烟花燃放区域为$a_i$ ,幸福属性为$b_i$,时间为 ...

  6. 使用太过简单jqprint源码也极其简洁易懂

    就像开发一样, 这篇文档如果没有人关心和维护, 里面的内容就会变得老旧, 过时而不再具有参考价值. 所以, 我希望所有看到并喜欢这篇文档的人都一起来维护它. 放心大胆的提交 Pull Request ...

  7. <%@ include file=” ”%> ——最简洁易懂的解释

    <%@ include file=” ”%> 假如 在B.jsp 中,使用 <%@ include file=”A.jsp”%>  ,那么就是把 A.jsp 的内容 原封不动 ...

  8. Vue中Vuex的详解与使用(简洁易懂的入门小实例)

    怎么安装 Vuex 我就不介绍了,官网上有 就是 npm install xxx 之类的.(其实就是懒~~~哈哈) 那么现在就开始正文部分了 众所周知 Vuex 是什么呢?是用来干嘛的呢? Vuex ...

  9. java开发学生信息管理系统的实现(简洁易懂),适合计算机专业学生参考,课程设计、毕业论文设计参考等

    编写一个简单的学生管理信息系统. 在oracle中设计一张学生表,以学号作为关键字. 其他学生信息有:姓名.手机号. 在进入系统时,显示如下菜单: ************************** ...

随机推荐

  1. TCP数据段格式+UDP数据段格式详解

    TCP 报文格式 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP 报文段的报头有 10 个必需的字段和 ...

  2. Codeforces 884E E. Binary Matrix

    题 OvO http://codeforces.com/contest/884/problem/E 884e 解 考虑并查集,每个点向上方和左方的点合并,答案即为1的总数减去需要合并的次数 由于只有1 ...

  3. 部署LVS-DR集群

    设置Proxy代理服务器的VIP和DIP [root@proxy ~]# cd /etc/sysconfig/network-scripts [root@proxy network-scripts]# ...

  4. sql 查询列

    select 'A' AS A , B ='B'

  5. jQuery事件之绑定事件

    语法: $(selector).bind(eventType[, eventData], handler(eventObject)); 参数解释: eventType(String): 一个包含一个或 ...

  6. Xshell远程连接的具体操作和Xshell多会话设置小技巧

    前几天给大家分享了Xshell的安装教程,今天给大家分享如何在Xshell中进行远程连接,并且分享一下如何设置一条命令可以发送多个终端,这里以Xshell6为例进行说明,具体的教程如下. 1.依次点击 ...

  7. [清华集训2016]如何优雅地求和——NTT

    题目链接: [清华集训2016]如何优雅地求和 题目大意:给出一个多项式$m+1$个点值$a_{0},a_{1}...a_{m}$(其中$f(i)=a_{i}$),并给出两个数$n,x$,求$Q(f, ...

  8. 【免费电子书】这可能是全网最齐的程序员编程电子书PDF合集了!

    [toc] 最近博主

  9. oracle查看表空间的大小及使用情况sql语句

    --------------------------tablespace------------------------------------------------ 1.//查看表空间的名称及大小 ...

  10. JDK压缩指针

    https://www.cnblogs.com/iceAeterNa/p/4877549.html