socket连接数受端口号的限制?谬论
gudong366 2025-07-28 16:46 5 浏览
初学网络的同学对 socket 可能会有误解:
服务器能接受的最大连接数跟端口的个数 65536 有关系!
为什么会有这样的误会?
服务器端的程序无非是这样的:
socket(); //创建socket
bind(); //绑定IP和端口号
listen(); //设置监听队列
fd = accept(); //建立TCP连接
socket 绑定的端口号用于监听客户端的连接使用,所以在写客户端代码的时候,每次都是向指定的端口号发起连接,这个端口号一定是服务器绑定的端口号。
accept 相当于是在服务器和客户端之间建立了一个「专属通道」。很多同学会错误地理解成:执行 accept 的时候,服务器会挑一个空闲的端口,和客户端建立连接。
其实,这样理解并不对。
端口
怎么理解端口?
我们平时说的端口一般都是指逻辑端口,比如浏览器用的 80 端口,FTP 工具用的 21 端口。由于网络工具众多,于是对网络端口做了编号,从 0 到 65535。
其中 0 - 1023 是公认的端口号,就是已经被一些知名的软件给占用了。留给我们程序里面使用的是 1024 - 65535。
accept 并没有占用新的端口
为了更好地理解,我们写个程序验证下。
test_server.c
socket();
bind();
listen();
while (1)
{
accept();
pthread_create();
}
最简单的一种并发服务器,为每个客户端启动一个线程。
运行后查看端口的使用情况:
此时服务器进程只占用了 8000 端口用于监听。
启动两个客户端,向服务器发起请求:
图上显示已经很清楚了。
一个连接来自 114.67.xxx.140 的 50544 端口;
一个连接来自 106.14.xxx.205 的 57310 端口。
但是对于服务器本身来说,一直都是用 8000 这个端口跟客户端建立连接。
所以,端口的个数跟服务器的并发数没有直接关系。并不会因为端口满了,就不能处理客户端的连接请求。
socket通过绑定操作占领 8000 端口,接下来其他程序将不能使用 8000 端口。一旦 8000 端口收到数据,系统都会转发给该程序,所以不会出现微信好友发送的数据,被QQ给收到了。可以简单地理解成,操作系统通过端口号,把不同的应用程序区分开。
那 accept 建立的新的连接怎么理解?如果没有新增端口,服务器怎么区分不同的客户端?
socket 建立的 TCP 连接包含了两个信息,一个是源 IP 和端口,就是数据来自哪里,一个是目的IP和端口,就是把数据发送到哪。
虽然他们用的都是 8000 端口,但是socket可以根据源 IP 和端口号区分出不同的连接,在Linux里面,就是对应不同的文件描述符。所以不用担心数据会乱掉。
相关视频推荐
tcp/ip accept,11个状态,细枝末节的秘密,还有哪些你不知道?
网络原理tcp/udp,网络编程epoll/reactor,面试中正经“八股文”
学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
服务器的并发数量受什么限制?
硬件
比如服务器的核数、内存大小等等,核数越多,内存越大,当然能处理的连接也就越多。
系统资源
比如文件数量,这直接决定了系统最多支持多少个文件描述符,一旦超过,将无法继续接受客户端的连接。
程序结构
能够支持并发的服务器,可以选择的模型有很多,比如多线程、select、epoll + 单线程、epoll + 多线程等等。实际上,由于线程会占用内核资源,所以它并不算一个好的解决方案,select 或者 epoll 更受欢迎。
总的来说,要想实现高并发模型,需要多核的服务器,具备超大内存,调整系统参数(比如ulimit、nf_conntrack等等),最后还要针对项目需求写出合适的软件结构。只有软硬件配合起来,才能处理更多的连接请求。
相关推荐
- 怎么利用Python实现一个远程监控多台Linux主机资源的管理工具
-
摘要:这款基于Python和Flask设计的监控软件,主要是为了实现多主机Linux系统资源监控的目的,支持对本机及远程主机的资源进行监控。不但能定时收集包括CPU、内存、磁盘、IO和网络在内的关键数...
- Linux 流量监控怎么玩?5 个工具 + 3 个维度,保姆级教程来了
-
在数字化运维场景中,Linux服务器因其稳定性和开放性,成为承载核心应用与网络管理的主流平台。而高效监控网络流量,不仅是保障系统性能的关键,更是抵御安全威胁的第一道防线。本文将系统拆解Linux...
- Linux系统监控工具,你知道几个?(linux监控平台有哪些)
-
常用的Linux系统监控工具,可帮助您监视系统性能、资源利用率和进程活动等方面的信息:top:top是一个命令行工具,用于实时监视系统的进程活动和系统资源使用情况。它提供了CPU、内存、磁盘和网络等方...
- Linux服务器上监控网络带宽的18个常用命令和工具
-
一、如何查看CentOS的网络带宽出口检查维护系统的时候,经常会要查看服务器的网络端口是多大的,所以需要用到Linux的一个命令。如何查看CentOS的网络带宽出口多大?可以用下面的命令来查看。#e...
- 查看MySQL所有数据库列表(mysql怎样查看数据库)
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文主要讲解如何在Linux系统上查看MySQL所有数据库列表。在管理MySQL...
- Linux系统中的who命令你真的会用吗?
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本教程主要介绍如何使用who命令检查用户登录信息。Linux中的who命令列出了...
- Linux系统中,查看CPU信息的多样方法
-
一、命令行工具(适合所有Linux发行版)1.lscpu命令功能:显示CPU架构、核心数、线程数、缓存、NUMA节点等详细信息。使用:bashlscpu示例输出:Architecture:x86_...
- Linux系统 用户信息的显示:users、w、who
-
前言在Linux系统中,当我们需要查看登入系统的用户相关信息的时候,可以通过如下三条命令来查看:【users|w|who】。本文来具体学习一下这三条命令。目录一、命令描述二、命令常用选项三...
- Linux 用户、用户组、文件权限、文件查找
-
3-linux用户、用户组、文件权限、文件查找概述在Linux操作系统中,用户与权限管理是系统安全和稳定运行的核心环节。Linux是典型的多用户操作系统,每个使用系统的人都需要拥有独立的用...
- 使用linux中.ssh/config配置客户端host
-
~/.ssh/config文件是一个很有用的文件,它用于配置客户端的参数在~/.ssh/config中可以定义ssh的参数,这个文件在当前用户的目录下面,即该配置只能被当前用户使用,其他用户使用不了!...
- 「技术干货」Ip头udp数据包ARP协议(代码实现netmap)
-
协议栈数据组成格式用户层:用户数据传输层:8个字节udp头+用户层网络层:20个字节的ip头+传输层链路层:14个字节的以太网头+网络层网卡(在链路层和物理层之间):将链路层数据经过DA转换,...
- uboot常用命令汇总(uboot详解)
-
我们经常使用uboot命令,虽然资料光盘->常见问题目录有U-boot常用命令汇总文档,但从大家的反馈来看,并没有很多人注意到这个文档,所以把它挪到这里。如此全的uboot命令汇总,建议收藏。注...
- 腾讯面试中的TCP/IP协议简述+经典面试题
-
面试题有福利TCP/IP协议简述+TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入...
- socket连接数受端口号的限制?谬论
-
初学网络的同学对socket可能会有误解:服务器能接受的最大连接数跟端口的个数65536有关系!为什么会有这样的误会?服务器端的程序无非是这样的:socket();//创建sock...
- 研究发现近期零日IP漏洞激增,被利用攻击 Mac 和 Linux 计算机
-
据pcmag网8月8日报道,据悉,使用0.0.0.0IP地址的零日漏洞近几个月来出现激增,并被黑客利用,可能使MacOS或Linux上Safari、Chrome和Firefox等...
- 一周热门
- 最近发表
- 标签列表
-
- linux一键安装 (31)
- linux运行java (33)
- ln linux (27)
- linux 磁盘管理 (31)
- linux 内核升级 (30)
- linux 运行python (28)
- linux 备份文件 (30)
- linux 网络测试 (30)
- linux 网关配置 (31)
- linux jre (32)
- linux 杀毒软件 (32)
- linux语法 (33)
- linux博客 (33)
- linux 压缩目录 (37)
- linux 查看任务 (32)
- 制作linux启动u盘 (35)
- linux 查看存储 (29)
- linux乌班图 (31)
- linux挂载镜像 (31)
- linux 软件源 (28)
- linux题目 (30)
- linux 定时脚本 (30)
- linux 网站搭建 (28)
- linux 远程控制 (34)
- linux bind (31)