【达哥讲网络】第4集:80%网络人不懂的VLAN通信原则和规则

2023-11-23 02:59

本文主要是介绍【达哥讲网络】第4集:80%网络人不懂的VLAN通信原则和规则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学网络的人,VLAN这个词大家都不陌生,但这么些年来,在几十个读者群所提的问题中,如果要统计的话,关于VLAN方面的问题可能将近占了三分之一,特别是涉及到对VLAN通信原理理解方面的配置问题。

1. VLAN的引入背景

VLAN技术的引入主是为了解决传统二层交换网络存在的以下问题。

  • 广播域过大,域中广播报文太多影响网络性能。

传统的二层交换网络是以IP网段(IP网络或IP子网)进行划分的。在同一IP网段的所有设备都在同一广播域中,这样每个设备发送的广播报文都将在整个IP网段进行传播。如果广播域过大(设备较多),过多的广播报文会严重影响网络性能。有了VLAN后,可以根据需要把同一IP网段中的任意位置的设用户加入同一VLAN中(参见图1),随意缩小广播域,减小广播报文对网络性能的影响。

图1

 

  • 无法为同一IP网段的部分设备精准部署安全策略或QoS策略。

如果没有VLAN,则安全策略和QoS策略只能以IP网段或个别IP地址进行流过滤,这样很难做到对随机的小范围用户精准部署、实施这些策略。有了VLAN后,就只需把需要实施相同策略的用户加入同一VLAN即可。

  • 网络安全脆弱、健壮性不强。

在传统的同一IP网段二层交换网络中,各设备间可以直接进行二层互访,这样有时不能满足用户的安全需求。同时,同一二层交换网络中的任意一台设备发生了故障都有可能影响整个交换网络中的用户通信。划分了VLAN后,不同VLAN中的用户直接二层隔离,不能直接进行二层互访,提高了网络安全性。同时一个VLAN中的网络故障,也不会影响另一个VLAN中的用户通信,提高了网络健壮性。

2. VLAN通信原则

VLAN的配置看似很简单,但要真正进行正确的配置却不是件容易的事,必须先懂得VLAN的通信原理。VLAN通信主要涉及到VLAN的注册、交换机端口的VLAN加入、交换机端口的PVID(端口VLAN ID)、交换机端口的VLAN标签添加和剥离操作等方面。要确保同一VLAN内用户的二层通信成功,首先要满足以下原则:

  • 通信路径中各交换机上都要注册(可以是手动注册,也可以自动注册)通信双方所加入的VLAN。
  • 通信路径中各交换机端口都要允许帧中所携带的VLAN标签所对应的VLAN通过,即各交换机端口都要加入对应的VLAN。

在华为交换机中,加入的方式可以是Access、Trunk或Hybrid方式,这三种加入方式的VLAN帧收发原理将在本课程后面介绍。

  • 如果帧中有多层VLAN标签,则仅按外层VLAN标签进行转发,则其它VLAN标签仅作为帧的数据部分。
  • 所有的标签剥离操作均是从本交换机端口向对端设备发送数据帧时发生,在启用了VLAN的交换机内部所有数据帧均是带有VLAN标签的。

3. 交换端口类型及VLAN标签操作

在华为交换机中,二层端口分为Access、Trunk和Hybrid三种类型。其实这三种交换端口都存在一个PVID,Acess端口的PVID就是该端口所加入的缺省VLAN,Trunk和Hybrid类型端口因为可以加入多个VLAN,所以它们的PVID是可配置的。在VLAN帧的发送和接收中,这三种类型的交换端口对VLAN标签的操作方式各有不同,具体如下表所示。

接口类型

对接收不带标签的报文处理

对接收带标签的报文处理

发送帧处理过程

Access接口

接收该报文,并打上缺省的VLAN ID(即PVID)。

当VLAN ID与缺省VLAN ID相同时,接收该报文;当VLAN ID与缺省VLAN ID不同时,丢弃该报文。

先剥离帧的PVID标签,然后再发送。

发送的帧总是不带VLAN标签

Trunk接口

打上缺省的VLAN ID,当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文,否则丢弃该报文。

当VLAN标签对应的VLAN在接口允许通过的VLAN ID列表里时,接收该报文,否则丢弃该报文。

当VLAN标签对应的VLAN与PVID相同,且是该接口允许通过的VLAN ID时,剥离VLAN标签,发送该报文,否则保持原有VLAN标签不变,发送该报文。

PVID仅当收到不带VLAN标签的帧,或者帧中VLAN标签对应的VLAN ID与PVID相同的帧时起作用,其它情况均不用考虑端口PVID

