tcp 提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓的半关闭。

    I am done sending data, so senda FIN to the other end, but I still want to receive data from the other end, until it sends me a FIN.

    image.png

    客户端发送FIN后,表示他结束了数据的发送(这里的数据指复杂数据,标志位、信号位比如图中data的ACK等可以发送),但不代表不能接受数据。所以客户端依旧能接收服务端发来的data并且返回一个标志位ACK,告诉服务端我已经接受到你的数据。在这之后,服务端想要结束连接,于是他发送了FIN。