当前位置:   article > 正文

一台计算机最多只能创建65535个连接吗?_一个实例最多建立多少链接

一个实例最多建立多少链接

平时工作和学习中,大家都知道一台计算机的端口号总共有65535个,但一台计算机真的只能建立65535个TCP的连接吗?

TCP:(Transmission Control Protocol 传输控制协议) 提供面向连接的、可靠的数据传输。
一个完整的TCP连接由四个部分组成:源IP 源端口 目的IP 目的端口 这就是经典的socket四元组。
建立一个TCP连接,需要将两端的套接字进行绑定:源IP地址:源端口号 <---->目标IP地址:目标端口号,只要确保绑定的套接字不重复,即可完成一个tcp的连接,由此可见如果端口号不够用了,就不断变换目标IP地址和目标端口号,保证四元组不重复,就能创建很多个TCP的连接,由此可见有人说最多只能创建65535个tcp连接是不正确的。既然如此,那可以创建tcp的数量有没有限制呢?

一、系统设置对连接数的限制

  1. Linux系统对可以使用的端口范围是由具体限制的,具体查看方法如下:
    [root@muyu ~]# cat /proc/sys/net/ipv4/ip_local_port_range
    32768 60999
    当前的限制是32768-60999 所以此时可以使用的端口号只有60999-32768=28231个
    当然这个数字是可以修改的,(这是系统管理员优化操作系统的一个重点)
    修改的方法如下:
    [root@muyu ~]# vim /etc/sysctl.conf
    加入一行:net.ipv4.ip_local_port_range = 1024 60009
    保存好后执行 sysctl -p /etc/sysctl.conf 使其生效
    [root@muyu ~]# cat /proc/sys/net/ipv4/ip_local_port_range
    1024 60999

二、文件描述符对连接数的限制

Linux下一切皆文件,计算机会为每一个TCP的连接分配一个文件描述符,在和目标IP进行tcp的通信的时候只需要对着文件描述符读写就可以了。
但是linux 对可打开的文件描述符的数量分别作了三个方面的限制。"
系统级:当前系统可打开的最大数量,通过 cat /proc/sys/fs/file-max 查看
[root@muyu ~]# cat /proc/sys/fs/file-max
95861
用户级:指定用户可打开的最大数量,通过 cat /etc/security/limits.conf 查看
[root@muyu ~]# cat /etc/security/limits.conf

  • soft nproc 20
  • hard nproc 50
    进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open 查看
    [root@muyu ~]# cat /proc/sys/fs/nr_open
    1048576
    当然这个数字是可以修改的,(这也是系统管理员优化操作系统的一个重点)
    修改的方法如下:
    [root@muyu ~]# echo 1000 > /proc/sys/fs/nr_open
    [root@muyu ~]# cat /proc/sys/fs/nr_open
    1000

三、线程对连接数的限制

说到这儿就绕不开一个大名鼎鼎的C10K问题了,问题产生的原因就是当服务器连接数达到 1 万且每个连接都需要消耗一个线程资源时,操作系统就会不停地忙于线程的上下文切换,最终导致系统崩溃。每建一个TCP连接就创建一个线程的方式,是传统的多线程并发模型,早期的操作系统只支持这种方式。现在的操作系统都支持 IO 多路复用的方式,简单说就是一个线程可以管理多个 TCP 连接的资源,这样就可以用少量的线程来管理大量的 TCP 连接了,所以只要采用IO 多路复用的方式就可以解决这个问题。

四、内存对连接数的限制

每一个TCP连接本身以及这个连接所用到的缓冲区,都需要占用一定空间的内存,大量的连接非常消耗内存空间。

总结:所以tcp到底能建立多少个连接呢?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/229971
推荐阅读
相关标签
  

闽ICP备14008679号