Home System Tutorial LINUX Analysis of the maximum number of concurrent TCP connections and identification methods for a single machine in network programming

Analysis of the maximum number of concurrent TCP connections and identification methods for a single machine in network programming

Jul 19, 2024 pm 01:09 PM

网络编程中单机最大并发 TCP 连接数及标识方式解析

Network programming In tcp applications, the server eavesdrops on a fixed port in advance, the client actively initiates a connection, and a tcp connection is established after a three-way handshake. What is the maximum number of concurrent TCP connections for a single machine?

How to mark a TCP connection. Before determining the maximum number of connections, let’s first take a look at how the system marks a TCP connection. The system uses a 4-tuple to uniquely identify a TCP connection: {localip, localport, remoteip, remoteport}.

Maximum number of tcp connections by client. Each time a client initiates a tcp connection request, unless the port is bound, the system will generally select an idle local port (localport). This port is exclusive and cannot be shared with other tcp connections. The data type of the TCP port is unsignedshort, so the maximum number of local ports is only 65536 on the Linux server system. Port 0 has a special meaning and cannot be used. Therefore, the maximum number of available ports is 65535. Therefore, when all are used as clients, the maximum number of TCP connections is 65535. , this connection can be connected to different serverip.

Maximum number of tcp connections for the server. The server is usually fixed on a local port and listens, waiting for the client's connection request. Without considering address reuse (the SO_REUSEADDR option of Unix), although there are multiple IPs on the server side, the local eavesdropping port is also exclusive. Therefore, there are only remoteip (that is, clientip) and remoteport (client) in the 4-tuple of the server-side tcp connection. port) is variable, so the maximum TCP connection is the number of client IP × the number of client ports. For IPV4, regardless of factors such as IP address classification and Linux software, the maximum number of TCP connections is approximately 2 to the 32nd power (number of IPs) ×2 to the 16th power (number of ports) Linux tcp connection limit , that is, the maximum number of tcp connections on a single server side is approximately 2 to the 48th power.

How many concurrent TCP connections can be on such a single server

What is given above is the theoretical maximum number of connections for a single machine. In actual environments, it is limited by machine resources, operating systems, etc., especially on the server side, and its maximum number of concurrent TCP connections is far from reaching the theoretical upper limit. The main reasons for limiting the number of connections under Unix/Linux are video memory and the number of allowed file descriptors (each TCP connection occupies a certain amount of video memory, and each socket is a file descriptor). In addition, ports below 1024 are generally reserved. port. Under the default 2.6 kernel configuration, after testing, each socket occupies between 15 and 20k. The parameters that affect the memory occupied by a socket include: rmem_maxwmem_maxtcp_rmemtcp_wmemtcp_memgrepskbuff/proc/slabinfo. On the server side, by reducing the video memory and modifying the maximum number of file descriptors and other parameters, it is no problem for the maximum number of concurrent TCP connections on a single machine to exceed 100,000. The American UrbanAirship company In the production environment, 500,000 concurrent users have been achieved. In practical applications, for large-scale network applications, the C10K issue also needs to be considered.

linux tcp连接数限制_限制连接数量_限制连接数与限制网速的效果

Let’s explain the two common senses of file handle restrictions and port restrictions

Common sense 1: File handle restrictions

Colleagues who write network server programs under Linux must know that each TCP connection occupies a file descriptor. Once this file descriptor is used up, the error returned to us when a new connection is made is "Socket/File:Can 'topensemanyfiles'.

At this time, you need to understand the operating system's limit on the maximum number of files that can be opened.

linux tcp连接数限制_限制连接数与限制网速的效果_限制连接数量

Process Limitation

Executing ulimit-n outputs 1024, indicating that a process can only open up to 1024 files, so if you use this default configuration, you can concurrently run thousands of TCP connections at most.

Temporary changes: ulimit-n1000000, and these temporary changes are only valid for the current usage environment of the currently logged in user, and will become invalid after the system is restarted or the user logs out.

Changes that become invalid after restarting (but I tested it under CentOS6.5 and found no invalidity after restarting): Edit the /etc/security/limits.conf file, and the changed content is

linux tcp连接数限制_限制连接数与限制网速的效果_限制连接数量

*softnofile1000000

*hardnofile1000000

Permanent changes: edit /etc/rc.local and add the following content after it

ulimit-SHn1000000

Global restrictions

Executing cat/proc/sys/fs/file-nr outputs 93440592026, which are: 1. The number of allocated file handles, 2. The number of allocated but unused file handles, 3. The maximum number of file handles. But in the kernel2.6 version, the value of the second item is always 0. This is not an error. It actually means that all the allocated file descriptors have been used without any waste.

We can change this value to a larger value and use root privileges to change the /etc/sysctl.conf file:

fs.file-max=1000000

限制连接数与限制网速的效果_linux tcp连接数限制_限制连接数量

net.ipv4.ip_conntrack_max=1000000

filter.ip_conntrack_max=1000000

