gpt4 book ai didi

c - 在极少数情况下,UDP 传输数据包在 Linux 嵌入式设备(GigE Vision 相机)上丢失

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:00 26 4
gpt4 key购买 nike

硬件:

  • 源自红杉平台(AMCC)
  • 使用 AMCC PowerPC 440EPx 和
  • Marvell 88E1111 以太网 PHY,256 M DDR2 内存
  • Linux 版本 2.6.24.2

我通过 udp socket ca 传输数据。 Linux 应用程序(C 语言)每秒 60MB。有时我的 PC-Test 程序会注意到一个丢失的数据包,因为所有数据包都已编号(GigE Vision 流 channel 协议(protocol))我知道 UDP 协议(protocol)不可靠。但是因为我有干净的劳动条件并且它总是相同的最后一个数据包丢失了,我认为这一定是我的某个地方的系统错误代码。


所以我花了一个星期的时间试图找出丢失数据包的原因,但我找不到。

以下问题:

  • 使用巨型帧:数据包大小 8K 字节
  • 始终是丢失的最后一个数据包
  • 错误很少见(在几个小时和数千张传输图像之后)
  • 在 NIC 上连接或重新连接设备后错误率更高(自动协商后)

我试过了:

  • 使用另一个网卡
  • 检查我的代码:检查函数的返回值,检查函数的错误处理
  • 在我的设备上记录外发包裹
  • 使用 wireshark 工具查看包,并检查登录来自设备的包

我该如何解决这个问题?我知道这很难,因为失败原因的可能性太多了。

问题:

  • Linux 2.6.24 以太网驱动程序堆栈上是否存在任何已知错误(特别是在自动协商之后),稍后修复版本?
  • 我应该在我的传输套接字上设置特殊选项吗? (短袜= socket(AF_INET, SOCK_DGRAM, 0);
  • 我应该在自动协商后更新套接字吗?
  • 我是否应该在 linux 内核中启用任何 linux 诊断消息以找出问题所在?
  • 还有其他推荐吗?

最佳答案

我在我曾经开发的一个应用程序中看到过类似的问题,其中连接的一侧是 windows,另一侧是嵌入式实时操作系统(不是 linux),中间唯一的东西是 cat5 以太网电缆。事实上,我发现一定数量的 UDP 消息几乎总是会导致其中一条消息丢失,而且总是同一条消息。很奇怪,在使用了wireshark等网络工具很多时间后,我终于确定这只能是UDP不可靠的事实。

我的建议是切换到 TCP 并构建一个小型消息成帧器:

http://blog.chrisd.info/tcp-message-framing/

我发现使用 TCP 非常可靠,如果流量是“流式”(意思是:大部分是单向的),它也可以非常快另外在 TCP 之上构建消息成帧器比在其之上构建 TCP 容易得多UDP 的。

关于c - 在极少数情况下,UDP 传输数据包在 Linux 嵌入式设备(GigE Vision 相机)上丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23948479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com