4、车载以太网网络层:IPv4与IPv6在车内的选择、IP地址分配策略(DHCP/静态)、路由与子网划分
网络层,说白了就是给车上的每个节点发一个“门牌号”,然后告诉它们怎么找到对方。在车载以太网里,这个“门牌号”系统目前有两个版本在打架:IPv4 和 IPv6。我做了这么多年车载网络,可以负责任地告诉你——现阶段,IPv4 还是绝对主力,但 IPv6 已经在敲门了。
4.1 IPv4 vs IPv6:车内到底选哪个?
先看一张对比表,把两个协议的核心差异摆出来:
| 对比项 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位(4 字节) | 128 位(16 字节) |
| 地址数量 | 约 43 亿 | 2^128,几乎无限 |
| 地址配置 | DHCP 或静态 | SLAAC(无状态自动配置)或 DHCPv6 |
| 广播机制 | 广播(ARP) | 多播(NDP) |
| 头部长度 | 20-60 字节(可变) | 40 字节(固定) |
| 安全性 | 依赖 IPSec 可选 | IPSec 原生支持 |
| 车内现状 | 90% 以上项目在用 | 少数高端平台预研 |
你可能会问:既然 IPv6 地址多、配置还自动,为什么不用它?
原因很简单——生态成本。我参与过一个预研项目,想把 IPv6 直接引入域控制器通信。结果发现,底层交换芯片对 IPv6 的硬件加速支持参差不齐,很多 SoC 的 MAC 层对 IPv6 多播过滤做得不好,导致 CPU 中断飙升。说白了,IPv4 的硬件生态太成熟了,换 IPv6 意味着整个链路都要重新验证。
我的建议:
- 当前量产项目,继续用 IPv4。别折腾。
- 如果做 OTA 升级、V2X 或远程诊断,考虑双栈(IPv4 + IPv6)过渡。
- 纯车内通信(域控之间、传感器到域控),IPv4 完全够用。
4.2 IP 地址分配策略:DHCP 还是静态?
地址怎么分?这是个老生常谈的问题。但在车里,它比 IT 机房复杂得多。
4.2.1 静态分配
每个 ECU 烧写时就固定一个 IP。好处是简单、可预测、没有依赖。坏处是——你想想看,一辆车几十个 ECU,如果每个都要手动配,产线得疯掉。
适用场景:
- 网关、域控制器等核心节点
- 诊断接口(DoIP 通常用固定 IP)
- 测试设备(如 CANoe、PC)
4.2.2 DHCP 分配
由 DHCP 服务器(通常是网关或中央域控)动态分配。好处是灵活、可管理、适合产线自动化。坏处是——万一 DHCP 服务器挂了,所有节点都拿不到 IP。
适用场景:
- 传感器节点(摄像头、雷达)
- 娱乐系统节点
- OTA 升级时的临时节点
避坑指南:我曾经在一个项目中,把 DHCP 租期设成了默认的 24 小时。结果车辆休眠再唤醒后,IP 还没过期,但 ARP 表已经乱了,导致通信超时。后来我把租期改成了 10 分钟,配合 DHCP 续租机制,问题解决。
4.2.3 混合策略
实际项目中,我习惯用混合策略:
- 网关、域控用静态 IP,保证核心链路不依赖 DHCP。
- 普通节点用DHCP,但保留静态预留(基于 MAC 地址绑定)。
- 诊断接口用链路本地地址(169.254.x.x),不依赖任何服务器。
4.3 路由与子网划分
车内的网络拓扑,已经不是一根总线走天下了。现在的架构里,可能有多个子网:
- 动力域子网(10.0.1.0/24)
- 底盘域子网(10.0.2.0/24)
- 智驾域子网(10.0.3.0/24)
- 座舱域子网(10.0.4.0/24)
- 诊断/OTA 子网(10.0.254.0/24)
为什么要划分子网?两个原因:
- 隔离广播域——ARP 广播不会跨子网,减少不必要的网络负载。
- 安全隔离——动力域和座舱域之间不应该直接通信,必须经过网关路由。
注意:子网划分后,跨域通信必须通过网关路由。网关上的路由表要精心设计,否则会出现“能 ping 通但业务不通”的诡异问题。我遇到过一台车,OTA 下载总是超时,查了三天发现是路由表里少了一条回程路由。
4.4 车内 IP 地址规划示例
下面是我在一个量产项目中用过的地址规划方案,供你参考:
| 子网 | 网段 | 网关 | 分配方式 | 典型节点 |
|---|---|---|---|---|
| 动力域 | 10.0.1.0/24 | 10.0.1.1 | 静态 | VCU、BMS、MCU |
| 底盘域 | 10.0.2.0/24 | 10.0.2.1 | 静态 | ESP、EPS、EPB |
| 智驾域 | 10.0.3.0/24 | 10.0.3.1 | DHCP | 摄像头、雷达、域控 |
| 座舱域 | 10.0.4.0/24 | 10.0.4.1 | DHCP | IVI、T-Box、HUD |
| 诊断/OTA | 10.0.254.0/24 | 10.0.254.1 | 链路本地 | DoIP、OTA Client |
4.5 知识结构图:车载网络层核心逻辑
下面这张图,把网络层的核心逻辑串起来了:
4.6 实战建议
最后,给你几个我在项目中沉淀下来的建议:
- 地址规划要留余量——别把 /24 塞满,留 10-20 个地址给调试和扩展。
- 网关 IP 固定——每个子网的 .1 或 .254 留给网关,别挪作他用。
- DHCP 服务器要冗余——如果网关挂了,至少有个备份能发地址。
- 测试时用链路本地地址——169.254.x.x 不需要任何配置,插上就能用,调试利器。
一个小技巧:我在做 OTA 升级测试时,会单独划一个 /28 子网给升级流量。这样即使升级过程把网络搞乱了,也不会影响其他域的正常通信。