在一次 AUTOSAR Classic 以太网诊断联调中,ECU 能够响应 DoIP 的 UDP 发现请求,诊断仪却无法通过 TCP 13400 建立会话。网络抓包中,诊断仪发出 SYN,ECU 返回 RST/ACK。单看这一组报文,很容易把注意力集中在端口、防火墙或者 TCP 状态机上。
真正决定这条连接能否建立的条件,发生在 SYN 到来之前:SoAd 申请到了 TcpIp Socket,但在配置该 Socket 的接收缓冲区时失败,因而没有走到 Bind 和 Listen。
这篇文章沿着这条实际调用链,介绍 AUTOSAR DoIP 的协议分层、SoAd 的监听建立过程,以及一种固定规格 TCP Buffer Pool 的分配设计。文中涉及的配置数值和结构图均为匿名化原理示例,不是原工程的 ECUC 导出或抓包重放。函数名用于定位机制,代码为重新编写的概念示例,不是供应商源码。
原创大约 12 分钟