有了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发出去?
领取专属 10元无门槛券
私享最新 技术干货