This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM3352:TI-RTOS 下 AM3352 + KSZ9131RNX 上 FIN 数据包的填充行为

Guru**** 2416110 points
Other Parts Discussed in Thread: AM3352

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1532099/am3352-padding-behavior-for-fin-packets-on-am3352-ksz9131rnx-under-ti-rtos

器件型号:AM3352

工具/软件:

您好、

我们正在与您联系、以获取有关使用 TI AM3352 和 Microchip KSZ9131RNX 进行网络通信控制的建议。

我们目前正在开发千兆位以太网功能、在测试 AM3352 控制的 KSZ9131RNX 时、我们发现了一个问题、即从评估板到 PC 的 TCP/IP 通信有时无法提供预期数据。

【通信类型】
TCP/IP

【发现的问题】
通过 TCP/IP 将数据从评估板发送到 PC 时、FIN 数据包会出现在 Wireshark 捕获中、但它无法到达 PC 上的应用。 该recv()功能保持在等待状态。

【详细信息】
我们在 PC 上使用 VC ++创建了一个简单的应用、通过插座与评估板进行通信。 流程如下:

  1. TCP 套接字连接成功(交换 SYN 和 ACK)

  2. 正常接收来自评估板的 1024 字节数据

  3. →板发送 PC 应用未接收到的 FIN 数据包(仍在等待) recv()

  4. Wireshark 显示确实发送了 Len=0 的[FIN、ACK]数据包

  5. 复位电路板会导致发送 RST 数据包、recv()然后该功能退出

在电路板端、我们观察到丢弃了小于 60 字节的数据包、因此我们手动为此类数据包添加填充 0x00(如 ARP 和 RST)以满足以太网的最小帧大小。

【已执行测试】
当我们添加了这两个填充数据并相应地更新了 IP 标头的总长度字段时、PC 可以成功接收 FIN 数据包。
在本例中、Wireshark 将[FIN、ACK]数据包显示为 Len=6(匹配填充)、的返回值recv()为 0。

但是、如果我们在不修改 IP 标头的情况下仅添加填充、则 Wireshark 仍然显示 Len=0、并且 PC 不接收数据包。

【问题】
手动将数据添加到 FIN 数据包会导致非自然状态、其中 FIN 数据包承载有效负载数据。
AM3352 或 KSZ9131 是否可以在发送小于 60 字节的以太网帧时自动添加填充、从而无需在软件中修改 IP 标头即可正确传输此类小尺寸数据包?

我们感谢您的指导。

此致、
Conor

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Conor、

    我们无法再支持基于 TI-RTOS 的 AM335x 软件开发。 请参阅 此公告 并在其中查找现有资源。

    此致、

    建中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Xu:

    还进行了其他研究。

    我们面临一个问题、即在从评估板到 PC 的 TCP 通信期间、当总帧大小小于最小以太网帧大小(60 字节)时、PC 应用无法正确接收 FIN 数据包。 尽管[FIN、ACK]数据包在 Wireshark 中可见、但 recv()  PC 端的功能不会返回并仍然被阻止。 为了解决该问题、我们当前将在应用程序端添加虚拟填充数据、以满足 60 字节的最小大小。 但是、这需要手动调整 IP 报头的总长度字段、这会使实现变得复杂。

    我们已经查看了 NDK 文档 、并找到一个名为“Minimum Send Size“的配置选项、但它似乎主要适用于 UDP 流量。 我们想澄清以下关于支持自动填充的要点:

    【问题】

    1. NDK 的最小发送大小设置是否也适用于 TCP 流量(包括 FIN 等控制数据包)?

    2. AM3352 + TI-RTOS 上的 CPSW 驱动程序或 NDK 协议栈中是否有任何机制可以自动填充传出以太网帧以满足 60 字节的最小长度?

    我知道不再支持 TI-RTOS、但如果您能尽快进行调查以解决问题、我将不胜感激。

    Conor

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ho Conor,

    遗憾的是、我们不再具备 TI-RTOS NDK 栈方面的专业知识。

    此致、

    建中