Answers:
您会严重误解端口号:服务器仅在一个端口上侦听,并且可能有来自连接到该端口的客户端的大量开放套接字。
在TCP级别上,每个同时连接的元组(源ip,源端口,目标ip,目标端口)必须唯一。这意味着单个客户端最多只能打开到服务器的65535个并发连接。但是服务器可以(理论上)为每个客户端 65535个服务器同时连接。
因此,在实践中,服务器仅受其必须处理请求的CPU能力,内存等的限制,而不受服务器的TCP连接数的限制。
您错了-套接字的唯一性由四个因素决定:
提供网络服务时,1.和2.通常是静态的(例如IP 10.0.0.1,端口80),但是除非您期望来自单个客户端(或单个NAT网关)的数千个连接,否则您将不会推动在用尽本地资源之前,可能的3.和4.组合的边界。
因此,尽管实际上客户端不会使用已用于连接的端口来打开与其他目标IP地址的连接,但是端口号耗尽对于几乎所有应用程序来说都是最小的麻烦-无论是在服务器上还是在服务器上客户端。
问题是一个非常现实的问题,NAT网关(路由器)为具有大量打开的出站连接(例如torrent)的客户端提供服务-在清空可用于NAT的端口池之后,您将看到端口号耗尽。在这种情况下,NAT网关无法创建任何其他关联,从而有效地切断了客户端与Internet的连接。
问题是如何处理大量(> 64k)连接数。两种最常见的方法是:
添加更多服务器,这将增加src / dst地址和端口号元组的数量。有多种方法可以在多台服务器之间共享负载。DNS轮循是其中之一;还有其他
部署“运营商级NAT”(在我看来,一个朋友嘲笑而正确地称为“ crummier级NAT”)。这本质上是NAT的NAT。这对应用程序有非常不好的影响,但是这是某些大型提供商在IPv4空间和/或端口号用尽时,和/或不想迁移到IPv6时所做的事情。
(more than the max port number)
。