Exploring TCP Connection Time_Wait in Linux

Updated: Feb 25

TIME_WAIT is a socket state during TCP connection termination. It represents waiting for enough time to pass to be sure the remote TCP received the acknowledgment of its connection termination request.


Today we will dive into time_wait in Linux.




When and where time_wait happens?

Time_wait could happen on the client-side or server-side. It depends on which side terminates the tcp session. From the above chart, A is the active closer and B is the passive closer.


When A closes the connection, it will send a FIN packet to B. After A gets the Ack and FIN back from B, tcp connection will change to time_wait on A-side. Time_wait happens on the active closer side.




What is the impact of time_wait Tcp connections?

Time_wait state is a normal part of a TCP socket's life cycle. Smaller numbers of TIME WAIT sockets are normal. If there are a lot of time_wait sockets, it will need some time to exit.


If our application needs to create new sockets at this time, it will fail because we don't have enough ports now.


How to reduce the time_wait timer in Linux?

The RFC defines the time spent in TIME WAIT state as "2 times MSL (Maximum Segment Lifetime)". But the Linux kernel's implementation of TCP is hard-coded with a TIME WAIT counter of 60 seconds.


So there is no way to reduce this timer.




Example of time_wait in Linux

This is a normal tcp connection on our Cassandra server. We can use netstat -anpl to check the connection status in Linux.

tcp        0    115 10.253.113.116:37640    10.241.94.101:7000      ESTABLISHED 31945/java

Now let's shutdown Cassandra on the server side, we can see that the TCP connection became Time_wait.

tcp        0      0 10.253.113.116:37640    10.241.94.101:7000      TIME_WAIT   -                   

If we see time_wait connections, that means something wrong with the application. It terminates the connections. We should check what happens from the application side.


We can use this command to check the time_wait timer on Linux.


# ss --numeric -o state time-wait

98 views

Join our newsletter. Get a free Linux account on Cloud.

Never miss a post!

Want a free Linux account?  This account can be used to login to our cloud server and practice Linux commands.

 
kamateravps.gif
topbackgroud.png

✔ Linux Commands   ✔ Linux Skills    ✔ LinuxPerformance   ✔ Linux Interview

Some articles are from the public internet. If you find your article misused or undesired here and you don't want us to display it, please let us know and we'll remove it immediately.