我正在实现TCP堆栈,并且遇到了半封闭连接的问题。
我的实现充当服务器端。客户端建立连接,然后发送一些数据,然后发送“FIN”消息。然后,服务器确认来自客户端的数据,发送自己的一些数据,然后关闭其连接的一半(发送“FIN”)。
问题是客户端不会确认服务器在半封闭连接上发送的数据,也不会确认其最终的“FIN”消息。根据netstat,客户端处于FIN_WAIT2状态。在服务器不发送任何数据的相同场景中,事情进展顺利。 有问题的客户端是netcat,所以我认为问题出现在我的最后:)
我的问题是,一般来说,我应该期望在半封闭连接上发送数据的ACKS;特别是,我在上面的例子中做错了什么。
非常感谢任何帮助!
答案 0 :(得分:1)
也许服务器应该在FIN / ACK中发送ACK = 2561而不是2562?
答案 1 :(得分:0)
FIN-WAIT-2表示它看到了ACK,因此序列号必须正确,但这也意味着它没有在同一段中看到FIN。如果FIN计为1个字节,那么LEN应该是1?