4、车载以太网网络层:IPv4与IPv6在车内的应用、ARP协议、ICMP协议、车载网络中的子网划分

网络层,说白了就是负责把数据包从源节点送到目标节点的那个层级。在车里,这个层级决定了你的诊断报文能不能准确到达ECU,OTA升级包能不能完整下发。我这些年调试过的车载项目,至少有一半的通信故障都跟网络层配置有关。今天咱们就把这块掰开揉碎了讲清楚。

4.1 IPv4与IPv6在车内的应用

车内网络到底用IPv4还是IPv6?这不是一个非黑即白的选择题。目前量产车型里,IPv4仍然是绝对主力,但IPv6的渗透速度比很多人想象的要快。

4.1.1 IPv4:成熟但地址紧张

IPv4地址只有32位,理论可用地址约43亿个。在传统车载网络里,一个域控制器下面挂几十个ECU,用私有地址段(比如192.168.x.x或10.x.x.x)完全够用。我参与的第一个车载项目就是纯IPv4架构,当时觉得地址多得用不完。

但问题出在云端对接上。车端用私有IPv4地址,上云时必须做NAT转换。每次建立连接都要经过网关映射,延迟增加了不说,有些长连接还会被NAT表项老化踢掉。我记得有次调试T-Box的MQTT心跳,总是莫名其妙断连,查了两天才发现是NAT超时时间设置得太短。

IPv4在车内的典型分配方案:
  • 诊断网络:192.168.1.0/24
  • 娱乐网络:192.168.2.0/24
  • ADAS网络:10.10.1.0/24
  • T-Box上云:公网IP或运营商内网IP

4.1.2 IPv6:为车联网而生

IPv6的128位地址空间,说白了就是给每个传感器、每个ECU甚至每个传感器上的每个数据通道都分配一个全球唯一地址。这对车联网来说是天然优势——不需要NAT,端到端通信,延迟更低,安全性更好。

我最近在做的下一代域控项目,已经开始要求所有新开发的模块必须同时支持IPv4和IPv6双栈。虽然短期内IPv6的流量占比还很低,但主机厂的要求很明确:三年后的车型,IPv6将是必选项。

对比项 IPv4 IPv6
地址长度 32位 128位
地址数量 约43亿 约3.4×10³⁸
NAT需求 需要 不需要
自动配置 DHCP SLAAC/DHCPv6
车内现状 主流 快速普及中
上云方式 NAT+公网IP 直接端到端
我的建议:新项目尽量上双栈。IPv4做兼容,IPv6做未来。哪怕现在只用IPv4,也要在协议栈里预留IPv6的处理能力。否则三年后改版,成本翻倍。

4.2 ARP协议:谁有我的MAC地址?

ARP(地址解析协议)解决的是一个很基础的问题:我知道对方的IP地址,但我不知道它的MAC地址,怎么把数据帧发过去?

在车载网络里,ARP的交互频率其实不高。因为车内拓扑相对固定,很多设备在启动阶段通过DHCP获取IP后,ARP缓存就建立起来了。但有一种情况特别坑——ARP风暴。

我曾经在一个项目里遇到过:某次OTA升级后,所有ECU同时重启,然后同时发送ARP请求。百兆以太网上瞬间被ARP广播包塞满,正常的诊断报文根本发不出去。后来我们在交换机上配置了ARP限速和端口隔离,才彻底解决这个问题。

4.2.1 ARP的工作流程

  1. 主机A想发送数据给IP_B,但不知道IP_B的MAC地址
  2. 主机A广播ARP请求:"谁是IP_B?请告诉MAC_A"
  3. 所有主机收到广播,只有IP_B响应
  4. IP_B单播回复:"我是IP_B,我的MAC是MAC_B"
  5. 主机A将映射关系写入ARP缓存,开始通信
避坑指南:我曾经在测试中发现,某些国产PHY芯片在ARP请求频繁时会丢包。排查到最后,是芯片的MAC层过滤规则没配好。所以做车载以太网,一定要在实车上做ARP压力测试,不能只在实验室里跑。

