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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 计网 - 一台主机上最多只能保持 65535 个TCP 连接吗


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 个可变,自然客户端能同时支持的连接数比服务器还要大得多


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
XML 网络协议 算法
【TCP】网络原理
【TCP】网络原理
31 0
|
6月前
|
网络协议 Unix API
网络原理-TCP_IP(2)
网络原理-TCP_IP(2)
|
6月前
|
域名解析 缓存 网络协议
网络原理-TCP/IP(7)
网络原理-TCP/IP(7)
|
6月前
|
网络协议 网络架构
网络原理-TCP_IP(6)
网络原理-TCP_IP(6)
|
6月前
|
存储 网络协议 API
网络原理-TCP/IP(3) - 三次握手超详解析
网络原理-TCP/IP(3) - 三次握手超详解析
|
6月前
|
网络协议 网络性能优化
网络原理-TCP/IP(4)
网络原理-TCP/IP(4)
|
6月前
|
XML JSON 网络协议
网络原理-TCP/IP(5)
网络原理-TCP/IP(5)
|
6月前
|
JSON 网络协议 算法
网络原理-TCP/IP(1)
网络原理-TCP/IP(1)
|
6月前
|
存储 缓存 网络协议
《网络是怎么样连接的》读书笔记 - Tcp/IP连接(二)
《网络是怎么样连接的》读书笔记 - Tcp/IP连接(二)
87 0
|
6月前
|
网络协议 安全 Go
TCP基础详解:Telnet回音服务器搭建
TCP基础详解:Telnet回音服务器搭建
84 0