高频交易 - TCP> UDP?

时间:2011-10-31 02:45:04

标签: tcp udp low-latency hft

有人告诉我,对于需要低延迟的高频交易(HFT)系统,TCP会在UDP上使用。我被告知使用TCP可以进行点对点连接,而不能使用UDP,但根据我的理解,您可以将UDP数据包发送到特定的IP /端口。

这个article中有几个参数说明为什么UDP>用于游戏的TCP,但我可以看到HFT的相关性。

为什么TCP会成为用于HFT的更好协议?

(管理员:我之前关于此问题的帖子被默默删除,没有任何解释。如果我违反了使用条款,请提醒我这一点,而不是默默地删除问题)

5 个答案:

答案 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已经实现的相同可靠性代码(丢弃数据包的重传)。