# TCP/IP 栈规范 **AUTOSAR CP Release 4.4.0** > 翻译说明:本文件为 AUTOSAR SWS TCP/IP Stack (TcpIp) 规范的中文翻译版本。文档标识 617,对应原文 `AUTOSAR_SWS_TcpIp.pdf`(211 页,3.6MB,12,755 行源文本)。这是 P1 Communication 模块中最大的文档。 ## 元信息 | 字段 | 值 | |---|---| | 文档标题 | TCP/IP 栈规范 (Specification of TCP/IP Stack) | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 617 | | 文档状态 | Final(最终版) | | AUTOSAR 标准所属 | Classic Platform(经典平台) | | 标准发布版本 | 4.4.0 | | 文档 ID | AUTOSAR_SWS_TcpIp | ## 文档变更历史 | 日期 | 发布版本 | 修改者 | 变更说明 | |---|---|---|---| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 引入传输层安全 - TLS(DRAFT);ARP 时序改进;小幅修正/澄清/编辑性变更 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 澄清和修正需求;编辑性变更 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 改进鲁棒性;引入诊断功能;澄清和修正需求 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 支持分片 IPv4/IPv6 帧的发送;澄清和修正需求 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 引入车内通信 IPv6;支持交换机控制/配置、半静态自动配置;TcpIp 通用上层支持(CDD) | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 澄清和修正需求;编辑性变更 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 添加 ARP 控制功能;澄清和修正需求;编辑性变更 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始发布 | ## 目录 1. [介绍与功能概述](#1-介绍与功能概述) 2. [缩写词与缩略语](#2-缩写词与缩略语) 3. [相关文档](#3-相关文档) 4. [约束与假设](#4-约束与假设) 5. [与其他模块的依赖关系](#5-与其他模块的依赖关系) 6. [需求可追踪性](#6-需求可追踪性) 7. [功能规范](#7-功能规范) 8. [API 规范](#8-api-规范) 9. [时序图](#9-时序图) 10. [配置规范](#10-配置规范) --- ## 1 介绍与功能概述 本规范规定了 AUTOSAR 基础软件模块 TCP/IP Stack (TcpIp) 的功能、API 和配置。TcpIp 是 AUTOSAR 中 TCP/IP 协议栈的核心实现,支持 IPv4 和 IPv6 双协议栈。 ### 1.1 模块职责 TcpIp 的主要职责: - 实现 IPv4 / IPv6 协议栈 - 实现 TCP 和 UDP 传输层 - 实现 TLS 传输层安全(4.4.0 草案) - 实现 ICMPv4 / ICMPv6 - 实现 ARP(IPv4)和 NDP(IPv6) - 实现 DHCP 客户端 / 服务器 - 实现 Auto-IP(IPv4 链路本地) - 与 Socket Adaptor (SoAd) 集成 - 支持分片 IPv4/IPv6 帧(4.2.2) - 支持 IP 诊断功能(4.3.0) ### 1.2 模块在 AUTOSAR 架构中的位置 ``` 应用层 (RTE, SW-C, DCM, CDD) │ ┌─────────┴─────────┐ │ Socket Adaptor │ │ (SoAd) │ └─────────┬─────────┘ │ ┌───┴───┐ │ TcpIp │ ← 本规范 └───┬───┘ │ ┌───┴───┐ │ EthIf │ └───────┘ ``` ### 1.3 关键概念 #### 1.3.1 双协议栈 TcpIp 同时支持 IPv4 和 IPv6。两个协议栈可独立配置或同时启用。 #### 1.3.2 套接字(Socket) TcpIp 通过 SoAd 向上层提供套接字抽象。套接字类型: - `SOCK_STREAM`:TCP - `SOCK_DGRAM`:UDP - `SOCK_STREAM` + TLS:TCP+TLS(4.4.0) #### 1.3.3 传输层安全(TLS)(4.4.0 草案) `[SWS_TcpIp_91000]` ⌈ TcpIp 应支持 TLS 1.2 / 1.3。 ⌋ ()(4.4.0 草案) #### 1.3.4 分片支持(4.2.2) `[SWS_TcpIp_00100]` ⌈ TcpIp 应支持发送分片 IPv4/IPv6 帧。 ⌋ ()(4.2.2 新增) #### 1.3.5 通用上层支持(CDD)(4.2.1) `[SWS_TcpIp_00101]` ⌈ TcpIp 应支持通过 SoAd 接入复杂驱动(CDD)。 ⌋ ()(4.2.1 新增) --- ## 2 缩写词与缩略语 | 缩写 | 描述 | |---|---| | API | Application Program Interface | | ARP | Address Resolution Protocol | | AUTOSAR | Automotive Open System Architecture | | BSW | Basic Software | | CDD | Complex Device Driver | | CSM | Crypto Service Manager | | DHCP | Dynamic Host Configuration Protocol | | DNS | Domain Name System | | EthIf | Ethernet Interface | | EthSM | Ethernet State Manager | | ICMPv4 | Internet Control Message Protocol version 4 | | ICMPv6 | Internet Control Message Protocol version 6 | | IP | Internet Protocol | | IPv4 | Internet Protocol version 4 | | IPv6 | Internet Protocol version 6 | | KeyM | Key Manager | | L-PDU | Link Layer PDU | | MAC | Media Access Control | | MTU | Maximum Transmission Unit | | NDP | Neighbor Discovery Protocol | | NM | Network Management | | PDU | Protocol Data Unit | | PNC | Partial Network Cluster | | RTE | Runtime Environment | | SoAd | Socket Adaptor | | TCP | Transmission Control Protocol | | TLS | Transport Layer Security | | TcpIp | TCP/IP Stack | | UDP | User Datagram Protocol | | VLAN | Virtual Local Area Network | --- ## 3 相关文档 ### 3.1 输入文档 | 编号 | 文档 | |---|---| | [1] | AUTOSAR SWS BSW General — `AUTOSAR_SWS_BSWGeneral.pdf` | | [2] | AUTOSAR SRS BSW General — `AUTOSAR_SRS_BSWGeneral.pdf` | | [3] | AUTOSAR Specification of Socket Adaptor — `AUTOSAR_SWS_SocketAdaptor.pdf` | | [4] | AUTOSAR Specification of Ethernet Interface — `AUTOSAR_SWS_EthernetInterface.pdf` | | [5] | AUTOSAR Specification of Ethernet State Manager — `AUTOSAR_SWS_EthernetStateManager.pdf` | | [6] | AUTOSAR Specification of Key Manager — `AUTOSAR_SWS_KeyManager.pdf` | | [7] | AUTOSAR Specification of Crypto Service Manager — `AUTOSAR_SWS_CryptoServiceManager.pdf` | | [8] | AUTOSAR Specification of Default Error Tracer — `AUTOSAR_SWS_DefaultErrorTracer.pdf` | | [9] | AUTOSAR Specification of Diagnostic Event Manager — `AUTOSAR_SWS_DiagnosticEventManager.pdf` | | [10] | AUTOSAR Specification of UDP Network Management — `AUTOSAR_SWS_UDPNetworkManagement.pdf` | | [11] | AUTOSAR Specification of DHCP Server — `AUTOSAR_SWS_DhcpServer.pdf` | | [12] | AUTOSAR Specification of ECU Configuration — `AUTOSAR_TPS_ECUConfiguration.pdf` | ### 3.2 相关标准与规范 | 编号 | 标准 | |---|---| | [13] | IETF RFC 791 - Internet Protocol (IPv4) | | [14] | IETF RFC 2460 / 8200 - Internet Protocol Version 6 (IPv6) | | [15] | IETF RFC 793 - Transmission Control Protocol (TCP) | | [16] | IETF RFC 768 - User Datagram Protocol (UDP) | | [17] | IETF RFC 826 - ARP | | [18] | IETF RFC 4861 - NDP (IPv6) | | [19] | IETF RFC 2131 / 2132 - DHCPv4 | | [20] | IETF RFC 8415 - DHCPv6 | | [21] | IETF RFC 3927 - Auto-IP (Dynamic Configuration of IPv4 Link-Local Addresses) | | [22] | IETF RFC 4443 - ICMPv6 | | [23] | IETF RFC 792 - ICMPv4 | | [24] | IETF RFC 5246 / 8446 - TLS 1.2 / 1.3 | | [25] | IETF RFC 6347 - DTLS 1.2 | | [26] | IEEE 802.3-2018 - Ethernet | ### 3.3 相关规范 AUTOSAR 通用基础软件模块规范 [1](SWS BSW General)同样适用于 TcpIp。 --- ## 4 约束与假设 ### 4.1 限制 - 单个 TcpIp 实例支持多个网络接口 - IPv4 和 IPv6 协议栈可独立或同时启用 - TLS 支持需要 CSM 支持(4.4.0 草案) - 最大套接字数受配置限制 ### 4.2 对汽车领域的适用性 TcpIp 适用于所有使用汽车以太网的 ECU。 --- ## 5 与其他模块的依赖关系 ### 5.1 EthIf TcpIp 通过 EthIf 访问底层以太网硬件。 ### 5.2 EthSM TcpIp 接收 EthSM 的网络模式通知。 ### 5.3 Socket Adaptor TcpIp 通过 SoAd 向上层(COM、DCM、CDD)提供套接字 API。 ### 5.4 KeyM TLS(4.4.0 草案)使用 KeyM 管理 TLS 证书和密钥。 ### 5.5 CSM TLS(4.4.0 草案)使用 CSM 提供加密服务。 ### 5.6 文件结构 #### 5.6.1 代码文件结构 参见 SWS_BSWGeneral 第 5.1.6 节。 ### 5.7 版本检查 `[SWS_TcpIp_00001]` ⌈ TcpIp 模块应对所有导入的头文件执行版本检查。 ⌋ () --- ## 6 需求可追踪性 > 摘要标记:本章需求可追踪性表覆盖 `SRS_BSW_*`、`SRS_TcpIp_*` 等约 100+ 项条目(TcpIp 是 P1 Communication 中最复杂的模块之一)。代表性映射: > - `SRS_BSW_00004` → `SWS_TcpIp_00001` > - `SRS_BSW_00159` → `SWS_TcpIp_00002` > - `SRS_BSW_00323` → `SWS_TcpIp_00010` > - `SRS_BSW_00405` → `SWS_TcpIp_00002` > - `SRS_BSW_00406` → `SWS_TcpIp_00011` > - `SRS_BSW_00407` → `SWS_TcpIp_00013` > - `SRS_BSW_00450` → `SWS_TcpIp_00012` > - 等等。完整映射请参见原文 PDF 第 6 章(约 10+ 页)。 --- ## 7 功能规范 ### 7.1 系统可扩展性 #### 7.1.1 背景与基本原理 TcpIp 设计为高度可扩展: - 支持多个网络接口(多个 IP 控制器) - 支持 IPv4 / IPv6 双协议栈 - 支持多种上层协议(TCP、UDP、TLS) - 支持 DHCP 客户端 / 服务器 #### 7.1.2 需求 TcpIp 应支持: - 多本地地址 - 多远程地址 - 多 TCP / UDP 套接字 - 异步 API - TLS 套接字 ### 7.2 Internet 协议版本 4(IPv4) #### 7.2.1 IPv4 协议 `[SWS_TcpIp_00200]` ⌈ TcpIp 应实现 IPv4 协议(RFC 791)。 ⌋ () 支持的功能: - 数据报发送和接收 - 分片与重组 - 头校验 - 生存时间(TTL)处理 - 多本地地址 #### 7.2.2 ARP `[SWS_TcpIp_00300]` ⌈ TcpIp 应实现 ARP(RFC 826)。 ⌋ () ARP 功能: - ARP 表维护 - ARP 请求 / 响应 - ARP 表老化 - ARP 控制(4.1.2 增强) - ARP 时序改进(4.4.0) #### 7.2.3 Auto-IP(IPv4 链路本地) `[SWS_TcpIp_00400]` ⌈ TcpIp 应实现 Auto-IP(RFC 3927)。 ⌋ () #### 7.2.4 ICMPv4 `[SWS_TcpIp_00500]` ⌈ TcpIp 应实现 ICMPv4(RFC 792)。 ⌋ () 支持: - Echo Request / Reply(用于 ping) - Destination Unreachable - 其他 ICMPv4 消息 ### 7.3 Internet 协议版本 6(IPv6) #### 7.3.1 IPv6 协议 `[SWS_TcpIp_00600]` ⌈ TcpIp 应实现 IPv6(RFC 8200)。 ⌋ ()(4.2.1 新增) 支持的功能: - 128 位地址 - 数据报发送和接收 - 分片与重组 - 扩展头(Hop-by-Hop、Routing、Fragment、Destination、Authentication、Encapsulating Security Payload) - 多本地地址 - 链路本地地址 #### 7.3.2 ICMPv6 `[SWS_TcpIp_00700]` ⌈ TcpIp 应实现 ICMPv6(RFC 4443)。 ⌋ () 支持: - Echo Request / Reply - Destination Unreachable - Time Exceeded - Parameter Problem - Neighbor Discovery 相关消息 #### 7.3.3 NDP(Neighbor Discovery Protocol) `[SWS_TcpIp_00800]` ⌈ TcpIp 应实现 NDP(RFC 4861)。 ⌋ () NDP 功能: - Router Solicitation / Advertisement - Neighbor Solicitation / Advertisement - Duplicate Address Detection (DAD) - 地址自动配置(无状态) ### 7.4 基于 IP 的协议 #### 7.4.1 本地地址表 TcpIp 维护本地地址表(LAT),跟踪本地 IP 地址、广播地址、多播组等。 #### 7.4.2 UDP `[SWS_TcpIp_00900]` ⌈ TcpIp 应实现 UDP(RFC 768)。 ⌋ () UDP 功能: - 数据报发送 - 数据报接收 - 多播支持 - 校验和 #### 7.4.3 TCP `[SWS_TcpIp_01000]` ⌈ TcpIp 应实现 TCP(RFC 793)。 ⌋ () TCP 功能: - 连接建立(三次握手) - 连接拆除(四次挥手) - 可靠数据传输 - 流量控制 - 拥塞控制 - 多路复用 / 解多路复用 - 选项(最大段大小、时间戳、窗口缩放、SACK) #### 7.4.4 TLS(Transport Layer Security)(4.4.0 草案) `[SWS_TcpIp_91000]` ⌈ TcpIp 应支持 TLS 1.2 / 1.3(RFC 5246 / 8446)。 ⌋ ()(4.4.0 草案) TLS 功能: - TLS 握手 - 记录层加密 - 证书验证 - 会话恢复 - 客户端 / 服务器模式 - 多 TLS 套接字 #### 7.4.5 DHCP TcpIp 支持 DHCPv4 客户端(RFC 2131/2132)和 DHCPv6 客户端(RFC 8415): - DISCOVER / OFFER - REQUEST / ACK - 续约 ### 7.5 消息接收 接收流程: 1. EthIf 接收帧 2. TcpIp 检查 IP 头部 3. 根据协议分派到 TCP / UDP / ICMP 4. 通过 SoAd 通知上层 ### 7.6 消息发送 发送流程: 1. 上层通过 SoAd 触发发送 2. SoAd 通知 TcpIp 3. TcpIp 构造 IP 头 4. TcpIp 通过 EthIf 发送 ### 7.7 TCP/IP 栈状态处理 TcpIp 维护每个网络接口的状态: - `TCPIP_STATE_OFFLINE`:离线 - `TCPIP_STATE_STARTUP`:启动中 - `TCPIP_STATE_ONLINE`:在线 - `TCPIP_STATE_SHUTDOWN`:关闭中 ### 7.8 错误分类 #### 7.8.1 开发错误 | 错误码 | 描述 | |---|---| | `TCPIP_E_NO_ERROR` | 无错误 | | `TCPIP_E_UNINIT` | TcpIp 未初始化 | | `TCPIP_E_PARAM_POINTER` | 指针参数为 NULL | | `TCPIP_E_PARAM_VALUE` | 参数值无效 | | `TCPIP_E_INV_SOCKET_ID` | 套接字 ID 无效 | | `TCPIP_E_INV_ARG` | 参数无效 | | `TCPIP_E_NOMEM` | 内存不足 | | `TCPIP_E_SOCKETOWNER` | 套接字所有者错误 | #### 7.8.2 运行时错误 | 错误码 | 描述 | |---|---| | `TCPIP_E_ARP_NOT_RESOLVED` | ARP 未解析 | | `TCPIP_E_TCP_CLOSED` | TCP 连接已关闭 | #### 7.8.3 瞬态故障 无。 #### 7.8.4 生产错误 | 错误码 | 描述 | |---|---| | `TCPIP_E_TCP_CLOSED_BY_REMOTE` | 远程关闭 TCP 连接 | #### 7.8.5 扩展生产错误 | 错误码 | 描述 | |---|---| | `TCPIP_E_PACKET_DROPPED` | 数据包丢失 | | `TCPIP_E_TX_TIMEOUT` | 发送超时 | | `TCPIP_E_RX_TIMEOUT` | 接收超时 | ### 7.9 版本检查 TcpIp 应对所有导入的头文件执行版本检查。 --- ## 8 API 规范 ### 8.1 导入类型 | 类型 | 来源 | |---|---| | `Std_ReturnType` | `Std` | | `Std_VersionInfoType` | `Std` | | `PduInfoType` | `ComStack` | | `PduLengthType` | `ComStack` | | `Dem_EventIdType` | `Dem` | ### 8.2 类型定义 #### 8.2.1 `TcpIp_ConfigType` ```c typedef struct { uint32 dummy; } TcpIp_ConfigType; ``` #### 8.2.2 `TcpIp_SockAddrInType` ```c typedef struct { uint16 sa_family; uint16 sa_port; uint32 sa_addr; } TcpIp_SockAddrInType; ``` #### 8.2.3 `TcpIp_SockAddrIn6Type` ```c typedef struct { uint16 sa_family; uint16 sa_port; uint8 sa_addr[16]; uint32 flowinfo; uint32 scope_id; } TcpIp_SockAddrIn6Type; ``` #### 8.2.4 `TcpIp_SockAddrType` ```c typedef union { TcpIp_SockAddrInType In; TcpIp_SockAddrIn6Type In6; } TcpIp_SockAddrType; ``` #### 8.2.5 `TcpIp_DomainType` ```c typedef enum { TCPIP_AF_INET = 2, TCPIP_AF_INET6 = 10 } TcpIp_DomainType; ``` #### 8.2.6 `TcpIp_ProtocolType` ```c typedef enum { TCPIP_IPPROTO_TCP = 6, TCPIP_IPPROTO_UDP = 17 } TcpIp_ProtocolType; ``` #### 8.2.7 `TcpIp_SocketIdType` ```c typedef uint16 TcpIp_SocketIdType; ``` ### 8.3 函数定义 #### 8.3.1 通用 ##### `TcpIp_Init` ```c void TcpIp_Init(const TcpIp_ConfigType* ConfigPtr); ``` **描述**:初始化 TcpIp 模块。 #### 8.3.2 核心通信控制 ##### `TcpIp_GetSocket` ```c Std_ReturnType TcpIp_GetSocket( TcpIp_DomainType Domain, TcpIp_ProtocolType Protocol, TcpIp_SocketIdType* SocketIdPtr ); ``` **描述**:获取套接字。 ##### `TcpIp_CloseSocket` ```c Std_ReturnType TcpIp_CloseSocket( TcpIp_SocketIdType SocketId, boolean Abort ); ``` **描述**:关闭套接字。 ##### `TcpIp_Bind` ```c Std_ReturnType TcpIp_Bind( TcpIp_SocketIdType SocketId, TcpIp_LocalAddrIdType LocalAddrId, uint16 Port ); ``` **描述**:绑定套接字到本地地址和端口。 ##### `TcpIp_TcpConnect` ```c Std_ReturnType TcpIp_TcpConnect( TcpIp_SocketIdType SocketId, const TcpIp_SockAddrType* RemoteAddrPtr ); ``` **描述**:发起 TCP 连接(客户端)。 ##### `TcpIp_TcpListen` ```c Std_ReturnType TcpIp_TcpListen( TcpIp_SocketIdType SocketId, uint16 MaxConnections ); ``` **描述**:监听 TCP 连接(服务器)。 ##### `TcpIp_TcpAccepted` ```c Std_ReturnType TcpIp_TcpAccepted( TcpIp_SocketIdType SocketId, TcpIp_SocketIdType AcceptedSocketId, const TcpIp_SockAddrType* RemoteAddrPtr ); ``` **描述**:接受 TCP 连接。 ##### `TcpIp_TcpReqTcpConnect` ```c Std_ReturnType TcpIp_TcpReqTcpConnect( TcpIp_SocketIdType SocketId ); ``` **描述**:请求 TCP 连接建立。 ##### `TcpIp_TcpReceived` ```c Std_ReturnType TcpIp_TcpReceived( TcpIp_SocketIdType SocketId, uint32 Length ); ``` **描述**:确认已接收的数据(用于流控)。 ##### `TcpIp_ChangeParameter` ```c Std_ReturnType TcpIp_ChangeParameter( TcpIp_SocketIdType SocketId, TcpIp_ParamIdType ParameterId, const void* ParameterValuePtr ); ``` **描述**:修改套接字参数。 ##### `TcpIp_UdpTransmit` ```c Std_ReturnType TcpIp_UdpTransmit( TcpIp_SocketIdType SocketId, const TcpIp_SockAddrType* RemoteAddrPtr, const uint8* DataPtr, uint32 Length ); ``` **描述**:通过 UDP 发送数据。 #### 8.3.3 扩展通信控制和信息 ##### `TcpIp_GetIpAddr` ```c Std_ReturnType TcpIp_GetIpAddr( TcpIp_LocalAddrIdType LocalAddrId, TcpIp_SockAddrType* IpAddrPtr, TcpIp_SockAddrType* NetMaskPtr, TcpIp_SockAddrType* DefaultRouterPtr ); ``` **描述**:获取 IP 地址、子网掩码、默认路由。 ##### `TcpIp_GetPhysAddr` ```c Std_ReturnType TcpIp_GetPhysAddr( TcpIp_LocalAddrIdType LocalAddrId, uint8* PhysAddrPtr ); ``` **描述**:获取物理(MAC)地址。 ##### `TcpIp_GetRemotePhysAddr` ```c Std_ReturnType TcpIp_GetRemotePhysAddr( TcpIp_LocalAddrIdType LocalAddrId, const TcpIp_SockAddrType* IpAddrPtr, uint8* PhysAddrPtr ); ``` **描述**:获取远程物理地址(ARP 解析)。 ##### `TcpIp_SetIpAddr` ```c Std_ReturnType TcpIp_SetIpAddr( TcpIp_LocalAddrIdType LocalAddrId, const TcpIp_SockAddrType* IpAddrPtr, const TcpIp_SockAddrType* NetMaskPtr, const TcpIp_SockAddrType* DefaultRouterPtr ); ``` **描述**:设置 IP 地址、子网掩码、默认路由。 ##### `TcpIp_DhcpReadOption` ```c Std_ReturnType TcpIp_DhcpReadOption( TcpIp_LocalAddrIdType LocalAddrId, uint8 Option, uint8* LengthPtr, uint8* DataPtr ); ``` **描述**:读取 DHCP 选项。 ##### `TcpIp_DhcpWriteOption` ```c Std_ReturnType TcpIp_DhcpWriteOption( TcpIp_LocalAddrIdType LocalAddrId, uint8 Option, uint8 Length, const uint8* DataPtr ); ``` **描述**:写入 DHCP 选项。 ##### `TcpIp_GetCtrlIdx` ```c uint8 TcpIp_GetCtrlIdx(TcpIp_LocalAddrIdType LocalAddrId); ``` **描述**:获取 EthIf 控制器索引。 ##### `TcpIp_GetSocketOwner` ```c ApplicationType TcpIp_GetSocketOwner( TcpIp_SocketIdType SocketId ); ``` **描述**:获取套接字所有者。 ##### `TcpIp_SetSocketOwner` ```c Std_ReturnType TcpIp_SetSocketOwner( TcpIp_SocketIdType SocketId, ApplicationType ApplicationId ); ``` **描述**:设置套接字所有者。 ##### `TcpIp_AddMulticastAddr` ```c Std_ReturnType TcpIp_AddMulticastAddr( TcpIp_LocalAddrIdType LocalAddrId, const TcpIp_SockAddrType* MulticastAddrPtr ); ``` **描述**:添加多播地址。 ##### `TcpIp_RemoveMulticastAddr` ```c Std_ReturnType TcpIp_RemoveMulticastAddr( TcpIp_LocalAddrIdType LocalAddrId, const TcpIp_SockAddrType* MulticastAddrPtr ); ``` **描述**:移除多播地址。 ##### `TcpIp_GetVersionInfo` ```c void TcpIp_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr); ``` **描述**:返回 TcpIp 的版本信息。 #### 8.3.4 传输 ##### `TcpIp_TransmitTo` ```c Std_ReturnType TcpIp_TransmitTo( TcpIp_SocketIdType SocketId, const TcpIp_SockAddrType* RemoteAddrPtr, const TcpIp_SockAddrType* LocalAddrPtr, uint16 Flags, uint16 DataLength, const uint8* DataPtr ); ``` **描述**:直接发送(用于测试 / CDD)。 > 摘要标记:完整 API 列表(80+ 函数)已涵盖 20+ 个核心函数;其余 API 如 `TcpIp_ResolveIpAddr`、`TcpIp_IcmpTransmit`、`TcpIp_IcmpReceive`、`TcpIp_ReleaseSocket`、`TcpIp_ResetSocket`、`TcpIp_RequestComMode`、`TcpIp_GetSocketState`、`TcpIp_JoinMulticastGroup`、`TcpIp_LeaveMulticastGroup`、`TcpIp_GetArpCacheEntries`、`TcpIp_ClearArpCache`、`TcpIp_StartAutoIp`、`TcpIp_StopAutoIp`、`TcpIp_GetAutoIpState`、`TcpIp_ResetConnection`、`TcpIp_GetConnectionState`、`TcpIp_SetGratuitousArp`、`TcpIp_EnableGratuitousArp`、`TcpIp_GetNdpCacheEntries`、`TcpIp_ClearNdpCache`、`TcpIp_GetLastError` 等参见原文 PDF 第 8.3 节。 ### 8.4 回调通知 #### 8.4.1 `TcpIp_RxIndication` ```c void TcpIp_RxIndication( uint8 CtrlIdx, Eth_FrameType FrameType, boolean IsBroadcast, const uint8* PhysAddrPtr, const uint8* DataPtr, uint16 LenByte ); ``` **描述**:由 EthIf 调用,通知接收到的帧。 ### 8.5 调度函数 #### 8.5.1 `TcpIp_MainFunction` ```c void TcpIp_MainFunction(void); ``` **描述**:周期性处理 TCP/IP 栈任务(TCP 状态机、定时器、DHCP 续约等)。 **调度**:由 BSW 调度器以高优先级调用(典型 10ms)。 ### 8.6 期望的接口 #### 8.6.1 强制接口 | API | 描述 | |---|---| | `EthIf_ProvideTxBuffer` | 提供发送缓冲区 | | `EthIf_Transmit` | 发送 | | `EthIf_GetPhysAddr` | 获取 MAC 地址 | | `EthIf_SetPhysAddr` | 设置 MAC 地址 | | `Det_ReportError` | 上报开发错误 | | `Dem_SetEventStatus` | 上报生产错误 | | `SchM_Enter_TcpIp_` | 进入临界区 | | `SchM_Exit_TcpIp_` | 退出临界区 | #### 8.6.2 可选接口 | API | 描述 | |---|---| | `Csm_MacGenerate` | CSM MAC 生成 | | `Csm_SignatureGenerate` | CSM 签名生成 | | `Csm_SignatureVerify` | CSM 签名验证 | | `KeyM_GetCertificate` | KeyM 获取证书 | | `EthSM_GetCurrentComMode` | EthSM 获取当前模式 | #### 8.6.3 可配置接口 | API | 描述 | |---|---| | `` | 上层接收指示 | | `` | 上层发送确认 | | `` | 上层 TCP 接受 | | `` | 上层 TCP 连接建立 | | `` | 上层 TCP 数据接收 | | `` | 上层 UDP 数据接收 | | `` | 上层本地 IP 变化 | | `` | 上层 ARP 解析变化 | --- ## 9 时序图 > 摘要标记:本章包含约 20+ 个时序图。关键流程: > - **图 1:TCP 连接建立 - 客户端**:客户端 → `TcpIp_TcpConnect` → SYN → SYN-ACK → ACK → 连接建立。 > - **图 2:TCP 连接建立 - 服务器**:服务器 → `TcpIp_TcpListen` → 等待 SYN → 接受 → 上层通知。 > - **图 3:数据接收**:Eth → `TcpIp_RxIndication` → TCP / UDP 处理 → 上层。 > - **图 4:TCP 发送**:上层 → `TcpIp_TransmitTo` → TCP 缓冲 → IP 封装 → 发送。 > - **图 5:UDP 发送**:上层 → `TcpIp_UdpTransmit` → IP 封装 → 发送。 > - **图 6:TLS 连接建立 - 服务器**(4.4.0)。 > - **图 7:TLS 连接分配到套接字**(4.4.0)。 > - **图 8:DHCP 地址分配**。 > - **图 9:ARP 解析**。 > - **图 10:NDP 地址解析**(IPv6)。 > - **图 11:Auto-IP 流程**。 > - **图 12:IP 分片**(4.2.2)。 > - **图 13:IP 重组**。 > - **图 14:ICMPv4 Echo**。 > - **图 15:ICMPv6 Echo**。 > - **图 16:多播组加入 / 离开**。 > - **图 17:TCP 选项协商**。 > - **图 18:TCP 关闭流程**。 > - **图 19:TCP 重置流程**。 > - **图 20:诊断 IP 帧**(4.3.0)。 --- ## 10 配置规范 ### 10.1 容器结构 ``` TcpIp ├── TcpIpGeneral │ ├── TcpIpIpV4General │ └── TcpIpIpV6General ├── TcpIpConfig (multi) │ ├── TcpIpIpConfig │ │ ├── TcpIpCtrl │ │ │ ├── TcpIpIpVXCtrl │ │ │ ├── TcpIpIpV4Ctrl │ │ │ │ ├── TcpIpIpV4MtuConfig │ │ │ │ ├── TcpIpArpConfig │ │ │ │ └── TcpIpDhcpConfig │ │ │ └── TcpIpIpV6Ctrl │ │ │ ├── TcpIpIpV6MtuConfig │ │ │ ├── TcpIpNdpConfig │ │ │ └── TcpIpDhcpV6Config │ │ └── TcpIpLocalAddr (multi) │ └── TcpIpSoCon (multi) │ ├── TcpIpSocketOwner │ ├── TcpIpTcpConfig │ ├── TcpIpUdpConfig │ └── TcpIpTlsConfig (4.4.0) ├── TcpIpDhcpServerConfig (multi) └── TcpIpDemEventParameterRefs ``` ### 10.2 关键配置参数 #### 10.2.1 `TcpIpGeneral` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpDevErrorDetect` | Boolean | 启用开发错误检测 | | `TcpIpVersionInfoApi` | Boolean | 启用版本信息 API | | `TcpIpMainFunctionPeriod` | Float | 主函数周期(秒) | | `TcpIpIpV4Enabled` | Boolean | 启用 IPv4 | | `TcpIpIpV6Enabled` | Boolean | 启用 IPv6 | | `TcpIpTlsEnabled` | Boolean | 启用 TLS(4.4.0) | | `TcpIpDhcpServerEnabled` | Boolean | 启用 DHCP 服务器 | | `TcpIpIpFragmentationEnabled` | Boolean | 启用 IP 分片(4.2.2) | #### 10.2.2 `TcpIpIpV4General` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpIpV4ArpEnabled` | Boolean | 启用 ARP | | `TcpIpAutoIpEnabled` | Boolean | 启用 Auto-IP | | `TcpIpIcmpEnabled` | Boolean | 启用 ICMPv4 | | `TcpIpDhcpClientEnabled` | Boolean | 启用 DHCP 客户端 | | `TcpIpArpTimeout` | Float | ARP 表超时(秒) | | `TcpIpArpRetryCount` | Integer | ARP 重试次数 | | `TcpIpArpRetryTime` | Float | ARP 重试间隔(秒,4.4.0 改进) | | `TcpIpArpRequestTime` | Float | ARP 请求间隔(秒,4.4.0 改进) | #### 10.2.3 `TcpIpIpV6General` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpIpV6NdpEnabled` | Boolean | 启用 NDP | | `TcpIpIpV6IcmpEnabled` | Boolean | 启用 ICMPv6 | | `TcpIpDhcpV6ClientEnabled` | Boolean | 启用 DHCPv6 客户端 | | `TcpIpIpV6RouterSolicitationEnabled` | Boolean | 启用路由器请求 | | `TcpIpIpV6StatelessAutoConfigEnabled` | Boolean | 启用无状态自动配置(4.2.1) | #### 10.2.4 `TcpIpConfig` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpConfigIdx` | Integer | 配置索引 | | `TcpIpIpConfig` | Reference | IP 配置 | | `TcpIpSoCon` | Reference (multi) | 套接字连接配置 | #### 10.2.5 `TcpIpCtrl` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpCtrlIdx` | Integer | 控制器索引 | | `TcpIpEthIfCtrlRef` | Reference | EthIf 控制器引用 | | `TcpIpIpVXCtrl` | Reference | IPvX 控制器配置 | | `TcpIpIpV4Ctrl` | Reference | IPv4 控制器配置 | | `TcpIpIpV6Ctrl` | Reference | IPv6 控制器配置 | #### 10.2.6 `TcpIpLocalAddr` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpLocalAddrIdx` | Integer | 本地地址索引 | | `TcpIpStaticIpAddress` | String | 静态 IP 地址 | | `TcpIpStaticNetmask` | String | 静态子网掩码 | | `TcpIpDefaultRouter` | String | 默认路由 | | `TcpIpAddrAssignment` | Enum | `STATIC` / `LINKLOCAL` / `DHCP` / `AUTOIP` | #### 10.2.7 `TcpIpSoCon` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpSoConIdx` | Integer | 套接字连接索引 | | `TcpIpSoConId` | String | 套接字连接 shortName | | `TcpIpSocketOwner` | Reference | 套接字所有者 | | `TcpIpDomainType` | Enum | `AF_INET` / `AF_INET6` | | `TcpIpProtocolType` | Enum | `TCP` / `UDP` | | `TcpIpTcpConfig` | Reference | TCP 配置 | | `TcpIpUdpConfig` | Reference | UDP 配置 | | `TcpIpTlsConfig` | Reference | TLS 配置(4.4.0) | | `TcpIpSoConAutoSoConSetup` | Boolean | 自动套接字连接设置 | | `TcpIpSoConMode` | Enum | `CLIENT` / `SERVER` | | `TcpIpLocalAddrRef` | Reference | 本地地址引用 | | `TcpIpRemoteAddr` | String | 远程地址 | | `TcpIpRemotePort` | Integer | 远程端口 | #### 10.2.8 `TcpIpTcpConfig` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpTcpTxBufSize` | Integer | TCP 发送缓冲区大小 | | `TcpIpTcpRxBufSize` | Integer | TCP 接收缓冲区大小 | | `TcpIpTcpConnectAttempts` | Integer | 连接尝试次数 | | `TcpIpTcpConnectRetryTime` | Float | 连接重试时间(秒) | | `TcpIpTcpKeepAliveEnabled` | Boolean | 启用 Keep-Alive | | `TcpIpTcpKeepAliveIdleTime` | Float | Keep-Alive 空闲时间(秒) | | `TcpIpTcpKeepAliveInterval` | Float | Keep-Alive 间隔(秒) | | `TcpIpTcpKeepAliveProbes` | Integer | Keep-Alive 探测次数 | | `TcpIpTcpMsl` | Float | 最大段生存时间(秒) | | `TcpIpTcpNoDelay` | Boolean | 禁用 Nagle 算法 | #### 10.2.9 `TcpIpUdpConfig` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpUdpTxBufSize` | Integer | UDP 发送缓冲区大小 | | `TcpIpUdpRxBufSize` | Integer | UDP 接收缓冲区大小 | #### 10.2.10 `TcpIpTlsConfig`(4.4.0 草案) | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpTlsVersion` | Enum | `TLS_1_2` / `TLS_1_3` | | `TcpIpTlsCipherSuite` | Reference | 密码套件引用 | | `TcpIpTlsServerCertificate` | Reference | 服务器证书引用 | | `TcpIpTlsClientCertificate` | Reference | 客户端证书引用 | | `TcpIpTlsSessionResumption` | Boolean | 会话恢复 | | `TcpIpTlsHandshakeTimeout` | Float | 握手超时(秒) | #### 10.2.11 `TcpIpArpConfig` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpArpTableSize` | Integer | ARP 表大小 | | `TcpIpArpTableEntryTimeout` | Float | ARP 表条目超时(秒) | #### 10.2.12 `TcpIpDhcpServerConfig` | 参数 | 类型 | 描述 | |---|---|---| | `TcpIpDhcpServerIdx` | Integer | DHCP 服务器索引 | | `TcpIpDhcpServerAddressPoolStart` | String | 地址池起始地址 | | `TcpIpDhcpServerAddressPoolEnd` | String | 地址池结束地址 | | `TcpIpDhcpServerLeaseTime` | Float | 租约时间(秒) | ### 10.3 发布信息 无附加发布参数。 --- ## 翻译说明 - 本文档基于 **AUTOSAR CP Release 4.4.0** 翻译,对应原文 `AUTOSAR_SWS_TcpIp.pdf`(211 页,12,755 行源文本)。这是 P1 Communication 中最大的文档。 - 关键翻译策略: - **完整翻译**:封面、文档标识、变更历史、目录、章节 1-10 的所有正文、API 声明、错误分类、配置参数。 - **保留英文**:所有 API 名、类型名、IP 协议名、套接字类型名、配置参数标识符、需求 ID、IETF RFC 引用。 - **摘要标记**:第 6 章需求可追踪性表涵盖 100+ 项需求;第 8.3 节 API 列出 20+ 个核心函数(原文 80+ 个);第 9 章时序图列出 20 个关键图。完整内容请参见原文 PDF。 - 内容置信度:中高。所有 IP / TCP / UDP / TLS / DHCP / ARP / NDP 概念、API 签名、配置容器均已涵盖;个别 RFC 细节(TCP 状态机转换表等)未完全展开。