c# - 为什么有些 udp 数据包没有在不同的网络上发送
问题描述
我通过自己的研发知道了一些可能的原因,但我仍然感到困惑。
我的应用程序发送一个最大的小图像。2000Kbs 到我的服务器。在那里它将这个图像绘制到我的画布控件中。我使用 udp 是因为如果我使用 tcp 图像会出现“跳跃”,因为 tcp 比 udp 做更多的工作并将 ack 发送回我的客户端。这就是我使用udp的原因。事实上,对于这种类型的场景,我可以看到它有时建议使用 udp。如果您看到的所有图像都没有进入我的服务器,我不会感到困扰。我需要的是一劳永逸。
这一切都在我自己的局域网上运行良好。最近,我(在 COVID 之前!)去了一个偏远的威尔士小屋。那里的互联网不是很好。我认为对我的应用程序进行压力测试是个好主意。图像从未到达我的服务器。因此,在玩耍时,我降低了法师的质量,以便我平均只为每个 udp 数据包发送 1000Kbs。图像开始通过。图像的质量不是很好,但我可以忍受。
所以,我想如果我能检测到当前 LAN 上糟糕的 udp 传输速率,我可以自动降低图像的图像质量。所以,我用谷歌搜索了这个。我所能做的就是检查那个 LAN 上的 MTU。但它也说你不应该超过 512Kbs。但它也说最大 udp 数据包可以是 65507。但是它说 udp 数据包以这种大小通过的可能性很小。
所以真的很迷茫。就像我说的,我可以处理随机丢失的图像。但我想增加大多数图像通过的机会。如果 MTU 只给我 512kb 的空间,我可以使用其他指标吗?
谢谢
解决方案
每个连接都有一个可靠率。这些天的可靠性非常高,但仍然可能存在问题。TCP 被认为是可靠的,因为数据包的最大大小为 1500,并且每个数据包都会收到一个 ACK,并且当未收到 ACK 时,会重新发送数据包。所以 TCP 处理 ACK 也有很高的开销。UDP 没有 ACK 并且不如 TCP 可靠,但在良好的网络上你不应该有问题。因此,测试网络可靠性的一个好方法是使用 ping 进行测试。使用: ping -t -l 65500 IP 其中 t 是 ping 直到停止,l(长度)是长度大小。– jdweng 11 分钟前
推荐阅读
- asp.net - 添加视图后 MVC 无法创建内容和脚本文件
- elixir - 如何在 IEx 中将 ecto 查询结果快速编码为 JSON?
- django - 在 django 迁移中更改外键名称
- c - 在 ELF 中,是否可以指定物理内存区域的映射?
- reactjs - 使用 react-date-range 进行日期选择的月份跳跃
- installation - HspellPy 安装
- javascript - 如何将 ERC20 代币发送到智能合约余额?
- python - SQLAlchemy 在查询结果中包含@property?
- node.js - Axios - Workfront API - 创建文件夹
- python - 如何使用 python 过滤 .xml 文件中的特定值?