美文网首页
服务端能建立多少连接

服务端能建立多少连接

作者: luomoxyz | 来源:发表于2017-08-15 11:33 被阅读13次

常识一:文件句柄限制

Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是“Socket/File:Can't open so many files”。
这时你需要明白操作系统对可以打开的最大文件数的限制。
进程限制
执行 ulimit -n 输出 1024,说明对于一个进程而言最多只能打开1024个文件,所以你要采用此默认配置最多也就可以并发上千个TCP连接。

临时修改:ulimit -n 1000000,但是这种临时修改只对当前登录用户目前的使用环境有效,系统重启或用户退出后就会失效。

重启后失效的修改(不过我在CentOS 6.5下测试,重启后未发现失效):编辑 /etc/security/limits.conf 文件, 修改后内容为

  • soft nofile 1000000

  • hard nofile 1000000

永久修改:编辑/etc/rc.local,在其后添加如下内容
ulimit -SHn 1000000

全局限制
执行 cat /proc/sys/fs/file-nr 输出 9344 0 592026
,分别为:1.已经分配的文件句柄数,2.已经分配但没有使用的文件句柄数,3.最大文件句柄数。但在kernel 2.6版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件描述符无一浪费的都已经被使用了 。

我们可以把这个数值改大些,用 root 权限修改 /etc/sysctl.conf 文件:
fs.file-max = 1000000

net.ipv4.ip_conntrack_max = 1000000

net.ipv4.netfilter.ip_conntrack_max = 1000000

常识二:端口号范围限制?

操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接。我想有这种错误思路朋友不在少数吧?(其中我过去就一直这么认为)
我们来分析一下吧
如何标识一个TCP连接:系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。好吧,我们拿出《UNIX网络编程:卷一》第四章中对accept的讲解来看看概念性的东西,第二个参数cliaddr代表了客户端的ip地址和端口号。而我们作为服务端实际只使用了bind时这一个端口,说明端口号65535并不是并发量的限制。

server最大tcp连接数:server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

总结

上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制,至少对我们的需求现在可以做到数十万级的并发了,你的呢?
文章出处:http://yaocoder.blog.51cto.com/2668309/1312821

相关文章

  • 服务端能建立多少连接

    常识一:文件句柄限制 在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这...

  • https相关

    https连接建立过程 1: 客服端向服务端443端都发送建立连接请求,并附带自己支持的加密算法2:服务端收到请求...

  • 网络篇

    TCP建立连接的过程? TCP建立连接需要3次握手1,客户端发送带有SYN标志的TCP报文到服务端2,服务端回复带...

  • OkHttp3(十三)--ConnectInterceptor

    ConnectInterceptor 与服务端建立连接,并且获得通向服务端的输入和输出流对象 创建输入输出流 建立...

  • HTTP原理

    1.客户端与服务端建立连接 2.连接建立起来后,客户端向服务端发送请求 3,服务端接收到请求后,做出相应并返回数据...

  • AFNetworking Nginx 实现 HTTPS

    HTTPS HTTPS 连接建立过程大致是,客户端和服务端建立一个连接,服务端返回一个证书,客户端里存有各个受信任...

  • go tcp 编程

    打开链接 TCP Socket的连接的建立需要经历客户端和服务端的三次握手的过程。连接建立过程中,服务端是一个标准...

  • HTTP协议三次握手

    当建立协议的时候,tcp进行了3次握手1、客户端-->服务端 请求和服务端建立连接2、服务端-->客户端 ...

  • UDP笔记

    TCP与UDP区别 Tcp面向连接,Udp面向无连接。 建立连接是客户点和服务端维护连接,而建立一定的数据结构来维...

  • mysql通信协议 -- 语句执行

    在客户端和mysql服务端建立连接之后最主要的目的就是执行命令(建立连接过程详见mysql通信协议 -- 连接创建...

网友评论

      本文标题:服务端能建立多少连接

      本文链接:https://www.haomeiwen.com/subject/tlybhxtx.html