计网 - 一台主机上最多只能保持 65535 个TCP 连接吗

news2025/5/13 5:01:34

文章目录

  • Pre
  • 问题
  • 分析
    • 单一IP的服务端
    • 单一IP的客户端

在这里插入图片描述


Pre

高性能网络编程 - 关于单台服务器并发TCP连接数理论值的讨论


问题

一台主机上只能保持最多 65535 个 TCP 连接,正确吗?

先说结论: 这个说法不对,我们分服务器和客户端分开讨论,以下的讨论都基于服务器和客户端都只有 1 个 IP 地址。


分析

在这里插入图片描述

操作系统是通过源 IP 地址、目标 IP 地址、协议号(协议类型)、源端口号以及目标端口号这五个元素唯一性的识别一个网络上的通信。

我们已经知道网络通信五元组是由过源 IP 地址、目标 IP 地址、协议号(协议类型)、源端口号以及目标端口号构成。现在考察的是 TCP 连接,自然五元组中的协议号已经定下来了,于是网络通信五元组就变化为 TCP 四元组。

那就是说 TCP 连接四元组是由源 IP 地址、源端口、目的 IP 地址和目的端口构成。


单一IP的服务端

很明显当四元组中任意一个元素发生了改变,那么就代表的是一条完全不同的新连接。拿我们常用的 MySQL 举例,假设它的 IP 是 X,端口 3306。用户 A 基于 IP 地址 A1,端口PA 连接 MySQL ,于是构成了一个 TCP 连接四元组(A1,PA,X,3306)

用户 B 基于 IP 地址 B1,端口 PB 连接同一个 MySQL,这个时候 MySQL 需要开启一个新端口来和用户 B 通信吗?从我们日常的开发就可以知道,MySQL 并不需要这么做,所以用户 B 就和 MySQL 构成了一个新的 TCP 连接四元组(B1,PB,X,3306)

服务端理论上能达成的最高并发数量是多少?从我们上面的用户 A 和用户 B 构成的 TCP连接四元组:

(A1,PA,X,3306)
(B1,PB,X,3306)

可以看到目的 IP 地址和目的端口(X,3306)是不变的,这样就只剩下源 IP 地址、源端口是可变的。

  • IP 地址是一个 32 位的整数,所以源 IP 最大有 2 的 32 次方这么多个。
  • 端口是一个 16 位的整数,所以端口的数量就是 2 的 16 次方。
  • 2 的 32 次方(ip 数)× 2的 16 次方(port 数)大约等于两百多万亿。所以理论上,我们每个 server 可以接收的连接上限就是两百多万亿。

当然实际上做不到,目前工程实践中可以达到的连接数在千万级别。基于 Java 的应用程序大概能支持百万级别


单一IP的客户端

“客户端应用程序完全可以不用自己设置端口号,而全权交给操作系统进行分配”,可用的端口号只有 6 万多,从这个角度考虑,客户端最多只能发起 6 万多条 TCP 连接。但其实也不是。

从 TCP 连接四元组来考虑:源 IP 地址、源端口、目的 IP 地址和目的端口,目的 IP 地址和目的端口指的是服务器的 IP 和端口,源 IP 地址、源端口自然就是客户端的。

只要服务器的 IP 或者端口不一样,即使客户端的 IP 和端口是一样的。这个四元组也是属于一条完全不同的新连接。比如:

  • 连接 1:客户端 IP 10000 服务器 IP 10000
  • 连接 2:客户端 IP 10000 服务器 IP 20000

虽然客户端的 IP 和端口完全一样,但由于服务器侧的端口不同,所以仍然是两条不同的连接。问题来了,客户端同一个端口可以连接不同的服务器吗?答案是可以的

客户端只要启动时不显示绑定到某个端口上,内核是可以使用一个端口连不同的服务端,内核会自己进行选择并恰当地复用的,而且完全不会产生数据混乱,因为“源 IP 地址、目标 IP 地址、源端口号以及目标端口号就能唯一性确定一个 TCP 连接”

那么对客户端来说,四元组里有 3 个可变,自然客户端能同时支持的连接数比服务器还要大得多

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1307891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.操作符详解

1.10进制转二进制方法 所以125的二进制就是1111101 2.2进制转8进制: 从2进制序列中右边最低位开始向左每3个2进制位换算为一个8进制位,剩余不够3个2进制位的直接换算 例:01101011转为01 101 011 即1 5 3 即8进制的153 还原回去的话: 将3化为011放最右边,5化…

【C++进阶篇】二叉搜索数

目录 前言: 以后我们要学map,set,AVL,红黑数所以必须要有二叉搜索数做铺垫 1、二叉搜索树概念 2.二叉搜索树操作 1.二叉搜索树的查找 a、从根开始比较,查找,比根大则往右边走查找,比根小则…

QEMU源码全解析 —— virtio(5)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 上一回以virtio balloon设备为例概述了具体的virtio设备、virtio PCI代理…

Proxmox创建Windows虚拟机

文章目录 下载ISO安装文件上传 下载ISO安装文件 下载地址:https://www.xitongzhijia.net/ 也可去官网进行下载 上传 将下载的ISO文件上传到Proxmox 选择ISO文件进行上传 上传后再ISO镜像中可以看到安装文件 点击创建虚拟机 填写名称,不能填写中文 镜…

使用NCNN在华为M5部署Yolov5

