
文章图片

文章图片
平时工作和学习中 , 大家都知道一台计算机的端口号总共有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-max95861用户级:指定用户可打开的最大数量 , 通过 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_open1048576
当然这个数字是可以修改的 , (这也是系统管理员优化操作系统的一个重点)
修改的方法如下:[root@muyu ~
# echo 1000 > /proc/sys/fs/nr_open[root@muyu ~
# cat /proc/sys/fs/nr_open1000
三、线程对连接数的限制
【客户端|一台服务器可以同时连接大于65536个客户端吗?】说到这儿就绕不开一个大名鼎鼎的C10K问题了 , 问题产生的原因就是当服务器连接数达到 1 万且每个连接都需要消耗一个线程资源时 , 操作系统就会不停地忙于线程的上下文切换 , 最终导致系统崩溃 。 每建一个TCP连接就创建一个线程的方式 , 是传统的多线程并发模型 , 早期的操作系统只支持这种方式 。 现在的操作系统都支持 IO 多路复用的方式 , 简单说就是一个线程可以管理多个 TCP 连接的资源 , 这样就可以用少量的线程来管理大量的 TCP 连接了 , 所以只要采用IO 多路复用的方式就可以解决这个问题 。
四、内存对连接数的限制
每一个TCP连接本身以及这个连接所用到的缓冲区 , 都需要占用一定空间的内存 , 大量的连接非常消耗内存空间 。
想把这个问题讨论清楚 , 最好咱们先把客户端和服务器两种角色分开来看 。 你上面举的QQ 的例子 , 是当操作系统作为服务器角色在工作 。
- Intel|26亿一台!ASML全新光刻机准备中:Intel提前锁定 冲击2nm工艺
- 6月23日晚|造出中国第一台等离子电视 彩电巨头A股退市:大跌近90%
- 全面屏|一台没上市的金立手机,从中看到了时代的眼泪
- 客户端|多平台分析618数据,看清家居人未来方向!
- 笔记本|一台当四台用!ROG幻16翻转本首发开卖:奢华配置18999元
- 浏览器|省了一台Xbox!微软确认:Edge将内置云游戏和经典小游戏
- 《梦华录》的最佳观看方式?你需要一台4K投影当贝X3 Pro
- 集成灶怎么选?一台奥田ZKM4-AI,拯救你的厨电选择困难症!
- 首发100台被炒到2万多,Nothing Phone到底是一台什么样的手机?
- Windows|如何把系统装在U盘里,任何一台电脑都可以使用自己系统?