Trunk端口缺省情况下仅允许了VLAN 1的帧不带标签通过

Hybrid接口

打上PVID标签,当缺省PVID在允许通过的VLAN ID列表里时,接收该报文,否则丢弃该报文。

当VLAN标签对应的VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文,丢弃该报文。

当VLAN标签对应的VLAN ID是该接口允许通过的VLAN ID时,发送该报文。可以通过命令设置发送时是否携带VLAN标签。

PVID仅当收到不带VLAN标签的帧时起作用,其它情况均不用考虑端口PVID。数据帧是否会剥离VLAN标签发送与PVID无关,需手工指定

Hybird端口缺省情况下仅以不带VLAN标签方式允许VLAN 1的帧通过

 4. VLAN内通信规则及示例

同一IP网段、同一VLAN内的用户间通信依然是依据MAC地址表进行转发的,但此时的MAC地址表中与非VLAN场景下的MAC地址表相比,增加了一个“VLAN ID”字段。帧转发的规则如下:

  • 如果帧中“目的MAC地址”+“VLAN ID”字段与本地的MAC表中某一表项匹配了,且三层转发标志未置位,则进行二层交换,会直接将报文根据MAC地址表的出接口发出去。
  • 如果帧中“目的MAC地址”+“VLAN ID”字段没有与本地MAC地址表中任意表项匹配,则向除帧接收接口外的所有其它允许对应VLAN通过的接口泛洪该报文,以获取目的主机的MAC地址。

【说明】三层交换机为VLAN创建了VLANIF接口(作为对应VLAN的网关)中,并配置了IP后,会在交换芯片的MAC地址表中添加该VLANIF三层接口的“MAC地址”+“VLAN ID”字段对应的MAC地址表项,并且该表项的三层转发标志置位(置1),当报文的目的MAC匹配这样的MAC地址表项(相当于匹配了VLAN的网关MMAC地址表项)后,说明需要进行三层转发,继续查找交换芯片的三层表项。其它MAC地址表的“三层转发标志位”置0,仅进行二层转发。

图2中PC1与PC2在同一IP网段,且同在VLAN 2中。假设两交换机上还未建立任何转发表项,现两PC用户要实现二层互访。

图2

 因为PC1和PC2均在VLAN 2中,而且连接在不同交换机上,根据前面介绍的VLAN通信原则可知,必须同时在SW1和SW2两交换机上注册VLAN 2。在此仅以手动注册为例进行介绍,即要同时在SW1和SW2上手动创建VLAN 2,并且把连接PC1、PC2的GE0/0/2端口均加入到VLAN 2中,且缺省VLAN必须为2,使得这两个端口在收到两主机发来的不带VLAN标签(通常主机发送的数据帧是不带VLAN标签的)的数据帧时打上VLAN 2的标签。理论上,这两个端口可以配置为Acess、Trunk和Hybrid任意一种类型(根据前面介绍的三种交换端口的VLAN标签操作方法可知,它们的配置方法是不一样的,在此不作介绍。)但交换机连接主机的端口通常配置为Access类型,缺省VLAN为VLAN 2。这样当接收到主机发送的数据帧后会打上缺省的VLAN 2标签。

同样,根据前面介绍的VLAN通信原则知道,如果不考虑VLAN标签交换,在PC1与PC2的通信路径中各交换机端口必须允许VLAN 2通过,所以SW1与SW2连接的GE0/0/1端口也必须允许VLAN 2通过。交换机之间连接的端口通常是配置为Trunk类型或Hyrbid类型(配置方法也不一样),而且为了使得VLAN 2数据帧保持VLAN 2标签(当然,具体是否要保持帧中的VLAN标签不变,要视具体拓扑结构和通信需求而定),必须使通过GE0/0/1端口发送的数据帧保留原来的VLAN 2标签。在此假设SW1和SW2的GE0/0/1端口均配置为Trunk类型,PVID保持缺省的VLAN 1不变,允许VLAN 2通过。

【说明】Trunk端口只要帧中的VLAN标签对应的VLAN ID与端口的PVID不一致则会保留帧中VLAN标签不变发送(前提是端口要允许该VLAN通过)。Hybrid端口发送数据帧时是否保留原来的VLAN标签是通过命令指定的,与PVID无关。

数据帧在通过接口发出时必须进行数据链路层的封装,在二层交换网络的通信中,必须获取目的端的MAC地址。而主机之间的MAC地址获取是通过ARP协议根据目的IP地址进行解析的,所以即使在同一VLAN内主机之间的二层通信也要先通过ARP协议获取目的端MAC地址。PC1与PC2之间的二层通信流程如下:

(1)PC1首先判断目的主机PC2的IP地址跟自己的IP地址在同一网段,于是发送ARP广播请求报文,以获取目的主机PC2的MAC地址。ARP请求报文中的“目的MAC地址”字段各位为全1,“目的IP地址 ”字段为PC2的IP地址10.1.1.3。

(2)ARP请求报文到达SW1的接口GE0/0/2后,发现是不带VLAN标签的帧,于是给报文添加VLAN 2的标签(此时的VLAN 2等于该端口的PVID),然后将报文的“源MAC地址”+“VLAN ID”与入接口的对应关系(1-1-1, 2, GE0/0/2)添加进MAC地址表中,生成PC1的MAC地址表项。然后在除入接口GE0/0/2外,所有允许VLAN 2通过的交换机端口上广播该ARP请求报文。

(3)当ARP请求报文从SW1的GE0/0/1端口(Trunk类型)发送时,因为该端口的PVID=1(缺省值),与报文的VLAN 2标签不同,且允许VLAN 2通过,所以直接透传(不剥除报文中的VLAN 2标签)该报文到SW2的GE0/0/1端口。

(4)SW2的GE0/0/1端口(Trunk类型)收到该ARP请求报文后,判断报文的VLAN 2标签对应的VLAN 2是该端口允许通过的VLAN,接收该报文。同时,也将ARP请求报文中的“源MAC地址”+”VLAN ID“和入接口 的对应关系添加进MAC地址表中,生成PC1的MAC地址表项。

【说明】这样,在SW1和SW2两台交换机上都已生成了PC1的MAC地址表项,可直接用于发送到PC1的数据帧的转发。

(5)SW2根据ARP请求报文中的“目的MAC地址”+“VLAN ID”在本地MAC地址表中进行查找,初始状态下没有找到,于是在除入接口GE0/0/1外,所有允许VLAN2通过的端口上广播该ARP请求报文。但SW2在从GE0/0/2端口发出ARP请求报文前,根据接口的Access配置,会先剥离其中的VLAN 2标签。

(6)PC2收到该ARP请求报文后,将其中的“源MAC地址”(PC1的MAC地址)和“源IP地址”(PC1的IP地址)对应关系记录在ARP表中,生成PC1的ARP表项。然后比较报文中的“目的IP地址”和自己的IP地址,发现相同,判定原来所收到ARP请求报文是发给自己的,于是向PC1发送ARP响应报文,报文中的源MAC地址是自己的MAC地址2-2-2,目的IP地址为PC1的IP地址10.1.1.2,不带VLAN标签。

(7)SW2的GE0/0/2端口收到ARP响应报文后,同样给报文添加VLAN 2的标签,同时将报文中的“源MAC地址”+“VLAN ID”与接口的对应关系(2-2-2, 2,GE0/0/2)添加进MAC地址表中,生成PC2的MAC地址表项。然后根据报文的“目的MAC地址”(PC1的MAC地址)+“VLAN ID”(1-1-1, 2)在本地查找MAC地址表。由于SW2在前面已生成了PC1的MAC地址表项,所以会查找成功,然后根据表项所映射的GE0/0/1端口转发该ARP响应报文。但SW2将向其出接口GE0/0/1转发PC2发送的ARP响应报文前,因为该端口为Trunk类型,且PVID=1(缺省值),与报文中的VLAN 2标签不同,但允许VLAN 2通过,所以直接透传报文到SW1的GE0/0/1端口。

(8)SW1根据收到的ARP响应报文中的“目的MAC地址”+“VLAN ID”在本地MAC地址表中进行查找,由于SW1也已在前面已生成了PC1的MAC地址表项,所以会查找成功,然后根据表项所映射的GE0/0/2端口转发该ARP响应报文。但因为GE0/0/2端口是Access类型,所以在转发前会剥离报文中的VLAN 2标签。

(9)PC1在收到PC2的ARP响应报文后,依据报文中的“源MAC地址”和“源IP地址”字段值生成PC2的ARP表项。

后续PC1与PC2的互访,由于彼此已学习到对方的MAC地址,可以直接进行帧封装了,报文中的“目的MAC地址”直接为对方的MAC地址。这样PC1、PC2发送的VLAN 2数据帧到达SW1、SW2时就可以直接根据帧中的目的MAC地址在本地查找对应的MAC地址表项,获取转发出接口,同时根据出接口上的VLAN配置决定数据帧是否可以从该端口进行转发。

 

 

 

 

 

这篇关于【达哥讲网络】第4集:80%网络人不懂的VLAN通信原则和规则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414860

相关文章

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py