4、车载以太网网络层:IPv4与IPv6在车上的应用,ARP协议,ICMP协议,子网划分与路由基础

各位同学,欢迎来到第四章。前面我们聊了物理层和数据链路层,说白了就是把数据从一个节点搬到另一个节点。但车上有几十个ECU,数据到底该发给谁?这就轮到网络层登场了。

网络层解决的核心问题就两个:寻址路由。在车载以太网里,IPv4和IPv6是绝对的主角。我个人习惯把网络层比作快递系统——IP地址就是门牌号,路由器就是分拣中心。嗯,这个比喻虽然简单,但很管用。

4.1 IPv4与IPv6:车载网络的两大支柱

先说说IPv4。32位地址,写成四个十进制数,比如192.168.1.100。车上大部分传统应用都跑在IPv4上。我记得最早做车载诊断(DoIP)时,用的就是IPv4,地址分配全靠DHCP服务器。

但IPv4有个硬伤——地址不够用。车上设备越来越多,摄像头、雷达、激光雷达,每个都需要独立IP。所以IPv6就来了。128位地址,写成八组十六进制数,比如FE80::1。这个地址空间有多大?这么说吧,地球上每一粒沙子都能分到一个IP地址。

在车上,IPv6的优势很明显:

  • 自动配置:支持无状态地址自动配置(SLAAC),插上就能用,不用DHCP服务器
  • 安全性:IPSec是IPv6的标配,不像IPv4是可选
  • 多播效率:IPv6的多播机制比IPv4的广播更高效,适合车载音视频流

实际项目中的选择

我在做某款量产车型的以太网架构时,最终方案是:控制类信号走IPv4(诊断、配置),音视频流走IPv6(摄像头、娱乐系统)。为什么?因为IPv4的生态太成熟了,诊断工具链几乎全是IPv4。而IPv6的多播和流媒体支持更好。说白了,混搭才是王道

4.2 ARP协议:IP地址到MAC地址的翻译官

ARP(地址解析协议)干的事很简单:你给我一个IP地址,我告诉你对应的MAC地址。为什么需要它?因为数据链路层只认MAC地址,网络层只认IP地址,中间需要个翻译。

ARP的工作流程:

  1. 主机A想发数据给IP为192.168.1.2的主机B
  2. A先查自己的ARP缓存表,看有没有B的MAC地址
  3. 没有?那就发一个ARP请求广播:"谁是192.168.1.2?请告诉我你的MAC地址"
  4. B收到后,回复一个ARP应答:"我是192.168.1.2,我的MAC是AA:BB:CC:DD:EE:FF"
  5. A把B的MAC地址存入缓存,然后开始通信

我曾经踩过的坑:ARP攻击

有一次在测试车上,发现某个ECU间歇性断连。查了半天,发现是另一个ECU在疯狂发送伪造的ARP应答,把网关的MAC地址给篡改了。这就是典型的ARP欺骗攻击。在车载环境里,虽然攻击面比互联网小,但ARP安全依然不能忽视。我建议在关键节点上启用ARP检测或静态ARP表。

在IPv6里,ARP被邻居发现协议(NDP)取代了。NDP用ICMPv6消息来实现类似功能,但更安全、更高效。你想想看,IPv6连广播都取消了,全用多播,ARP这种广播协议自然要被淘汰。

4.3 ICMP协议:网络层的信使

ICMP(互联网控制消息协议)是网络层的"邮差"。它不传用户数据,只传控制消息和错误报告。最常用的两个工具:

  • Ping:发送ICMP Echo请求,看目标是否可达
  • Traceroute:利用ICMP超时消息,追踪数据包经过的路径

在车上,ICMP的典型应用场景:

  • 连通性测试:诊断时用Ping检查ECU是否在线
  • 路径MTU发现:避免数据包过大被分片
  • 不可达通知:告诉发送方"目标网络不可达"或"端口不可达"

我的调试习惯

每次搭建车载以太网测试环境,我第一件事就是Ping通所有节点。如果Ping不通,后面的测试全白搭。但要注意,有些ECU为了安全会禁用ICMP响应,这时候就要用其他手段验证连通性了。

ICMPv6是IPv6的配套协议,功能比ICMPv4丰富得多。除了基本的错误报告,还包含了NDP(邻居发现)、MLD(多播监听发现)等功能。说白了,IPv6把很多原本独立的功能都整合到了ICMPv6里。

