有人告诉我,对于需要低延迟的高频交易(HFT)系统,TCP在UDP上使用。有人告诉我,使用TCP可以建立点对点连接,而使用UDP则不能,但据我所知,您可以将UDP数据包发送到特定的IP/端口。
这个article中使用了几个参数来解释为什么UDP比TCP更适合游戏,但我认为这与高频相关。
为什么TCP更适合用于HFT?
(管理员:我之前关于这个问题的帖子被悄悄地删除了,没有任何解释。如果我违反了使用条款,请提醒我,而不是默默地删除问题)
发布于 2011-10-31 10:55:45
如果你不需要TCP提供的一些特性,那么UDP比TCP更好。每个功能都有成本,所以如果你不需要功能,你就无缘无故地付出了成本。
在HFT应用程序中,您几乎需要TCP所需的所有功能。因此,如果您选择了UDP,则必须自己实现这些功能。这意味着你必须实现连接建立、连接拆除、重新传输、传输调整、窗口等等。
如果有一种方法可以做所有这些事情,而不是TCP做这些事情的方式,那么TCP就会这样做。你会有一只手被绑在背后,因为TCP是由地球上一些最优秀的人大量优化的,并且是在内核中实现的。
发布于 2011-10-31 10:55:09
没有理由期望已经建立的TCP连接上的数据流会比UDP上的相同数据慢,而且您还会得到校验和、重试和所有其他TCP好处。UDP主要在以下情况下胜出:您可以放弃可靠性,或者许多TCP握手的开销太高,例如使用常见的DNS查询。
发布于 2011-11-06 10:34:26
TCP的速度更快,因为当使用几个连接时,重要的区别是现代网卡在TCP上执行大量的加速,而在UDP上没有那么多加速。这意味着有更多的开销来处理每个UDP数据包,因此它们无法竞争,除非您需要同时发送给多个收件人。
然而,UDP组播路由仍然遭受与单播UDP每数据报开销相同的问题。因此,许多HFT系统使用硬件加速系统,可以通过TCP跨多个NIC多路复用数据流,例如Solace。
但现在,您希望完全绕过内核,比如使用Solarflare或Mellanox之类的用户空间IP堆栈,或者甚至使用RDMA跳过内核和IP堆栈。
https://stackoverflow.com/questions/7949526
复制相似问题