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

10
出于学习目的,我正在实现TCP(目前仅RFC 793),但我不知道如何测试它。互联网上大部分TUN / TAP内容已过时(例如Linux API调用不再起作用),而且解释不够详细。此外,我认为创建设备和转发包等并不是学习的最佳方式。例如,我宁愿在程序中仅覆盖socket()listen()connect()accept()send()recv()等,而不是将所有以太网流量转发到一个设备/程序,该设备/程序会为整个系统进行簿记,而不是为单个程序进行簿记。
我想知道这是否可能。如果不行,我想知道在Linux上测试TCP实现的最简单方法。
由于我遵循RFC 793,因此如果我的应用程序中有IP(在RFC中提到的Internet Protocol)API,那将非常好。这可能吗?还是我必须处理TUN / TAP相关内容?
谢谢。

我正在努力更好地理解你的问题。您是否有一个已实现的TCP堆栈,并希望能够对其进行测试?至少有两种方法可以实现,您想将TCP堆栈作为服务器进行测试,然后连接任何“标准”客户端(例如telnet)。您需要做一些繁重的工作,即能够自己在TCP堆栈上实现类似于listen和accept的功能,但那将是一个起点-假设-您获得输入IP数据报。另一种方法是首先将其作为客户端进行测试。 - gabhijit
3个回答

2

1
你可以尝试设置两个节点,一个使用原始套接字,另一个使用TCP套接字。
如果它们可以通信,并且数据包的传递/恢复方式与TCP相同,则说明你的自定义实现成功了。 C套接字 C原始套接字 C TCP实现

0
你所需要做的就是拦截所有包含TCP位(syn、ack、fin等)的数据包,查看你的应用程序是否正常工作:

enter image description here

这可以通过使用Wireshark或其他抓包工具轻松完成。在测试时,您将看到所有传输的TCP数据包及其所发送的位。

enter image description here

如果你想查看你的应用程序调用了哪些Linux系统调用,你可以使用GDB或任何其他调试器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接