2017-08-28 23 views
8

为了学习的目的,我正在实现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的东西?

谢谢..

+0

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

回答

0

所有你需要的是有位(SYN,ACK,FIN等),您的申请已发送,看它是否正常工作,拦截所有的TCP数据包:

enter image description here

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

enter image description here

为了你想看到你的应用在呼唤,你可以使用GDB或任何其他调试器的Linux系统调用。

1

你可以尝试设置了两个同行,一个使用RAW套接字,另一个使用TCP套接字。

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

C sockets

C RAW sockets

C TCP implementation