我有一项需要修改 tcp 的研究工作,我想实现我的 TCP 监听()函数版本我的想法是使用 libpcapTCP SYN
从特定端口捕获所有数据包,然后使用原始套接字创建/发送 SYN/ACK 和跟随 ACK 数据包
我的问题是
- 传统/常规TCP堆栈listen()是如何实现的,谁能简要描述一下机制?
- 我的想法可以实现吗?有什么技巧/障碍吗?
- 是否有任何其他库/源代码片段可以用来实现我的需要?
谢谢!
我有一项需要修改 tcp 的研究工作,我想实现我的 TCP 监听()函数版本我的想法是使用 libpcapTCP SYN
从特定端口捕获所有数据包,然后使用原始套接字创建/发送 SYN/ACK 和跟随 ACK 数据包
我的问题是
谢谢!
如果您想知道如何listen()
实现,那么您应该只查看免费操作系统中实现的源代码,但基本上它的工作是在与套接字关联的内核数据结构中设置一个标志,以便将来传入的SYN
数据包将得到一个响应(并配置在应用程序使用 将它们从队列中排出之前它应该回答SYN|ACK
多少个这样的 s )。SYN
accept()
您的想法是可以实现的,但需要做很多工作:它相当于在用户空间中实现 TCP 堆栈。如果您只需要为您的研究打开和关闭连接,那么您可以避免执行大部分工作(包括慢启动、窗口缩放以及 TCP 堆栈应该具有的所有数据传输功能),但它仍然是一项大工作。
您需要的一件事是防火墙规则,以防止内核响应传入的 TCP 数据包,以便您的代码可以响应它们。
你不能这样做。Libpcap 没有提供阻止数据包被进一步处理的方法,因此每个数据包仍将由 TCP/IP 堆栈的其余部分处理。因此,SYN 将被确认,对 SYN/ACKS 的 ACK 将创建 TCP 连接,FIN 将终止它们,等等。