【问题标题】:is it possible to send very big data over UDP?是否可以通过 UDP 发送非常大的数据?
【发布时间】:2015-03-26 07:40:27
【问题描述】:

我想通过 UDP 发送非常大的数据。
我知道我可以通过 UDP 发送 64K(64* 1024 字节),并且我将获得 UDP 协议支持的分段。
但是如果我有超过 64K 的数据要发送……我该如何发送呢?

我知道我可以把这个大数据 => 转换成字节数组,然后把这个字节数组分成更小的部分(64K)并作为单个包发送......并使用这种方式发送所有包。

但是有什么方法可以做到不自己分割呢?
是否有可能使用内置(ip 层)UDP/TCP 碎片或我错过了什么?

【问题讨论】:

  • 如果你想坚持使用 UDP,你可以使用 TFTP;如果你对 TCP 没问题,你可以使用 FTP。阅读 TFTP 的工作原理也是一个好主意。它每 2k 或其他东西 ack,并且能够传输这样的大文件。
  • btw 分片是在 IP 层而不是在 UDP 层完成的。

标签: sockets networking udp tcp-ip


【解决方案1】:

我知道我可以通过 UDP 发送 64K(64* 1024 字节)

不,你不能。 UDP 数据报负载的绝对最大大小为 65507 字节。

普遍接受的实际限制是534字节。

差别很大。

我会得到 UDP 协议支持的分片。

UDP 协议不支持分段。 IP 协议支持它。如果你足够幸运,一个分片的数据报的片段都到达了,IP 将重新组装它并将它传递给 UDP。如果不是,则不是。 UDP 本身在这个过程中没有任何作用。

但是如果我有超过 64K 的数据要发送...我该如何发送呢?

一次一个片段,具有序列编号、基于 ACK 或 NACK 的协议、重复拒绝、重新排序、重组、步调、指数退避……换句话说,TCP。

【讨论】:

  • @keyser 我知道这是个玩笑,但为了清楚起见,为了不误导未来的读者,我的最后一句话准确地说明了如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
相关资源
最近更新 更多