Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does TCP connection terminate if one of the machine dies?

Tags:

networking

tcp

If a TCP connection is established between two hosts (A & B), and lets say host A has sent 5 octets to host B, and then the host B crashes (due to unknown reason). The host A will wait for acknowledgments, but on not getting them, will resend octets and also reduce the sender window size. This will repeat couple times till the window size shrinks to zero because of packet loss. My question is, what will happen next?

like image 435
Jake Avatar asked Feb 25 '12 23:02

Jake


People also ask

How TCP connection is terminated?

TCP Termination (A 4-way handshake) Any device establishes a connection before proceeding with the termination. TCP requires 3-way handshake to establish a connection between the client and server before sending the data. Similarly, to terminate or stop the data transmission, it requires a 4-way handshake.

What happens to a TCP connection when a process crashes?

When the server closes the connection, the connection is placed into a TIME_WAIT2 state where it cannot be re-used for a certain time. That time is double the maximum time-to-live value of the packets. Any packets that arrive during that time are discarded by TCP itself.

What forces termination of a TCP session?

After establishing TCP 3-way handshake and successful data transfer, A FIN packet is usually sent from server or client to terminate a connection.

How is TCP connection kept alive?

The TCP Keepalive Timer feature provides a mechanism to identify dead connections. When a TCP connection on a routing device is idle for too long, the device sends a TCP keepalive packet to the peer with only the Acknowledgment (ACK) flag turned on.


1 Answers

In this case, TCP eventually times out waiting for the ack's and return an error to the application. The application have to read/recv from the TCP socket to learn about that error, a subsequent write/send call will fail as well. Up till the point that TCP determined that the connection is gone, write/send calls will not fail, they'll succeed as seen from the application or block if the socket buffer is full.

In the case your host B vanishes after it has sent its ACKs, host A will not learn about that until it sends something to B, which will eventually also time out, or result in an ICMP error. (Typically the first write/send call will not fail as TCP will not fail the connection immediately, and keep in mind that write/send calls does not wait for ACKs until they complete).

Note also that retransmission does not reduce the window size.

like image 59
nos Avatar answered Oct 07 '22 14:10

nos