第1章:网络层与传输层基础

各位工程师朋友,咱们开始聊网络层和传输层。说实话,很多做车载以太网的朋友,一上来就扎进物理层,天天盯着眼图、回波损耗看。但我要说,网络层和传输层才是真正让数据「跑起来」的关键。

我个人习惯,遇到通信故障,先问自己三个问题:

  • IP地址对不对?
  • 端口通不通?
  • Socket建没建起来?

这三个问题搞定了,80%的网络层问题就解决了。剩下的20%,嗯,咱们慢慢聊。

1.1 IPv4/IPv6地址分配——别小看这个「门牌号」

IP地址就像门牌号。你想想看,一辆车要跟诊断仪通信,总得知道对方在哪吧?

在车载以太网里,地址分配主要有两种方式:

  • 静态分配:写死在代码里,适合ECU这种固定设备
  • 动态分配(DHCP):自动获取,适合诊断仪、测试设备

我记得有一次,客户反馈说某款ECU老是连不上诊断仪。我过去一看,好家伙,两个ECU配了同一个IP地址。你说这能通吗?

IPv4地址结构(以192.168.1.100/24为例):

  • 网络位:192.168.1(前24位)
  • 主机位:100(后8位)
  • 子网掩码:255.255.255.0

IPv6呢?说白了就是地址更多了,格式也变了。车载领域现在用得少,但未来是趋势。我建议你至少知道它的基本格式:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

嗯,这串东西看着头疼?别急,实际调试中你很少需要手写IPv6地址,工具会帮你搞定。

1.2 TCP/UDP端口与Socket——数据进出的「门」

IP地址找到了设备,那怎么找到设备上的具体服务呢?靠端口。

端口号范围:

范围 类型 举例
0-1023 知名端口 HTTP:80, DoIP:13400
1024-49151 注册端口 诊断仪常用
49152-65535 动态/私有端口 临时分配

TCP和UDP的区别,我用一句话说清楚:

  • TCP:打电话——先建立连接,再说话,保证对方能听到
  • UDP:对讲机——直接喊,不管对方在不在听

DoIP协议用的是TCP,因为诊断数据不能丢。我曾经遇到一个案例,有人用UDP做诊断传输,结果丢包了,ECU刷写一半卡死了。嗯,那场面,客户脸都绿了。

Socket是什么?说白了就是「IP地址+端口号」的组合。一个Socket唯一标识一个通信端点。

调试小技巧:

用Wireshark抓包时,直接看「Source IP:Port → Destination IP:Port」这一行,就能判断Socket是否建立成功。

1.3 DoIP协议基础——车载诊断的「专用通道」

DoIP(Diagnostic over Internet Protocol),就是基于IP网络的诊断协议。它把传统的CAN诊断搬到了以太网上。

DoIP的核心流程:

  1. 车辆发现:诊断仪发广播,问「谁在线?」
  2. 路由激活:ECU回应,建立逻辑连接
  3. 诊断通信:发送UDS诊断请求/响应
  4. 断开连接:结束会话

这里有个坑,我必须要说:DoIP的默认端口是13400(TCP)。如果你发现诊断仪连不上,先检查防火墙有没有放行这个端口。

避坑指南:

我曾经调试一个项目,诊断仪死活连不上ECU。查了两天,最后发现是交换机把UDP广播包给过滤了。DoIP的车辆发现阶段用的是UDP广播,很多交换机默认会拦截。记得检查交换机的IGMP Snooping设置。

1.4 网络层故障排查思路——从现象到根因

遇到网络层故障,别慌。我总结了一个「三步走」排查法:

第一步:确认物理层没问题

链路指示灯亮不亮?抓包能看到数据帧吗?如果物理层都挂了,上层就别看了。

第二步:检查IP配置

  • 用ping命令测试连通性
  • 检查子网掩码是否一致
  • 确认没有IP冲突

第三步:验证传输层

  • 用telnet或nc测试端口是否开放
  • 抓包看TCP三次握手是否完成
  • 检查Socket状态(LISTEN、ESTABLISHED、CLOSE_WAIT)

常用排查命令:

# 测试连通性
ping 192.168.1.100

# 测试端口
telnet 192.168.1.100 13400

# 查看本地端口状态(Linux)
netstat -an | grep 13400

# 抓包分析(Linux)
tcpdump -i eth0 port 13400

你想想看,如果TCP三次握手都没完成,那肯定不是应用层的问题。直接查网络配置或者防火墙就行。

嗯,这里还要提醒一句:别一上来就怀疑代码。我见过太多人,花三天查代码,最后发现是网线没插紧。先看物理层,再看网络层,最后才看应用层。这个顺序,能帮你省下80%的排查时间。

我的个人经验:

在车上调试时,我习惯带一个USB转以太网的小工具。有时候ECU的网口供电不足,换一个供电口就好了。这种小问题,排查起来最费时间。

好了,网络层和传输层的基础就聊到这儿。下一章咱们深入聊聊DoIP的报文结构和实际抓包分析。到时候我会拿一个真实案例,一步步带你走一遍排查流程。

记住:网络层的问题,90%都是配置问题。别怕,慢慢来。