本文发布于Cylon的收藏册,转载请著名原文链接~
虚拟局域网VLAN(Virtual Local Area Network),是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。
VLAN内的主机间可以直接通信,而VLAN间不能直接通信,从而将广播报文限制在一个VLAN内。
以太网是一种基于CSMA/CD(Carrier Sense Multiple Access/Collision Detection)的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过交换机实现LAN互连虽然可以解决冲突严重的问题,但仍然不能隔离广播报文和提升网络质量。
在这种情况下出现了VLAN技术,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。
VLAN的作用
-
限制广播域:广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。
-
增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的,即一个VLAN内的用户不能和其它VLAN内的用户直接通信。
-
提高了网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作。
-
灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。
VLAN Tag
要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用以标识VLAN信息。
VLAN Tag各字段含义:
字段 | 长度 | 含义 | 取值 |
---|---|---|---|
TPID | 2Byte | Tag Protocol Identifier(标签协议标识符),表示数据帧类型。 | 表示帧类型,取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。 各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时, 为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致。 |
PRI | 3bit | Priority,表示数据帧的802.1p优先级。 | 取值范围为0~7,值越大优先级越高。当网络阻塞时,设备优先发送优先级高的数据帧。 |
CFI | 1bit | Canonical Format Indicator(标准格式指示位),表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。 | CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。 |
VID | 12bit | VLAN ID,表示该数据帧所属VLAN的编号。 | VLAN ID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094。 |
其中,数据帧中的VID(VLAN ID)字段标识了该数据帧所属的VLAN,数据帧只能在其所属VLAN内进行传输。
对于交换机来说,其内部处理的数据帧都带有VLAN标签,而现网中交换机连接的设备有些只会收发Untagged帧,要与这些设备交互,就需要接口能够识别Untagged帧并在收发时给帧添加、剥除VLAN标签。同时,现网中属于同一个VLAN的用户可能会被连接在不同的交换机上,且跨越交换机的VLAN可能不止一个,如果需要用户间的互通,就需要交换机间的接口能够同时识别和发送多个VLAN的数据帧。
VLAN PVID
缺省VLAN又称PVID(Port Default VLAN ID)。设备处理的数据帧都带Tag,当设备收到UNTagged帧时,就需要给该帧添加Tag,添加什么Tag,就由接口上的缺省VLAN决定。一个物理端口只能拥有一个PVID,当一个物理端口拥有了一个PVID的时候,必定会拥有和PVID相等的VID,而且在这个VID上,这个物理端口必定是Untagged Port。
因此,根据接口连接对象以及对收发数据帧处理的不同,华为定义了4种接口的链路类型:Access、Trunk、Hybrid和QinQ,以适应不同的连接和组网:
- Access接口:一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同VLAN成员时使用。Access接口大部分情况只能收发Untagged帧,且只能为Untagged帧添加唯一的VLAN Tag。
- Trunk接口:一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)。
- Hybrid接口:既可以用于连接不能识别Tag的用户终端(如用户主机、服务器等)和网络设备(如Hub、傻瓜交换机),也可以用于连接交换机、路由器以及可同时收发Tagged帧和Untagged帧的语音终端、AP。它可以允许多个VLAN的帧带Tag通过,且允许从该类接口发出的帧根据需要配置某些VLAN的帧带Tag(即不剥除Tag)、某些VLAN的帧不带Tag(即剥除Tag)。
- 使用QinQ(802.1Q-in-802.1Q)协议,一般用于私网与公网之间的连接,也被称为Dot1q-tunnel接口。它可以给帧加上双层Tag,即在原来Tag的基础上,给帧加上一个新的Tag,从而可以支持多达4094×4094个VLAN。
接口类型 | 对接收不带Tag的报文处理 | 对接收带Tag的报文处理 | 发送帧处理过程 |
---|---|---|---|
Access接口 | 接收该报文,并打上缺省的VLAN ID。 | 当VLAN ID与缺省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相同,且是该接口允许通过的VLAN ID时,去掉Tag,发送该报文。 当VLAN ID与缺省VLAN ID不同,且是该接口允许通过的VLAN ID时,保持原有Tag,发送该报文。 |
Hybrid接口 | 打上缺省的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标签的处理过程可见:
当接收到不带VLAN标签的数据帧时,Access接口、Trunk接口、Hybrid接口都会给数据帧打上VLAN标签,但Trunk接口、Hybrid接口会根据数据帧的VID是否为其允许通过的VLAN来判断是否接收,而Access接口则无条件接收。
当接收到带VLAN标签的数据帧时,Access接口、Trunk接口、Hybrid接口都会根据数据帧的VID是否为其允许通过的VLAN(Access接口允许通过的VLAN就是缺省VLAN)来判断是否接收。
当发送数据帧时:
- Access接口直接剥离数据帧中的VLAN标签。
- Trunk接口只有在数据帧中的VID与接口的PVID相等时才会剥离数据帧中的VLAN标签。
- Hybrid接口会根据接口上的配置判断是否剥离数据帧中的VLAN标签。
因此,Access接口发出的数据帧肯定不带Tag,Trunk接口发出的数据帧只有一个VLAN的数据帧不带Tag,其他都带VLAN标签,Hybrid接口发出的数据帧可根据需要设置某些VLAN的数据帧带Tag,某些VLAN的数据帧不带Tag。
VLAN-Access Port
Access接口一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同VLAN成员时使用。它只能收发Untagged帧,且只能为Untagged帧添加唯一VLAN的Tag。
配置VLAN access
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
可以看到收到的包和回来的包并添加VLAN Tag
VLAN-Hybrid Port
Hybrid接口既可以用于连接不能识别Tag的用户终端(如用户主机、服务器)和网络设备(如Hub),也可用于连接换机、路由器以及可同时收发Tagged帧和Untagged帧的语音终端、AP。它可允许多个VLAN的帧带Tag通过,且允许从该类接口发出的帧根据需要配置某些VLAN的帧带Tag(即不剥除Tag)某些VLAN的帧不带Tag(即剥除Tag)。
![image-20210131144114120](../../../../images/vlan interface/image-20210131144114120.png)
配置Hybrid vlan
interface GigabitEthernet0/0/1
port hybrid pvid vlan 10
port hybrid tagged vlan 10
抓包可以看到对应的Hybrid port收到的
![image-20210131132701528](../../../../images/vlan interface/image-20210131132701528.png)
![image-20210131132642594](../../../../images/vlan interface/image-20210131132642594.png)
实现pc1与pc2都可与pc3互通,pc1与pc2之间不能互通。
![image-20210131195302130](../../../../images/vlan interface/image-20210131195302130.png)
system-view
sysname SW7
interface GigabitEthernet0/0/1
# 进来时给包打标签
port hybrid pvid vlan 10
# 出去时去掉标签
port hybrid untagged vlan 10 30
interface GigabitEthernet0/0/2
port hybrid pvid vlan 20
port hybrid untagged vlan 20 30
interface GigabitEthernet0/0/3
port hybrid pvid vlan 30
port hybrid untagged vlan 10 20 30
流程分析:当pc1流量进入SW时会被添加vlan10的tag,在通过vlan30口出去时会进行 port hybrid untagged|tag
== port trunk access xxx
这个操作是“是否允许这些tag通过,通过时进行对tag的操作 tag
| untag
”
实验
![image-20210131201307039](../../../../images/vlan interface/image-20210131201307039.png)
system-view
sysname SW8
interface GigabitEthernet0/0/1
port hybrid pvid vlan 10
port hybrid untagged vlan 20
interface GigabitEthernet0/0/2
port hybrid pvid vlan 20
port hybrid untagged vlan 10
这个实验可以证实,在接口G0/0/1到G0/0/2分配配置了untapped对方vlan的id发现无法ping通。
在默认情况下hybrid只允许vlan1通过,而G0/0/1会被打上vlan10的tag,而到了G0/0/2,此时的标签设置的是双向都设置的为只允许vlan10的通过而不允许vlan20通过,而G0/0/1则相反。所以双方都需要port hybrid untagged vlan 10 20
VLAN-Trunk Port
Trunk接口一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)。
![image-20210131152952129](../../../../images/vlan interface/image-20210131152952129.png)
配置交换机 4 实现图2 4的论点
![image-20210131172254100](../../../../images/vlan interface/image-20210131172254100.png)
system-view
sysname SW3
vlan batch 10 20
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
interface GigabitEthernet0/0/3
port link-type trunk
port trunk allow-pass vlan 10 20
SW4
system-view
sysname SW4
vlan batch 10 20
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10 20
interface GigabitEthernet0/0/2
port link-type access
port default vlan 10
interface GigabitEthernet0/0/3
port link-type access
port default vlan 20
![image-20210131193456826](../../../../images/vlan interface/image-20210131193456826.png)
此图完成的是图 1 3步骤的论点
SW5
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
interface GigabitEthernet0/0/2
port link-type access
port default vlan 10
SW6
interface GigabitEthernet0/0/1
port link-type trunk
port trunk pvid vlan 10
port trunk allow-pass vlan 10 20
interface GigabitEthernet0/0/2
port link-type access
port default vlan 10
[vlan.zip](......\images\vlan interface\vlan.zip)
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2021/01/experiment-vlan/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。