有人告诉我,对于需要低延迟的高频交易(HFT)系统,TCP会在UDP上使用。我被告知使用TCP可以进行点对点连接,而不能使用UDP,但根据我的理解,您可以将UDP数据包发送到特定的IP /端口。
这个article中有几个参数说明为什么UDP>用于游戏的TCP,但我可以看到HFT的相关性。
为什么TCP会成为用于HFT的更好协议?
(管理员:我之前关于此问题的帖子被默默删除,没有任何解释。如果我违反了使用条款,请提醒我这一点,而不是默默地删除问题)
答案 0 :(得分:13)
如果您不需要TCP提供的某些功能,则UDP优于TCP。每个功能都有成本,因此如果您不需要功能,您无需支付任何费用。
在HFT应用程序中,您几乎需要TCP所需的所有功能。因此,如果您选择UDP,则必须自己实现这些功能。这意味着您必须实现连接建立,连接拆除,重新传输,传输调步,窗口等。
如果有办法做所有那些比TCP正在做的事情更好的事情,那么TCP就是这样做的。你有一只手绑在背后,因为TCP已经被这个星球上的一些最好的头脑大量优化,并在内核中实现。
答案 1 :(得分:5)
没有理由期望已经建立的TCP连接上的数据流比UDP上的相同数据慢,而且你得到校验和,重试以及所有其他TCP优点。 UDP主要用于您可以放弃可靠性或许多TCP握手开销过于昂贵的情况,例如常见的DNS查询。
答案 2 :(得分:3)
TCP在使用少量连接时速度更快,重要的区别在于现代NIC在TCP上执行大量加速,而对UDP来说并不是那么多。这意味着处理每个UDP数据包的开销更大,因此除非您需要同时发送给多个收件人,否则它们无法竞争。
然而,UDP组播路由仍然遇到与每个数据报开销的单播UDP相同的问题。因此,许多HFT系统使用硬件加速系统,可以通过TCP在多个NIC之间复用流,例如Solace。
现在虽然您希望完全绕过内核,例如Solarflare或Mellanox等用户空间IP堆栈,甚至可以使用RDMA跳过内核和IP堆栈。
答案 3 :(得分:2)
很简单,如果您需要连接可靠性(确保接收到的每个传输数据字节),您应该使用TCP。
正如您所提到的,UDP更适合于游戏,其中100%准确的实时跟踪每个对象将使用相当大的带宽并且是不必要的(这是慢速连接遇到滞后的地方)。
TCP端口和UDP端口之间没有特别的区别,超出了所使用的连接类型(发送数据包并忘记它,UDP样式,或协商连接并维持它,TCP样式)和服务监听在服务器端。例如TCP / 25通常会显示SMTP服务器,而UDP / 25则不会。
答案 4 :(得分:2)
基本上,如果你保持连接存活,现代TCP实现将和UDP一样快。如果TCP必须重新发送数据包,您还需要在UDP中重新发送它。再加上UDP,你最终将实现TCP已经实现的相同可靠性代码(丢弃数据包的重传)。