TCP服务器最多支持多少客户端连接

目录

一、理论数值

二、实际部署

 参考


一、理论数值

        首先知道一个基础概念,对于一个 TCP 连接可以使用四元组(src_ip, src_port, dst_ip, dst_port)进行唯一标识。因为服务端 IP 和 Port 是固定的(如下图中的bind阶段),那么一个TCP服务器支持最多的连接数就是由客户端 IP 和 端口决定的了。

        端口数在 TCP 传输协议中占两个字节,所以一共有 2 ^ 16 = 65535 个端口(未减去保留端口,假设数量为 m)。

        IP 在 IP 网络协议中占四个字节,所以有 2 ^ 32 个网络地址(未减去广播地址、多播地址和私有地址,假设他们数量之和为 n)。

        所有理论上 TCP 服务器支持 ( 2 ^ 32 - n ) * ( 2 ^ 16 - m )条连接,简单计算一下,理论上支持的 TCP 连接数是以亿为量级的。

        下图是 TCP 服务器与客户端的交互过程。

二、实际部署

        实际使用中,TCP 服务器支持的最大连接数受服务端内存和文件描述符的约束。

(1)一条处于 ESTABLISH 状态的 TCP 连接占用的大小是 3.44 KB,数据来源文末参考链接。

(2)服务器内每个 TCP 连接就是一个文件描述符,受如下 linux 系统参数的限制。

        系统级:当前系统可打开的最大数量,通过  cat /proc/sys/fs/file-max 查看;

        用户级:指定用户可打开的最大数量,通过  cat /etc/security/limits.conf 查看;

        进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open 查看;

 参考

https://mp.weixin.qq.com/s/l9ggXLAEHp4LTjd2Qsyqtg

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
最基本的 TCP 服务器客户端通信模型包括以下步骤: 1. 服务器创建一个监听socket,并绑定到一个本地IP地址和端口上,开始监听客户端连接请求。 2. 客户端创建一个socket,并向服务器发起连接请求,请求连接服务器IP地址和端口。 3. 服务器接收到客户端连接请求,创建一个新的socket用于与该客户端通信,并返回该socket的描述符给客户端。 4. 客户端接收到服务器连接确认,创建一个新的socket用于与该服务器通信,并返回该socket的描述符。 5. 服务器客户端通过各自的socket进行数据传输,通过send和recv函数发送和接收数据。 6. 当通信结束时,客户端服务器都可以通过close函数关闭它们的socket连接。 下面是基本的TCP服务器客户端通信模型的示例代码: 服务器端: ```python import socket HOST = '127.0.0.1' PORT = 8888 # 创建一个socket对象,AF_INET表示使用IPv4协议,SOCK_STREAM表示使用TCP协议 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定到指定地址和端口上 server_socket.bind((HOST, PORT)) # 监听连接请求,最多允许5个客户端同时连接 server_socket.listen(5) while True: # 接受客户端连接请求 client_socket, client_addr = server_socket.accept() print('Connected by', client_addr) # 从客户端接收数据 data = client_socket.recv(1024) print('Received from client:', data.decode()) # 向客户端发送数据 client_socket.send(b'Thank you for connecting') # 关闭客户端连接 client_socket.close() ``` 客户端: ```python import socket HOST = '127.0.0.1' PORT = 8888 # 创建一个socket对象,AF_INET表示使用IPv4协议,SOCK_STREAM表示使用TCP协议 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务器的地址和端口 client_socket.connect((HOST, PORT)) # 向服务器发送数据 client_socket.send(b'Hello, server.') # 接收服务器的响应数据 data = client_socket.recv(1024) print('Received from server:', data.decode()) # 关闭连接 client_socket.close() ``` 在上面这个例子中,服务器监听本地IP地址和端口号,等待客户端连接请求。客户端连接服务器IP地址和端口,向服务器发送数据,接收服务器的响应数据,然后关闭连接服务器接收到客户端连接请求后,接收数据,发送响应数据,然后关闭客户端连接

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值