1

我正在实现一个 TCP 堆栈,并且遇到了半关闭连接的问题。

我的实现充当服务器端。客户端建立连接,然后发送一些数据,然后发送“FIN”消息。然后服务器确认来自客户端的数据,发送自己的一些数据,然后才关闭它的一半连接(发送“FIN”)。

问题是客户端没有确认服务器在半关闭连接上发送的数据,也没有确认它的最终“FIN”消息。根据 netstat,客户端处于状态 FIN_WAIT2。在服务器不发送任何数据的相同场景中,事情进展顺利。有问题的客户是netcat,所以我认为问题出在我的最后:)

此处提供屏幕截图。实际的 PCAP 文件可在此处获得。

我的问题是,一般来说,我是否应该期望在半关闭的连接上发送数据的 ACKS?尤其是在上面的例子中我做错了什么。

任何帮助将非常感激!

4

2 回答 2

1

也许服务器应该在 FIN/ACK 中发送 ACK=2561 而不是 2562?

于 2013-10-24T00:33:31.193 回答
0

FIN-WAIT-2 表示它看到了 ACK,所以序号一定是正确的,但也表示它没有看到同一个段的 FIN。如果 FIN 算作 1 个字节,LEN 应该是 1 吗?

于 2013-10-24T21:58:36.277 回答