使用Windows但不使用Linux时UDP数据包丢失

时间:2018-07-25 09:45:09

标签: linux windows udp

我正在尝试找出可能导致测试系统时出现的奇怪问题的原因。

被测系统通过UDP接收来自外部源的HTTP请求。为了进行测试,我使用Python通过本地网络发送UDP数据包来模拟该源,以进行测试,我发送了1、20、133和1000条消息。

当我在本地Windows计算机上运行测试时,我经常收到UDP数据包丢失的消息,有时甚至无法收到一条消息。但是,当我使用Virtual Box创建虚拟Linux Box(Centos)并从那里运行相同的测试时,我有100%的时间获得100%的成功率。

从Windows发送UDP消息是否存在任何已知问题,我可以在计算机上调整Windows与Linux之间的任何奇怪缓冲差异吗?

2 个答案:

答案 0 :(得分:0)

如果进入的数据包不适合接收缓冲区,则操作系统的

UDP堆栈通常会丢弃已接收的UDP数据包。如果接收应用程序未足够快地读取它(=套接字),则接收缓冲区可能为“已满”。

Windows的默认接收缓冲区大小可能小于Linux中的大小。

为更好地处理传入的UDP数据包突发,可以增加接收缓冲区的大小:

sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 65536)

您还可以使用getsockopt检查尺寸。

答案 1 :(得分:0)

经过研究和调查,看来尽管我努力尝试证明答案不是,但这只是Windows。 Windows网络缓冲导致此问题。由于解决此问题不在此问题的范围内,因此我将关闭此问题,并在必要时打开一个新问题,感谢您的帮助。