9

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

本文中使用了几个论点来解释为什么 UDP > TCP 用于游戏,但我可以看到 HFT 的相关性。

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

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

4

5 回答 5

15

如果您不需要 TCP 提供的某些功能,则 UDP 优于 TCP。每个功能都有成本,因此如果您不需要功能,您将无缘无故地支付这笔费用。

在 HFT 应用程序中,您几乎需要 TCP 所需的所有功能。因此,如果您选择 UDP,则必须自己实现这些功能。这意味着您必须实现连接建立、连接拆除、重新传输、传输步调、窗口等。

如果有一种比 TCP 做的更好的方法来做所有这些事情,那么 TCP 就会这样做。你会一只手被绑在背后,因为 TCP 由地球上一些最优秀的人进行了高度优化,并在内核中/与内核一起实施。

于 2011-10-31T02:55:44.743 回答
5

没有理由期望已经建立的 TCP 连接上的数据流会比 UDP 上的相同数据慢,而且您可以获得校验和、重试和所有其他 TCP 优点。UDP 主要在您有能力放弃可靠性或许多 TCP 握手的开销过于昂贵的情况下获胜,例如常见的 DNS 查询。

于 2011-10-31T02:55:08.667 回答
3

TCP 在使用少量连接时更快,重要的区别是现代 NIC 在 TCP 上执行大量加速,而对于 UDP 并没有那么多。这意味着处理每个 UDP 数据包的开销更大,因此除非您需要同时发送给多个收件人,否则它们无法竞争。

然而,UDP 多播路由仍然遇到与单播 UDP 每个数据报开销相同的问题。因此,许多 HFT 系统使用硬件加速系统,这些系统可以通过 TCP 跨多个 NIC 多路复用流,例如 Solace。

如今,尽管您想通过诸如 Solarflare 或 Mellanox 之类的用户空间 IP 堆栈完全绕过内核,或者甚至使用 RDMA 跳过内核和 IP 堆栈。

于 2011-11-06T02:34:25.847 回答
2

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

正如您所提到的,UDP 更适合游戏,其中 100% 准确地实时跟踪每个对象将使用大量带宽并且是不必要的(这是慢速连接遇到延迟的地方)。

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

于 2011-10-31T02:54:47.137 回答
2

基本上,如果您保持连接处于活动状态,现代 TCP 实现将与 UDP 一样快。如果 TCP 必须重新发送数据包,您也需要在 UDP 中重新发送它。另外,对于 UDP,您最终将实现与 TCP 已经实现的相同的可靠性代码(丢弃数据包的重新传输)。

于 2011-10-31T02:56:15.700 回答