【问题标题】:How to implement reliable UDP to transfer files quickly? [closed]如何实现可靠的UDP快速传输文件? [关闭]
【发布时间】:2020-08-06 11:08:23
【问题描述】:

我想将一些文件从一个点传输到另一个点。文件很敏感,所以传输必须可靠,但如果我使用 TCP 传输文件,速度就会变慢。

如何创建能够快速传输文件的可靠 UDP 版本?

我正在做的是为每个收到的数据包发送一个确认。但它降低了我的传输速度。

有没有什么方法可以在不为每个收到的数据包发送确认的情况下存在?我能否以某种方式有效地跟踪丢失的数据包并仅请求这些数据包?

注意:: 我为每个数据包发送一个序列号

【问题讨论】:

  • 所以你想自己实现 TCP 使用 UDP 吗?你认为你会比 TCP 做得更好更快吗?
  • 你为解决这个问题所做的任何事情都会使网络变慢。就接受吧。您需要基于 ACK 的协议或基于 NACK 的协议。
  • 有什么方法可以混合使用 TCP 和 UDP 协议来获得结果。如果我在应用层同时使用这两种协议会怎样?进展如何?
  • 糟糕............

标签: c sockets network-programming udp


【解决方案1】:

我想你可以在每个数据包中放置一个计数值,如果你收到一个跳过一个值的数据包,那么你就知道你已经丢失了一个或多个并且可以请求重新发送。

但是,您开始通过编码丢包来实现 TCP 的功能。有没有你不能实现它的原因?

当然,如果我要传输敏感数据,我自己不会选择 UDP。

【讨论】:

  • 我正在尝试尽可能快地发送数据而不会丢失任何数据。 TCP 传输会和 UDP 一样快吗?
  • 您最重要的指标是什么?传输的速度或可靠性?通常,当您不太关心数据包丢失时使用 UDP,因为发送的数据包被重复发送并且一些丢失是可以接受的,例如视频或音频。 TCP 稍慢但可靠。另一点是 UDP 连接较少,因此可以广播到多个目的地,而 TCP 需要为每个目的地建立新连接。
  • 最重要的是可靠性,我想尽可能加快速度(比 TCP 快)有什么办法吗?
  • 原则上,TCP 可以使链路完全饱和(即您可以使用几乎 100% 的可用带宽)。但是,只有在同一链路上没有其他通信时才会出现这种情况。例如,多个 TCP 连接将自动调整,以便每个连接都获得公平的链接份额。在存在 UDP 流量的情况下,TCP 连接的性能可能会显着下降(UDP 不如 TCP“好”)。所以是的,使用 UDP 可以提高性能,但您必须牺牲可靠性。
猜你喜欢
  • 2016-05-26
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多