4次挥手最后的ACK如果重新发送还是失败呢
来源:2-4 为啥time_wait需要等待2msl

hdjs
2020-12-25
老师想问下 4次挥手最后客户端发送ACK丢失了,那么会重新发送ACK,如果这个ACK还是丢失了呢,是会一直重复下去吗,在一直重试发送ACK吗,是不是服务端收不到ACK就不会进入CLOSED
写回答
2回答
-
最后还会进入CLOSED的。
服务端发送FIN,进入LAST_ACK状态,客户端收到这个FIN包后发送ACK包,由于某种原因,这个ACK包丢失了,B没有收到ACK包,然后服务端等待ACK包超时,又向客户端发送了一个FIN包
a) 假如这个时候,客户端还是处于TIME_WAIT状态(也就是TIME_WAIT持续的时间在2MSL内)
客户端收到这个FIN包后向服务端发送了一个ACK包,服务端收到这个ACK包进入CLOSED状态
b) 假如这个时候,客户端已经从TIME_WAIT状态变成了CLOSED状态
客户端收到这个FIN包后,认为这是一个错误的连接,向服务端发送一个RST包,当服务端收到这个RST包,进入CLOSED状态
c) 假如这个时候,客户端挂了(假如这台机器炸掉了)【第四种情况,不在参考链接里】
服务端没有收到客户端的回应,那么会继续发送FIN包,也就是触发了TCP的重传机制,如果客户端还是没有回应,服务端还会继续发送FIN包,直到重传超时(至于这个时间是多长需要仔细研究),服务端重置这个连接,进入CLOSED状态212021-01-04 -
hdjs
提问者
2020-12-25
如果客户端ACK一直失败,服务端是不是一直回应FIN,客户端在回应ACK,一直循环这个过程,直到服务端收到ACK,客户端和服务端才会进入CLOSED
00
相似问题