0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单台服务器支持的TCP并发连接数

智能计算芯世界 ? 来源:科技民兵 ? 作者:科技民兵 ? 2022-11-06 19:36 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

首先,问题中描述的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个并发连接。

即使Linux服务器只在80端口侦听服务, 也允许有10万、100万个用户连接服务器。Linux系统不会限制连接数至于服务器能不能承受住这么多的连接,取决于服务器的硬件配置、软件架构及优化。01我们知道两个进程如果需要进行通讯最基本的一个前提是:能够唯一的标示一个进程。在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大。 这时候就需要另辟它径了,IP地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样可以利用IP地址+协议+端口号唯一标示网络中的一个进程。 能够唯一标示网络中的进程后,它们就可以利用socket进行通信了。socket(套接字)是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。

2aec419e-5d6c-11ed-a3b6-dac502259ad0.jpg

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

服务器的IP

服务器的Port

客户端的IP

客户端的Port

服务器的IP和Port可以保持不变,只要客户端的IP和Port彼此不同就可以确定一个连接数。

2b0205ba-5d6c-11ed-a3b6-dac502259ad0.jpg

一个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个端口决定的。服务器同时能够承受的并发数是由带宽、硬件、程序设计等多方面因素决定的。

所以也就能理解淘宝、腾讯、头条、百度、新浪、哔哔哔哔等为什么能够承受住每秒种几亿次的并发访问,是因为他们采用的是服务器集群。服务器集群分布在全国各地的大型机房,当访问量小的时候会关闭一些服务器,当访问量大的时候回不断的开启新的服务器。 65535从哪来的,干啥的?

2b0ec034-5d6c-11ed-a3b6-dac502259ad0.jpg

要解释好这个问题,就要先说清楚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并发。

2b2a5010-5d6c-11ed-a3b6-dac502259ad0.jpg

当然,在真实的商用场景下,单台服务器都会编入分布式集群,通过负载均衡算法动态的调度不同用户的请求给最空闲的服务器,如果服务器平均内存使用超过80%的警戒线,那么就会及时采用限流或者扩展集群的方式来保证服务,绝对不会出现服务器的内存被耗尽的情况,那样就算事故了。 总之,65535只是Linux系统中可使用端口port数量的上限,端口port数量与TCP连接数量并非完全一一对应的关系,服务器支持的TCP并发连接数量主要跟服务器的内存以及允许单个进程同时打开的文件数量有关系,通过端口复用及调整服务器参数等手段,单台服务器支持的TCP并发连接数是可以高于65535的。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    13

    文章

    9859

    浏览量

    88420
  • 操作系统
    +关注

    关注

    37

    文章

    7190

    浏览量

    126222
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1409

    浏览量

    81530

原文标题:一台服务器?最大并发TCP连接数多少?65535?

