• 个性签名
  • 格言大全
  • 名言大全
  • 笑话大全
  • 知识问答
  • 生活家居
  • 星座运势
  • 宝宝起名
  • 休闲爱好
  • 百科大全
  • linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的

    栏目: 百科 日期:2023-03-14 00:00:38 浏览量(来源:小常

    [摘要]linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?首先你的理解是错误的,下面会一点一点分析。TCP 连接数量为什么不能超...

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

    首先你的理解是错误的,下面会一点一点分析。

    TCP 连接数量为什么不能超过65535?

    65536 = 2^16-1,对应的两字节的长度,这里的两字节指的什么?

    指的是 TCP 四元组(源IP,源端口,目的IP,目的端口)中的源端口,因为源端口是2字节,不论是 IPv4, 还是 IPv6, 端口长度都是2字节。

    为什么不是目的端口那,因为目的端口,通常指的是服务器端监听的端口都是固定的,比如http的80端口,https的443端口。

    由此可见,这里的65535指的是客户端的同时最大TCP,连接数量,那这65535的限制与服务器有什么关系那?一点关系也没有,是你理解错了。

    服务器可以同时处理多少TCP连接那?

    假设服务器只有一个端口(可以是多个)对外提供服务,那么根据四元组,理论上应该有2^32 " 2 ^ 16个连接,虽然IP数可能会少于2^32,因为会有些保留地址,如果是IPv6地址,这里会更多;同样端口数也少于2^16,因为有些保留端口,此外客户端上其他服务也会占用些端口(虽然几乎是用不尽的,同时用完了也会释放掉,可供重新使用)。

    由此可见,理论上是几乎是一个天文数字,但是实际情形是每一个TCP连接,都会耗用服务器的资源,比如CPU,内存等,因此这里的最大连接数会收到系统资源的限制。

    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个端口决定的。服务器同时能够承受的并发数是由带宽、硬件、程序设计等多方面因素决定的。

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


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

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

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

    上一页12下一页