如何在Linux上测试自定义TCP实现?

时间:2017-08-28 07:00:08

标签: linux networking tcp

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

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

因为我正在关注RFC 793,所以如果我能拥有IP(互联网,那就太棒了 我的应用程序中的RFC)API中提到的协议。这是可能还是可行 我不得不搞乱TUN / TAP的东西?

谢谢..

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

如果他们能够以与TCP相同的方式进行通信并真正传送/恢复数据包,那么您就知道自定义实现是成功的。

C sockets

C RAW sockets

C TCP implementation

答案 2 :(得分:0)

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

enter image description here

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

enter image description here

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