3、物理层与数据链路层:以太网物理层基础(100BASE-T1 vs 100BASE-TX)、MAC地址与VLAN在DoIP中的应用

好,咱们进入正题。这一章聊的是DoIP最底层的两件事:物理层怎么传信号,数据链路层怎么寻址和隔离。说白了,就是车上的以太网线怎么连,数据包怎么找到正确的ECU。

3.1 物理层之争:100BASE-T1 vs 100BASE-TX

先说说物理层。你可能会问:为什么车载以太网不用我们熟悉的100BASE-TX?嗯,这里有个关键区别——线束成本。

100BASE-TX需要两对双绞线(四根线),而且对线缆的屏蔽和阻抗要求挺高。这在办公室环境没问题,但车里呢?每根线都是重量和成本。我当年参与一个项目,光因为线束重量超标,整车就得减配好几个功能。所以,汽车行业需要更轻、更便宜的方案。

100BASE-T1就是答案。它只用一对双绞线(两根线),同时传输数据和电源(PoDL,Power over Data Line)。你想想看,少了一半的线,重量和成本直接砍半。而且它的物理层设计专门针对车载电磁环境,抗干扰能力更强。

我个人的习惯是:做DoIP设计时,优先选100BASE-T1。除非你遇到老平台改造,或者需要兼容现有测试设备,才考虑100BASE-TX。

特性 100BASE-TX 100BASE-T1
线对数量 2对(4线) 1对(2线)
最大距离 100米 15米(车内够用)
抗干扰 一般 强(差分信号+共模扼流圈)
PoDL支持
典型应用 诊断仪、测试台架 车载ECU间通信
避坑提醒: 我曾经在项目中遇到一个问题——用100BASE-T1的线缆去接100BASE-TX的接口,结果死活连不上。后来发现是物理层芯片不兼容。记住:这两种物理层不能直接互连,必须通过介质转换器(Media Converter)。

3.2 MAC地址:DoIP车辆的唯一身份标识

物理层搞定后,数据链路层就要干活了。第一个概念:MAC地址。

每个支持DoIP的ECU,都有一个48位的MAC地址。这个地址在出厂时烧录在硬件里,理论上全球唯一。但在DoIP场景下,MAC地址的作用不仅仅是标识设备——它还参与车辆发现过程。

你想想看,当诊断仪连上车载网络时,它怎么知道有哪些ECU在线?靠的就是MAC地址。诊断仪发送一个广播帧(目的MAC为FF:FF:FF:FF:FF:FF),所有ECU收到后,用自己的MAC地址回复。这就是DoIP车辆发现的第一步。

我个人习惯在项目初期就规划好MAC地址分配方案。比如:

  • 网关ECU:固定MAC,比如 00:1E:67:00:00:01
  • ADAS域控制器:00:1E:67:00:00:02
  • 座舱域控制器:00:1E:67:00:00:03

这样在调试时,一看MAC就知道是哪个节点,省去很多查表的时间。

小技巧: 如果你用Wireshark抓DoIP报文,可以设置一个过滤器:eth.addr == 00:1E:67:00:00:01。这样只显示目标ECU的流量,排查问题快很多。

3.3 VLAN:把网络切成安全隔间

接下来是VLAN。为什么DoIP需要VLAN?原因很简单:车载网络里不止有DoIP流量,还有CAN、LIN、FlexRay等老协议。如果所有流量都混在一个广播域里,那网络风暴会把你搞疯。

VLAN(虚拟局域网)的作用,就是把一个物理网络切成多个逻辑网络。每个VLAN有自己的广播域,不同VLAN之间的流量默认隔离。这在DoIP中特别有用:

  • VLAN 10:诊断流量(DoIP)
  • VLAN 20:控制流量(CAN网关转发)
  • VLAN 30:多媒体流量(音视频)

我记得有一次,客户抱怨诊断仪连接超时。排查后发现,诊断仪和ECU不在同一个VLAN里。诊断仪在VLAN 10,ECU在VLAN 20,中间的路由器没配好。嗯,这种问题其实很常见,尤其是多域控制器架构下。

在DoIP协议中,VLAN ID通常通过DHCP或静态配置。我个人建议:

  • 诊断仪侧:固定使用VLAN 10
  • ECU侧:通过DHCP Option 121获取VLAN ID
  • 网关:配置VLAN间路由,只允许诊断流量通过
核心要点: VLAN不是可选项,而是DoIP安全的基础。没有VLAN隔离,任何ECU都能收到诊断广播,那安全性就无从谈起。

3.4 实战:一个典型的DoIP网络拓扑

说了这么多,咱们看一个实际例子。假设你有一辆智能电动车,网络拓扑如下:

诊断仪 (100BASE-TX)
    |
    |  (VLAN 10)
    |
网关 (100BASE-T1, MAC: 00:1E:67:00:00:01)
    |
    |--- ADAS域控制器 (100BASE-T1, MAC: 00:1E:67:00:00:02, VLAN 10)
    |
    |--- 座舱域控制器 (100BASE-T1, MAC: 00:1E:67:00:00:03, VLAN 10)
    |
    |--- 动力域控制器 (100BASE-T1, MAC: 00:1E:67:00:00:04, VLAN 20)

在这个拓扑里:

  • 诊断仪通过100BASE-TX连到网关
  • 网关内部做物理层转换(100BASE-TX ↔ 100BASE-T1)
  • ADAS和座舱域控制器在VLAN 10,动力域在VLAN 20
  • 诊断仪只能访问VLAN 10的设备,不能直接访问动力域

为什么要这么设计?因为动力域涉及刹车、转向等安全关键功能,不能让诊断流量直接干扰。我曾经见过一个案例,诊断仪误发了一个写请求到动力域控制器,导致车辆进入异常模式。从那以后,我坚持所有诊断流量必须经过VLAN隔离。

重要提醒: 物理层转换(100BASE-TX ↔ 100BASE-T1)必须使用专用的PHY芯片或介质转换模块。不要尝试用软件模拟,那会引入不可控的延迟和丢包。

3.5 小结

这一章我们聊了:

  • 100BASE-T1 vs 100BASE-TX:一对线 vs 两对线,车载场景选T1
  • MAC地址:ECU的物理身份证,用于车辆发现
  • VLAN:逻辑隔离,保障诊断安全

下一章,我们会深入DoIP的车辆发现机制,看看诊断仪怎么找到车上的ECU。到时候你会看到,MAC地址和VLAN是如何在发现过程中协同工作的。