首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

网络工程师:VLAN是啥东东

有了DHCP和DNS,妈妈再也不用担心我不懂IP了,可以愉快地上网了!

但是,咱们网络人才,当然不能满足于只是可以愉快地上网,还必须进一步优化。

在一个局域网中,如果上网的人越来越多,就会有人抱怨网速太慢,局域网内部的电脑之间互访也会慢得难以忍受。这都是因为电脑要访问别人,大多都会发ARP Request报文。而这个报文,是“很大声”的广播报文!

你想,一个教室里坐30人和300人,感觉很不同吧。人数越多,噪音越大!

如果把这300人分成10个班,去10个不同的教室,噪音问题基本就解决了。

电脑也是一样,一个广播域中电脑数量越多,广播报文也就越多,一方面广播报文会占用大量带宽,另一方面电脑也要消耗大量资源去处理很多无用的广播报文。

怎么才能把一个广播域控制在一个合理的范围呢?

路由器?是的,路由器是网络层(也叫三层)设备,确实可以隔离广播域,但是用路由器来隔离广播,太奢侈了。

局域网中的电脑一般都接在交换机上,而交换机是链路层(也叫二层)设备。能不能在二层交换机上实现隔离广播域的目的呢?

必须能,这就是VLAN(Virtual Local Area Network,虚拟局域网)技术。

每一个VLAN都是一个独立的广播域,我们可以在交换机上灵活通过VLAN控制每个广播域可以容纳多少电脑,大大提高网络性能,降低电脑处理广播报文的负担。

交换机如何区分不同的VLAN帧呢?比如上图中,VLAN 1中的某电脑发出了数据帧,交换机怎么区分这个帧是VLAN 1而不是VLAN 2的。

这就需要修改一下以太网的封装格式,给它增加个标识字段TAG。

上面是标准以太网帧,为了能让交换机区分不同的VLAN帧,我们在SMAC与Type之间插入了一个TAG。我们把带有TAG的帧,叫802.1Q帧。

TAG共占4个字节,32个比特,有四个组成部分:

Type ID:占2个字节,值为十六进制0x8100。交换机刚收到一个帧时,并不知道这是一个标准帧还是一个802.1Q帧,通过查看SMAC后的Type,如果看到的是0x8100,便知道这是一个802.1Q帧,否则就是一个标准帧。

Priority:优先级,占3个比特。表示这个帧的重要性。这属于QoS,以后再讨论。

CFI:占1个比特,用于与其他局域网协议兼容,一般取值为。

VLAN ID:交换机用于区分不同VLAN帧,占12个比特,理论取值为0~4095。其中,全和全1都保留不用,所以取值范围为1~4094。

我们曾在文章(2)中讨论过交换机怎么工作的,其实,交换机的MAC地址表中还有一列,但当时我们还没有接触VLAN,所以给省略了,现在补上:

这列就是PVID,是指端口的VLAN ID(Port Vlan ID),都填写为“1”是因为VLAN1是交换机的缺省VLAN,即使你不配置VLAN,VLAN1也存在,而且默认是所有端口的PVID。

如果我们创建个VLAN2,并把端口4的PVID修改为VLAN2,变成这样:

现在我们来分析一下交换机的工作过程。

首先需要明确一点的是,所有终端设备不论是发出还是接收的帧,都是标准以太网帧。如果终端设备收到802.1Q帧,解封装时由于不知道Type值0x8100是什么,会丢弃。802.1Q帧一般由交换机或路由器以太网接口处理。

假设电脑A发出任意数据帧(不论是单播、广播还是组播),来到交换机端口1,端口1收到一个帧后,会做以下三件事:

第一件事,检查这个帧是标准帧还是802.1Q帧(就是带不带TAG),如果是802.1Q帧,直接做第二件事,否则根据自己的PVID,把此标准帧加上TAG,变成802.1Q帧(我们只填写了VLAN ID,其它省略):

第二件事,交换机在MAC地址表中查找PVID与此帧的VID相同的所有记录。如果此帧是单播帧,则查找PVID=VID且MAC地址=DMAC的记录,找到后把帧送到对应端口。若没有找到,则把此帧送到所有符合PVID=VID记录的端口(除收到此帧的端口1)。你看,这个帧带了VID=1,交换机就不会再把它送到PVID不是1的端口了,比如端口4,从而实现了不同VLAN间的隔离;

第三件事,端口要把802.1Q的帧发出去,需要根据这个端口的类型来决定要不要把TAG去掉。

端口类型为Access,且PVID=VID时,去掉TAG,变成标准帧发出去;

端口类型为Trunk时,有两种情况:一是PVID=VID,和Access类型一样,去掉TAG,变成标准帧发出去;二是PVID≠VID,且该端口允许此VID通过,则保留TAG,把此802.1Q帧原封不动发出去。

Access端口一般用于连接终端设备,比如电脑、服务器等;Trunk端口一般用于交换机之间互连。

我们来举一个例子说明。如下图:

PCA、PCB、PCC分别连接在SWA的端口1、端口2、端口3上,三个端口都是Access类型,其中端口1和端口2的PVID为1,端口3的PVID为2;SWA用端口4与SWB的端口3相连,这两个端口都是Trunk类型,PVID都为1,且都允许VLAN1和VLAN2通过;SWB端口1连接PCD,类型为Access,PVID为1;端口2连接PCE,类型为Access,PVID为2。

PCA访问PCB过程:PCA发出标准帧来到SWA端口1,端口1发现是标准帧,打上TAG,VID填写PVID的1。然后交换机查看MAC地址表,仅在端口2和端口4中查找匹配项,不会查找端口3,发现仅端口2符合条件,将帧送到端口2。端口2收到后,把TAG拆除,变成标准帧发出,PCB收到。

PCC访问PCE过程:PCC发出标准帧来到SWA端口3,端口3发现是标准帧,打上TAG,VID填写PVID的2。然后交换机查找MAC地址表,发现只有端口4符合条件(虽然端口4的PVID为1,但此端口是Trunk,且允许VLAN2通过),将帧送到端口4。端口4收到后,发现帧中的VID为2,而自己的PVID为1,不相等,于是把此802.1Q帧原样发出。SWB的端口3收到后,发现此帧是802.1Q帧,不再打TAG,直接查找MAC地址表,发现端口2符合条件,把此帧送到端口2,端口2拆除TAG,变成标准帧后发出,PCE收到。

从上述过程我们发现,Access端口只处理一个VLAN,而Trunk可以处理多个VLAN。交换机处理VLAN时,不管收到帧的端口是什么类型,只要是收到标准帧一律把PVID打上,收到已带TAG的帧就不打了。从端口发出时是否带TAG看端口类型:

从Access端口发出一定拆除TAG变回标准帧;

从Trunk端口发出看帧的VID是否与端口的PVID相同,相同则拆除TAG发出,不相同则不拆除、原封不动发出(前提是端口允许此VLAN通过)。

思考:PCA访问PCB的单播帧会不会也从端口4发出去?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200506A0JO0J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券