udp丢包和恢复

Chr*_*_vr 1 p2p udp network-programming hole-punching

我正在开发基于 udp/tcp 的 P2P 文件和实时视频流应用程序。该应用程序将使用 C++ 为 Linux 和 Windows 平台开发。

我们使用 ICE(TCP/UDP 打孔)来实现 P2P。虽然 TCP 确保数据包丢失,但对于 UDP,我需要一种体面的方法来确保必须将数据包传送到其他对等方。

  1. 我想知道执行此操作的算法或技术。
  2. 是否有任何免费的 thord 方工具/库可以做。

任何链接和建议将不胜感激?

Jér*_*nge 5

您需要涵盖 4 个主要问题:

  1. 数据切片- UDP 数据报不能包含无限量的信息。因此,您(通常)需要将您的信息分成多个数据报,并在另一端重新连接拼图。对于给定的“切片”,您需要唯一标识符和拼图编号。
  2. 从未到达- UDP 数据报有时会在网络上丢失。如果目标对等方没有收到预期的数据报,则应该有一种机制让他再次请求它。另一种方法是在接收时发送确认。
  3. 重播- 有时,您可能会收到两次相同的 UDP 数据报(出于复杂的原因)。目标对等方应该检测到这一点。
  4. 乱序- 发送顺序并不总是接收顺序。目标对等点需要处理这种情况。

有一个称为切片窗口的协议,您可以实现它。我认为您不会为此找到第 3 方库(尽管有人可能会在这里证明我错了),因为以上所有内容通常都是由 TCP 本身实现的。