【发布时间】:2011-09-08 09:25:41
【问题描述】:
我意识到这是一个有点开放式的问题......
在低延迟应用的上下文中,我听说过绕过 TCP-IP 堆栈。
这究竟意味着什么?假设您在网络上有两个进程需要交换消息,那么这样做的各种选项(以及相关的权衡)是什么?
【问题讨论】:
标签: performance tcp network-programming
我意识到这是一个有点开放式的问题......
在低延迟应用的上下文中,我听说过绕过 TCP-IP 堆栈。
这究竟意味着什么?假设您在网络上有两个进程需要交换消息,那么这样做的各种选项(以及相关的权衡)是什么?
【问题讨论】:
标签: performance tcp network-programming
通常,第一步是使用 TCP 卸载引擎、ToE 或用户空间 TCP/IP 堆栈,例如 OpenOnload。
完全跳过 TCP/IP 意味着通常查看 InfiniBand 并使用 RDMA 动词,甚至在原始以太网之上实现自定义协议。
通常,由于在内核中使用任何东西都会产生延迟,因此用户空间机制是理想的,然后 TCP/IP 堆栈本身就是一种开销,考虑到所有层和可以安排的复杂性:IP 系列、子网络、VLAN、IPSEC 等。
【讨论】:
您可能想查看zeromq。
【讨论】:
这不是对您问题的直接回答,但我认为它可能会让您对该主题有另一种看法。
在尝试绕过 TCP-IP 堆栈之前,我建议研究经过验证的实时通信中间件。
一个很好的实时通信解决方案是来自 OMG(对象管理组)的Data Distribution Service
DDS 提供 12 左右的质量属性,并具有多种语言的绑定。
它具有 LATENCY_BUDGET 、TRANSPORT_PRIORITY 和许多其他服务质量属性,使数据分发变得非常容易和快速。
查看 PrismTech 实施的 DDS 标准。它被称为OpenSplice 和 在 LAN 规模上运行良好。
【讨论】:
真的取决于你的协议的性质。
如果您所说的低延迟应用程序是指电子交易系统,那么它们通常使用 IP 或 UDP 多播来获取市场数据,例如 Pragmatic General Multicast。主要是因为数据有一个发送者和多个接收者,因此使用 TCP 需要将数据副本分别发送给每个接收者,这需要更多带宽并增加延迟。
交易连接传统上使用带有应用程序级心跳的 TCP,因为连接需要可靠并且必须及时检测到连接丢失。
【讨论】: