netcat没有发送最终FIN来关闭连接

时间:2015-01-14 16:28:01

标签: node.js sockets tcp netcat

我正在使用自制的nodejs tcp服务器并在Linux下使用netcat测试其行为。建立连接后,服务器发送'测试'将该字符串向下拉并关闭套接字。我希望netcat通过发送适当的tcp数据包来关闭它的连接,但它并没有! 这是我的工作:

nc -v localhost 9000

之后,整个对话看起来像这样:

netcat --> server (SYN)
netcat <-- server (SYN, ACK)
netcat --> server (ACK)
netcat <-- server (PSH, ACK)
netcat --> server (ACK)
netcat <-- server (FIN, ACK)
netcat --> server (ACK)

此时我希望netcat发送FIN,但它永远不会发送。连接在一侧是FIN-WAIT-2,另一侧是CLOSE-WAIT。

如果我用telnet尝试同样的事情:

telnet localhost 9000

它的行为符合预期,并在收到&#39;测试&#39;后终止连接。字符串。

问题是为什么netcat的行为有所不同?

1 个答案:

答案 0 :(得分:2)

netcat旨在工作,直到双方都关闭了连接。你还有一面打开了。

当服务器关闭与FIN的连接时,连接仍处于半开状态,您可以在此状态下发送数据,服务器可以接收数据。连接将保持此状态,直到您关闭netcat的stdin(类型Ctrl-D),这使得它向服务器发送FIN数据包。