# 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 状态机转换表等)未完全展开。