我开发了一个通过UDP与外部设备通信的应用程序。在大多数情况下,它似乎工作得很好,但我有一个客户在一台笔记本电脑上使用我的应用程序时遇到丢包。他的另一台笔记本电脑很好。
他检查了缓冲区大小这些显而易见的事情,但没有明显的错误。
然后,他在笔记本电脑上安装了EtherSnoop以试图查看发生了什么,并且看起来每当笔记本电脑向外部设备发送消息时,它就会在短时间内停止收听传入的消息。就像笔记本电脑的以太网链路只能进行半双工操作一样。有关的笔记本电脑是使用RealTek网络芯片的惠普。他的好笔记本电脑是使用英特尔网络芯片的联想。
是否有其他可能导致此行为的设置?在这个应用程序中,数据包丢失是不可接受的,我们需要找出什么是"不同的"关于惠普。
答案 0 :(得分:-1)
好吧,如果客户端系统不可靠地运行/遇到数据包丢失,那么你几乎无能为力。即使按照CSMA / CD使用半双工链路,UDP也应该可靠(见下文) - 除非存在双工不匹配或冲突域太大。
您可以对网络连接进行故障排除,排除/修复双工不匹配,检查电缆,检查网卡和网卡。切换配置,更新网卡驱动程序,更换硬件 - USB加密狗?,...
交换机端口或NIC可能导致双工不匹配。除非配置不好,否则它非常罕见。您将在全双工侧看到FCS错误,在半双工侧看到极端冲突计数。总的来说,当你尝试认真使用它时,连接会表现得很慢。千兆链路仅使用FDX,因此双工不匹配的可能性极小。
PS:正如EJP正确指出的那样,UDP不能像工程中那样“可靠”,100.0%可靠 - 以上,我使用的是“可靠”的花园种类,如同99% - 或 - 。 / p>答案 1 :(得分:-1)
此问题原因是由于笔记本电脑上的缓冲区溢出造成的。至于为什么这台笔记本电脑与其他笔记本电脑不同仍然是一个谜。我已经修改了我的应用程序以解决这台特定笔记本电脑上的缓冲区问题,现在看来都很好。