我正在实现一个TCP堆栈,并且遇到了一个半封闭连接的问题。
我的实现充当服务器端。客户端建立连接,然后发送一些数据,然后发送一条"FIN“消息。然后,服务器确认来自客户端的数据,发送自己的一些数据,然后才关闭连接的另一半(发送"FIN")。
问题在于,客户端既不确认服务器在半封闭连接上发送的数据,也不确认其最终的"FIN“消息。根据netstat,客户端处于FIN_WAIT2状态。在服务器不发送任何数据的相同场景中,事情进行得很顺利。有问题的客户端是netcat,所以我假设问题出在我这一端:)
屏幕截图可在here上使用。实际的PCAP文件可以在here中找到。
我的问题是,一般来说,我是否应该期待在半封闭连接上发送的数据的ACKS;特别是,我在上面的示例中做错了什么。
任何帮助都将不胜感激!
发布于 2013-10-24 08:33:31
也许服务器应该在FIN/ACK中发送ACK=2561而不是2562?
发布于 2013-10-25 05:58:36
FIN-WAIT-2表示它看到了ACK,因此序列号必须是正确的,但这也意味着它在同一数据段中没有看到FIN。如果FIN算作1个字节,那么LEN应该是1?
https://stackoverflow.com/questions/19554017
复制相似问题