文章出处:【微信号:AI_Architect,微信公众号:智能计算芯世界】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    服务器数据恢复—服务器上的卷被误删数据如何恢复?

    工作人员不慎将一台服务器上的卷误删除,服务器上有一组raid5阵列。需要恢复误删除的数据。
    的头像 发表于 08-14 11:33 ?101次阅读
    <b class='flag-5'>服务器</b>数据恢复—<b class='flag-5'>服务器</b>上的卷被误删数据如何恢复?

    CYW20704 BLE的最大连接数是多少?

    你知道 CYW20704 BLE 的最大连接数吗? 它没有写在数据表中。
    发表于 07-03 07:11

    RAKsmart服务器如何重塑AI高并发算力格局

    在AI大模型参数量突破万亿级、实时推理需求激增的当下,传统服务器架构的并发处理能力已逼近物理极限。RAKsmart通过“硬件重构+软件定义”的双引擎创新,推出新一代AI服务器解决方案。下面,AI部落小编为您解析RAKsmart
    的头像 发表于 04-03 10:37 ?378次阅读

    租用服务器带宽预估大小怎么算?

    访问量、页面大小、并发连接数等。这些因素共同决定了服务器在单位时间内需要处理的数据量,从而决定了所需的带宽大小。
    的头像 发表于 03-17 16:45 ?386次阅读

    服务器数据恢复—服务器raid5阵列硬盘出现坏道掉线如何恢复服务器数据?

    台服务器中有一组由16块SAS接口的硬盘组建的raid5阵列。 服务器磁盘阵列中有2块硬盘离线,服务器上跑的应用崩溃。 经过后续的分析发现丢失的数据为虚拟机文件,包含4个卷的数据。
    的头像 发表于 02-28 13:20 ?416次阅读
    <b class='flag-5'>服务器</b>数据恢复—<b class='flag-5'>服务器</b>raid5阵列硬盘出现坏道掉线如何恢复<b class='flag-5'>服务器</b>数据?

    服务器怎么做负载均衡?

    服务器怎么做负载均衡 ? 云服务器的负载均衡通过分配策略、自动扩展、健康检查和跨区域部署四个核心技术来实现。 分配策略包括轮询、权重分配和最少连接数,确保流量均匀分配。自动扩展根据实时监控动态
    的头像 发表于 12-24 10:40 ?477次阅读

    全球蜂窝物联网连接数突破40亿

    随着物联网技术的飞速发展,全球蜂窝物联网市场正在经历爆炸式增长。据研究机构IoT Analytics最新报告显示,2024年底,全球蜂窝物联网连接数已成功突破40亿大关,这一数字占据了全球物联网连接
    的头像 发表于 12-13 14:33 ?761次阅读

    负载均衡服务器服务器如何连接

    负载均衡服务器服务器如何连接?负载均衡服务器服务器可通过多种方式连接,包括直接
    的头像 发表于 12-09 13:41 ?560次阅读

    恒讯科技分析:一个机柜通常可以容纳多少台服务器

    的一种简单有效的方法。但是一个机柜通常可以容纳多少台服务器?其实机柜的大小各不相同,所以容纳服务器的数量也不同。以下是确定我们的业务需要多少个服务器机架的细目分类。一、标准服务器机柜尺
    的头像 发表于 10-23 15:08 ?647次阅读
    恒讯科技分析:一个机柜通常可以容纳多少<b class='flag-5'>台服务器</b>?

    RAKsmart国外大带宽服务器怎么连接

    RAKsmart是一家提供数据中心托管服务的公司,其提供的国外大带宽服务器因其高性能和稳定性受到了很多用户的青睐。如果您正在使用RAKsmart的大带宽服务器,了解如何连接和管理您的
    的头像 发表于 10-22 09:35 ?551次阅读

    Kubernetes集群搭建容器云需要几台服务器

    Kubernetes集群搭建容器云需要几台服务器?至少需要4台服务器。搭建容器云所需的服务器数量以及具体的搭建步骤,会根据所选用的技术栈、业务规模、架构设计以及安全需求等因素而有所不同。以下是一个基于Kubernetes集群的容
    的头像 发表于 10-21 10:06 ?506次阅读

    服务器连接不上是什么原因引起的?

    服务器连接不上是一个常见的问题,常见的原因有网络连接、账户权限、安全组设置、服务器状态、端口占用、远程登录未开启、云服务器已关闭或到期、防
    的头像 发表于 09-26 11:11 ?772次阅读

    多个网站放在同一台服务器ip有什么影响?

    将多个网站放在同一台服务器上,使用同一个IP地址,可能会有以下影响: 1、资源共享:多个网站共享同一台服务器的资源,如CPU、内存、存储空间和带宽。如果其中一个网站流量或资源消耗突然增加,可能会
    的头像 发表于 09-12 11:15 ?1432次阅读

    串口服务器TCP/IP协议栈是什么关系

    串口服务器TCP/IP协议栈之间存在着紧密而复杂的关系。这种关系主要体现在串口服务器如何利用TCP/IP协议栈来实现串口设备与网络之间的数据通信。以下是对这种关系的详细解析。
    的头像 发表于 08-25 17:35 ?2206次阅读

    服务器数据恢复—xfs文件系统服务器数据恢复案例

    某公司一台服务器连接了一台存储。该服务器安装linux操作系统,文件系统为xfs。 在运行过程中该服务器出现故障,管理员使用xfs_repair工具试图对xfs文件系统进行修复但失
    的头像 发表于 08-19 10:49 ?648次阅读