参考
- 经典的”服务器最多65536个连接”误解
- 由socket的accept说开去
- how-do-multiple-clients-connect-simultaneously-to-one-port-say-80-on-a-server
总结
一个socket
是由5个字段的元组标识, {本地IP, 本地端口, 目标IP, 目标端口, 协议}
.
对于服务端的Server socket
来说, 其绑定了一个IP
以及一个PORT
以后, 其实之后Accept
新的连接请求, 都不会再申请一个新的PORT
. 因为每次Accept
之后新生成的socket
都是有不同五元组 (对于不同客户端有客户端IP
或者客户端PORT
不同, 也可能两者都不同; 对于同一个客户端的多个连接, 有客户端PORT
不同), 所以服务器能够区分不同socket
, 而无需再申请一个新的PORT
.
而且假设服务端每一次Accept
, 都会申请一个新的PORT
, 一个是浪费资源, 一个是这样导致用户不得不重新连接这个新的远程端口, 所以这样做是极其不合理的.