C# 从特定大小开始丢弃的Udp数据包

C# 从特定大小开始丢弃的Udp数据包,c#,udp,udpclient,C#,Udp,Udpclient,我用c语言编写了一个自定义应用程序,将数据发送到远程计算机。但是,如果一次发送超过23672字节,数据将无法到达(约99%的数据包丢失)。打开Wireshark时,我发现: 看起来udp数据包分段失败了,这真的很奇怪,因为23672或更低的数据包也会分段 在测试同一个应用程序localhost时,所有内容都可以正常工作,最高可达65507字节(udp标头限制)。复制错误的测试应用程序: var client = new UdpClient(); var seque

我用c语言编写了一个自定义应用程序,将数据发送到远程计算机。但是,如果一次发送超过23672字节,数据将无法到达(约99%的数据包丢失)。打开Wireshark时,我发现: 看起来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);
        }
我如何解决这个问题?
还是我应该把我的包缩小?如果是,通过internet发送udp数据的最佳数据包大小是多少?

查看您的屏幕截图,我认为是硬件(交换机的NIC)或与驱动程序相关。输入缓冲区可能太小,无法存储该数据包的所有片段,因此在尝试重新组装时超时。
Localhost则不同,因为它甚至不接触NIC。

使用TCP和/或更小的数据包。

请在问题中插入图像以保持可用性。它是否总是在同一位置失败?当数据包变得支离破碎时,每个数据报的路由可能会不同。它在接收端重新组合。如果出现错误,则可能表明硬件问题(路由器或以太网电缆损坏)。它将首先使用PING和一些选项来确定是否存在硬件问题。打开cmd.exe并键入Ping/?看到不同的选择。发送大数据包并检查是否有错误。为什么不使用TCP?为什么不在循环外创建端点?另外,您的测试程序正在发送您声称工作的字节数。@jdweng我怀疑从bis计算机到bis 192.168.1.100有许多不同的路径。很可能是同一个子网。而且不会有硬件问题,因为更小的数据包正在通过。可能是路由器问题或与NIC驱动程序有关。@Tobias Knauss我不能包含该映像,因为我是新用户。。。是的,这个例子是有效的。如果我将字节数组大小更改为23673,它将不适用于我。@我会尝试使用不同的路由器,谢谢你的建议!您建议使用特定的数据包大小吗?我会自己分割数据以避免碎片。查看TCP MTU(通常在1500左右,比如1470)或UDP MTU(我刚找到512这样的值;搜索“UDP最大数据包大小”)