netcat不发送最终的FIN来closures连接

我正在玩自制的nodejs tcp服务器,并在Linux下testingnetcat的行为。 在build立连接时,服务器发送“Test”string并closures套接字。 我期望netcat通过发送适当的tcp数据包来closures它的连接,但是它不会! 这是我做的:

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 

它的行为如预期,并收到“testing”string后终止连接。

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

netcat被devise工作,直到双方closures连接。 你仍然有一面开放。

当服务器closures与FIN的连接时,连接保持半开状态,您可以发送数据,服务器可以接收数据。 连接将保持在这种状态,直到您closuresnetcat的标准input(键入Ctrl-D),这使得它发送一个FIN数据包到服务器。