第4章:车载以太网网络层:IPv4/IPv6地址配置、子网掩码与网关、ARP协议

各位同学,大家好。今天我们聊聊车载以太网的网络层。说实话,很多做CAN/LIN出身的工程师,一看到IP地址、子网掩码这些东西就头大。我当年刚转车载以太网时也一样,觉得这玩意儿太抽象了。但干久了你会发现,网络层其实就是给数据包找个家,再告诉它怎么走。

车载网络里,网络层主要干三件事:地址分配、路由寻址、地址解析。咱们一个一个说。

4.1 IPv4地址配置:静态还是动态?

车载环境里,IP地址配置主要有两种方式:静态配置和动态配置。静态配置就是写死在代码里,ECU上电后直接用。动态配置则通过DHCP或者AutoIP自动获取。

静态配置,说白了就是手动指定。比如ADAS摄像头固定用192.168.1.10,网关固定用192.168.1.1。这种方式简单可靠,没有协议交互开销。但缺点也很明显——如果网络拓扑变了,你得挨个改配置。

动态配置,车载里常用的是AutoIP(链路本地地址)。我记得有一次调试一个智驾域控,它和激光雷达之间就是用AutoIP协商地址。两个设备上电后自动在169.254.x.x段里选一个不冲突的地址。嗯,这里要注意,AutoIP只适用于同一链路内通信,不能跨网段。

核心要点:车载以太网中,静态配置用于固定节点(如网关、域控),动态配置用于即插即拔节点(如诊断仪、测试设备)。

4.2 IPv6地址配置:车载为什么需要它?

你可能会问,IPv4地址够用吗?说实话,传统车载网络IPv4确实够用。但到了自动驾驶时代,每个传感器、每个执行器都需要独立IP,IPv4的地址空间就捉襟见肘了。

IPv6地址有128位,地址空间大得离谱。车载里常用的是链路本地地址(FE80::/10)和唯一本地地址(FD00::/8)。配置方式也分两种:

  • 无状态地址自动配置(SLAAC):设备根据MAC地址自动生成接口ID,加上路由器通告的前缀,就得到了完整IPv6地址。
  • 有状态配置(DHCPv6):类似IPv4的DHCP,由服务器分配地址。

我在项目里遇到过一个问题:某款域控同时支持IPv4和IPv6,但测试时发现IPv6通信总是不稳定。查了半天,原来是SLAAC生成的接口ID和另一个设备冲突了。后来我们改用了DHCPv6,问题就解决了。所以,双栈环境下,建议优先用DHCPv6

个人经验:车载IPv6目前还没完全普及,但OEM已经在下一代架构里强制要求了。建议你现在就开始熟悉SLAAC和DHCPv6的报文结构,迟早用得上。

4.3 子网掩码与网关:数据包怎么找到路?

子网掩码,说白了就是告诉设备:哪些IP是跟我同一个网段的,哪些不是。比如IP是192.168.1.10,掩码是255.255.255.0,那192.168.1.x都是同网段,直接发二层帧就行。如果目标IP是192.168.2.x,那就得走网关。

网关,就是通往其他网段的大门。车载网络里,网关通常是域控或者中央网关。它负责跨网段转发数据包。

举个例子:ADAS摄像头(192.168.1.10)要给座舱域控(192.168.2.20)发数据。摄像头一看目标IP不在自己网段,就把数据包扔给网关(192.168.1.1)。网关收到后,查路由表,发现目标网段是192.168.2.0/24,就从对应端口转发出去。座舱域控收到后,再回复数据。

避坑指南:我曾经遇到过一个问题:摄像头和座舱域控明明在同一个交换机下,但就是ping不通。查了半天,发现是子网掩码配错了。摄像头配的是255.255.255.0,座舱配的是255.255.0.0。两者对网段的理解不一致,导致通信失败。所以,同一广播域内的设备,子网掩码必须一致

4.4 ARP协议:IP地址怎么找到MAC地址?

ARP(地址解析协议)是网络层和数据链路层之间的桥梁。它的作用很简单:给定一个IP地址,找到对应的MAC地址。

过程是这样的:

  1. 设备A想给设备B发数据,但只知道B的IP,不知道B的MAC。
  2. 设备A发一个ARP请求广播:谁的IP是192.168.1.20?请告诉我你的MAC。
  3. 设备B收到后,发现是自己的IP,就回复一个ARP应答:我是192.168.1.20,我的MAC是AA:BB:CC:DD:EE:FF。
  4. 设备A收到后,把IP-MAC映射缓存起来,下次直接用。

车载环境里,ARP有个坑——ARP表老化时间。默认老化时间通常是120秒,但有些ECU为了省内存,设置得很短。我遇到过一个问题:某款T-Box每隔30秒就发一次ARP请求,导致网络里全是ARP广播,正常数据都传不过去了。后来我们把老化时间统一改成120秒,问题才解决。

测试要点:用CANoe测试ARP时,重点检查三点:

  • ARP请求是否在正确的时间发出(上电、IP变更、表项老化)
  • ARP应答是否包含正确的MAC地址
  • ARP缓存表是否在老化后及时更新

4.5 CANoe实战:抓一个ARP报文看看

光说不练假把式。咱们用CANoe抓个ARP报文看看。

打开CANoe,配置好以太网硬件通道。然后在Analysis & Simulation窗口里,添加一个Ethernet Packet窗口。启动仿真,让两个ECU通信。你会看到类似这样的报文:

Ethernet II, Src: 00:1A:2B:3C:4D:5E, Dst: FF:FF:FF:FF:FF:FF
    Type: ARP (0x0806)
    Address Resolution Protocol (request)
        Hardware type: Ethernet (1)
        Protocol type: IPv4 (0x0800)
        Hardware size: 6
        Protocol size: 4
        Opcode: request (1)
        Sender MAC address: 00:1A:2B:3C:4D:5E
        Sender IP address: 192.168.1.10
        Target MAC address: 00:00:00_00:00:00
        Target IP address: 192.168.1.20

看到没?目标MAC是全0,表示我不知道。目标IP是192.168.1.20,就是我要找的。如果设备B在线,它会回复一个ARP应答,Opcode变成2(reply),并且带上自己的MAC。

小技巧:在CANoe的Ethernet窗口里,可以设置过滤器只显示ARP报文。这样调试时不会被其他数据干扰。我个人习惯把ARP、ICMP、DHCP的过滤器都设好,方便快速定位问题。

4.6 总结与避坑清单

好了,今天的内容就这些。咱们总结一下:

知识点 关键点 常见坑
IPv4地址配置 静态用于固定节点,AutoIP用于即插即拔 AutoIP地址段冲突
IPv6地址配置 SLAAC自动生成,DHCPv6集中管理 双栈环境下地址冲突
子网掩码与网关 掩码决定网段,网关负责跨网段转发 同一广播域内掩码不一致
ARP协议 IP到MAC的映射,广播请求单播应答 ARP表老化时间过短导致广播风暴

最后,送大家一句话:网络层的问题,90%出在地址配置上。下次遇到ping不通,先检查IP、掩码、网关,再查ARP表。按这个顺序来,能省不少时间。

下一章我们聊传输层——UDP和TCP在车载里的那些事儿。到时候见。