VLAN原理讲解

目录

一、VLAN概述及产生原因

 二、VLAN实现原理

2.1VLAN标签(VLAN Tag)

2.2VALN具体实现原理(实例)

三、VLAN划分方式

3.1基于接口划分VLAN

 3.2基于MAC地址划分VLAN

 3.3基于子网划分VLAN

 四、以太网二层(交换机)接口类型

​4.1access接口

4.2trunk接口

4.3Hybrid接口


一、VLAN概述及产生原因

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。

以太网是一种基于载波侦听多路访问/冲突检测CSMA/CD(Carrier Sense Multiple Access/Collision Detection)的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过交换机实现LAN(Local Area Network)互连虽然可以解决冲突(Collision)严重的问题,但仍然不能隔离广播报文。

在这种情况下出现了虚拟局域网VLAN技术,这种技术可以把一个LAN划分成多个逻辑VLAN。每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内,可以相比之前更加安全、提高机器性能等等

例图是一个典型的VLAN应用组网图。两台交换机放置在不同的地点,比如写字楼的不同楼层。每台交换机分别连接两台计算机,这4台分别属于两个不同的VLAN,比如不同的企业客户。在图中,一个虚线框内表示一个VLAN。

交换机支持4094个VLAN,编号为1~4094。通过划分VLAN,将没有互通需求的主机进行隔离,增强网络的安全性、减少广播流量同时也减少了广播风暴的规模。

 二、VLAN实现原理

2.1VLAN标签(VLAN Tag)

想要知道VLAN的的原理,其中必不可少的就是VLAN标签(VLAN Tag),因为VLAN就是基于Tag进行识别是否属于同一个VLAN的

要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。

IEEE 802.1Q协议规定,在以太网数据帧中加入4个字节的VLAN标签,又称VLAN Tag,简称Tag

2.2VALN具体实现原理(实例)

 LSW1下分别接入两台PC(PC1 & PC2) LSW2下分别接入两台PC(PC3 & PC4)

但是pc1与pc4为同一vlan,pc2与pc3为同一vlan

 假如pc1与pc4发消息,pc1的原始数据帧在LSW1处会被打上vlan10的标签,打了vlan10标签的数据帧在LSW2处只会被分发给同是vlan10的pc4

三、VLAN划分方式

具体划分方式要依据实际情况而定,没有做好的适合自己的才是最好的

3.1基于接口划分VLAN

原理

字如其意,就是根据交换机的接口来进行划分vlan,我们先给每个交换机的接口配置不同的缺省(默认)VLAN,也就是PVID(port Vlan ID),然后我们把配置好PVID的接口与我们实际想要划分vlan的pc相连接,注意一定要PVID与VLAN ID 相同,上面有点不容易理解,我们通过实例来看,也就是说主机1和主机2想要加入同一个vlan10,主机3与主机4加入同一个vlan20,做法就是把主机1和主机2和交换机连接的接口的PVID变成10,这样当主机1的数据帧没有带vlan标签时候就会被打上接入端口的PVID的Tag,然后在传输给同是vlan tag标签是10的主机2,因为LSW1和LSW2的PVID为1,所以主机1带有vlan10tag的数据帧就不可以从这条链路通过,也就达到了划分vlan的目的

注:缺省VLAN就是PVID

—全称Port Vlan ID ,就是接口上的缺省(默认)VLAN

—他的取值为1~4094(但是1不常用,因为PVID默认就是1,所以设置的时候尽量避开PVID1)

 3.2基于MAC地址划分VLAN

原理

-----根据数据帧的源MAC地址来划分VLAN

-----网络管理员预先配置MAC地址和VLAN ID映射关系表(记录MAC地址与vlan id的关联情况)。当交换机收到的是Untagged帧时,就依据该表给数据帧添加指定VLANTag,然后数据帧将在指定VLAN中传输。 

-----简而言之:就是先在交换机内部配置VLAN MAC ID映射表,然后主机发过来数据无标记数据帧的时候就会按照映射表的关系将相应的vlan tag添加到数据帧内部变为有标签数据帧,然后数据帧就会在指定的VLAN中进行传输

 3.3基于子网划分VLAN

基于子网划分VLAN和基于协议划分VLAN统称为基于网络层划分VLAN,可减少手工配置VLAN的工作量,也可保证用户自由地增加、移动和修改。基于子网划分VLAN适用于对安全需求不高,对移动性和简易管理需求较高的场景中。

基于IP子网的VLAN只处理untagged报文,对于tagged报文处理方式和基于端口的VLAN一样。

