30 KiB
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 介绍与功能概述
本规范规定了 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:TCPSOCK_DGRAM:UDPSOCK_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_00001SRS_BSW_00159→SWS_TcpIp_00002SRS_BSW_00323→SWS_TcpIp_00010SRS_BSW_00405→SWS_TcpIp_00002SRS_BSW_00406→SWS_TcpIp_00011SRS_BSW_00407→SWS_TcpIp_00013SRS_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 消息接收
接收流程:
- EthIf 接收帧
- TcpIp 检查 IP 头部
- 根据协议分派到 TCP / UDP / ICMP
- 通过 SoAd 通知上层
7.6 消息发送
发送流程:
- 上层通过 SoAd 触发发送
- SoAd 通知 TcpIp
- TcpIp 构造 IP 头
- 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
typedef struct {
uint32 dummy;
} TcpIp_ConfigType;
8.2.2 TcpIp_SockAddrInType
typedef struct {
uint16 sa_family;
uint16 sa_port;
uint32 sa_addr;
} TcpIp_SockAddrInType;
8.2.3 TcpIp_SockAddrIn6Type
typedef struct {
uint16 sa_family;
uint16 sa_port;
uint8 sa_addr[16];
uint32 flowinfo;
uint32 scope_id;
} TcpIp_SockAddrIn6Type;
8.2.4 TcpIp_SockAddrType
typedef union {
TcpIp_SockAddrInType In;
TcpIp_SockAddrIn6Type In6;
} TcpIp_SockAddrType;
8.2.5 TcpIp_DomainType
typedef enum {
TCPIP_AF_INET = 2,
TCPIP_AF_INET6 = 10
} TcpIp_DomainType;
8.2.6 TcpIp_ProtocolType
typedef enum {
TCPIP_IPPROTO_TCP = 6,
TCPIP_IPPROTO_UDP = 17
} TcpIp_ProtocolType;
8.2.7 TcpIp_SocketIdType
typedef uint16 TcpIp_SocketIdType;
8.3 函数定义
8.3.1 通用
TcpIp_Init
void TcpIp_Init(const TcpIp_ConfigType* ConfigPtr);
描述:初始化 TcpIp 模块。
8.3.2 核心通信控制
TcpIp_GetSocket
Std_ReturnType TcpIp_GetSocket(
TcpIp_DomainType Domain,
TcpIp_ProtocolType Protocol,
TcpIp_SocketIdType* SocketIdPtr
);
描述:获取套接字。
TcpIp_CloseSocket
Std_ReturnType TcpIp_CloseSocket(
TcpIp_SocketIdType SocketId,
boolean Abort
);
描述:关闭套接字。
TcpIp_Bind
Std_ReturnType TcpIp_Bind(
TcpIp_SocketIdType SocketId,
TcpIp_LocalAddrIdType LocalAddrId,
uint16 Port
);
描述:绑定套接字到本地地址和端口。
TcpIp_TcpConnect
Std_ReturnType TcpIp_TcpConnect(
TcpIp_SocketIdType SocketId,
const TcpIp_SockAddrType* RemoteAddrPtr
);
描述:发起 TCP 连接(客户端)。
TcpIp_TcpListen
Std_ReturnType TcpIp_TcpListen(
TcpIp_SocketIdType SocketId,
uint16 MaxConnections
);
描述:监听 TCP 连接(服务器)。
TcpIp_TcpAccepted
Std_ReturnType TcpIp_TcpAccepted(
TcpIp_SocketIdType SocketId,
TcpIp_SocketIdType AcceptedSocketId,
const TcpIp_SockAddrType* RemoteAddrPtr
);
描述:接受 TCP 连接。
TcpIp_TcpReqTcpConnect
Std_ReturnType TcpIp_TcpReqTcpConnect(
TcpIp_SocketIdType SocketId
);
描述:请求 TCP 连接建立。
TcpIp_TcpReceived
Std_ReturnType TcpIp_TcpReceived(
TcpIp_SocketIdType SocketId,
uint32 Length
);
描述:确认已接收的数据(用于流控)。
TcpIp_ChangeParameter
Std_ReturnType TcpIp_ChangeParameter(
TcpIp_SocketIdType SocketId,
TcpIp_ParamIdType ParameterId,
const void* ParameterValuePtr
);
描述:修改套接字参数。
TcpIp_UdpTransmit
Std_ReturnType TcpIp_UdpTransmit(
TcpIp_SocketIdType SocketId,
const TcpIp_SockAddrType* RemoteAddrPtr,
const uint8* DataPtr,
uint32 Length
);
描述:通过 UDP 发送数据。
8.3.3 扩展通信控制和信息
TcpIp_GetIpAddr
Std_ReturnType TcpIp_GetIpAddr(
TcpIp_LocalAddrIdType LocalAddrId,
TcpIp_SockAddrType* IpAddrPtr,
TcpIp_SockAddrType* NetMaskPtr,
TcpIp_SockAddrType* DefaultRouterPtr
);
描述:获取 IP 地址、子网掩码、默认路由。
TcpIp_GetPhysAddr
Std_ReturnType TcpIp_GetPhysAddr(
TcpIp_LocalAddrIdType LocalAddrId,
uint8* PhysAddrPtr
);
描述:获取物理(MAC)地址。
TcpIp_GetRemotePhysAddr
Std_ReturnType TcpIp_GetRemotePhysAddr(
TcpIp_LocalAddrIdType LocalAddrId,
const TcpIp_SockAddrType* IpAddrPtr,
uint8* PhysAddrPtr
);
描述:获取远程物理地址(ARP 解析)。
TcpIp_SetIpAddr
Std_ReturnType TcpIp_SetIpAddr(
TcpIp_LocalAddrIdType LocalAddrId,
const TcpIp_SockAddrType* IpAddrPtr,
const TcpIp_SockAddrType* NetMaskPtr,
const TcpIp_SockAddrType* DefaultRouterPtr
);
描述:设置 IP 地址、子网掩码、默认路由。
TcpIp_DhcpReadOption
Std_ReturnType TcpIp_DhcpReadOption(
TcpIp_LocalAddrIdType LocalAddrId,
uint8 Option,
uint8* LengthPtr,
uint8* DataPtr
);
描述:读取 DHCP 选项。
TcpIp_DhcpWriteOption
Std_ReturnType TcpIp_DhcpWriteOption(
TcpIp_LocalAddrIdType LocalAddrId,
uint8 Option,
uint8 Length,
const uint8* DataPtr
);
描述:写入 DHCP 选项。
TcpIp_GetCtrlIdx
uint8 TcpIp_GetCtrlIdx(TcpIp_LocalAddrIdType LocalAddrId);
描述:获取 EthIf 控制器索引。
TcpIp_GetSocketOwner
ApplicationType TcpIp_GetSocketOwner(
TcpIp_SocketIdType SocketId
);
描述:获取套接字所有者。
TcpIp_SetSocketOwner
Std_ReturnType TcpIp_SetSocketOwner(
TcpIp_SocketIdType SocketId,
ApplicationType ApplicationId
);
描述:设置套接字所有者。
TcpIp_AddMulticastAddr
Std_ReturnType TcpIp_AddMulticastAddr(
TcpIp_LocalAddrIdType LocalAddrId,
const TcpIp_SockAddrType* MulticastAddrPtr
);
描述:添加多播地址。
TcpIp_RemoveMulticastAddr
Std_ReturnType TcpIp_RemoveMulticastAddr(
TcpIp_LocalAddrIdType LocalAddrId,
const TcpIp_SockAddrType* MulticastAddrPtr
);
描述:移除多播地址。
TcpIp_GetVersionInfo
void TcpIp_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr);
描述:返回 TcpIp 的版本信息。
8.3.4 传输
TcpIp_TransmitTo
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
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
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_<Area> |
进入临界区 |
SchM_Exit_TcpIp_<Area> |
退出临界区 |
8.6.2 可选接口
| API | 描述 |
|---|---|
Csm_MacGenerate |
CSM MAC 生成 |
Csm_SignatureGenerate |
CSM 签名生成 |
Csm_SignatureVerify |
CSM 签名验证 |
KeyM_GetCertificate |
KeyM 获取证书 |
EthSM_GetCurrentComMode |
EthSM 获取当前模式 |
8.6.3 可配置接口
| API | 描述 |
|---|---|
<Up_CbkRxIndication> |
上层接收指示 |
<Up_CbkTxConfirmation> |
上层发送确认 |
<Up_CbkTcpAccepted> |
上层 TCP 接受 |
<Up_CbkTcpConnected> |
上层 TCP 连接建立 |
<Up_CbkTcpDataReceived> |
上层 TCP 数据接收 |
<Up_CbkUdpDataReceived> |
上层 UDP 数据接收 |
<Up_CbkLocalIpAddrAssignmentChg> |
上层本地 IP 变化 |
<Up_CbkArpAddrResolutionChg> |
上层 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 状态机转换表等)未完全展开。