是否有任何针对TCP工作的协议/标准针对高吞吐量和低延迟进行了优化?
我能想到的唯一一个是FAST。
目前我设计了一个由特殊字符分隔的简单的基于文本的协议。我想采用一种专为快速传输而设计的协议,并支持压缩和缩小通过TCP套接字传输的数据。
答案 0 :(得分:4)
我们可以通过以下任何一种方式在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
答案 1 :(得分:2)
如果在TCP之上进行分层,则不会比“barest”TCP连接获得更好的吞吐量或延迟。
还有其他非TCP高吞吐量和/或低延迟的面向连接的协议,通常分层在UDP之上。
我认识的唯一一个是UDT,它针对高带宽或长往返时间(RTT)使典型TCP重传次优的网络进行了优化。这些被称为“极长脂肪网络”(LFN, pronounced 'elefan')。
答案 2 :(得分:1)
您可能需要考虑JMS。 JMS可以在TCP之上运行,您可以使用ActiveMQ之类的消息代理获得合理的延迟。
但这实际上取决于您的目标受众。如果您构建的游戏必须在任何地方运行,那么您几乎需要使用HTTP或HTTP / Streaming。如果你正在推动局域网上的市场数据,那么不使用TCP的东西可能会让你更好。 Tibco RV和JGroups都可以通过多播提供可靠的低延迟消息传递。
答案 3 :(得分:1)
正如您提到的那样 - 它主要用于市场数据分发,并由领先的证券交易所使用,并且运行在UDP多播的顶端。
通常,根据当前的网络可靠性水平,总是值得将您的协议置于UDP之上。 无论有什么会话序列号,NACK +服务器到客户端心跳和二进制编组都应该接近理论性能。
答案 4 :(得分:0)
如果您在发送方拥有admin / root权限,您还可以尝试使用SuperTCP等TCP加速驱动程序。