我在我的应用+网络中发现了一个疯狂的行为。我写了一个简单的应用程序,发送和接收UDP数据包(全部有968字节)。使用三台机器(A,B和C),所有机器都在同一个本地网络(没有防火墙),我有以下环境:
除了发送数据包之外,应用程序会对每个远程实例的接收数据包进行计数(时间窗口= 1秒),这会导致:
所有机器都使用相同的应用程序版本,所以显然有任何疯狂的事情,但在快速测试中使用ipperf没有可能在机器B中看到任何问题。我发送UPD数据包的代码是:
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint endPoint = new IPEndPoint(peerContext.Address, this.sendPort);
while (mycondition) //this is a thread loop...
{
byte[] buffer = (byte[])this.udpPacket.Clone();
var sent = sender.SendTo(buffer, endPoint);
if (sent != buffer.Length)
//Warning.... never happen!
}
使用20ms的速率我看到机器A e C从机器B接收64%(之前是6.4%),但是使用iperf这不会发生。
然后,任何人都可以提供一些意见吗?