Common knowledge 2: Is the range of port number limited?

The lower-end banners of the operating system below 1024 are reserved by the system, and 1024-65535 are used by users. Because each TCP connection occupies a port number, we can have up to more than 60,000 concurrent connections. I think there are many students who have these wrong ideas, right? (I have always felt this way in the past)

Let’s analyze it

How to mark a TCP connection: The system uses a 4-tuple to uniquely mark a TCP connection: {localip, localport, remoteip, remoteport}. Well, let's take out the explanation of accept in Chapter 4 of "UNIX Network Programming: Volume 1" to take a look at the conceptual stuff. The second parameter cliaddr represents the client's IP address and port number. As a server, we actually only use this port during bind, which shows that the port number 65535 is not a limit on the amount of concurrency.

Maximum number of TCP connections to the server: The server is usually fixed on a local port and listens, waiting for the client's connection request. Without considering address reuse (the SO_REUSEADDR option of Unix), although there are multiple IPs on the server side, the local eavesdropping port is also exclusive. Therefore, there are only remoteip (that is, clientip) and remoteport (client) in the 4-tuple of the server-side tcp connection. port) is variable, so the maximum tcp connection is the number of client ip × the number of client ports. For IPV4, regardless of incentives such as IP address classificationLinux tcp connection number limit, the maximum number of tcp connections is about 2 times 32 times Power (number of IPs) × 2 raised to the 16th power (number of ports), that is, the maximum number of TCP connections on a single machine on the server side is approximately 2 raised to the 48th power.

The above is the detailed content of Analysis of the maximum number of concurrent TCP connections and identification methods for a single machine in network programming. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1654
14
PHP Tutorial
1252
29
C# Tutorial
1225
24
What are the 5 basic components of Linux? What are the 5 basic components of Linux? Apr 06, 2025 am 12:05 AM

The five basic components of Linux are: 1. The kernel, managing hardware resources; 2. The system library, providing functions and services; 3. Shell, the interface for users to interact with the system; 4. The file system, storing and organizing data; 5. Applications, using system resources to implement functions.

What is the most use of Linux? What is the most use of Linux? Apr 09, 2025 am 12:02 AM

Linux is widely used in servers, embedded systems and desktop environments. 1) In the server field, Linux has become an ideal choice for hosting websites, databases and applications due to its stability and security. 2) In embedded systems, Linux is popular for its high customization and efficiency. 3) In the desktop environment, Linux provides a variety of desktop environments to meet the needs of different users.

How to learn Linux basics? How to learn Linux basics? Apr 10, 2025 am 09:32 AM

The methods for basic Linux learning from scratch include: 1. Understand the file system and command line interface, 2. Master basic commands such as ls, cd, mkdir, 3. Learn file operations, such as creating and editing files, 4. Explore advanced usage such as pipelines and grep commands, 5. Master debugging skills and performance optimization, 6. Continuously improve skills through practice and exploration.

What is a Linux device? What is a Linux device? Apr 05, 2025 am 12:04 AM

Linux devices are hardware devices running Linux operating systems, including servers, personal computers, smartphones and embedded systems. They take advantage of the power of Linux to perform various tasks such as website hosting and big data analytics.

Does the internet run on Linux? Does the internet run on Linux? Apr 14, 2025 am 12:03 AM

The Internet does not rely on a single operating system, but Linux plays an important role in it. Linux is widely used in servers and network devices and is popular for its stability, security and scalability.

What are the disadvantages of Linux? What are the disadvantages of Linux? Apr 08, 2025 am 12:01 AM

The disadvantages of Linux include user experience, software compatibility, hardware support, and learning curve. 1. The user experience is not as friendly as Windows or macOS, and it relies on the command line interface. 2. The software compatibility is not as good as other systems and lacks native versions of many commercial software. 3. Hardware support is not as comprehensive as Windows, and drivers may be compiled manually. 4. The learning curve is steep, and mastering command line operations requires time and patience.

What are Linux operations? What are Linux operations? Apr 13, 2025 am 12:20 AM

The core of the Linux operating system is its command line interface, which can perform various operations through the command line. 1. File and directory operations use ls, cd, mkdir, rm and other commands to manage files and directories. 2. User and permission management ensures system security and resource allocation through useradd, passwd, chmod and other commands. 3. Process management uses ps, kill and other commands to monitor and control system processes. 4. Network operations include ping, ifconfig, ssh and other commands to configure and manage network connections. 5. System monitoring and maintenance use commands such as top, df, du to understand the system's operating status and resource usage.

What is the salary of Linux administrator? What is the salary of Linux administrator? Apr 17, 2025 am 12:24 AM

The average annual salary of Linux administrators is $75,000 to $95,000 in the United States and €40,000 to €60,000 in Europe. To increase salary, you can: 1. Continuously learn new technologies, such as cloud computing and container technology; 2. Accumulate project experience and establish Portfolio; 3. Establish a professional network and expand your network.

See all articles