我在c#中编写了一个自定义应用程序,用于将数据发送到远程计算机。但是,如果我一次发送超过23672个字节,则数据不会到达(约99%的数据包丢失)。打开Wireshark时,我发现了这个: Screenshot 看起来udp数据包碎片失败了,这真的很奇怪,因为23672或更低的数据包也会碎片化。
当测试相同的应用程序localhost时,一切正常,最高可达65507字节(udp标头限制)。测试重现错误的应用程序:
var client = new UdpClient();
var sequenceNumber = 0; //i'm sending a sequence number to determine how many packets i've lost
while (true)
{
var buffer = new byte[23673];
BitConverter.GetBytes(sequenceNumber++).CopyTo(buffer, 0);
client.Client.SendTo(buffer, new IPEndPoint(IPAddress.Parse("192.168.1.100"), 1234));
Thread.Sleep(1000);
}
我该如何解决这个问题? 或者我应该让我的数据包更小?如果是,那么通过互联网发送udp数据的最佳数据包大小是什么?
答案 0 :(得分:0)
查看截图,我认为它的硬件(交换机网卡)或驱动程序相关。输入缓冲区可能太小而无法存储该数据包的所有片段,因此在尝试重新组装时会超时 Localhost是不同的,afaik甚至没有触摸NIC 使用TCP和/或较小的数据包。