news 2026/10/1 17:16:04

车载以太网中的TCP与UDP:诊断、服务通信与网络管理怎么选

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
车载以太网中的TCP与UDP:诊断、服务通信与网络管理怎么选

车载以太网正在从高端车型向主流平台渗透。随着域集中式架构和中央计算架构的推进,车内通信不再只是CAN总线的天下,以太网承载的业务越来越多——DoIP诊断、SOME/IP服务通信、UdpNM网络管理,全部跑在传输层协议之上。

而传输层的两个核心协议TCP和UDP,决定了这些业务能不能稳定运行。很多工程师在做车载网络设计时,对这两个协议的理解停留在“TCP可靠、UDP快”的层面,但具体到端口规划、连接管理、重传策略,往往需要更细的判断。

传输层的职责:进程到进程的交付

网络层的IP协议负责把数据送到目标主机,但主机里跑着几十上百个进程,真正需要通信的是进程,不是主机。传输层要解决的就是这个问题:把数据交付给具体的应用进程。

识别进程靠端口号,16位,范围0到65535。这个区间分三段:0到1023是熟知端口,由IANA统一分配,系统设计中不能占用;1024到49151是登记端口,需要在IANA登记防止重复,车载场景中的DoIP用13400端口、SOME/IP SD用30490端口,都属于这一段;49152到65535是动态端口,客户端自由使用。

在整车架构设计中,动态端口区间需要按域做分段规划。比如自动驾驶域、智能座舱域各划一段,避免不同域的应用在端口分配上发生冲突。这个问题在项目早期容易被忽略,等到多个域集成时才发现端口撞车,返工成本很高。

传输层通信的端点叫套接字(Socket),由IP地址加端口号组成。一条连接由五元组唯一标识:源IP、目的IP、源端口、目的端口、协议。这个五元组在车载以太网抓包分析时是基础中的基础——看到一条异常流量,第一步就是确认五元组是否符合预期。

TCP:可靠性是怎么实现的

TCP面向字节流,每个字节都有编号。序列号是本报文段第一个数据字节的编号,确认号是期望收到的下一个字节序号。这个设计决定了TCP的确认机制是累积确认,而不是逐个确认。

TCP首部前20字节固定,选项可变最长40字节,所以首部长度范围是20到60字节。几个字段直接决定抓包分析的思路:数据偏移字段取值5到15,单位是4字节,对应首部20到60字节;六个控制位中,SYN建连、FIN释放、ACK确认、RST复位、PSH立即上交应用、URG紧急数据;窗口大小是接收方告诉发送方还能收多少数据,这是流量控制的依据。

校验和的覆盖范围除了首部和数据,还要在前面补12字节伪首部,包括源IP、目的IP、协议号和长度。这个设计是为了校验数据有没有送错主机。

选项字段中,MSS(最大报文段长度)是建连时双方协商的关键参数。以太网MTU是1500字节,减去IP头20字节和TCP头20字节,MSS最大1460。MSS设小了网络利用率低,设大了会导致IP层分片,两种情况都会影响车载网络的实时性。窗口扩大选项解决的是16位窗口最大只有64KB的问题,在高延迟带宽积网络中,64KB的窗口远远不够用,移位因子最大14,窗口可以扩到2的30次方减1。时间戳选项用于计算RTT和防止序号绕回,SACK选择确认则让接收方在收到不连续字节时,通知发送方只重传缺失部分,而不是重传整个窗口。

连接建立与释放的实际影响

TCP建连需要三次握手,释放需要四次挥手。握手过程中,ACK号永远是对方序号加1,SYN和FIN各占一个序号,所以客户端最后一次挥手的ACK要等2MSL才算真正关闭。

在车载场景中,这个机制带来的直接影响是:诊断设备与车辆建立DoIP连接时,需要预留足够的建连时间。如果ECU在启动阶段就尝试建立TCP连接,而网络栈还没完全初始化,握手失败会导致诊断会话建立延迟。很多整车厂的诊断规范里会明确要求,ECU上电后需要等待一段时间才允许建立诊断连接,原因就在这里。

四次挥手同样需要注意。主动关闭方在发送最后一个ACK后,需要等待2MSL才能释放连接。如果车辆在诊断过程中频繁建立和断开连接,这个等待时间会累积,影响诊断效率。这也是为什么DoIP诊断通常建议保持长连接,而不是每次操作都重新建连。

可靠性三件套:重传、流量控制、拥塞控制

TCP的可靠传输等于ACK确认加重传,这套机制叫ARQ(自动重传请求)。

超时重传(RTO)中,每个报文段设一个计时器,超时未确认就重传。RTO要动态计算,设长了链路空转,设短了无谓重传。RFC 2988给出的公式是RTO等于加权平均往返时间加4倍偏差。在车载以太网中,RTT通常很小,RTO的设置需要根据具体链路的实测数据来调整,不能直接套用公网的默认值。