4.4 子网划分:把网络切得更细

子网划分,就是把一个大网络切成几个小网络。为什么要这么做?

  • 减少广播域:广播只在子网内传播,不会影响其他子网
  • 提高安全性:不同子网之间可以通过ACL控制访问
  • 便于管理:按功能划分,比如诊断子网、娱乐子网、安全子网

子网划分靠的是子网掩码。比如IP地址192.168.1.100,子网掩码255.255.255.0,表示前24位是网络位,后8位是主机位。这个子网里最多有254个可用主机地址(去掉网络地址和广播地址)。

在车上,我常用的子网划分方案:

子网 网段 用途 主机数
诊断子网 192.168.1.0/24 DoIP诊断、刷写 254
传感器子网 192.168.2.0/24 摄像头、雷达数据 254
娱乐子网 192.168.3.0/24 中控屏、后排娱乐 254
安全子网 192.168.4.0/24 网关、安全域 254

避坑指南

我曾经在项目里犯过一个低级错误:给两个子网分配了重叠的IP段,结果路由表乱成一锅粥。排查了整整两天才发现。所以我的建议是:子网规划一定要文档化,每个网段的用途、VLAN ID、网关地址都要写清楚。别信自己的脑子,好记性不如烂笔头。

4.5 路由基础:数据包怎么找到路

路由,就是数据包从源到目的地的路径选择。在车上,路由主要发生在网关(Gateway)上。网关连接着不同的子网,负责转发数据包。

路由的核心是路由表。每个路由器(或三层交换机)都维护着一张路由表,里面记录着:

  • 目标网络:要去哪个子网
  • 下一跳:数据包下一步该发给谁
  • 出接口:从哪个端口发出去
  • 度量值:这条路径的"成本",越小越优先

路由分为两种:

  • 静态路由:管理员手动配置。适合网络拓扑固定的场景,比如车上
  • 动态路由:路由器之间自动交换路由信息。适合大型复杂网络

在车上,99%的情况用静态路由就够了。为什么?因为车载网络拓扑是固定的,不会今天加个ECU明天拆个ECU。动态路由协议(如OSPF、RIP)反而增加了复杂度和安全风险。

我的路由配置习惯

在车载网关里配置静态路由时,我一般会加一条默认路由(0.0.0.0/0),指向中央网关。这样,所有不知道往哪发的数据包,都丢给中央网关处理。中央网关再根据更精细的路由表做转发。这种分层设计,既简单又可靠。

举个例子,假设有一个数据包要从诊断仪(192.168.1.100)发到摄像头(192.168.2.50):

  1. 诊断仪发现目标IP不在同一子网,把数据包发给默认网关(192.168.1.1)
  2. 网关查路由表,发现192.168.2.0/24的下一跳是192.168.2.1(摄像头子网的网关)
  3. 网关把数据包转发给192.168.2.1
  4. 192.168.2.1再把数据包发给摄像头

整个过程,数据包经过了三个节点:诊断仪 → 网关 → 摄像头子网网关 → 摄像头。每个节点都只负责"下一跳",这就是路由的精髓。

4.6 车载网络层测试要点

最后,我总结一下网络层测试的几个关键点:

  • IP连通性测试:Ping通所有节点,包括跨子网的通信
  • ARP缓存测试:检查ARP表是否正常更新,有没有异常条目
  • ICMP响应测试:验证ECU对Ping、Traceroute的响应是否符合预期
  • 路由表验证:确认静态路由配置正确,没有环路
  • 子网隔离测试:确保不同子网之间的访问控制生效

重要提醒

测试时别忘了检查MTU(最大传输单元)。车载以太网通常用1500字节的MTU,但有些ECU可能支持巨帧(Jumbo Frame)。如果两端MTU不匹配,数据包会被分片或丢弃。我曾经遇到过摄像头因为MTU设置错误,导致视频流卡顿的问题。嗯,这种问题排查起来特别费劲。

好了,这一章的内容就到这里。网络层是车载以太网的"大脑",理解了IP、ARP、ICMP和路由,你就能明白数据在车上是怎么流动的。下一章我们讲传输层,聊聊TCP和UDP在车上的应用。到时候我会分享一些关于DoIP和SOME/IP的实战经验,敬请期待。