在4次挥手的途中,客户端电脑突然关闭,服务器端会怎样

客户端发起第一次挥手,但是客户端电脑这时突然关闭,服务器端受到第一次的挥手变成last-ack, 向客户端发送第2,3次挥手,并等待客户端发送最后的ack, 但是客户端已经关闭无法向服务器发送最后的挥手,这时服务器会一直卡在 last-ack状态吗,还是等待很长时间后自动关闭这次的连接?

img

题主,你好,进入 LAST_ACK 状态后,会等待发起方返回 ACK 来确认连接关闭,当然这个状态不会一直持续,持续状态意味着占用链接,协议设计时候肯定会考虑这个场景和解决方案。所以如果迟迟收不到这个 ACK,内核就会重发 FIN 报文,如果重传的次数超过 tcp_orphan_retries 内核参数设置的次数,就会放弃重传,从而然后进入close状态。一般默认重传的次数实际为8次。8次后自动进入close状态。

该回答引用ChatGPT

当客户端突然关闭后,服务器端受到第一次挥手并变成 last-ack 状态时,服务器端将一直等待客户端发送最后的 ACK。由于客户端已经关闭,因此不能向服务器发送最后的 ACK,因此服务器将一直卡在 last-ack 状态,而不会自动关闭连接。这称为 TCP 死连接。在实际的应用中,通常会定义一个超时时间,当 last-ack 状态持续超过该时间后,服务器会强制关闭连接,以避免死连接的发生