快速重传解决的是超时等待太长的问题。接收方收到乱序报文立即回ACK告知缺号,发送方连续收到3个重复ACK就判定丢包,不等超时立即重传。这个机制在车载诊断刷写大块数据时特别重要——如果等RTO超时再重传,刷写时间会明显拉长。

流量控制解决的是发送方太快、接收方来不及收的问题。TCP用滑动窗口让发送方不要超过接收方的处理能力。发送缓冲分成四段:已发送已确认、已发送未确认、可发送、不可发送。窗口内序号用完还没收到确认,就必须停下。

拥塞控制解决的是全局问题。流量控制是端到端的事,拥塞控制是网络整体的事。核心思路是:没拥塞就把拥塞窗口调大,拥塞了就调小。慢启动阶段窗口从小值开始指数增长,达到慢启动阈值后转入拥塞避免,窗口线性增长。一旦超时,阈值降为当前一半,窗口重新慢启动。收到3个重复ACK时触发快速重传和快速恢复,不必回到慢启动,只把阈值减半。

车载网络的特点是拓扑固定、链路质量可控,拥塞控制的激进程度可以适当调整。比如在封闭的车内网络中,慢启动的初始窗口可以设置得比公网更大,减少建连初期的等待时间。

UDP:极简路线在车载场景的价值

UDP只在IP之上加了两样东西:端口复用分用和差错检测。特点四个:无连接、尽力交付、面向报文、无拥塞控制。首部只有8字节,四个字段各占2字节。

在车载场景中,UDP的价值不在于“快”,而在于“合适”。SOME/IP SD服务发现用UDP 30490端口,因为服务发现是周期性的广播或组播,丢一两个包不影响整体功能,下一周期会重新发送。UdpNM网络管理同样用UDP,因为网络管理报文是周期性发送的,偶尔丢包不会导致网络状态判断错误。

反过来,如果这些场景强行用TCP,每个报文都要建连、确认、重传,网络管理报文的实时性反而会下降。用错协议,比不用协议更麻烦。

车载场景怎么选:几个实际判断维度

看业务是否需要可靠交付。DoIP诊断刷写大块数据,丢一个字节都可能导致刷写失败,必须用TCP。周期性的网络管理报文,丢一两个包不影响功能,用UDP更合适。

看通信模式是一对一还是一对多。TCP只支持一对一,UDP支持一对多和组播。SOME/IP SD服务发现需要组播,用UDP是必然选择。

看实时性要求。UDP没有拥塞控制,随发随走,实时性更好。但这也意味着UDP需要应用层自己做流量控制,否则可能压垮接收方。

看首部开销。TCP首部20到60字节,UDP首部8字节。在车载这种带宽相对受限的环境中,首部开销的差异在大量小报文场景下会累积成可观的带宽占用。

车载以太网的设计,本质上是在可靠性和实时性之间做权衡。TCP保证可靠,代价是延迟和开销;UDP保证实时,代价是可靠性需要应用层自己兜底。理解了这一点,选型就不再是“哪个更好”的问题,而是“哪个更合适”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 17:14:16

Vivado 2026.1 和 Vitis 2026.1 软件安装

vavao 2026.2 安装 一、安装包下载 windows 安装包下载地址:https://www.amd.com/zh-cn/support/downloads/adaptive-socs-and-fpgas/development-tools/2026-1.html点击红色圈,下载windows安装包,安装包需要登录才能下载,所以&am…

作者头像 李华
网站建设 2026/10/1 17:13:36

BUUCTF SQL注入实战:Havefun1与EasySQL深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 17:11:43

短视频文案自动化提取:ASR技术方案对比

引言短视频创作者在内容研究阶段,经常需要从大量参考视频中提取文案内容。传统的手动记录方式效率极低,基于ASR(自动语音识别)的文案自动化提取成为刚需。本文从工程实践角度,对比几种主流的短视频文案提取方案。技术原…

作者头像 李华
网站建设 2026/10/1 17:11:39

《Wireshark实战(三):命令行抓包与离线包分析实战》

前言在云计算生产环境中,Linux 云主机通常没有图形界面,我们无法使用 Wireshark 的图形界面。此时,掌握命令行抓包工具(如 tshark / tcpdump)和离线包分析技能,是云计算架构师排查网络故障的必备生存技能。…

作者头像 李华
网站建设 2026/10/1 17:09:53

PyTorch+OCR实现火车车厢号识别:从检测到部署

简介:面向铁路货运管理、物流追踪与智能交通等对识别效率与精度要求较高的应用场景,这套基于PyTorch框架的OCR深度学习方案,专门解决火车车厢编号的自动识别与提取问题。从图像批量预处理、文字区域检测到序列识别,代码覆盖了完整…

作者头像 李华