我知道对于客户端服务器通信,我们需要在服务器端和客户端创建套接字。所以我想知道当传入的客户端数量超过我们所知的最大端口数量65536时会发生什么?< / p>
答案 0 :(得分:3)
TCP连接由源和目标IP和端口标识。
在启动出站连接之前,通常不会为客户端端口分配本地端口号,此时已知完整元组,并且可以选择无冲突的本地端口号。至少在理论上,操作系统是否真的这样做是另一回事,因为没有真正的用例。
在服务器端,所有传入连接使用相同的本地IP和端口号,但可以通过客户端的IP和端口号区分连接,理论上限制为2 ^ 32个IP地址乘以2 ^ 16个端口,减去一些不可用的,所以大约250万亿组合。
对于UDP,本地端口使用bind()
显式绑定,或者在发送第一个数据包时隐式绑定,在这种情况下,端口号必须是空闲的 - 但UDP是无状态的,并且可以从所有端口接收数据包客户同时。
在任何一种情况下,使用多个IP地址并将套接字明确绑定到IP也可以避免遇到问题,但除非有人试图在同一个网络之间打开超过2 ^ 16个连接,否则不会遇到限制机等。