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的工作流程:
- 主机A想发数据给IP为192.168.1.2的主机B
- A先查自己的ARP缓存表,看有没有B的MAC地址
- 没有?那就发一个ARP请求广播:"谁是192.168.1.2?请告诉我你的MAC地址"
- B收到后,回复一个ARP应答:"我是192.168.1.2,我的MAC是AA:BB:CC:DD:EE:FF"
- 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):
- 诊断仪发现目标IP不在同一子网,把数据包发给默认网关(192.168.1.1)
- 网关查路由表,发现192.168.2.0/24的下一跳是192.168.2.1(摄像头子网的网关)
- 网关把数据包转发给192.168.2.1
- 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的实战经验,敬请期待。