作为网关,如何向TCP客户端和服务器正确发送RST数据包

4
我正在编写一个网关程序,其中一个功能是在足够的数据包交换后销毁连接。我希望知道如何正确构造RST数据包以向客户端和服务器发送以终止连接。

为了测试这一点,我使用ftp连接/会话。目前,我发现当我发送RST数据包时,客户端不断回复SYN数据包,而服务器则简单地用ACK数据包继续数据流。请注意,在我决定销毁连接之后,我阻止了两端之间的流量。

我认为处理SEQ和ACK号码的方式可能有问题。我还没有找到资源来解释在特定情况下如何处理SEQ和ACK号码以发送RST数据包。目前,我将SEQ设置为一个新的随机数(使用rand()),将ACK设置为0(因为我没有使用ACK标志)。我将源地址与目标地址反转,并将源端口与目标端口交换,看到我正确计算校验和。

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


我不知道为什么这被认为是“不具建设性”。这是一个关于事实的问题。 - user207421
1个回答

3
我不知道你使用的“资源”,但这似乎完全包含在RFC 793第3.4节的“重置生成”下。 RST具有序列号零,ACK字段设置为传入ACK字段加长度等,如多次描述的那样。

谢谢,我是一个网络新手,一直在通过谷歌搜集知识碎片,但现在我知道去RFC寻求我的网络需求了! - Olivier Trahan
然而,我认为重复发送SYN只是FTP应用层尝试重新建立连接,因为我在文件传输过程中中断了它。 - Olivier Trahan

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