【问题标题】:Bypassing the TCP-IP stack绕过 TCP-IP 堆栈
【发布时间】:2011-09-08 09:25:41
【问题描述】:

我意识到这是一个有点开放式的问题......

在低延迟应用的上下文中,我听说过绕过 TCP-IP 堆栈

这究竟意味着什么?假设您在网络上有两个进程需要交换消息,那么这样做的各种选项(以及相关的权衡)是什么?

【问题讨论】:

    标签: performance tcp network-programming


    【解决方案1】:

    通常,第一步是使用 TCP 卸载引擎、ToE 或用户空间 TCP/IP 堆栈,例如 OpenOnload。

    完全跳过 TCP/IP 意味着通常查看 InfiniBand 并使用 RDMA 动词,甚至在原始以太网之上实现自定义协议。

    通常,由于在内核中使用任何东西都会产生延迟,因此用户空间机制是理想的,然后 TCP/IP 堆栈本身就是一种开销,考虑到所有层和可以安排的复杂性:IP 系列、子网络、VLAN、IPSEC 等。

    【讨论】:

    • 愚蠢的问题,但如果你完全跳过 tcp-ip 进程是否仍然由 ip:port 处理?
    • @Joel 有很多选项,包括 IP over IB 和对 RDMA 设备使用 IPv4 寻址。每种途径都已冒险确定它是否更快或更兼容。
    • 来自 Open Onload:“它通过在用户级别执行网络处理,在数据路径上完全绕过操作系统内核,部分实现了性能改进” ....正如您在回答中所说的那样。谢谢,这是我正在寻找的信息。
    【解决方案2】:

    您可能想查看zeromq

    【讨论】:

      【解决方案3】:

      这不是对您问题的直接回答,但我认为它可能会让您对该主题有另一种看法。

      在尝试绕过 TCP-IP 堆栈之前,我建议研究经过验证的实时通信中间件。

      一个很好的实时通信解决方案是来自 OMG(对象管理组)的Data Distribution Service

      DDS 提供 12 左右的质量属性,并具有多种语言的绑定。

      它具有 LATENCY_BUDGET 、TRANSPORT_PRIORITY 和许多其他服务质量属性,使数据分发变得非常容易和快速

      查看 PrismTech 实施的 DDS 标准。它被称为OpenSplice 和 在 LAN 规模上运行良好。

      【讨论】:

        【解决方案4】:

        真的取决于你的协议的性质。

        如果您所说的低延迟应用程序是指电子交易系统,那么它们通常使用 IP 或 UDP 多播来获取市场数据,例如 Pragmatic General Multicast。主要是因为数据有一个发送者和多个接收者,因此使用 TCP 需要将数据副本分别发送给每个接收者,这需要更多带宽并增加延迟。

        交易连接传统上使用带有应用程序级心跳的 TCP,因为连接需要可靠并且必须及时检测到连接丢失。

        【讨论】:

        • UDP 对市场数据广播很有意义 - 但我不太熟悉不涉及 p2p 通信的 tcp 的选项。
        • 我想你可以构建你的应用层来处理“带有丢包检测的UDP”以获得接近可靠的东西
        • 广播通常不用于市场数据,因为 UDP 广播无法有效路由。使用 IGMP 协议的组播。
        • 当然,我的意思是比喻性的广播,而不是技术意义上的广播。
        猜你喜欢
        • 2020-06-11
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        • 2016-12-07
        • 2016-10-29
        • 2010-09-13
        • 2016-08-31
        相关资源
        最近更新 更多