【问题标题】:Realtime TCP/IP stack实时 TCP/IP 堆栈
【发布时间】:2011-04-28 11:53:48
【问题描述】:

我想(尽可能高效地)用 C 或 C++ 编写 TCP/IP 通信堆栈。它确实必须尽可能快地运行。

有没有人有一个很好的例子或建议从哪里开始?

【问题讨论】:

  • 松散相关:stackoverflow.com/questions/562702/…stackoverflow.com/questions/4402515/…,任何其他问题您都可以找到推荐书籍。 “越快越好”与不到几年的低级网络优化经验并不完全一致,因此阅读几本书是最小的努力。然后,一旦您真正熟悉了,就开始阅读有关实际实现网络堆栈的书籍,而不仅仅是使用它们。
  • 你对“快”的标准是什么?平均最小延迟?保证最大延迟?最大吞吐量?
  • 阅读已故 Rich Stevens 的“TCP/IP 插图”

标签: c++ c real-time


【解决方案1】:

这并不是一种侮辱,为完善的操作系统开发堆栈的人多年来一直在这样做。这就是他们所做的,除非您从事业务,否则我建议您采用不同的方法。

不同的方法是,选择一个性能不错的堆栈(我听说 Solaris 中最新的 tcp/ip 堆栈很不错),然后调整它(你可以调整许多不同的标志和设置) .如果这不能满足您的需求,请考虑硬件解决方案,例如 tcp 卸载等。

编写自己的堆栈意味着您必须有足够的信心知道您可以在该领域击败可能花费 1000 人年的努力。

如果这是为了自我开发和学习,我建议一些简单的东西,比如minix的源代码,它可能有一个简单易懂的堆栈。

m2c.

【讨论】:

    【解决方案2】:

    这是一项艰巨的任务。我会推荐Contiki 操作系统作为一个可能的起点。它有一个 TCP/IP 堆栈。

    【讨论】:

    • 嗯,很多操作系统都有 tcp 堆栈,有些比其他更好! ;)
    • @Nim:当然,但 Contiki 至少有一些与实时工作相关的属性,而且体积小、最新且开源。
    • @Steve,我的评论只是在挑剔@unwind 的最后一句话!与 Contiki 是否是一个好的起点无关...... :)
    【解决方案3】:

    正如史蒂夫在 cmets 中指出的那样,您确实需要相当多的经验才能做到这一点。因此,与其直接跳到你的最终目标,我推荐这些可能的步骤:

    1. 使用 UDP 作为普通用户级协议编写可靠传输。
    2. 使用用户空间中的原始套接字编写自定义协议。
    3. 编写内核级协议模块/驱动程序
    4. 将堆栈写入 FPGA 网卡

    Linux 是一个不错的选择,因为您需要的详细信息很容易访问和记录。

    哦,是的,一旦您意识到自己的性能不太可能超越 Linux 内核,请立即停止。

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      lwip - 一个轻量级 TCPIP 堆栈,最好开始学习 TCP/IP 堆栈

      git clone git://git.savannah.nongnu.org/lwip.git

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-29
        • 2016-12-07
        • 1970-01-01
        • 2016-08-31
        相关资源
        最近更新 更多