linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?

这明显是进入了思维的误区,65535是指可用的端口总数,并不代表服务器同时只能接受65535个并发连接。

举个例子:

我们做了一个网站,绑定的是TCP的80端口,结果是所有访问这个网站的用户都是通过服务器的80端口访问,而不是其他端口。可见端口是可以复用的。

即使Linux服务器只在80端口侦听服务, 也允许有10万、100万个用户连接服务器。Linux系统不会限制连接数至于服务器能不能承受住这么多的连接,取决于服务器的硬件配置、软件架构及优化。

01

我们知道两个进程如果需要进行通讯最基本的一个前提是:能够唯一的标示一个进程。在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大。

这时候就需要另辟它径了,IP地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样可以利用IP地址+协议+端口号唯一标示网络中的一个进程。

能够唯一标示网络中的进程后,它们就可以利用socket进行通信了。socket(套接字)是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

socket源自Unix,是一种'打开—读/写—关闭'模式的实现,服务器和客户端各自维护一个'文件',在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

02

唯一能够确定一个连接有4个东西:

1. 服务器的IP

2. 服务器的Port

3. 客户端的IP

4. 客户端的Port

服务器的IP和Port可以保持不变,只要客户端的IP和Port彼此不同就可以确定一个连接数。

一个socket是可以建立多个连接的,一个TCP连接的标记为一个四元组(source_ip, source_port, destination_ip, destination_port),即(源IP,源端口,目的IP,目的端口)四个元素的组合。只要四个元素的组合中有一个元素不一样,那就可以区别不同的连接。

举个例子:

->你的主机IP地址是1.1.1.1, 在8080端口监听

->当一个来自 2.2.2.2 发来一条连接请求,端口为5555。这条连接的四元组为(1.1.1.1, 8080, 2.2.2.2, 5555)

->这时2.2.2.2又发来第二条连接请求,端口为6666。新连接的四元组为(1.1.1.1, 8080, 2.2.2.2, 6666)

那么,你主机的8080端口建立了两条连接;

->(2.2.2.2)发来的第三条连接请求,端口为5555(或6666)。第三条连接的请求就无法建立,因为没有办法区分于上面两条连接。

同理,可以在同一个端口号和IP地址上绑定一个TCP socket和一个UDP socket

因为端口号虽然一样,但由于协议不一样,所以端口是完全独立的。

TCP/UDP一般采用五元组来定位一个连接:

source_ip, source_port, destination_ip, destination_port, protocol_type

即(源IP,源端口,目的IP,目的端口,协议号)

综上所述,服务器的并发数并不是由TCP的65535个端口决定的。服务器同时能够承受的并发数是由带宽、硬件、程序设计等多方面因素决定的。

所以也就能理解淘宝、腾讯、头条、百度、新浪、哔哔哔哔等为什么能够承受住每秒种几亿次的并发访问,是因为他们采用的是服务器集群。服务器集群分布在全国各地的大型机房,当访问量小的时候会关闭一些服务器,当访问量大的时候回不断的开启新的服务器。


以上个人浅见,欢迎批评指正。

认同我的看法,请点个赞再走,感谢!

喜欢我的,请关注我,再次感谢!

(0)

相关推荐

  • linux 网络

    nc A服务器:用nc监听udp的20001端口 nc -ulp 20001 B服务器:连接A服务器20001端口 nc -u ip(A服务器) 20001 (或者 nc -zvu ip port) ...

  • (13条消息) 端口数和最大连接数的关系

    初学编程的人可能会有这样的误解:单个服务器程序可承受最大连接数"理论"上是"65535". 这种说法是错误的,请注意,这里有两个词分别被我标记上了引号,一个是& ...

  • 嵌入式Linux的网络连接管理

    连接管理器(ConnMan)是一个连接管理守护进程 , 用于管理运行 Linux 操作系统中设备的互联网连接. 它以快速.连贯.同步的方式对不断变化的网络条件提供了低内存消耗. ConnMan拥有各种 ...

  • Linux学习1-Xshell连接阿里云ECS服务器

    前言 前段时间双十一活动,头脑发热买了个阿里云的服务器,买了后也不知道怎么用一直放着在.最近想起来,于是看了下阿里云ECS的相关资料. 由于平常一直用xshell比较多,不太习惯阿里云的ESC终端连接 ...

  • (7条消息) Linux下TCP/IP编程

    本文参考自徐晓鑫<后台开发>,重点复习总结TCP通信流程,读者也可以参考: http://blog.csdn.net/wqc_csdn/article/details/51513543,谢 ...

  • Linux内核TCP参数梳理

    关于TCP连接的过程就不再赘述了,直接看下图. 我们从一次tcp的传输开始分析,从建立连接.数据传输和断开连接三部分. 建立连接阶段 net.ipv4.tcp_syn_retries syn重传次数, ...

  • win10 服务器远程连接数量限制修改

    打开电脑命令(win+r)输入:gpedit.msc 依次打开管理模板>>windows组件>>远程桌面服务>>远程桌面会话主机 等目录 然后就是 选择 连接> ...

  • 初步预计今年小麦托市收购数量不会超过100万吨

    自进入7月份以来,我国小麦主产区收购价格上涨势头明显减弱,部分地区基层粮价出现下滑,据来自贸易商的消息显示,近段时间面粉企业收购出现价高质严的情况,即收购挂牌价格高,小麦品质要求更加严格,实际价格出现 ...

  • 双千兆网口开发板香橙派R1 Plus在Linux系统下连接USB摄像头测试说明

    香橙派R1 Plus电脑开发板采用瑞芯微RK3328 四核64位处理器,拥有1GB DDR4内存.双千兆网口.TF卡插槽.散热风扇接口等功能接口,适配了OpenWRT系统,可做路由器方案. 下文将介绍 ...

  • 就目前形势来看,东京奥运会中国军团的金牌数量还能超过30枚吗?

    东京奥运会将会产生339枚金牌,经过几天的比赛之后,中国.日本和美国在金牌榜上的争夺战异乎寻常的激烈.三国交替领先,战况十分胶着! 之前我们就曾分析过,中国军团能够在东京奥运会上夺得多少枚金牌,主要取 ...

  • 一组图带你读懂TCP连接的终止——四次挥手的原理~

    TCP是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间家里一条连接. 而建立一个TCP连接需要三次握手,这个我在昨天的文章中已详细说明,这里就不提了. 还没看过的同学看这里