在没接触过这个问题之前,自然会想到服务器端连接数是由服务器端口号限制的。但这其实是一个很严重的误解,要解决这个问题,必须理解socket的连接过程。

以python为例,tcp服务端socket需要经过如下的初始化步骤:

import socket

# 建立socket对象
s = socket.socket()
# 初始化地址,注意这里用的是一个元组
addr = ("127.0.0.1", 43211)
# 绑定
s.bind(addr)
# 监听
s.listen(5)

这时服务端的socket就准备好了,进到下一步等待connect的阶段:accept。看一下accept的说明:

Accept a connection. The socket must be bound to an address and listening for connections. The return value is a pair (conn, address) where conn is a new socket object usable to send and receive data on the connection, and address is the address bound to the socket on the other end of the connection.

accept会返回一个元组,包含一个新的socket对象和客户端的地址。这个新的对象用于发送或接收数据。

就是说,对于TCP服务端来说,返回的新的socket对象,和最开始用于listen的socket对象是不一样的。也就是说,最开始绑定了端口和主机的socket对象是专门用于接收连接请求的。

我们实际使用一下这个函数:

# 客户端运行
import socket s = socket.socket()
s.connect(("127.0.0.1", 43211))
# 服务端
s.accept()
# (<socket.socket fd=568, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 43211), raddr=('127.0.0.1', 2588)>, ('127.0.0.1', 2588))

再来一遍

# 客户端运行
import socket s = socket.socket()
s.connect(("127.0.0.1", 43211))
# 服务端
s.accept()
# (<socket.socket fd=468, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 43211), raddr=('127.0.0.1', 2823)>, ('127.0.0.1', 2823))

可以看到,每次返回的socket的包含了协议,服务端地址+端口号和客户端地址+端口号。这个五元组唯一标识了这个连接,也就是说限制单机TCP最大连接数的因素,从理论上来说是ip地址范围*端口范围,连接数最多是2^32*2^16=2^48。但实际情况中这个和设备的内存,一条tcp连接占用的内存有关,端口号的范围65535并不是单机服务器处理的连接数上限。

一台主机的最大TCP连接数是多少?的更多相关文章

  1. 【 Linux 】单台服务器上并发TCP连接数

    单台服务器上并发TCP连接数    问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:    对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...

  2. 【 Linux 】单台服务器上并发TCP连接数(转)

    单台服务器上并发TCP连接数    问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:    对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...

  3. 网络中两台主机的通信过程(TCP)

    两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...

  4. socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

    常识一:文件句柄限制 在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...

  5. 高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少

    高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少     阅读(81374) | 评论(9)收藏16 淘帖1 赞3   JackJiang Lv.9    1 年前 | 前言 曾几何时我 ...

  6. 网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

    曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了.我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来 ...

  7. 查看linux中的TCP连接数【转】

     转自:http://blog.csdn.net/he_jian1/article/details/40787269 查看linux中的TCP连接数 本文章已收录于:   计算机网络知识库  分类: ...

  8. 【Linux学习笔记】用nc实现两台主机间的文件传输(不需要输密码)

    通常,可以用scp完成两台主机间的文件传输任务,但在主机间未建立信任关系的情况下,scp每次都需要输入密码,用起来感觉不是很方便,之前这篇笔记介绍过不用输入密码执行脚本或传输文件的方法,但对于一些临时 ...

  9. 详解Linux服务器最大tcp连接数

    网络编程在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接.那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接在确定最大连接数之 ...

随机推荐

  1. logging日志基础示例

    import logging logger = logging.getLogger() # 获取日志对象 logfile = 'test.log' hdlr = logging.FileHandler ...

  2. __slots__属性

    使用__slots__时,子类不受影响 class Person(object): __slots__ = ("name","age") def __str__ ...

  3. PHP hex2bin() 函数

    实例 把十六进制值转换为 ASCII 字符: <?phpecho hex2bin("48656c6c6f20576f726c6421");?> 以上实例输出结果: He ...

  4. Blob分析之Board_Segmentation_Uncalib

    * ************************************************************************************************** ...

  5. C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!

    中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规 ...

  6. luogu P4590 [TJOI2018]游园会 dp套dp

    LINK:游园会 容易想到 设\(f[i][j][k][l]\)前i个字符 j表示状压的w个字符状态为j 长度<=k 匹配到了NOI的第l个位置的方案数. 不过只能得到30分. 考虑优化 其实优 ...

  7. 类加载Class Loading

    JVM 何时.如何把 Class 文件加载到内存,形成可以直接使用的 Java 类型,并开始执行代码? ​ 类的生命周期 加载 - 连接(验证.准备.解析)- 初始化 - 使用 - 卸载. 注意,加载 ...

  8. 为什么 2020 还要学 Node.js

    更佳阅读体验 https://www.yuque.com/sunluyong/node 前言 前些日子刷知乎看到个 2019 年初的问题 2019年nodejs凉了吗?凉到什么程度了?才看到问题的时候 ...

  9. MVC + EFCore 项目实战 - 数仓管理系统9 - 数据源管理完结篇

    我们完成数据源管理的剩余部分:点击表名,预览表中数据. 我们需要完成的是下图的方框部分. 考虑到这块以后可能复用,我们将她独立出来,做成 view component. 新建 view compone ...

  10. 东哥学Node的故事——内存管理

    前言 东哥是一个平凡的前端攻城狮,北邮网研院研二在读,刚接触Node不久,心里充满了对Node的好奇和崇拜,只听噗通一声,掉入了Node的坑... 于是东哥开始疯狂地看Node相关的书籍,这不,就学到 ...