【问题标题】:why do some udp packets not get sent on different networks为什么有些 udp 数据包没有在不同的网络上发送
【发布时间】:2020-06-08 07:36:21
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

  • " 我使用 udp 是因为如果我使用 tcp,图像会显示为 'jumpy',因为 tcp 比 udp 做的工作更多,并向我的客户发送 ack" 这听起来像展示图片时出现的错误
  • @Ackdari 不,这不是错误。正如解释的那样,tcp 做了更多的工作。谢谢
  • 我知道,但为什么会影响图像的呈现方式?
  • @Ackdari 也许'jumpy' 是一个错误的词。也许较慢的渲染,而不是流畅/实时等就足够了。无论如何,我的问题不是关于“为什么我的图像在使用 tcp 时显得跳跃”。我更愿意专注于我的问题,而不是专注于使用 tcp。谢谢
  • 我的建议是只使用 tcp 来传达图像的数量并发送 real 数据使用 udp

标签: c# sockets networking udp


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2011-09-17
  • 2018-05-03
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多