当设备端口接收到untagged报文时,设备根据报文的源IP地址或指定网段来确定报文所属的VLAN,然后将报文自动划分到指定VLAN中传输。

 四、以太网二层(交换机)接口类型

注:交换机默认就是hybrid接口

4.1access接口

注:因为access接口具有穿标签和脱标签的功能所以一般连接中终端(PC和服务器等等)或者连接没有添加标签功能的一些设备

 access类型接口主要是用来连接用户主机使用的,主要用于接入数据链路层,如果数据链路层上通过的帧为不带Tag的以太网帧,该接口就会给该untagged打上该PVID的vlan id,如果通过的为有Tag的数据帧那接口就会与自己的PVID进行比对,相同则接受,不同就拒绝丢弃该帧,发送的时候一定要先检查该帧的vlan id与发送端的PVID接口是否一致,一致的话剥除Tag(因为主机设备无法识别、七层嘛)并发送,不一致的话就不允许从该接口发出(另寻它路)

4.2trunk接口

 Trunk类型的接口用来连接其它交换机设备,它主要连接干道(主路)链路。

Trunk接口允许多个VLAN的帧通过,只允许vlan id 与发送端端口PVID相同时才可以不带标签通过。

Trunk接口接受帧在收到untagged帧时,先打上端口PVID值,然后在对比该PVID是否在允许通过的列表中(到我门上来啦先给一件我们工服穿着,然后再进行比对,看是不是我们要找的人),在列表中就允许通过,不在列表中就丢弃,收到tagged帧时就会直接比对是否在允许通过列表内,在,就传输,不在,就丢弃

Trunk接口在发送帧时会对比帧的vlan id 是否在允许通过的列表里,在的话再进行下一项比对,如果该帧的VLAN ID 与 PVID 相同时就剥除标签进行传输,不同时就保留该帧的Tag(用于下一个设备进行判断)并从接口发出,不在允许通过的列表里面就丢弃,不允许从该端口发出

4.3Hybrid接口

 Hybrid类型的接口既可以用来连接用户主机也可以用来连接其它交换机设备(因为具备允许多个vlan的帧的特性和穿标签,脱标签的功能),Hybrid接口既可以连接接入链路又可以连接干道链路。

Hybrid接口允许多个VLAN的帧通过,并可以在出接口方向将某些VLAN帧的Tag剥掉。

Trunk接口接受帧时接收到untagged帧时,先打上PVID,再进行比对,判断该PVID是否在允许通过的列表里面,在,传输,不在,丢弃,接受的是Tagged帧就会直接进行比对,在,传输,不在,丢弃(和trunk接受过程一样,只是发送过程不同)

Hybrid接口发送帧时首先会对照该vlan id是否在该hybrid允许通过的列表里面,不在就丢弃该帧,不允许从该帧进行传输,允许的话就会检查管理员对该vlan id的设置是如何的(是否剥除该Tag),按照管理员设置从该接口进行发送

在Docker中,macvlan网络是一种特殊的网络类型,它允许容器直接通过物理网络接口访问宿主机上的网络,甚至可以在多个主机之间配置macvlan网络,从而实现容器之间的通信。 macvlan网络的工作原理是基于Linux内核的一个特性,即虚拟网络接口。当创建一个macvlan网络时,Docker会创建一个虚拟网络接口,并将其绑定到宿主机上的物理网络接口上。然后,容器可以使用这个虚拟网络接口访问宿主机上的网络,甚至可以获得与宿主机相同的IP地址和MAC地址。 在多个主机之间配置macvlan网络时,需要在每个主机上创建macvlan网络并绑定到相同的物理网络接口上。这样,容器就可以在不同的主机之间使用相同的macvlan网络进行通信。 需要注意的是,在使用macvlan网络时,容器将获得与宿主机相同的IP地址和MAC地址,因此需要确保在所有主机上使用不同的IP地址和MAC地址来避免冲突。另外,macvlan网络可能会导致网络性能下降,因此需要进行性能测试和优化。 下面是一个跨主机配置macvlan网络的示例: 1. 在主机A上创建macvlan网络: ``` $ docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=eth0 \ mynet ``` 其中,eth0是主机A上的物理网络接口名称。 2. 在主机B上创建相同的macvlan网络: ``` $ docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=eth0 \ mynet ``` 3. 在主机A上启动一个容器,并加入mynet网络: ``` $ docker run -it --network=mynet alpine sh ``` 4. 在主机B上启动另一个容器,并加入mynet网络: ``` $ docker run -it --network=mynet alpine sh ``` 现在,这两个容器可以通过mynet网络直接进行通信。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦同学学学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值