suukii / fe-interview

前端面试题整理
5 stars 0 forks source link

说说 TCP 四次挥手的过程 #3

Open suukii opened 4 years ago

suukii commented 4 years ago

第一次是客户端准备断开连接的时候,向服务器发送 FIN,同时客户端进入“半关闭”状态,不能再向服务器发送数据,但仍然可以接收数据;

第二次是服务器收到 FIN,返回 ACK 进行确认,接着,服务器会把还没有发送的数据继续发送完;

第三次是服务器把剩下的数据发送完成后,向客户端发送 FIN;

第四次是客户端收到 FIN 后,发送 ACK,然后等待 2 MSL(报文最大生存时间) 后,如果没有收到服务器要求重发报文的 FIN,就断开连接,否则就重发 ACK。

为什么要等待 2 MSL

为什么是四次挥手而不是三次 服务器在接收到客户端请求断开连接的 FIN 后,会立刻返回一个 ACK 进行确认,这就是多出来的一次挥手。如果服务器没有立刻返回 ACK,而是等把所有数据发送完之后再同时返回 ACK + FIN,那在服务器返回之前的这段时间延迟可能会让客户端误以为服务器没有接收到它发的 FIN,从而会不断地重发 FIN。