[En-Nut-Discussion] Too many very fast opened / closed TCP connections may let the system run out of memory

Ole Reinhardt ole.reinhardt at embedded-it.de
Fri Jan 10 18:59:01 CET 2014


Hi all,

the third mail to a similar topic :-)


During my reliability tests with the TCP statemachine, I discovered a
potential problem.

When creating sockets very fast and directly closing them again, as soon
as the connection is established may let the Nut/OS device run out of
memory.

Test setup:
===========

I build an application, that opens TCP connection to a PC, send out a
short string and directly close this connection again.

On the PC side, I started ncat (from nmap package) to open a listening
TCP port and dump the incomming data:

ncat --recv-only -l -k 2500

On Nut/OS I doo:

for (;;) {
  sock = NutTcpCreateSocket();
  if (NutTcpConnect() == 0) {
      /* send a short string */
  }
  NutTcpCloseSocket();
}

Problem:
========

If you have a fast network connection, the available heap memory on your
Nut/OS device rapidly decreases until 0.

Reason:
=======

As soon as the TCP socket is closed, the socket will not be destroyed
directly, but the TCP statemachine changes the socket state to
TCPS_TIME_WAIT. This is totally correct.

See http://tools.ietf.org/html/rfc793

The socket can now stay in TIME_WAIT for some time (up to a 4 * MSL
(maximum segment lifetime), before it is destroyed.

If we open new sockets fast enough this means, that the sockets,
currently waiting in TIME_WAIT state is accumulating quite fast. As each
socket is eating up >100 bytes of memory, memory may go low quite fast.

Severeness:
===========

In reality this won't be a problem. The problem only occurs, if new
sockets are created very very fast (each 3-5ms in my tests).

But we should think about, if there may be any solution to limit the
memory usage, while still correctly implementing the TCP standard
requirement.

Unfortunately I do not have a good idea yet.


Best regards,

Ole

-- 
kernel concepts GmbH            Tel: +49-271-771091-14
Sieghuetter Hauptweg 48         Mob: +49-177-7420433
D-57072 Siegen
http://www.embedded-it.de
http://www.kernelconcepts.de


More information about the En-Nut-Discussion mailing list