Fundamentals 5 min read

Why a Server Can’t Just Support 65,536 TCP Connections – The Real Limits Explained

This article debunks the common myth that a server can only handle 65,536 TCP connections by exploring the theoretical four‑tuple limits, practical constraints like file descriptors, port ranges, and memory/CPU usage, and explains how the true upper bound is far larger.

Radish, Keep Going!
Radish, Keep Going!
Radish, Keep Going!
Why a Server Can’t Just Support 65,536 TCP Connections – The Real Limits Explained

Because a TCP port number is a 16‑bit unsigned integer (max 65535), many mistakenly think a server can support at most 65536 TCP socket connections. This is a classic misconception, even among experienced network programmers.

Ports 0‑1023 are reserved for the system and not considered here; we use 65535 as the example.

To refute this myth, we examine both theory and practice.

Theoretical Limits

*unix

systems identify a TCP connection by a four‑tuple: {local_ip, local_port, remote_ip, remote_port}. For IPv4, the theoretical maximum number of connections is 2^(32+16+32+16) = 2^96.

IPv4 can be thought of as a 32‑bit positive number.

Since a server typically has one local_ip, it could manage 2^(16+32+16) connections.

A service (process, e.g., Nginx) usually listens on one local_port, allowing 2^(32+16) connections.

If a client connects to a service on a fixed local_ip, local_port, and remote_ip, only the remote_port varies, limiting connections to 2^16 = 65536 – the source of the misconception.

Considering protocols beyond TCP adds a fifth element (protocol number), so the limit is not determined by the four‑tuple alone but by other parameters.

File Descriptors

In Linux, everything is a file, and the maximum number of open files determines how many simultaneous TCP connections a server can maintain.

Check the system-wide maximum open file descriptors:

[root@test1 ~]# cat /proc/sys/fs/file-max
1616352

Maximum file descriptors a single process can open:

[root@test1 ~]# ulimit -n
1024

Both values are configurable and often increased during load testing.

ip_local_port_range

When a client initiates multiple connections to the same server endpoint, each connection must use a distinct local port. On Unix‑like systems, the default range is roughly 32768 to 61000.

[root@test1 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999

This means a single client can open about 30,000 concurrent connections to the same server IP:port, though the OS may reuse ports for different remote endpoints.

Memory & CPU

An established socket consumes about 3.3KB of memory, with minimal CPU usage if no data is transferred. Thus, memory and CPU also cap the number of concurrent connections well below the theoretical 2^96 limit.

Conclusion

The absolute upper bound for TCP connections on a server is 2^96, but practical limits are determined by factors such as memory, CPU, and file descriptor limits, so there is no single concrete answer.

TCPLinuxnetwork programmingfile-descriptorssocket limits
Radish, Keep Going!
Written by

Radish, Keep Going!

Personal sharing

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.