最大并发tcp联接数是多少呢?
首先,问题中描述的65535个联接指的是顾客端联接数的限制。
在tcp应用中,server事先在某个固定端口窃听,client主动发起联接,经过三次握手后构建tcp联接。这么对单机,其最大并发tcp联接数是多少呢?
怎么标示一个TCP联接
在确定最大联接数之前,先来瞧瞧系统怎样标示一个tcp联接。系统用一个4四元组来惟一标示一个TCP联接:{localip,localport,remoteip,remoteport}={本地ip,本地port,远程ip,远程port}
client最大tcp联接数
client每次发起tcp联接恳求时,除非绑定端口,一般会让系统选定一个空闲的本地端口(localport),该端口是独占的,不能和其他tcp联接共享。tcp端口的数据类型是unsignedshort,因而本地端口个数最大只有65536,端口0有特殊涵义,不能使用,这样可用端口最多只有65535linux系统安装教程,所以在全部作为client端的情况下,一个client最大tcp联接数为65535,这种联接可以连到不同的serverip。
server最大tcp联接数
server一般固定在某个本地端口上窃听,等待client的联接恳求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,虽然server端有多个ip,本地窃听端口也是独占的,因而server端tcp联接4元组中只有remoteip(也就是clientip)和remoteport(顾客端port)是可变的,因而最大tcp联接为顾客端ip数×客户端port数,对IPV4,不考虑ip地址分类等诱因,最大tcp联接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp联接数约为2的48次方。
实际的tcp联接数
前面给出的是理论上的单机最大联接数,在实际环境中,遭到机器资源、操作系统等的限制,非常是sever端,其最大并发tcp联接数远不能达到理论上限。在unix/linux下限制联接数的主要诱因是显存和容许的文件描述符个数(每位tcp联接都要占用一定显存,每位socket就是一个文件描述符),另外1024以下的端口一般为保留端口。
所以,对server端,通过降低显存、修改最大文件描述符个数等参数,单机最大并发TCP联接数超过10万,甚至上百万是没问题的。
这显著是步入了思维的误区linux 系统唯一标识,65535是指可用的端口总量,并不代表服务器同时只能接受65535个并发联接。
举个反例:
我们做了一个网站,绑定的是TCP的80端口,结果是所有访问这个网站的用户都是通过服务器的80端口访问,而不是其他端口。可见端口是可以复用的。
虽然Linux服务器只在80端口侦听服务,也容许有10万、100万个用户联接服务器。Linux系统不会限制联接数至于服务器能不能承受住如此多的联接,取决于服务器的硬件配置、软件构架及优化。
01
我们晓得两个进程假如须要进行通信最基本的一个前提是:能否惟一的标识一个进程。在本地进程通信中我们可以使用PID来惟一标识一个进程,但PID只在本地惟一linux 系统唯一标识,网路中的两个进程PID冲突概率很大。
这时侯就须要另辟它径了,IP地址可以惟一标识主机,而TCP层合同和端标语可以惟一标识主机的一个进程,这样可以借助IP地址+合同+端标语惟一标识网路中的一个进程。
才能惟一标识网路中的进程后,它们就可以借助socket进行通讯了。socket(套接字)是在应用层和传输层之间的一个具象层,它把TCP/IP层复杂的操作具象为几个简单的插口供应用层调用以实现进程在网路中通讯。
socket源自Unix,是一种”打开—读/写—关闭”模式的实现,服务器和顾客端各自维护一个”文件”,在构建联接打开后,可以向自己文件写入内容供对方读取或则读取对方内容,通信结束时关掉文件。
02
惟一才能确定一个联接有4个东西:
服务器的IP服务器的Port顾客端的IP顾客端的Port
服务器的IP和Port可以保持不变,只要顾客端的IP和Port彼此不同就可以确定一个联接数。
一个socket是可以构建多个联接的linux下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地址上绑定一个TCPsocket和一个UDPsocket
由于端标语似乎一样,但因为合同不一样,所以端标语是完全独立的。
TCP/UDP通常采用五元组来定位一个联接:
source_ip,source_port,destination_ip,destination_port,protocol_type
即(源IP,源端口,目的IP,目的端口,合同号)
综上所述,服务器的并发数并不是由TCP的65535个端口决定的。服务器同时还能承受的并发数是由带宽、硬件、程序设计等多方面诱因决定的。
所以也能够理解天猫、腾讯、头条、百度、新浪、哔哔哔哔等为何还能承受住每秒种几亿次的并发访问,是由于她们采用的是服务器集群。服务器集群分布在全省各地的小型机房,当访问量小的时侯会关掉一些服务器,当访问量大的时侯会不断地开启新的服务器。