【问题标题】:Half duplex UDP?半双工UDP?
【发布时间】:2017-09-02 01:12:02
【问题描述】:

我开发了一个应用程序,它通过 UDP 与外部设备进行通信。在大多数情况下,它似乎工作得很好,但是我有一位客户在一台特定的笔记本电脑上使用我的应用程序时遇到了丢包。他的另一台笔记本电脑没问题。

他检查了缓冲区大小等明显的东西,但没有什么明显的错误。

然后他在笔记本电脑上安装了 EtherSnoop 以尝试查看发生了什么,并且似乎每当笔记本电脑向外部设备发送消息时,它都会在短时间内停止监听传入的消息。就好像笔记本电脑的以太网链路只能进行半双工操作。

涉及的笔记本电脑是使用 RealTek 网络芯片的 HP。他的好笔记本电脑是使用英特尔网络芯片的联想。

是否有任何其他设置可能导致此行为?在这个应用中丢包是不能接受的,我们需要找出HP有什么“不同”。

【问题讨论】:

  • 您可能想在问题中进行编辑。您是否正在寻找半双工是否存在的验证?您是否正在寻找检测这种情况并减少数据包丢失的方法?
  • 注意:即使是(工作的)半双工网卡也不会丢包。它将排队,直到通道空闲。除非队列已满,否则ofc。
  • 我刚刚修改了问题。
  • 如果数据包丢失是不可接受的,UDP 可能是一个不好的选择。 TCP 会重新传输,直到接收方确认为止。
  • 我同意UDP是一个糟糕的选择,但这是相关设备制造商选择的,所以我必须使用它。我怀疑他们选择了 UDP,因为它比 TCP 更快,而且这是一个实时系统。

标签: udp ethernet


【解决方案1】:

好吧,如果客户端系统运行不可靠/遇到数据包丢失,您无能为力。即使按照 CSMA/CD 使用半双工链路,UDP 也应该可靠地传递(见下文) - 除非存在双工不匹配或冲突域太大。

您可以排除网络连接故障、排除/修复双工不匹配、检查电缆、检查 NIC 和交换机配置、更新 NIC 驱动程序、更换硬件 - USB 加密狗?...

双工不匹配可能由交换机端口或 NIC 引起。除非配置不当,否则很少见。您将看到全双工侧的 FCS 错误和半双工侧的极端冲突计数。总体而言,当您尝试认真使用它时,连接会表现得很慢。千兆链路仅使用 FDX,因此双工不匹配的可能性极小。

PS:正如 EJP 正确指出的那样,UDP 不能像工程中那样“可靠”,100.0% 可靠 - 上面,我正在使用 99% 左右的“可靠”的花园品种。

【讨论】:

  • UDP 没有什么可靠的。这是一个即发即弃的协议。
  • UDP 100% 依赖底层协议进行传输。通过以太网运行,它应该通过,除非网络出现问题。
【解决方案2】:

这个问题原来是由相关笔记本电脑上的缓冲区溢出引起的。至于为什么这台特定的笔记本电脑与其他笔记本电脑不同仍然是个谜。此后,我修改了我的应用程序以解决这台特定笔记本电脑上的缓冲区问题,现在一切似乎都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多