网络以太网之(1)VLAN协议
Author: Once Day Date: 2024年4月1日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文档可参考专栏:通信网络技术_Once-Day的博客-CSDN博客
参考文章:
- 《TCP/IP详解卷一》
文章目录
- 网络以太网之(1)VLAN协议
- 1. VLAN虚拟局域网
- 1.1 VLAN协议格式
- 1.2 VlAN的作用
- 1.3 VLAN的划分
- 1.4 VLAN的输入规则检查
- 1.5 VLAN的输出规则检查
- 2. VLAN与端口
- 2.1 VLAN的端口类型
- 2.1 VLAN报文输入输出规则
- 2.3 实例分析
1. VLAN虚拟局域网
1.1 VLAN协议格式
VLAN(Virtual Local Area Network)又称虚拟局域网,是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术。
一个VLAN组成一个逻辑子网,即一个逻辑广播域,它可以覆盖多个网络设备,允许处于不同地理位置的网络用户加入到一个逻辑子网中。
VLAN工作在OSI参考模型的第2层和第3层,IEEE标准为 802.1Q,VLAN之间的通信是通过第3层的路由来完成的。
Tag帧格式:
- TPID (Tag Protocol Identifier,也就是EtherType)IEEE定义的新的类型,表明这是一个加了802.1Q标签的帧。TPID包含了一个固定的值0x8100。
- TCI (Tag Control Information),定义了两字节的控制信息。
- User Priority:用于定义用户优先级,共有8个优先级别。IEEE 802.1P 为3比特的用户优先级位定义了操作。
- 最高优先级为7,应用于关键性网络流量,如路由选择信息协议(RIP)和开放最短路径优先(OSPF)协议的路由表更新。
- 优先级6和5主要用于延迟敏感(delay-sensitive)应用程序,如交互式视频和语音。
- 优先级4到1主要用于受控负载(controlled-load)应用程序,如流式多媒体(streaming multimedia)和关键性业务流量(business-critical traffic)。
- 优先级0是缺省值,并在没有设置其它优先级值的情况下自动启用。
- CFI(规范格式指示器Canonical Format Indicator):CFI值为0说明是规范格式,1为非规范格式。它被用在令牌环/源路由FDDI介质访问方法中来指示封装帧中所带地址的比特次序信息。规范格式指地址的十六进制表示中每一个字节的最低位,代表规范格式地址中相应字节的最低位。
- VID:该字段为12-bit, 是对 VLAN 的识别字段,在标准 802.1Q 中常被使用。支持4096(2的12次方) VLAN 的识别。在4096可能的VID 中,VID=0 用于识别帧优先级。 4095(FFF)作为预留值,所以 VLAN 配置的最大可能值为4094。 所以有效的VLAN ID范围一般为1-4094。
1.2 VlAN的作用
- 控制网络的广播风暴
- 安全,由于VLAN 功能划分了多个广播域,不属于同一个VLAN的端口将不能进行通信,增强了安全性。
- 简化网络管理。
1.3 VLAN的划分
基于端口划分:
- 根据交换机接口分配VLAN ID。
- 优点: 划分简单
- 缺点: 是某个用户的端口连到新端口后,需要重新定义。
基于MAC地址划分:
- 根据报文的源MAC地址分配VLAN ID
- 优点: 当用户物理位置移动时,VLAN不用重新配置
- 缺点: 初始化时所有的用户都必须进行配置,如果有几百个甚至上千个用户的话,配置是非常累的。而且这种划分的方法也导致了交换机执行效率的降低,因为在每一个交换机的端口都可能存在很多个VLAN组的成员,这样就无法限制广播包了。另外,网卡如果更换,也会导致VLAN需要重新配置。
基于子网划分:
- 根据报文的源IP地址分配VLAN ID,一般用于对同一网段的用户,进行统一管理的场景。
- 优点: 用户的物理位置改变了,不需要重新配置所属的VLAN,而且可以根据协议类型来划分VLAN,这对网络管理者来说很重要,还有,这种方法不需要附加的帧标签来识别VLAN,这样可以减少网络的通信量。
基于用户划分:
- 基于用户定义、非用户授权来划分VLAN,是指为了适应特别的VLAN网络,根据具体的网络用户的特别要求来定义和设计VLAN,而且可以让非VLAN群体用户访问VLAN,但是需要提供用户密码,在得到VLAN管理的认证后才可以加入一个VLAN。
1.4 VLAN的输入规则检查
输入规则检查即交换机接收到一个数据报文时,需要判定端口是否在接收到的报文所划分的VLAN中,如果端口不在接收报文所划分的VLAN,则此报文需要被丢弃。
- 对输的帧的VID进行检查,如果VID==0xFFF,报文将会被丢弃。
- 帧的VID属性是否与设置一致,即端口可以使能只接收含有VLAN-TAG的帧,此时收到VID==0x0的报文则直接丢弃。
- 在使能VLAN检查的情况下:端口不在所收到的帧的VID对应的VLAN中,则丢弃此报文。
1.5 VLAN的输出规则检查
输出规则检查用于在报文输出时,判定端口是否在输出报文VID所对应的VLAN中。
- 输出端口不在帧VID对应的VLAN当中,报文被丢弃。
- 如果端口要求输出UNTAG帧,但TAG中的CFI位为1,此时报文被丢弃。
- 当报文通过输出规则检查确定可以在此端口输出时,还需要确定是tag输出还是untagged输出,也即输出报文是否带有802.1q tag,此规则也由用户指定。当确定输出报文为tag报文时,其tag中的VID即为此报文所划分的VLAN ID。
2. VLAN与端口
2.1 VLAN的端口类型
PVID:Port VLAN ID,指端口的缺省VLAN ID。Hybrid端口和Trunk端口属于多个VLAN,所以需要设置缺省VLAN ID。Hybrid端口和Trunk端口的缺省VLAN为VLAN 1。
PVID主要有两个作用:第一对于接收到的Untag包则添加本端口的PVID再进行转发;第二是接收过滤作用,比如只接收等于PVID的VLAN TAG包。
VLAN ID:VLAN TAG包的VLAN ID号,有效范围是1-4094,0和4095都为协议保留值。
- 0 表示不属于任何VLAN,但携带802.1Q的优先级标签,一般被称为Priority-only frame,其一般作为系统使用,用户不可使用和删除。
- 1为系统默认VLAN,即Native VLAN。
- 2-1001是普通的vlan。
- 1006-1024保留仅系统使用,用户不能查看和使用
- 1002-1005是支持fddi和令牌环的vlan
- 1025-4095是扩展的vlan。
Tag、untag:tag是指以太网数据帧中携带有4字节802.1Q信息的VLAN标签,其中vlan id,用于指名数据包属于那个vlan,untag指数据包不属于任何vlan,没有vlan标签。
Access的端口类型:Access口只能属于1个VLAN,一般用于连接计算机的端口。
Trunk端口: Trunk口上可以同时传送多个VLAN的包,一般用于交换机之间的链接。
2.1 VLAN报文输入输出规则
接口类型 | 接收不带Tag的报文 | 接收带Tag的报文 | 发送帧处理过程 |
---|---|---|---|
Access接口 | 接收该报文,并打上缺省的VLAN ID。 | 对比VLAN ID与缺省VLAN ID相同时,接收该报文。 不同时,丢弃该报文。 | 先剥离帧的PVID Tag,然后再发送。 |
Trunk接口 | 打上缺省的VLAN ID。当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。 当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID与缺省VLAN ID相同,且是该接口允许通过的VLAN ID时,去掉Tag,发送该报文。 当VLAN ID与缺省VLAN ID不同,且是该接口允许通过的VLAN ID时,保持原有Tag,发送该报文。 |
Access端口只属于1个VLAN,所以它的缺省VLAN就是它所在的VLAN,不用设置;
Trunk端口属于多个VLAN,所以需要设置缺省VLAN ID。缺省情况下,Trunk端口的缺省VLAN为VLAN 1 如果设置了端口的缺省VLAN ID,当端口接收到不带VLAN Tag的报文后,则将报文转发到属于缺省VLAN的端口;当端口发送带有VLAN Tag的报文时,如果该报文的VLAN ID与端口缺省的VLAN ID相同,则系统将去掉报文的VLAN Tag,然后再发送该报文。
2.3 实例分析
Tag table表示是否输出Tag帧。
成员table表示是否属于该VLAN。
- 端口1收到Untagged帧,打上默认的PVID=1。
- 端口2不属于VLAN 1网络,因此不能转发。
- 端口3属于VLAN 1网络,且需要转发Tag帧。
- 端口4属于VLAN 1网络,且需要输出Untagged帧。
- 端口1和4非Access/Trunk口,因为PVID指向的VLAN,不能输出Tag帧,都应该是Untagged帧。端口4缺省PVID为3,根据Trunk口规则,非缺省PVID都输出Tag帧。
- 端口1输入Tagged帧,Vid=2,其属于VLAN 2成员,因此可以输入。
- 端口2非VALN 2成员,不输出。
- 端口3缺省PVID为2,因此不能输出Tagged帧,因此非Access/Trunk口。
- 端口4缺省PVID为3,因此VLAN 2要输出Tagged帧,因此非Access/Trunk口。
总结:
- 默认PVID不能输出Tagged帧,非默认PVID必须输出Tagged帧。
Once Day
也信美人终作土,不堪幽梦太匆匆......
如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注,再加上一个小小的收藏⭐!
(。◕‿◕。)感谢您的阅读与支持~~~