写给非网工的CCNA教程(6)VLAN和802.1q协议

    xiaoxiao2023-10-31  185

    1 VLAN的引入

        上文中,我们说到通过LAN的方式实现同网段通信,在级联的交换机数量和终端设备数量很大时,会导致广播域的扩大,浪费交换机的带宽,也白白消耗非目标设备的性能。

        因此我们 引入了VLAN机制:我们可以在这些级联的交换机上启用VLAN,然后把需放在同一个广播域的端口配置成相同的VLAN ID。这样的话,广播就只会在具有相同的VLAN ID的端口上转发。如下图所示:

        PC-A和PC-B连接二层交换机SW-A上,PC-C和PC-D连接在二层交换机SW-B上,PC-E和PC-F连接在二层交换机SW-C上。

        PC-A的IP地址为192.168.10.1 /24,PC-F的IP地址为192.168.10.6 /24,两者在同一个网段,也处于同一VLAN 10(Access VLAN);

        PC-B的IP地址为192.168.20.2 /24,PC-C的IP地址为192.168.20.3 /24,两者在同一个网段,也处于同一VLAN 20(Access VLAN);

        PC-D的IP地址为192.168.30.4 /24,PC-E的IP地址为192.168.30.5 /24,两者在同一个网段,也处于同一VLAN 30(Access VLAN);

        SW-A和SW-B级联,级联口属于Trunk VLAN,放行VLAN 10和20;

        SW-B和SW-E级联,级联口也属于Trunk VLAN,放行VLAN 10和30。

        各个终端设备的IP地址和MAC地址对照表,如下所示。

    设备IP地址MAC地址所连交换机端口所连交换机端口属于的VLANPC-A192.168.10.1 /241111.1111.1111SW-A:Gi0/1VLAN 10PC-B192.168.20.2 /242222.2222.2222SW-A:Gi0/2VLAN 20PC-C192.168.20.3 /243333.3333.3333SW-B:Gi0/1VLAN 20PC-D192.168.30.4 /244444.4444.4444SW-B:Gi0/2VLAN 30PC-E192.168.30.5 /245555.5555.5555SW-C:Gi0/1VLAN 30PC-F192.168.10.6 /246666.6666.6666SW-C:Gi0/2VLAN 10

     

    2 VLAN对报文的影响

        VLAN是在802.1q这个协议里面定义的,当然802.1q协议除了定义VLAN以外,还定义了二层的QoS功能。没有启用VLAN时,我们的报文是不带vlan tag的,当启用VLAN 后,有些报文会带上vlan tag,当然也有些仍然不带vlan tag。

        不带vlan tag和带有vlan tag的报文,有何区别呢,如下图所示。蓝色部分即为802.1q的头部,占4个字节,也表示该数据带有vlan tag。如果报文不带vlan tag,那么蓝色的802.1q头部是不存在的。

         说说802.1q的头部,如下三点:

        (1)802.1q头部是在Ethernet II帧的【源MAC地址】和【Type】之间加入的,占据4个字节长度。

        (2)802.1q头部本身分为两个部分,Tag Protocol ID为固定值0x8100,用于指明该Ethernet II帧带了VLAN tag,如果不带VLAN tag,那么Ethernet II帧就不会出现802.1q头部。

        (3)802.1q头部另一个部分为Tag Control Information,占2个字节,这部分分成三个小部分:前3bit用于二层QoS;第4个bit保留,一般为0;后面12个bit表示VLAN ID,因此VLAN ID的数量为2^12-2=4094个,12bit的0和12bit的1的要去掉。

     

    3 在交换机上启用VLAN

        上图中,我们提到的Access VLAN和Trunk VLAN,都是手动在交换机上配置的,而且是针对交换机的端口配置的。

        交换机端口所属的VLAN可以有一个或者多个,我们把属于一个VLAN的端口,称为Access口,对应的VLAN称为Access VLAN,属于多个VLAN的端口,称为Trunk口,对应的VLAN称为Trunk VLAN。

        Access口一般用于连接PC、服务器等终端设备,而Trunk口一把用于交换机之间的级联,上图就是这么去做的。关于交换机的Access VLAN和Trunk VLAN的配置,我们以思科交换机为例,如下图所示的SW-A的配置。

    SW-A#show running-config interface gigabitEthernet 0/1 Building configuration... Current configuration : 141 bytes ! interface GigabitEthernet0/1 switchport access vlan 10 switchport mode access spanning-tree portfast end SW-A#show running-config interface gigabitEthernet 0/2 Building configuration... Current configuration : 141 bytes ! interface GigabitEthernet0/2 switchport access vlan 20 switchport mode access spanning-tree portfast end SW-A#show running-config interface gigabitEthernet 0/21 Building configuration... Current configuration : 86 bytes ! interface GigabitEthernet1/0/21 switchport trunk allowed vlan add 10 switchport trunk allowed vlan add 20 switchport trunk native vlan 1 switchport mode trunk switchport nonegotiate end

     

    4 启用VLAN后,交换机处理机制发生了哪些改变

    4.1 交换机端口如何处理报文

        我们知道交换机端口有两种类型,Access口和Trunk口,它们的处理方式还是有点不一样,我们分开讨论。通过本节,我们可以更加深入地理解,对于带有802.1q(vlan tag)和不带802.1q(vlan tag)数据帧的处理机制的不同。如下表所示。 

    交换机端口类型如何处理接收到的数据帧如何处理发送的数据帧(不带tag的数据帧,不会到这一步)数据帧不带vlan tag数据帧带有vlan tagAccess口接收此数据,并且给该数据打上access vlan tag仅仅接收与access vlan tag相同vlan tag的数据帧,其他的丢弃仅仅转发与自己相同vlan tag的数据帧,并且转发前会剥掉vlan tagTrunk口接收此数据,并且该该数据打上native vlan tag接收allowed vlan列表中的vlan tag的数据帧,其他的丢弃

    仅仅转发allowed vlan列表中的带有vlan tag的数据帧,并且如果该vlan tag与native vlan相同则剥掉vlan tag,其他不作处理,直接转发

    4.2 交换机MAC表有哪些改动

        当我们在交换机上把一个端口划到一个VLAN时,此端口对应的MAC表项会加上VLAN ID,如果没有给端口指定VLAN,那么此端口对应的VLAN ID为默认的,一般是1。

        不难看出启用VLAN后,MAC表会新增一列,用于记录各个端口对应的VLAN ID,如下图中SW-A上的MAC表所示。

    SW-A#show mac address-table Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 10 1111.1111.1111 DYNAMIC Gi/0/1 20 2222.2222.2222 DYNAMIC Gi/0/2 20 3333.3333.3333 DYNAMIC Gi/0/21 10 6666.6666.6666 DYNAMIC Gi/0/21

        仔细观察上图,有两个问题,我们需要注意:

        (1)SW-A的MAC表里面没有PC-D和PC-E的表项,为什么呢?

            这就得回到上一级我们对SW-A的配置了,我们在Gi0/1口、Gi0/2口、Gi0/21口,加起来也就启用了VLAN 10和20,根本没有启用VLAN 30,而PC-D和PC-E都属于VLAN 30,所以SW-A的MAC表里面不会有PC-D和PC-E的表项。

        (2)SW-A的MAC表中最后两行,代表的PC-C和PC-F表项,端口都是Gi0/21口,为何VLAN ID不一样呢?

            聪明的你,肯定知道PC-C接在SW-B的Gi0/1口,属于VLAN 20;而PC-F接在SW-C的Gi0/2口,属于VLAN 10;那PC-C在SW-A上的VLAN ID为20,PC-F在SW-A上的VLAN ID为10,没毛病啊。

            真的是这样吗?提个问题,SW-A怎么就知道PC-C和PC-F连接在SW-B和SW-C的哪个端口呢,它两又不是直接连在SW-A上,SW-A又怎么知道呢?

            其实这个得从启用VLAN后,交换机转发数据的机制说起了,接着看下文。

    4.3 交换机数据转发机制有哪些改变

        其实启用VLAN后,二层交换机会对进入到端口的数据帧先处理下,处理过程前面已经说过。处理后的数据在交换机内部一定带有VLAN ID,无论它进入交换机前是否带有VLAN ID。

        接下来根据目的MAC地址查找MAC表时,只会在与数据源VLAN ID相同的MAC表项中查找,找不到再广播。因此启用VLAN后,就让广播的范围局限一个VLAN内部。

    最新回复(0)