linux的TCP连接数目最大不能凌驾65535个吗,那服务器是怎样应对百千万万的

源代码 2024-10-7 16:06:48 91 0 来自 中国
起首,问题中形貌的65535个连接指的是客户端连接数的限定。
在tcp应用中,server事先在某个固定端口监听,client自动发起连接,颠末三次握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少呢?
怎样标识一个TCP连接
在确定最大连接数之前,先来看看体系怎样标识一个tcp连接。体系用一个4四元组来唯一标识一个TCP连接:{localip, localport,remoteip,remoteport}      =    {本地ip,本地port,长途ip,长途port}
client最大tcp连接数
client每次发起tcp连接哀求时,除非绑定端口,通常会让体系选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据范例是unsigned short,因此本地端口个数最大只有65536,端口0有特殊寄义,不能利用,如许可用端口最多只有65535,以是在全部作为client端的环境下,一个client最大tcp连接数为65535,这些连接可以连到差别的serverip。
server最大tcp连接数
server通常固定在某个本地端口上监听,等候client的连接哀求。不思量地点重用(unix的SO_REUSEADDR选项)的环境下,纵然server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remoteip(也就是clientip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不思量ip地点分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。
实际的tcp连接数
上面给出的是理论上的单机最大连接数,在实际环境中,受到机器资源、利用体系等的限定,特殊是sever端,其最大并发tcp连接数远不能达到理论上限。在unix/linux下限定连接数的重要因素是内存和答应的文件形貌符个数(每个tcp连接都要占用肯定内存,每个socket就是一个文件形貌符),别的1024以下的端口通常为生存端口。
以是,对server端,通过增长内存、修改最大文件形貌符个数等参数,单机最大并发TCP连接数凌驾10万,乃至上百万是没问题的。
这明显是进入了头脑的误区,65535是指可用的端口总数,并不代表服务器同时只能继承65535个并发连接。

举个例子:


我们做了一个网站,绑定的是TCP的80端口,效果是全部访问这个网站的用户都是通过服务器的80端口访问,而不是其他端口。可见端口是可以复用的。纵然Linux服务器只在80端口侦听服务, 也答应有10万、100万个用户连接服务器。Linux体系不会限定连接数至于服务器能不能蒙受住这么多的连接,取决于服务器的硬件设置、软件架构及优化。
01
我们知道两个历程假如须要举行通讯最根本的一个条件是:可以或许唯一的标示一个历程。在本地历程通讯中我们可以利用PID来唯一标示一个历程,但PID只在本地唯一,网络中的两个历程PID辩说几率很大。
这时间就须要另辟它径了,IP地点可以唯一标示主机,而TCP层协媾和端标语可以唯一标示主机的一个历程,如许可以利用IP地点+协议+端标语唯一标示网络中的一个历程。
可以或许唯一标示网络中的历程后,它们就可以利用socket举行通信了。socket(套接字)是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的利用抽象为几个简朴的接供词应用层调用以实现历程在网络中通信。

2.png socket源自Unix,是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取大概读取对方内容,通讯竣事时关闭文件。
02
唯一可以或许确定一个连接有4个东西:

  • 服务器的IP
  • 服务器的Port
  • 客户端的IP
  • 客户端的Port
服务器的IP和Port可以保持稳固,只要客户端的IP和Port相互差别就可以确定一个连接数。


一个socket是可以建立多个连接的,一个TCP连接的标记为一个四元组(source_ip, source_port, destination_ip, destination_port),即(源IP,源端口,目标IP,目标端口)四个元素的组合。只要四个元素的组合中有一个元素不一样,那就可以区别差别的连接。
举个例子:
你的主机IP地点是1.1.1.1, 在8080端口监听

当一个来自 2.2.2.2 发来一条连接哀求,端口为5555。这条连接的四元组为(1.1.1.1, 8080, 2.2.2.2, 5555)

这时2.2.2.2又发来第二条连接哀求,端口为6666。新连接的四元组为(1.1.1.1, 8080, 2.2.2.2, 6666)

那么,你主机的8080端口建立了两条连接;
(2.2.2.2)发来的第三条连接哀求,端口为5555(或6666)。第三条连接的哀求就无法建立,由于没有办法区分于上面两条连接。

同理,可以在同一个端标语和IP地点上绑定一个TCP socket和一个UDP socket
由于端标语固然一样,但由于协议不一样,以是端口是完全独立的。
TCP/UDP一样平常采取五元组来定位一个连接:
source_ip, source_port, destination_ip, destination_port, protocol_type
即(源IP,源端口,目标IP,目标端口,协议号)
综上所述,服务器的并发数并不是由TCP的65535个端口决定的。服务器同时可以或许蒙受的并发数是由带宽、硬件、步调筹划等多方面因素决定的。

以是也就能明白淘宝、腾讯、头条、百度、新浪、哔哔哔哔等为什么可以或许蒙受住每秒种几亿次的并发访问,是由于他们采取的是服务器集群。服务器集群分布在天下各地的大型机房,当访问量小的时间会关闭一些服务器,当访问量大的时间回不停的开启新的服务器。
转载自 https://blog.csdn.net/daocaokafei/article/details/115410761
65535从哪来的,干啥的?

4.png
要表明好这个问题,就要先说清楚65535的寄义。在Linux体系中,假如两个机器要通信,那么相互之间须要建立TCP连接,为了让两边相互认识,Linux体系用一个四元组来唯一标识一个TCP连接: {local ip, local port, remote ip, remote port},即本机IP、本机端口、长途IP、长途端口,IP和端口就相当于小区地点和门牌号,只有拿到这些信息,通信的两边才气相互认知。在Linux体系中,体现端标语(port)的变量占16位,这就决定了端标语最多有2的16次方个,即65536个,别的端口0有特殊寄义不给利用,如许每个服务器最多就有65535个端口可用。因此,65535代表Linux体系支持的TCP端标语数目,在TCP建立连接时会利用。
TCP怎么建立连接,与端标语是什么关系?

Linux服务器在交互时,一样平常有两种身份:客户端大概服务器端。范例的交互场景是:
(1)服务器端自动创建监听的socket,并绑定对外服务端口port,然后开始监听
(2)客户端想跟服务器端通信时,就开始连接服务器的端口port
(3)服务端继承客户端的哀求,然后再天生新的socket
(4)服务器和客户端在新的socket里举行通信
可以看到,端口port重要用在服务器和客户端的“握手认识”过程,一旦相互认识了,就会天生新的socket举行通信,这时间port就不再须要了,可以给别的socket通信去利用,以是很明显TCP连接的数目可以大于TCP端标语的数目65,535。
思量一下两个极度场景,即某台Linux服务器只作为客户端大概服务器端
(1)Linux服务器只作为客户端
这时间每发起一个TCP哀求,体系就会指定一个空闲的本地端口给你用,而且是独占式的,不会被别的TCP连接抢走,如许最多可以建立65535个连接,每个连接都与差别的服务器举行交互。这种场景,就是题主所形貌的样子,但是由于条件过于苛刻,属于小概率变乱,以是更多的还是理论上的大概,实际的环境中险些不会出现。
(2)Linux服务器只作为服务端
这种场景下,服务端就会固定的监听本地端口port,等着客户端来向它发起哀求。为了盘算简朴,我们假设服务器端的IP跟端口是多对一的,如许TCP四元组内里就有remote ip和remote port是可变的,因此最大支持创建TCP个数为2的32次方(IP地点是32位的)乘以2的16次方(port是16位的)便是2的48次方。
实际中单台Linux服务器支持的TCP连接数目
通过前面的分析我们知道,在实际场景中,由于存在端口port复用的环境,服务器可同时支持的TCP连接数跟65535没有逐一对应关系,究竟上,真正影响TCP连接数目标,是服务器的内存以及答应单一历程同时打开文件的数目,由于每创建一个TCP连接都要创建一个socket句柄,每个socket句柄都占用一部门体系内存,当体系内存被占用殆尽,答应的TCP并发连接数也就到了上限。一样平常来讲,通过增长服务器内存、修改最大文件形貌符个数等,可以做到单台服务器支持10万+的TCP并发。

固然,在真实的商用场景下,单台服务器都会编入分布式集群,通过负载均衡算法动态的调理差别用户的哀求给最空闲的服务器,假如服务器均匀内存利用凌驾80%的警戒线,那么就会及时采取限流大概扩展集群的方式来包管服务,绝对不会出现服务器的内存被耗尽的环境,那样就算变乱了。
总之,65535只是Linux体系中可利用端口port数目标上限,端口port数目与TCP连接数目并非完全逐一对应的关系,服务器支持的TCP并发连接数目重要跟服务器的内存以及答应单个历程同时打开的文件数目有关系,通过端口复用及调整服务器参数等本领,单台服务器支持的TCP并发连接数是可以高于65535的。
原文链接:https://blog.csdn.net/daocaokafei/article/details/115410761
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-2-6 05:51, Processed in 0.191447 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表