Linux TCP并发连接上限

理论概要

在IPv4协议下,TCP/UDP协议端口,使用2个字节Byte,总计16位二进制位表示。

TCP报文结构如下:

Linux TCP并发连接上限_第1张图片
端口部分详情:

Linux TCP并发连接上限_第2张图片

假设一台服务器仅有1个IP,那么这个IP上 理论上最多同时使用 65535 个端口

在TCP协议中,通信双方需要各自打开1个端口,然后在这个端口上通过3次握手建立连接,连接建立后双方将会保持端口的占用,直到连接断开,如果端口耗尽后,就会拒绝连接。

Linux TCP并发连接上限_第3张图片
那么对于通信双方来说无论是服务端、客户端,在连接后都会使用1个端口用于通信,根据协议的最大理论上线,双方的连接数理论上限 65535个连接。

问题分析与解决

而实际上在Linux系统中,不会达到该上限就会被拒绝连接。

通常Linux系统的TCP连接数量在: 28200 左右

这是因为Linux系统限制了端口开放的范围

查看操作开放端口范围:

cat /proc/sys/net/ipv4/ip_local_port_range

在这里插入图片描述

默认情况下端口开放范围通过ip_local_port_range参数控制,该参数默认值为32768 60999,表示开放端口的范围 [32768 ~ 60999],总计:28231 个端口,所以连接上限在28200左右。

Linux 参数文档详见 Linux kernel ip-sysctl.txt

运行时配置

因此可以调整系统端口开放范围来实现增大连接上限的目的,例如设置开放范围为[1025 ~ 65530]

echo "1025 65530" > /proc/sys/net/ipv4/ip_local_port_range

注意:端口范围的下限受到ip_unprivileged_port_start参数的限制,该参数默认值为1024,因此我们此处下限设置为1025,如果需要也配置该参数。参数描述详见 Linux kernel ip-sysctl.txt

该种配置方式适用于运行时,在操作系统重启之后会重置会默认参数

持久化配置

为了持久化保留该参数,我们需要手动配置/etc/sysctl.conf文件。

编辑/etc/sysctl.conf文件

sudo vi /etc/sysctl.conf

添加配置参数:

net.ipv4.ip_local_port_range=1025 59000

Linux TCP并发连接上限_第4张图片

配置完成后,使其生效

sudo sysctl -p /etc/sysctl.conf

查看应用后的配置情况:

cat /proc/sys/net/ipv4/ip_local_port_range

参考文献

[1]. Linux . Document .https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
[2]. 博客园 . 修改linux端口范围 ip_local_port_range . solohac . 2013.11 .https://www.cnblogs.com/solohac/p/4154180.html
[3]. 博客园 . 测试Linux下tcp最大连接数限制 . 冷冰若水 . 2017.12 . https://www.cnblogs.com/lit10050528/p/8148723.html
[4]. Huang Huang 的博客 . net.ipv4.ip_local_port_range 的值究竟影响了啥 . 2019.05 . https://mozillazg.com/2019/05/linux-what-net.ipv4.ip_local_port_range-effect-or-mean.html
[5]. 腾讯云 . linux下设置ip_local_port_range参数 . 后场技术 . 2020.09 . https://cloud.tencent.com/developer/article/1691625

你可能感兴趣的:(linux)