【发布时间】:2017-09-02 01:12:02
【问题描述】:
我开发了一个应用程序,它通过 UDP 与外部设备进行通信。在大多数情况下,它似乎工作得很好,但是我有一位客户在一台特定的笔记本电脑上使用我的应用程序时遇到了丢包。他的另一台笔记本电脑没问题。
他检查了缓冲区大小等明显的东西,但没有什么明显的错误。
然后他在笔记本电脑上安装了 EtherSnoop 以尝试查看发生了什么,并且似乎每当笔记本电脑向外部设备发送消息时,它都会在短时间内停止监听传入的消息。就好像笔记本电脑的以太网链路只能进行半双工操作。
涉及的笔记本电脑是使用 RealTek 网络芯片的 HP。他的好笔记本电脑是使用英特尔网络芯片的联想。
是否有任何其他设置可能导致此行为?在这个应用中丢包是不能接受的,我们需要找出HP有什么“不同”。
【问题讨论】:
-
您可能想在问题中进行编辑。您是否正在寻找半双工是否存在的验证?您是否正在寻找检测这种情况并减少数据包丢失的方法?
-
注意:即使是(工作的)半双工网卡也不会丢包。它将排队,直到通道空闲。除非队列已满,否则ofc。
-
我刚刚修改了问题。
-
如果数据包丢失是不可接受的,UDP 可能是一个不好的选择。 TCP 会重新传输,直到接收方确认为止。
-
我同意UDP是一个糟糕的选择,但这是相关设备制造商选择的,所以我必须使用它。我怀疑他们选择了 UDP,因为它比 TCP 更快,而且这是一个实时系统。