背景
无意间,我发现一封内容大致如下的邮件:
xxx、xxx:
如之前沟通,客户目前需求5路VLAN:
现状不管什么条件限制,目前我们只支持4路,但是竞品VLAN数量不是问题。
我们需要充分讨论后向客户解释,由于车型需求和竞品差异,简单回答客户不会轻易放过我们:
1.硬件限制的说法很不好解释,因为VLAN实际上就是路牌,软件比重相对多一些。
2.如果改善外部环境,如硬件环境,是否可以多支持几路VLAN,我们可以向客户建议。
由于刚毕业那会接触过路由器、交换机产品的开发,对VLAN的作用有一点印象,因此看到这封邮件内容时,我有以下几点疑问:
-
VLAN 的基本原理是在数据包中添加相关标识,进行区分。理论上是纯软的范围,VLAN的数量应该是4095个,为什么MTK 仅支持4路?
-
座舱中为什么需要VLAN,其应用场景是什么?
趁这个机会,将相关知识整理一下,并咨询了主机厂的朋友,了解VLAN的使用场景。本文仅限我个人的理解,有任何有误或不严谨的地方,非常感谢指出,讨论。
VLAN 基础
首先回顾一下以前交换机上的VLAN基础知识。
什么是VLAN
VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接通信,从而将广播报文限制在一个VLAN内。
技术诞生背景:
90年代早期以太网普及后,企业网络规模扩大,三层设备(路由器)昂贵,导致大型二层网络出现。当时一个广播域可能覆盖几百台设备,ARP风暴和广播包能占用30%带宽,消耗大量的CPU和宽带资源。VLAN 通过逻辑划分广播域,将一个大网络分割成多个小型虚拟广播域,广播流程仅限本VLAN 内传播。
VLAN 的原理
IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签,用以标识VLAN信息。其帧格式如下:
字段解析:
字段 | 长度 | 含义 | 取值 |
TPID | 2Byte | Tag Protocol Identifier(标签协议标识符),表示数据帧类型。 | 表示帧类型,取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。各设备厂商可以自定义该字段的值。 |
PRI | 3bit | Priority,表示数据帧的802.1Q优先级 | 取值范围为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。因此VLAN 理论最大支持4095个。 |
由上可知,VLAN 通过在数据帧中添加VLAN标识信息,进行VLAN域划分。交换机是如何对数据帧进行处理的呢?
在交换机中,将以太网的接口分为三类:Access 接口、Trunk 接口、Hybrid 接口。
-
Access接口
Access接口一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同VLAN成员时使用。它只能收发Untagged帧,且只能为Untagged帧添加唯一VLAN的Tag。
-
Trunk接口
Trunk接口一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)。
-
Hybrid接口
Hybrid接口既可以用于连接不能识别Tag的用户终端(如用户主机、服务器等)和网络设备(如Hub),也可以用于连接交换机、路由器以及可同时收发Tagged帧和Untagged帧的语音终端、AP。它可以允许多个VLAN的帧带Tag通过,且允许从该类接口发出的帧根据需要配置某些VLAN的帧带Tag(即不剥除Tag)、某些VLAN的帧不带Tag(即剥除Tag)。
Hybrid接口和Trunk接口在很多应用场景下可以通用,但在某些应用场景下,必须使用Hybrid接口。比如一个接口连接不同VLAN网段的场景中,因为一个接口需要给多个Untagged报文添加Tag,所以必须使用Hybrid接口。
不同接口对报文的处理方式:
接口类型 | 对接收不带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。 |
举例:
如图所示:
PC1 访问 PC3流程:
-
由于PC1 发送的消息不会携带VLAN 标签,因此Access口1收到请求后,会对数据帧添加VLAN 100标签。
-
由于PC3 在MAC表中,对应Access口3,并且两者VLAN标签相同。因此交换机将数据帧发往Access口3。
-
Access 口3,对外发送具有VLAN标签的数据帧时,会剥离标签,因此PC3 最终收到的数据帧是不携带VLAN标签的。
PC1 访问PC2流程:
-
由于PC1 发送的消息不会携带VLAN 标签,因此Access口收到请求后,会对数据帧添加VLAN 100标签。
-
虽然PC2 在MAC表中,对应Access口2,但是两者VLAN标签不相同。因此交换机将数据帧丢弃。
PC4 访问 PC6流程:
-
由于PC4 发送的消息不会携带VLAN 标签,因此Access口4收到请求后,会对数据帧添加VLAN 200标签。
-
由于PC6 不在交换机1的MAC表中,因此会将数据帧发送到Trunk口1。
-
由于Trunk口1具备VLAN100、VLAN200 标签,因此会保留数据帧中的VLAN200标签,发向Trunk口2。
-
Trunk口收到数据帧,其携带的VLAN 200标签,则允许进入。
-
由于PC6 在MAC表中,对应Access口6,并且两者VLAN标签相同。因此交换机将数据帧发往Access口6。
-
Access 口6,对外发送具有VLAN标签的数据帧时,会剥离标签,因此PC6 最终收到的数据帧是不携带VLAN标签的。
VLAN的优点
VLAN最初是为了解决广播导致局域网拥堵的问题。随着使用的推广,发现VLAN还具备其它的优点,应用于各个场景。
-
增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的,即一个VLAN内的用户不能和其它VLAN内的用户直接通信。
-
提高了网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作。
-
灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。
VLAN 在车载中应用场景
在车载中,VLAN的使用主要用于保证区域的安全性。咨询了一些主机厂的朋友,VLAN的使用目的主要是为了通过隔离,保证信息安全。(有了解更多场景的朋友,欢迎讨论)其以太网控制网络清单如下:
控制器 | MAC地址表 | IP地址 | 对应业务 |
TGW 网关 | 02-00-00-00-00-22 | 192.168.1.22 | VLAN 100 (gPTP,时间同步) |
192.168.2.22 | VLAN 200(SOME/IP,服务通信) | ||
192.168.3.22 | VLAN 300 (UDPNM,网络管理) | ||
192.168.4.22 | VLAN 400(DoIP,诊断) | ||
192.168.5.22 | VLAN 1024(AVTP Camera Video,音视频传输) | ||
BDCU 车身域控制器 | 02-00-00-00-00-12 | 192.168.1.12 | VLAN 100 (gPTP,时间同步) |
192.168.2.12 | VLAN 200(SOME/IP,服务通信) | ||
192.168.3.12 | VLAN 300 (UDPNM,网络管理) | ||
192.168.4.12 | VLAN 400(DoIP,诊断) | ||
192.168.5.12 | VLAN 1024(AVTP Camera Video,音视频传输) | ||
CDCU 座舱域控制器 | 02-00-00-00-00-32 | 192.168.1.32 | VLAN 100 (gPTP,时间同步) |
192.168.2.32 | VLAN 200(SOME/IP,服务通信) | ||
192.168.3.32 | VLAN 300 (UDPNM,网络管理) | ||
192.168.4.32 | VLAN 400(DoIP,诊断) | ||
192.168.5.32 | VLAN 1024(AVTP Camera Video,音视频传输) |
根据以往经验理解,其车身EE电气架构可能如下(仅供参考):
中央网关一般是通信设备,集成了交换机芯片,比如T-Box+switch。如上图端口设置大致如下:
-
中央网关
port 1 端口 配置为trunk 类型接口,允许通过VLAN 100、VLAN 200、VLAN 300、 VLAN 400、 VLAN 1024。
port 2 端口 配置为trunk 类型接口,允许通过VLAN 100、VLAN 200、VLAN 300、 VLAN 400、 VLAN 1024。
port 3 端口 配置为Access 类型接口,允许通过 VLAN 400。
-
车身域控制器
port 4 端口 配置为trunk 类型接口,允许通过VLAN 100、VLAN 200、VLAN 300、 VLAN 400、 VLAN 1024。
-
座舱域控制器
port 5 端口 配置为trunk 类型接口,允许通过VLAN 100、VLAN 200、VLAN 300、 VLAN 400、 VLAN 1024。
各个域中的服务,如何携带不同的VLAN 对外发出呢?
由交换机基础知识可知,trunk口发送帧的过程是:当VLAN ID与缺省VLAN ID不同,且是该接口允许通过的VLAN ID时,保持原有Tag,发送该报文。如何保证各服务携带VLAN ID呢?可通过创建虚拟网卡实现该功能。流程如下:
ip link add link eth0 name eth0.100 type vlan id 100
ifconfig eth0.100 up
在Linux系统中执行上述命令,会创建eth0.100的虚拟网卡,并且绑定在物理网卡eth0中。即:应用服务绑定eth0.100网卡,对外发送的数据帧都是携带VLAN 100,且eth0 会默认放行和接收VLAN 100的数据帧。同理设置其它虚拟网卡。数据流程大致如下:
以中央网关中的时间同步服务 与 车身域控制器中的时间同步服务通信为例。其数据链路解析:
数据流 | 数据流向 | 描述 |
1 | 时间同步服务 --> 路由表 | 根据《以太网网络清单》可知,车身域控制器的时间同步服务的IP 192.168.1.12。那么我们的路由表中,肯定会走向eth0.100(192.168.1.22)。此时的数据帧并不携带VLAN信息。 |
2 |
| 根据路由信息,将数据帧发送eth0.100。由于数据帧不带VLAN信息,因此eth0.100允许通过,并打上VLAN 100标签。eth0.100 类似Access 口。 |
3 | eth0.100 --> eth0 | 此时数据帧携带VLAN 100标签。该标签属于eth0 允许通过的VLAN ID。eth0 保留VLAN ID,并发送。 |
4 | eth0 --> eth3 | 数据帧携带VLAN 100标签,该标签属于eth3 允许通过的VLAN ID。eth3 保留VLAN ID,并接收。 |
5 | eth3 --> eth3.100 | 通过arp 表进行转发,此时数据帧依然具备VLAN 100标签 |
6 | eth3.100 --> 路由表 | eth3.100 将数据帧的VLAN 标签剥离,此时数据帧不带VLAN标签。 |
通过以上的VLAN划分,实现了严格的功能域隔离,保证了业务之间互不干扰。比如诊断业务被破解,但是不会影响到通信服务。
总结
综上就是本次的思考总结。在回顾刚开始的两个问题:
1. 为什么MTK 仅支持4路?
答:从VLAN基础中可知,VLAN ID 的最大个数应该是4095个。而MTK 反馈仅支持4路,他是通过硬件实现过滤规则。后续关闭硬件过滤,通过软件过滤,即可支持4095个VLAN ID,但是会对CPU 有一定的消耗。
2. VALN 在车载中的应用场景?
答:传统的车载网络难以满足日益增长的带宽、隔离性、安全性和复杂性需求,而基于以太网的网络架构结合VLAN技术提供了强大的解决方案。常见的使用场景有:
-
功能域隔离与安全域划分。如上示例。
-
带宽管理与服务质量保证。
-
简化网络拓扑与线束优化
-
故障隔离