首页 > 解决方案 > 为什么有些 udp 数据包没有在不同的网络上发送

问题描述

我通过自己的研发知道了一些可能的原因,但我仍然感到困惑。

我的应用程序发送一个最大的小图像。2000Kbs 到我的服务器。在那里它将这个图像绘制到我的画布控件中。我使用 udp 是因为如果我使用 tcp 图像会出现“跳跃”,因为 tcp 比 udp 做更多的工作并将 ack 发送回我的客户端。这就是我使用udp的原因。事实上,对于这种类型的场景,我可以看到它有时建议使用 udp。如果您看到的所有图像都没有进入我的服务器,我不会感到困扰。我需要的是一劳永逸。

这一切都在我自己的局域网上运行良好。最近,我(在 COVID 之前!)去了一个偏远的威尔士小屋。那里的互联网不是很好。我认为对我的应用程序进行压力测试是个好主意。图像从未到达我的服务器。因此,在玩耍时,我降低了法师的质量,以便我平均只为每个 udp 数据包发送 1000Kbs。图像开始通过。图像的质量不是很好,但我可以忍受。

所以,我想如果我能检测到当前 LAN 上糟糕的 udp 传输速率,我可以自动降低图像的图像质量。所以,我用谷歌搜索了这个。我所能做的就是检查那个 LAN 上的 MTU。但它也说你不应该超过 512Kbs。但它也说最大 udp 数据包可以是 65507。但是它说 udp 数据包以这种大小通过的可能性很小。

所以真的很迷茫。就像我说的,我可以处理随机丢失的图像。但我想增加大多数图像通过的机会。如果 MTU 只给我 512kb 的空间,我可以使用其他指标吗?

谢谢

标签: c#socketsnetworkingudp

解决方案


每个连接都有一个可靠率。这些天的可靠性非常高,但仍然可能存在问题。TCP 被认为是可靠的,因为数据包的最大大小为 1500,并且每个数据包都会收到一个 ACK​​,并且当未收到 ACK 时,会重新发送数据包。所以 TCP 处理 ACK 也有很高的开销。UDP 没有 ACK 并且不如 TCP 可靠,但在良好的网络上你不应该有问题。因此,测试网络可靠性的一个好方法是使用 ping 进行测试。使用: ping -t -l 65500 IP 其中 t 是 ping 直到停止,l(长度)是长度大小。– jdweng 11 分钟前


推荐阅读