将RST数据包作为网关正确发送到TCP客户端和服务器

将RST数据包作为网关正确发送到TCP客户端和服务器,c,linux,networking,tcp,raw-sockets,C,Linux,Networking,Tcp,Raw Sockets,我正在编写一个网关,其中一个功能是在交换了足够多的数据包时破坏连接。我想知道如何正确地形成RST数据包,发送到客户端和服务器以终止连接 为了测试这一点,我使用ftp连接/会话。现在,我看到当我发送RST数据包时,客户机用SYN数据包无休止地回复,而服务器只是用ACK数据包继续数据流。请注意,在我决定破坏连接后,我会阻止两端之间的通信 我想我处理序号和确认号的方式可能有问题。我无法找到资源来解释在发送RST数据包时如何处理SEQ和ACK号码。现在,我将SEQ设置为一个新的随机数(使用rand())

我正在编写一个网关,其中一个功能是在交换了足够多的数据包时破坏连接。我想知道如何正确地形成RST数据包,发送到客户端和服务器以终止连接

为了测试这一点,我使用ftp连接/会话。现在,我看到当我发送RST数据包时,客户机用SYN数据包无休止地回复,而服务器只是用ACK数据包继续数据流。请注意,在我决定破坏连接后,我会阻止两端之间的通信

我想我处理序号和确认号的方式可能有问题。我无法找到资源来解释在发送RST数据包时如何处理SEQ和ACK号码。现在,我将SEQ设置为一个新的随机数(使用rand()),并将ACK设置为0(因为我没有使用ACK标志)。我将源地址与目标地址反转,将源端口与目标端口反转,并且已经看到我正确地计算了校验和


我似乎客户端和服务器都不接受终止。

我不知道您正在使用什么“资源”,但这似乎完全包含在RFC 793第3.4节的“重置生成”中。RST的序列号为零,ACK字段设置为传入ACK字段加上长度等,如这里多次所述。

我不知道为什么这被认为是“非建设性的”。这是一个关于事实的问题。谢谢,我是一个网络新手,一直在谷歌上收集点点滴滴的知识,但现在我知道去RFC是为了我的网络需要!但是,我认为重复SYN发送仅仅是FTP应用层试图重新建立连接,因为我在文件传输的中间中断它。