As per title. Sorry if this is a duplicate question, but in the numerous posts online, I could only find how a connection is torn down, but not (convincingly) why it is done in such a way. --- 1. A -----FIN-----> B 2. A <----ACK------ B 3. A <----FIN------ B 4. A -----ACK-----> B <====== Why is this one necessary? ======if 3 or 4 lost======= 5. A <....FIN...... B 6. A .....ACK.....> B It seems B can shutdown the socket as soon as it sends out its `FIN(3)` because 1. if the `FIN(3)` is not lost, all is well. 2. if it is lost, A can timeout anyway and close the connection. One can argue that if this does happen, A will have to wait for a very long time. But B bears some risk with this last `ACK(4)` as well. Suppose the connection suddenly goes down (though with low probability) right after A sends out the last `ACK(4)`, causing B unable to receive it. Then B will have to wait and timeout, too. Since both approaches are flawed, why not save this last `ACK`? --- **My guess** I think the only exception is that there is a reasonably high chance of packet loss such that both `FIN(3)` and `ACK(4)` won't arrive. If `FIN(3)` is lost, receiving nothing back from A, B will resend its new `FIN(5)`. Similarly, if `ACK(4)` is lost, B will think that its `FIN(3)` is lost and resend the `FIN(5)` as well. A, though having sent out `ACK(4)`, is supposed in the `TIME-WAIT` status, will hopefully receive this new `FIN(5)` and resend an `ACK(6)`. It seems only if the scenario described above happens reasonably frequently, will the last `ACK(4)` have a significant impact.