一台Linux主机能接收的最大TCP连接个数

TCP/IP协议的元组

四元组:源IP地址,目的IP地址、源端口号,目的端口号
五元组:源IP地址,目的IP地址、源端口号,目的端口号、协议号
七元组:源IP地址,目的IP地址、源端口号,目的端口号、协议号、服务类型及接口索引

端口号的分类

端口号最多有65536个,范围是0~65535,可以分为三类:
• 公认端口,0~1023,紧密绑定于一些服务,通过这些端口的通讯明确表明了某种服务的协议
• 注册端口,1024~49151,松散地绑定于一些服务,既可用于某些服务,也可用于其他目的
• 动态和私有端口,49152~65535

Linux主机能接收的最大TCP连接个数

1、首先TCP连接的个数和端口个数没有关系,只要TCP连接的四元组其中一个发生变化就是一个新的TCP连接;
2、对于同一台服务器,如果是同一种服务也就是使用的是同一个端口号,那么目的IP和目的端口号就是固定的,那也就还剩两个变量,那么理论上最多可以建立2的32次方(ip数)乘以2的16次方(port数)个连接,也就是两百多万亿个,显然这是不对的;
3、限制条件内存大小,Linux服务器对最大文件对象数量的限制(分为用户级,系统级,进程级)
当前系统可打开文件的最大数量,通过fs.filemax修改
指定用户可打开文件的最大数量,修改/etc/security/limits.conf
单个进程可打开文件的最大数量,通过fs.nr_open参数修改

总结

假设我们的TCP连接都是空连接即不需要发送数据的话,也就是说每个TCP连接不需要开启接收数据缓存区,那么这个TCP的内存开销主要为:为TCP连接创建的文件对象,SOCKET等内核对象,开销大概占用内存3.3KB左右,(net.ipv4.tcp_rmem该值为tcp协议定义的每个socket链路接收窗口缓存大小,单位是字节,有三个值:min、default、max。min默认是4KB,最大的话在8MB之多,也就是如果TCP需要发送数据的话,需要再额为分配至少4KB的数据接收缓存区。)也就是如果打开文件对象数量没有被限制的情况下,空TCP连接的计算如下:例如4GB的内存为, 4 ∗ 2 20 K B / 3.3 K B 4*2^{20}KB/3.3KB 4220KB/3.3KB约为127万,实际测试大概会在100万左右。

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页