经常看到很多错误的言论:”由于单台机器和客户端的连接数量有限(比如小于 2^16=65536,xxxx“ 等等
为什么他们会觉得限制在于服务器的端口数量?这种言论在知乎等等平台上多的可怕。
理论上 server
的一个 port 就能同时连接上亿的 socket
连接吧!
socket 连接需要一个四元组: (server ip, server port, client ip, clinet port),对于想 nginx
这样的服务器来说,前两者固定,后两者随意。
尤其是现在流行微服务,服务之间经常需要用 HTTP 相互调用,这个时候 65000 的限制可能会在高并发下称为瓶颈。
不考虑硬件瓶颈,比如什么内存不够
TCP 协议格式里,源端口和目的端口均占用2字节,假设一个主机只有1个IP地址。1个TCP连接由四元组(serverip, serverport, clientip, clientport)确定,分两种情况讨论:
你提到的 nginx 是个 HTTP 反向代理软件,它作为服务端开放端口接收连接,同时作为客户端去连接上游。如果上游只有1个的话,它作为客户端的那一边很可能会受到 \( 2^{16} \) 的限制。