关于香港服务器的TCP服务器最大并发连接数有一种曲解就是“因为端口号上限为65535,所以香港TCP服务器理论上的可承载的最大并发连接数也是65535”。
先说结论:对于TCP服务端过程来说,他可以同时连接的客户端数量并不受限于可用端口号。并发连接数受限于linux可打开文件数,这个数是可以配置的,可以非常大,所以实际上受限于系统性能。
从理论上说,端口号的作用是在网络连接中标识利用层的过程,服务端一般应用众所周知的端口号进行监听,客户端连接时系统主动分配端口号。一个服务端过程服务于n个客户远程过程,只需要能通过ip地址+端口号的组合把他们区离开即可,没有必要占用本机的其他端口号,客户端连接数增长并不会占用服务器端口号,因此端口号并不能限制并发连接数。当然一台机器上端口号数量的上限确实是65536个,因为tcp首部中应用16bit去存储端口号。所以如果说65536影响了连接数,只有一种可能,就是同一台客户端机子上开n个过程去连同一个服务端过程,因为客户端ip是同一个,为了区分出这些连接,只能应用客户端连接的端口号,那么服务端和一个客户端主机之间的tcp连接数理论上线确实是65536。但是,服务端可以连接n多客户端机子呢。
实际上,确实有个限制端口号的配置,就是MaxUserPort,这实际上是一台主机向外连接应用端口数的限制,这个数也可以配置的,可能默认值才5000,实际上对于正常的服务器主机是够用的,因为你是等别人连接进来的,不是要去连接很多不同的其他主机的。当然你的服务器上可能跑了一些转发的服务,这样你就需要对外连接了,如果被限制在这个配置这儿了确实需要改。但是这个MaxUserPort确实和服务器可以承载的来自客户端的并发连接数没有关系。
伴随这个曲解的还有另外一个曲解,就是accept之后产生的已连接套接字占用了新的端口。这个绝对是毛病的,linux内核不会这么写的,因为完整没必要嘛。客户端连接上来之后产生的这个socket fd就是用来区分客户端的,里面会填上客户端的ip和端口作为发包用,来自客户端的包也会应用这个fd去读取。可以试试netstat -ano,然后起一个服务器看下,客户端连上来这后产生的套接字的服务端端口还是监听的端口。
租用高防服务器,可以试试桂哥网络香港高防服务器,服务器所归属的机房是高端定制模块化智能监控香港高防自营机房,它拥有会“思考”的防火墙系统,全G口高速大带宽,能够快速应对攻击,闪电式反抗CC,多层智慧联动防御,支撑网络安全防御突破99.99%的可能。