DOCA 文档 v2.10.0

kTLS 卸载

注意

此功能在 NVIDIA® ConnectX®-6 Dx 和 NVIDIA® BlueField®-2 及更高版本的加密设备上受支持。

传输层安全 (TLS) 是一种广泛部署的协议,用于保护互联网上的 TCP 连接。TLS 也是 HTTP/2(最新的 Web 标准)的必需功能。TLS 的内核实现 (kTLS) 为将协议卸载到硬件中提供了新的机会。

TLS 数据路径卸载允许 NIC 加速 AES-GCM 的加密、解密和身份验证。TLS 卸载在数据通过设备时处理数据,不存储任何数据,仅更新上下文。如果数据包无法被设备加密/解密,则软件回退会处理该数据包。

为了避免内核中不必要的复杂性,TLS 握手保留在用户空间中。使用套接字的完整 TLS 连接使用以下方案完成

  1. 在标准 TCP 文件描述符上调用 connect()accept()

  2. 使用用户空间 TLS 库完成握手。

  3. 创建一个新的 KTLS 套接字文件描述符。

  4. 从 TLS 库中提取 TLS 初始化向量 (IV)、会话密钥和序列 ID。在 kTLS 文件描述符 (FD) 上使用 setsockopt 函数将它们传递给内核。

  5. 在 KTLS FD 上使用标准 read()write()sendfile()splice() 系统调用。

驱动程序可以提供从内核到 NIC 硬件的 Tx 和 Rx 数据包加密/解密卸载。收到非数据 TLS 消息(控制消息)后,kTLS 套接字返回错误,并且消息保留在原始 TCP 套接字上。kTLS 套接字自动分离。通过调用 getsockopt 以接收当前序列号并将它们插入到 TLS 库中,完成控制权转移回原始加密 FD。

为了在内核中获得支持,请确保以下标志按如下方式设置。

  • CONFIG_TLS=y

  • CONFIG_TLS_DEVICE=y | m

注意

对于使用 OFED 驱动程序的 kTLS Tx 设备卸载,内核 TLS 模块 (kernel/net/tls) 必须与内核 v5.3 及以上版本对齐。

对于使用 OFED 驱动程序的 kTLS Rx 设备卸载,内核 TLS 模块 (kernel/net/tls) 必须与内核 v5.9 及以上版本对齐。

要启用 kTLS Tx 卸载,请运行

复制
已复制!
            

ethtool -K <ifs> tls-hw-tx-offload on

要启用 kTLS Rx 卸载,请运行

复制
已复制!
            

ethtool -K <ifs> tls-hw-rx-offload on

有关 TLS 卸载的更多信息,请访问以下内核文档

需要 OpenSSL 3.0.0 或更高版本以支持 kTLS TX/RX 卸载。

支持的 OpenSSL 版本可以从发行版软件包下载,也可以从 OpenSSL github 下载和编译。

信息

有关配置示例,请参阅 DOCA TLS 卸载指南

© 版权所有 2025,NVIDIA。 上次更新于 2025 年 2 月 12 日。