高频交易 - TCP > UDP?

10
我被告知,在需要低延迟的高频交易(HFT)系统中,使用TCP而不是UDP。我被告知,使用TCP可以建立点对点连接,而使用UDP则不行,但据我所知,您可以将UDP数据包发送到特定的IP/端口。
这篇文章中提出了几个关于为什么UDP > TCP用于游戏的论点,但我可以看到在HFT中也有相关性。
为什么TCP是更好的协议用于HFT?
(管理员:我的先前发布此问题的帖子被默默地删除了,没有任何解释。如果我违反了使用条件,请通知我,而不是悄悄删除问题)。

3
我没有高频交易领域的经验,但我怀疑TCP被使用是因为它保证数据包到达目标地址,而UDP则不具备这个保证。 - hafichuk
3
UDP连接速度会更快,但不够可靠。如果你尝试出售正在暴跌的股票,但UDP数据包无法传输,后果将很糟糕。这可能是为什么大多数人在高频交易中使用TCP而不是UDP的原因。 - Seth Carnegie
1
这里有一篇文章,讨论了这个问题。文章链接:https://www.corvil.com/kb/what-are-the-relative-merits-of-tcp-and-udp-in-high-frequency-trading - rbinnun
5个回答

17

如果您不需要TCP提供的某些功能,那么UDP比TCP更优秀。每个功能都有一个成本,因此如果您不需要这些功能,则没有理由付出这种成本。

在高频交易应用程序中,您几乎需要TCP所需的每个功能。因此,如果选择UDP,则必须自己实现这些功能。这意味着您必须实现连接建立、连接拆除、重传、发送速率控制、窗口等等。

如果有一种比TCP更好的方法来执行所有这些操作,那么TCP就会使用该方法。因为TCP已经由一些全球最优秀的大脑进行了大量的优化并且是在内核中/与内核集成实现的,所以您只能单手作战。


2
有一些基金拥有自己优化过的内核版本,以减少从网络卡到算法的延迟。 - Suminda Sirinath S. Dharmasena
6
不确定我是否同意。当一个数据包丢失时,TCP会阻止数据流向应用程序直到成功重传。高频交易数据就像视频-如果你在规定时间内没有收到一帧,那就算了-太晚了-只需获取下一帧。 - user82238
@BlankXavier:你必须权衡一下TCP所做的所有其他事情,这些都是你需要的,比如传输节奏、重复数据包检测、连接建立和拆除等等。你还必须考虑自己烹制的东西相对成熟和可靠性与TCP相比。从性能的角度来看,每个现代平台都有一个经过大量优化的TCP堆栈,包括硬件卸载等功能。很难自己匹配那样的性能。 - David Schwartz
4
这些平台也已经对UDP协议栈进行了大量优化,在这些平台上编写此代码的努力将得到巨大回报。事实上,这些公司正在使用FPGA实现软件以提高性能。实现自己的UDP传输包装器是正确的做法。 - user82238

6

没有理由认为在已经建立的TCP连接上传输数据流会比UDP传输同样的数据更慢,而且你还可以获得校验和、重试以及所有其他TCP的好处。UDP主要胜在你可以放弃可靠性或者多个TCP握手的开销过高的情况下,例如常见的DNS查询。


3
TCP在使用少量连接时更快,重要的区别在于现代NIC对TCP执行了大量加速,而对UDP的加速并不多。这意味着处理每个UDP数据包的开销更大,因此除非需要同时发送到多个接收者,否则它们无法竞争。
然而,UDP组播路线仍然面临与单播UDP相同的问题,即数据报开销。因此,许多HFT系统使用硬件加速系统通过TCP将流多路复用到许多NIC中,例如Solace。
如今,您想要完全绕过内核,使用用户空间IP堆栈(例如Solarflare或Mellanox),甚至跳过内核和IP堆栈使用RDMA。

2

简单地说,如果您需要连接可靠性(确保接收到每个传输的数据字节),无论如何都应该使用TCP。

正如您所提到的,UDP更适用于游戏,因为对每个对象进行100%准确的实时跟踪将使用大量带宽并且是不必要的(这就是慢速连接遇到滞后的地方)。

TCP端口和UDP端口之间没有特别的区别,除了使用的连接类型(发送数据包并忘记它,UDP风格或协商连接并维持它,TCP风格)以及在服务器端侦听服务。例如,TCP/25通常会显示一个SMTP服务器,而UDP/25则不会。


1
基本上,如果你保持连接活跃,现代TCP实现将与UDP一样快。如果TCP需要重新发送数据包,则在UDP中也需要重新发送。此外,对于UDP,您将需要实现与TCP已经实现的相同的可靠性代码(重新传输丢失的数据包)。

通过UDP,您可以将一批消息打包在一个数据报中,包括最新的消息和一定数量的前面消息,这样您实际上可以实时处理数据包;如果一个数据报丢失了,您会在下一个数据报中接收到它的 "最新" 消息。在TCP中,直到丢失的数据报重新传输,您才会收到下一个分段(以及最新的消息)。 - tonso
@tonso你愿意解释一下,在HFT的背景下,丢失消息比进行基于UDP的重传(类似于SIP over UDP)更可行的策略是什么吗?句号。 - Jeremiah Gowdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接