使用NCNN在华为M5平板部署Yolov5 一、NCNN二、下载解压NCNN三、下载ncnn-android-yolov5工程四、下载Android Studio[前提已经配置了jdk版本]1、安装NDK、Cmske,这个必须要安装,2、安装Android 五、构建工程六、修改源码七、重新ysnc project八、安装APP…

18个非技术面试题

请你自我介绍一下你自己? 这道面试题是大家在以后面试过程中会常被问到的,那么我们被问到之后,该如果回答呢?是说姓名?年龄?还是其他什么? 最佳回答提示: 一般人回答这个问题往往会…

IDEA中工具条中的debug按钮不能用了显示灰色

IDEA中工具条中的debug按钮不能用了显示灰色 1. 问题描述 IDEA上的DEBUG按钮突然变成了灰色: 2. 解决办法 一通搜索,终于找到解决办法 点击 File -> Project Structure如下图操作 3. 重启,解决 4. 参考 https://www.cnblogs.com…

linux下sys目录与proc目录的作用

sys目录作用 在Linux系统中,/sys目录是一个特殊的虚拟文件系统(sysfs),用于提供对内核和设备的运行时信息的访问。它是在内核中运行的驱动程序和子系统的接口,可以用于获取和配置系统的硬件和内核信息。 以下是/sys目…

Kubernetes实战(九)-kubeadm安装k8s集群

1 环境准备 1.1 主机信息 iphostname10.220.43.203master10.220.43.204node1 1.2 系统信息 $ cat /etc/redhat-release Alibaba Cloud Linux (Aliyun Linux) release 2.1903 LTS (Hunting Beagle) 2 部署准备 master/与slave主机均需要设置。 2.1 设置主机名 # master h…

2023年12月14日 十二生肖 今日运势

小运播报:2023年12月14日,星期四,农历十一月初二 (癸卯年甲子月丙午日),法定工作日。 红榜生肖:羊、狗、虎 需要注意:牛、马、鼠 喜神方位:西南方 财神方位&#xff…

004 Windows NTFS文件夹权限

一、NTFS文件权限: NTFS(New Technology File System)是Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,提供长文件名、数据保护和恢复,能通过目录和文件许可…

实操Nginx(4层代理+7层代理)+Tomcat多实例部署,实现负载均衡和动静分离

目录 前言 一、tomcat多实例部署 步骤一:先安装jdk,设置jdk的环境变量,验证是否安装完成(192.168.20.8) 步骤二:安装tomcat(192.168.20.18) 步骤三:安装tomcat多实例…

微服务中如何保证接口的安全性?[基于DDD和微服务的开发实战]

大家好,我是飘渺。如果你的微服务需要向第三方开放接口,如何确保你提供的接口是安全的呢? 1. 什么是安全接口 通常来说,要将暴露在外网的 API 接口视为安全接口,需要实现防篡改和防重放的功能。 1.1 什么是篡改问题…

【Linux】多线程编程

目录 1. 线程基础知识 2. 线程创建 3. 线程ID(TID) 4. 线程终止 5. 线程取消 6. 线程等待 7. 线程分离 8. 线程互斥 8.1 初始化互斥量 8.2 销毁互斥量 8.3 互斥量加锁和解锁 9. 可重入和线程安全 10. 线程同步之条件变量 10.1 初始化条件变…

k8s安装Ingress-Nginx

目前,DHorse(https://gitee.com/i512team/dhorse)只支持Ingress-nginx的Ingress实现,下面介绍Ingress-nginx的安装过程。 下载安装文件 首先,需要匹配Ingress-nginx版本和kubernetes版本。 在https://github.com/kubernetes/ingress-nginx可…

【UE5 Niagara】烟雾弹效果

效果 步骤 1. 新建一个工程,创建Basic关卡 2. 新建一个Actor蓝图,这里命名为“BP_SmokeBomb” 打开“BP_SmokeBomb”,添加一个静态网格体和一个发射物移动组件,静态网格体使用圆柱模型 选中发射物移动组件,设置初始速…

XSS防御:内容安全策略 CSP工作原理、配置技巧与最佳实践

前言 公司部门安全合规改造计划,要求所有的Web站点统一添加CSP规则。对于CSP机制我只是之前在应付面试的时候背过相关的概念,并没有真正在项目中实践过。所以希望借助本次改造任务好好理解并实践CSP机制。 什么是CSP CSP的全称是 Content Security Po…

算法通关村第十三关—数字与数学高频问题(白银)

数字与数学高频问题 一、数组实现加法专题 1.1 数组实现整数加法 先看一个用数组实现逐个加一的问题。LeetCode66.具体要求是由整数组成的非空数组所表示的非负整数,在其基础上加一。这里最高位数字存放在数组的首位,数组中每个元素只存储单个数字。并且…

TrustGeo代码理解(二)test.py

代码链接:https://github.com/ICDM-UESTC/TrustGeo 一、加载检查点(checkpoint)并进行测试 # -*- coding: utf-8 -*-"""load checkpoint and then test """ 该脚本的目的是加载之前训练过的模型的检查点&am…

Visual Studio使用Web Deploy发布.NET Web应用到指定服务器的IIS中

前言 今天要讲的是在Window 2008 R2版本的服务器下如何配置Web Deploy,和Visual Studio使用Web Deploy发布.NET Web应用到指定服务器的IIS中。 因为历史原因项目只能使用这个版本的服务器,当然使用其他服务器版本配置流程也是一样的。 Web Deploy介绍 …