写在前面

作者作业中常常需求用到VLAN,虽然自己初略学习过VLAN,但纸上得来终觉浅,所以当vlan出现问题时往往是一脸懵,所以决心好好学习下VLAN,遂有了这篇文章。

本篇文章会着重重视于VLAN的知识点,对于其它计算机网络相关的知识点,如子网,链路层协议,更多仅仅一笔带过,所以需求读者有必定的计算机网络基础。

vlan理论知识

VLAN(虚拟局域网)技术答应在同一物理网络上创立多个隔离的逻辑网络,经过装备 VLAN,能够操控不同网络设备间的通讯,即使它们衔接到同一物理网络。

当我谈VLAN时,我谈些什么

上图是常见的tcp/ip模型,VLAN作用于链路层,在以太网和无限局域网的完成有所区别,本文会介绍VLAN在以太网中的完成。

在以太网中,VLAN运用802.1Q VLAN符号协议完成。

当我谈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
  1. ifconfig vlan10 create

    • 这个指令创立一个新的 VLAN 接口,并命名为 vlan10。这个接口在初始状态下不会绑定就任何物理接口。
  2. ifconfig vlan10 vlan 10 vlandev en8

    • 这个指令装备 VLAN 接口 vlan10,设置其 VLAN ID 为 10,这儿的VLAN ID就是前面介绍到的VID。
    • vlandev en8 表明 vlan10 接口会绑定到物理接口 en8。这意味着 vlan10 接口会处理经过 en8 传输且带有 VLAN ID 为 10 的数据包。
  3. 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体系进行开发的,但其实车机不止一个体系(至少在我现在作业的车厂是这样的)。

当我谈VLAN时,我谈些什么

咱们在日常开发中,会运用一个大小约1m * 1m * 1m(这儿不得不吐槽一句,如此硕大的机器让原本就不大的工位落井下石)的机器进行开发,机器挂载着一个相似上图所示的屏幕。

机器里有Anroid体系,qnx体系,以及其他或大或小的根据linux的体系,这些体系与Android体系是休戚相关,如有一个体系是与蜂窝网络强相关的,当该体系出现问题时,Android体系的蜂窝网络也无法正常运用。

机器会延伸出多条线,其中比较重要的有:

  • 一条一般的数据线用于衔接Android体系。
  • 一条网线用于ssh衔接到机器的其他体系。

到这文章就结束啦,peace。

参考资料

1.IEEE 802.1Q

2.What is TCP/IP Model