第4章:车载以太网网络层:IPv4与IPv6在车上的应用、IP地址分配策略、子网划分实战
好,我们进入网络层。这一层在车载以太网里,说实话,是很多工程师容易忽略但又特别关键的一环。你想想看,物理层和数据链路层把数据包传过来了,但怎么找到目标节点?怎么保证数据能跨网段传输?这就是网络层要干的事。
在车上,网络层的主角就是IP协议。目前主流是IPv4,但IPv6也在悄悄渗透。我个人习惯把这一章分成三块:协议本身、地址怎么分、子网怎么划。咱们一个一个来。
4.1 IPv4与IPv6:车上到底用哪个?
先聊IPv4。这玩意儿大家太熟了,32位地址,写成四个十进制数。车上用IPv4,最大的好处就是成熟、工具链支持好。Vector的CANoe、VN系列设备,对IPv4的支持非常完善。我在项目里用IPv4做诊断通信(DoIP),基本没出过兼容性问题。
但IPv4有个硬伤——地址不够用。车上现在节点越来越多,ADAS、座舱、网关、T-Box……每个都需要IP地址。再加上未来V2X,一个车可能有几十个IP节点。IPv4的私有地址段(比如192.168.x.x)虽然能撑一阵子,但子网规划稍有不慎就会冲突。
那IPv6呢?128位地址,号称能给地球上每粒沙子分配一个IP。车上用IPv6的好处很明显:地址空间大、自动配置(SLAAC)、安全性更好。但问题也现实——很多老设备不支持,工具链的兼容性也参差不齐。我记得有一次用IPv6做DoIP测试,CANoe的配置折腾了我一整天。
来看个对比表格,更直观:
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32位 | 128位 |
| 地址表示 | 点分十进制(192.168.1.1) | 冒号十六进制(fe80::1) |
| 自动配置 | DHCP | SLAAC / DHCPv6 |
| 车上应用 | DoIP、SOME/IP、诊断 | V2X、未来架构 |
| 工具链支持 | 非常成熟 | 逐步完善中 |
4.2 IP地址分配策略:别让地址乱成一锅粥
地址怎么分?这是我在项目里被问得最多的问题。很多团队上来就随便设个网段,结果后期调试时发现地址冲突、路由混乱。嗯,这里要注意,分配策略一定要提前定好。
车上常见的分配方式有三种:
- 静态分配:每个ECU写死一个IP。适合固定节点,比如网关、T-Box。我习惯把网关设成x.x.x.1,T-Box设成x.x.x.2,这样一眼就能认出来。
- DHCP:动态分配。适合节点多的场景,比如座舱域。但要注意,车上网络环境特殊,DHCP服务器必须可靠。我曾经遇到过DHCP服务器重启后地址分配混乱,导致诊断会话中断的坑。
- AutoIP(链路本地地址):169.254.x.x段。适合临时通信或没有DHCP的场景。但别用在关键路径上,因为它不保证可达性。
举个例子,一个典型的车载网络地址规划:
网关(GW):192.168.1.1/24
座舱域控制器:192.168.1.10/24(静态)
ADAS域控制器:192.168.1.20/24(静态)
T-Box:192.168.1.2/24(静态)
娱乐屏:192.168.1.100/24(DHCP)
仪表盘:192.168.1.101/24(DHCP)
诊断仪:169.254.1.1/16(AutoIP)
你看,这样规划后,哪个设备在哪个段,一目了然。调试时不用猜,直接ping对应地址就行。
4.3 子网划分实战:别让广播风暴毁了你的网络
子网划分,说白了就是把一个大网切成几个小网。为什么要切?两个原因:一是减少广播域,二是隔离不同功能域。
车上广播流量其实不小。SOME/IP的服务发现、ARP请求、DHCP广播……如果不做子网划分,所有节点都在一个广播域里,网络负载会很高。我见过一个项目,所有ECU都在192.168.1.0/24里,结果广播包占了30%的带宽。
怎么划?用子网掩码。比如把192.168.1.0/24切成两个/25的子网:
- 子网A:192.168.1.0/25(地址范围:192.168.1.1 ~ 192.168.1.126)
- 子网B:192.168.1.128/25(地址范围:192.168.1.129 ~ 192.168.1.254)
这样,子网A和子网B之间的广播不会互相影响。但注意,跨子网通信需要路由。车上一般由网关来做这件事。
实战中,我建议这样规划:
- 诊断域:单独一个子网,比如192.168.2.0/24。诊断流量不会干扰其他功能。
- 控制域:ADAS、底盘等实时性要求高的节点,放在一个子网,比如192.168.3.0/24。
- 信息域:座舱、娱乐等大流量节点,放在另一个子网,比如192.168.4.0/24。
- V2X域:未来扩展,预留一个子网,比如192.168.5.0/24。
每个子网之间通过网关路由。网关配置静态路由表,只转发必要的数据。这样既安全又高效。
最后,用Vector工具链验证子网划分是否正确。CANoe里可以配置多个网络段,模拟跨子网通信。我习惯在仿真阶段就把路由表调通,省得上车后抓瞎。
嗯,这一章就到这。下一章我们聊传输层,UDP和TCP在车上的爱恨情仇。到时候见。