4.3 ICMP协议:网络通不通?

ICMP(互联网控制报文协议)最常用的就是Ping和Traceroute。在车载开发中,ICMP是定位网络故障的第一把刀。

我记得有次客户反馈说T-Box经常掉线。我远程连上去,先Ping网关——通了。再Ping DNS服务器——也通了。最后Ping云平台IP——超时。问题一下就定位到了:不是车端网络问题,是云平台那边的路由出了问题。

4.3.1 车载场景下的ICMP应用

  • 连通性检测:ECU启动后Ping网关,确认链路正常
  • MTU探测:通过ICMP的"分片需要"消息,找到路径上的最小MTU
  • 路由重定向:告诉发送方有更优的下一跳路径
  • 超时通知:TTL耗尽时,路由器返回超时消息
注意:有些车载安全策略会禁止ICMP。比如某些T-Box的防火墙默认丢弃所有ICMP报文。这时候Ping不通不代表网络不通,需要用TCP/UDP的端口探测来辅助判断。

4.4 车载网络中的子网划分

子网划分,说白了就是把一个大网络切成几个小网络。在车里这么做,主要是为了隔离广播域、控制流量、提升安全性。

我见过最极端的案例:某款车型全车只有一个192.168.1.0/24网段,所有ECU都在同一个广播域里。结果娱乐系统的DHCP请求广播,把ADAS的摄像头数据流冲得七零八落。后来改方案,把网络拆成三个子网,问题迎刃而解。

4.4.1 车载子网划分原则

子网 网段 掩码 可用地址 承载设备
动力域 10.0.1.0 255.255.255.0 254 ECM、TCU、BMS
底盘域 10.0.2.0 255.255.255.0 254 ESP、EPS、ABS
ADAS域 10.0.10.0 255.255.254.0 510 摄像头、雷达、域控
娱乐域 192.168.1.0 255.255.255.0 254 车机、后排屏、T-Box
诊断网络 192.168.100.0 255.255.255.0 254 诊断仪、OBD接口

4.4.2 子网间通信

不同子网之间不能直接通信,必须通过网关(通常是域控制器或中央网关)做路由转发。这就引出了另一个关键点:路由表配置。

我建议在中央网关上配置静态路由,不要用动态路由协议。车内拓扑变化频率极低,静态路由简单可靠,不容易出问题。动态路由协议(如OSPF)在车里反而可能因为链路抖动导致路由震荡。

我的经验:子网划分时,给每个域预留20%的地址余量。比如你算出来需要50个地址,那就用/25(128个地址)而不是/26(62个地址)。因为后期加功能、加传感器是常态,地址不够用再改子网掩码,涉及所有ECU的配置更新,非常痛苦。
车载以太网网络层核心逻辑 中央网关 动力域 10.0.1.0/24 底盘域 10.0.2.0/24 ADAS域 10.0.10.0/23 娱乐域 192.168.1.0/24 诊断 192.168.100.0/24 网络层核心协议与功能 • ARP:IP→MAC地址解析,广播请求/单播响应 • ICMP:连通性检测(Ping)、MTU探测、差错报告 • IPv4/IPv6:双栈部署,IPv6逐步替代IPv4 • 子网划分:按功能域隔离广播域,中央网关跨子网路由
重要提醒:子网划分后,一定要在中央网关上配置ACL(访问控制列表)。比如诊断网络只能访问动力域和底盘域,不能访问娱乐域。否则一旦诊断仪被恶意利用,整个车机娱乐系统都可能被攻击。

好了,网络层的这几个核心知识点就讲到这里。ARP、ICMP、IPv4/IPv6、子网划分,每一个在车载场景下都有它独特的坑和最佳实践。做车载以太网,不能只懂协议本身,更要懂这些协议在车里怎么落地、怎么避坑。下一层咱们会讲传输层,TCP和UDP在车里的那些事儿,到时候再聊。