TCP 之上是不是有针对高吞吐量和低延迟进行优化的协议/标准?

Posted

技术标签:

【中文标题】TCP 之上是不是有针对高吞吐量和低延迟进行优化的协议/标准?【英文标题】:Are there any protocols/standards on top of TCP optimized for high throughput and low latency?TCP 之上是否有针对高吞吐量和低延迟进行优化的协议/标准? 【发布时间】:2009-09-04 16:54:43 【问题描述】:

是否有任何适用于 TCP 的协议/标准针对高吞吐量和低延迟进行了优化?

我能想到的只有FAST。

目前我只设计了一个由特殊字符分隔的简单的基于文本的协议。我想采用一种专为快速传输而设计的协议,并且可能支持通过 TCP 套接字传输的数据的压缩和缩小。

【问题讨论】:

【参考方案1】:

我们可以通过以下任何一种方式,在UDP之上利用TCP的面向连接/可靠的特性,而不是使用重量级的TCP:

    UDP-based Data Transfer Protocol(UDT): UDT 通过添加拥塞控制和可靠性控制机制建立在用户数据报协议 (UDP) 之上。 UDT 是一种应用程序级、面向连接的双工协议,支持可靠的数据流和部分可靠的消息传递。

    致谢: UDT 使用定期确认 (ACK) 来确认数据包传递,而否定 ACK(丢失报告)用于报告数据包丢失。当数据传输速度较高时,周期性 ACK 有助于减少反向路径上的控制流量,因为在这些情况下,ACK 的数量与时间成正比,而不是与数据包的数量成正比。

    可靠的用户数据报协议 (RUDP): 它旨在提供一种解决方案,其中 UDP 过于原始,因为需要保证顺序的数据包交付,但 TCP 增加了太多的复杂性/开销。

    它通过添加以下附加功能来扩展 UDP:

      确认收到的数据包 窗口化和拥塞控制 丢失数据包的重传 过度缓冲(比实时流更快)

    en.wikipedia.org/wiki/Reliable_User_Datagram_Protocol

【讨论】:

【参考方案2】:

如果在 TCP 之上分层,您将不会获得比“最简单”的 TCP 连接更好的吞吐量或延迟。

还有其他非 TCP 高吞吐量和/或低延迟的面向连接的协议,通常位于 UDP 之上。

我知道的几乎唯一一个是UDT,它针对高带宽或长往返时间 (RTT) 导致典型 TCP 重传次优的网络进行了优化。这些被称为“超长脂肪网络”(LFN, pronounced 'elefan')。

【讨论】:

【参考方案3】:

您可能需要考虑JMS。 JMS 可以在 TCP 之上运行,您可以使用像 ActiveMQ 这样的消息代理获得合理的延迟。

不过,这实际上取决于您的目标受众。如果您构建一个必须在任何地方运行的游戏,您几乎需要使用 HTTP 或 HTTP/Streaming。如果您在 LAN 上推送市场数据,那么不使用 TCP 的东西可能更适合您。 Tibco RV 和 JGroups 都通过多播提供可靠的低延迟消息传递。

【讨论】:

【参考方案4】:

正如您提到的 FAST - 它旨在用于市场数据分发,并被领先的证券交易所使用,并在 UDP 多播之上运行。

一般而言,以目前的网络可靠性水平,将您的协议置于 UDP 之上总是值得的。 无论会话序列号如何,NACK+server-to-client-heartbeat 和 binary marshalling 都应该接近理论性能。

【讨论】:

【参考方案5】:

如果你在发送端有admin/root权限,你也可以试试SuperTCP之类的TCP加速驱动。

【讨论】:

以上是关于TCP 之上是不是有针对高吞吐量和低延迟进行优化的协议/标准?的主要内容,如果未能解决你的问题,请参考以下文章

高吞吐低延迟Java应用的垃圾回收优化

高吞吐低延迟Java应用的垃圾回收优化

高吞吐低延迟 Java 应用的 GC 优化实践

在 intel 内部函数 (AVX) 中使用混合指令

Web服务器如何实现高吞吐低延迟?Dropbox从操作系统到应用层优化指南

Spring Batch:用于高容量和低延迟的 ItemReader 实现