【问题标题】:How do I test a custom TCP implementation on Linux?如何在 Linux 上测试自定义 TCP 实现?
【发布时间】:2017-08-28 07:00:08
【问题描述】:

出于学习目的,我正在实现 TCP(现在只是 RFC 793),但我没有 想法如何测试它。互联网上的大多数 TUN/TAP 内容都已过时(例如 Linux API 调用不再起作用),只是解释不够。另外,我 感觉像创建设备和转发包等不是最好的方法 用于学习目的。例如,我宁愿只覆盖socket()listen(), connect(), accept(), send(), recv() 等在一个程序中而不是 而不是将所有以太网流量转发到执行以下操作的设备/程序 为整个系统而不是单个程序进行簿记。

我想知道这是否可能。如果没有,我想知道最简单的方法 在 Linux 上测试 TCP 实现。

因为我遵循 RFC 793,所以如果我能拥有一个 IP(互联网 RFC 中提到的协议)API 在我的应用程序中。这是可能的还是做 我必须弄乱 TUN/TAP 的东西?

谢谢..

【问题讨论】:

  • 我正在努力更好地理解您的问题。您是否有已实现的 TCP 堆栈并且希望能够对其进行测试?至少有两种方法可以,你想测试你的 TCP 堆栈作为服务器,然后连接任何“标准”客户端(比如 telnet 到它。)。你必须做的一些繁重的工作是——能够自己在 TCP 堆栈上实现监听和接受类似的功能——但这将是一个起点——假设——你得到输入的 IP 数据报。另一种方法是首先将其作为客户端进行测试。

标签: linux networking tcp


【解决方案1】:

如果我们谈论研究,我强烈建议您阅读Engineering with Logic: Rigorous Test-Oracle Specification and Validation for TCP/IP and the Sockets API

它包含有关测试 TCP/IP 实现的部分: “实验验证:测试基础设施”

【讨论】:

    【解决方案2】:

    您可以尝试设置两个对等点,一个使用 RAW 套接字,另一个使用 TCP 套接字。

    如果它们可以通信并且数据包确实以与 TCP 相同的方式传递/恢复,那么您就知道您的自定义实现是成功的。

    C sockets

    C RAW sockets

    C TCP implementation

    【讨论】:

      【解决方案3】:

      您只需要拦截您的应用程序发送的所有带有位(syn、ack、fin 等)的 tcp 数据包,并查看它是否正常工作:

      这可以简单地使用wireshark 或其他嗅探器来完成。测试时,您将看到所有带有您发送的位的 tcp 数据包。

      要查看应用程序正在调用的 linux 系统调用,可以使用 GDB 或任何其他调试器。

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2014-12-09
        • 2014-10-19
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多