为什么 TCP 和 SCTP 不设计用于 UDP?

为什么 TCP 和 SCTP 不设计用于 UDP?

众所周知,TCP 和 SCTP 通常直接通过 IP 使用。但我发现,如果它们设计用于 UDP,则具有一些优势:

  • 它们不需要端口,也许还需要校验和,因为 UDP 提供端口和校验和。
  • 它们将能够在用户空间中实现。
  • NAT 不必实现它们。也许仍有一些 NAT 不支持 SCTP。
  • 如果答复对于 UDP 来说太长,DNS 之类的协议将能够更快地进行 TCP 握手,因为在这种情况下 UDP 数据包已经被发送。

那么为什么 TCP 和 SCTP 不设计用于 UDP 呢?

通过比较 TCP 和 SSL,很容易看出,

  • 使用SSL的应用程序需要一个安全可靠的通道,由于TCP是可靠的,因此可以利用TCP来节省精力。
  • 使用 TCP 和 SCTP 的应用程序需要一个可靠的通道。由于 UDP 提供了通道,因此他们可以利用 UDP 来节省精力。

我尝试思考 TCP 和 SCTP 优于 UDP 的缺点。我只想到了这一点,那么服务器将必须区分何时使用 TCP 或 SCTP。可以通过使用其他端口(如 443 和 80)或使用命令(如STARTTLS)来解决。

答案1

在 UDP 上实现 TCP 存在一些困难,主要是:

  • TCP 数据包UDP 数据包格式不兼容。
  • TCP 和 UDP 具有不同的协议号(见IP 报头),这意味着 UDP 端口的 TCP 数据包将无法传递到正确的上层协议。

尽管如此,在 UDP 之上实现 TCP 算法的协议已经为非常特殊的需求而实现。这被称为“伪 TCP”,主要用于 P2P 应用程序,因为 TCP 的 NAT 穿越比 UDP 更复杂。

有两种伪 TCP 变体: 利金格尔利布尼采。Libjingle 是 Google 的一个开源库,最初用于 gtalk。Chrome 桌面也使用 libjingle 来实现可靠连接。

相关内容