如果对一台机器可以拥有的端口数量有限制,而套接字只能绑定到一个未使用的端口号,那么具有极高请求量(大于最大端口号)的服务器如何处理这个问题?这仅仅是通过使系统分布,即许多机器上的许多服务器来完成的吗?
发布于 2013-08-25 06:51:39
您误解了端口号:服务器只在一个端口上侦听,并且可以有大量来自客户端的打开套接字连接到该端口。
在TCP级别上,元组(源ip、源端口、目标ip、目标端口)对于每个同时连接必须是唯一的。这意味着单个客户端不能同时打开到单个服务器的65535多个连接。但是一台服务器(理论上)可以为每个客户端同时提供65535个连接。
因此,在实际应用中,服务器仅受CPU容量、内存等方面的限制,而不受TCP连接到服务器的数量的限制。
发布于 2013-08-25 06:52:56
您错了--套接字的唯一性取决于以下五个因素:
当提供网络服务时,1和2通常是静态的(例如IP 10.0.0.1,端口80),但除非您期望来自单个客户端(或单个NAT网关)的数千个连接,否则在耗尽本地资源之前,不会将3和4的可能组合的界限推倒。
因此,尽管实际上一个客户端不会使用已经使用的端口来打开连接到另一个目的IP地址的连接,但是对于几乎任何应用程序--无论是服务器端还是客户端--端口号耗尽都是最小的问题。
这是一个非常真实的问题,NAT网关(路由器)为具有大量开放出站连接(例如洪流)的客户提供服务--在NAT可用端口池被清空后,您将看到端口数耗尽。在这种情况下,NAT网关无法创建任何额外的关联,从而有效地切断了客户端的互联网。
发布于 2013-09-26 10:46:39
问题是如何处理大型(>64k)连接计数。最常见的两种方法是:
https://serverfault.com/questions/533611
复制