如何测试Linux上的自定义TCP实现?
问题描述:
为了学习的目的,我正在实现TCP(现在只是RFC 793),但我没有 想法如何测试它。大多数互联网上的TUN/TAP内容已过时(例如, Linux API调用不再有效),并且不足以解释。另外,I 感觉就像创建一个设备,并且转发包等不是用于学习目的的最佳方式 。举例来说,我宁愿只覆盖socket()
, listen()
,connect()
,accept()
,send()
,recv()
等的程序,而不是 转发所有以太网流量的设备/程序负责 bookeeping整个系统,而比一个单一的节目。如何测试Linux上的自定义TCP实现?
我想知道这是否可能。如果不是,我想知道在Linux上测试TCP实现的最简单方法。
因为我遵循RFC 793,如果我的应用程序中可以有一个IP(RFC中提到的互联网 协议)API,那就太好了。这是可能的或做 我必须弄乱TUN/TAP的东西?
谢谢..
答
如果我们谈论的研究,我强烈建议你阅读Engineering with Logic: Rigorous Test-Oracle Specification and Validation for TCP/IP and the Sockets API
它包含有关测试TCP/IP实现部分: “实验验证:测试基础设施”
答
你可以尝试设置了两个同行,一个使用RAW套接字,另一个使用TCP套接字。
如果他们能够进行通信并且数据包以与TCP相同的方式实际传递/恢复,那么您知道您的自定义实现是成功的。
我想更好地了解你的问题。你有一个你已经实现的TCP协议栈,你希望能够测试它吗?至少有两种方法可以,你想测试你的TCP栈作为服务器,然后连接任何'标准'客户端(比如telnet到它)。一些繁重的工作你必须做的是 - 能够在TCP堆栈上自己实现监听和接受功能 - 但这是一个起点 - 假设 - 你得到输入IP数据报。另一种方法是首先将其作为客户端进行测试。 – gabhijit