写在前面
作者作业中常常需求用到VLAN,虽然自己初略学习过VLAN,但纸上得来终觉浅,所以当vlan出现问题时往往是一脸懵,所以决心好好学习下VLAN,遂有了这篇文章。
本篇文章会着重重视于VLAN的知识点,对于其它计算机网络相关的知识点,如子网,链路层协议,更多仅仅一笔带过,所以需求读者有必定的计算机网络基础。
vlan理论知识
VLAN(虚拟局域网)技术答应在同一物理网络上创立多个隔离的逻辑网络,经过装备 VLAN,能够操控不同网络设备间的通讯,即使它们衔接到同一物理网络。
上图是常见的tcp/ip模型,VLAN作用于链路层,在以太网和无限局域网的完成有所区别,本文会介绍VLAN在以太网中的完成。
在以太网中,VLAN运用802.1Q VLAN符号协议完成。
比较于传统的以太网帧,802.1Q协议帧多了一个32bit大小的802.1Q头,包括以下字段:
-
标签协议表明符 (TPID)。
一个16位字段,值固定为0x8100,用来标识802.1Q协议帧。
-
标签操控信息 (TCI)
一个16位字段,包括以下子字段:
-
Priority code point (PCP)
一个3位字段用来标识帧的优先级。
-
Drop eligible indicator (DEI)
一个1位字段,在拥塞情况下,能够与PCP结合或单独标识该帧是否可丢弃。
-
VLAN identifier (VID)
1个12位字段,用来标识该帧是归于哪个VLAN的。
-
上述字段中,需求留心的有VID,后续装备VLAN时会用到该字段。
此外,与传统的局域网 (LAN) 相似,VLAN具有虚拟接口,这个接口具有IP地址和MAC地址。但是,VLAN接口是根据物理接口创立的,该物理接口即VLAN的父接口。VLAN通讯是经过这个父接口进行的,这意味着VLAN的数据包会经过父接口来进行网络通讯。
下面就以装备mac和qnx的vlan作为实战比如展开讲讲。
mac与qnx VLAN通讯实战
mac和qnx ifconfig装备
-
mac衔接网线的物理接口信息。
en8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=400<CHANNEL_IO> ... inet 169.254.234.130 netmask 0xffff0000 broadcast 169.254.255.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect (100baseTX <full-duplex>) status: active
-
qnx衔接网线的物理接口信息。
emac0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1522 capabilities rx=1f<IP4CSUM,TCP4CSUM,UDP4CSUM,TCP6CSUM,UDP6CSUM> capabilities tx=7f<IP4CSUM,TCP4CSUM,UDP4CSUM,TCP6CSUM,UDP6CSUM,TSO4,TSO6> enabled=0 media: Ethernet autoselect (1000baseT full-duplex) status: active inet 172.20.0.11 netmask 0xffffff00 broadcast 172.20.0.255 inet6 fe80::72b3:d5ff:fe20:391%emac0 prefixlen 64 scopeid 0x22
从上述信息能够发现两个物理接口处于不同一子网下,因此是无法直接通讯的,需求装备vlan。
当然除此之外,还能够手动修正mac衔接网线的物理接口的ip地址和子网掩码来到达这个意图,但该方法不是本文的要点,就不细嗦了。
怎么树立vlan
前面提到过VLAN有虚拟接口,其有一个父物理接口,有一个VID字段来区分帧是归于哪个VLAN,再结合上述拿到的mac和qnx物理接口信息,很容易想到一个搭建vlan的方案:
分别在mac和qnx都创立一个VLAN,要求如下:
- mac的VLAN虚拟接口根据en8物理接口,qnx的VLAN虚拟接口根据emac0物理接口。
- 将两台设备VLAN的VID设置成一样。
- 虚拟接口归于同一个子网,这能够经过设置其ip地址和子网掩码来完成。
在mac履行以下指令:
ifconfig vlan10 create
ifconfig vlan10 vlan 10 vlandev en8
ifconfig vlan10 inet 172.20.10.1 netmask 255.255.255.0
-
ifconfig vlan10 create
- 这个指令创立一个新的 VLAN 接口,并命名为
vlan10
。这个接口在初始状态下不会绑定就任何物理接口。
- 这个指令创立一个新的 VLAN 接口,并命名为
-
ifconfig vlan10 vlan 10 vlandev en8
- 这个指令装备 VLAN 接口
vlan10
,设置其 VLAN ID 为10
,这儿的VLAN ID就是前面介绍到的VID。 -
vlandev en8
表明vlan10
接口会绑定到物理接口en8
。这意味着vlan10
接口会处理经过en8
传输且带有 VLAN ID 为10
的数据包。
- 这个指令装备 VLAN 接口
-
ifconfig vlan10 inet 172.20.10.1 netmask 255.255.255.0
- 这个指令会给
vlan10
接口分配 IP 地址172.20.10.1
,并设置子网掩码为255.255.255.0
。这样装备后,vlan10
接口就能够在指定的 IP 地址和子网上通讯。
- 这个指令会给
mac履行时可能会报权限不行的错,能够经过sudo指令处理。
在qnx履行以下指令
ifconfig vlan10 create
ifconfig vlan10 vlan 10 vlandev emac0
ifconfig vlan10 inet 172.20.10.2 netmask 255.255.255.0
从ip地址和子网掩码能够看到qnx的vlan和mac的vlan是归于同一子网的。
到这,mac就能够愉快地ssh衔接到qnx体系啦。
ssh root@172.20.10.2
怎么看VLAN装备
当咱们装备好vlan后,能够经过ifconfig指令来查询VLAN装备,下面是mac里VLAN的装备信息。
vlan10: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1496
...
inet 172.20.10.112 netmask 0xffffff00 broadcast 172.20.10.255
vlan: 10 parent interface: en8
media: autoselect (100baseTX <full-duplex>)
status: active
-
inet 172.20.10.112 netmask 0xffffff00 broadcast 172.20.10.255
: 这表明接口的IPv4装备。inet
是分配给接口的IP地址,netmask
是子网掩码,broadcast
是广播地址。这儿的IP地址归于私有地址规模,通常用于局域网内部。 -
vlan: 10 parent interface: en8
: 这表明这是VLAN编号为10的接口,其父接口是en8
。 - •
status: active
: 表明接口处于活动状态。
背景
说完理论知识和实操,再来说点背景题外话。
作者自己现在在一家车厂做车机软件开发,给没有在车厂作业过的小伙伴简单介绍下vlan的作业背景。
现在,咱们在轿车的中控屏幕所看到的体系大都是根据Android体系进行开发的,但其实车机不止一个体系(至少在我现在作业的车厂是这样的)。
咱们在日常开发中,会运用一个大小约1m * 1m * 1m(这儿不得不吐槽一句,如此硕大的机器让原本就不大的工位落井下石)的机器进行开发,机器挂载着一个相似上图所示的屏幕。
机器里有Anroid体系,qnx体系,以及其他或大或小的根据linux的体系,这些体系与Android体系是休戚相关,如有一个体系是与蜂窝网络强相关的,当该体系出现问题时,Android体系的蜂窝网络也无法正常运用。
机器会延伸出多条线,其中比较重要的有:
- 一条一般的数据线用于衔接Android体系。
- 一条网线用于ssh衔接到机器的其他体系。
到这文章就结束啦,peace。