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数据包到服务器。