Windows服务器允许打开的TCP连接的理论最大数量是多少?

4
在我的Windows服务器上,我开了一个端口,监听来自多个客户端的传入TCP连接。这个打开的端口在我的Windows服务器上可以同时建立多少唯一客户端的socket连接?其中一个线程 What is the theoretical maximum number of open TCP connections that a modern Linux box can have 谈到Unix平台上允许的文件描述符限制了socket连接数量。最新可用的Windows服务器是否存在这样的限制?如果存在,如何更改该限制?

你是真的遇到了问题,还是只是出于好奇想知道是否可以更改这样的限制? - Sami Kuhmonen
2个回答

6

根据微软员工的回答

这取决于版本,Web和Foundation版本有连接限制,而Standard、Enterprise和Datacenter版本则没有。

正如Harry在另一个回答中提到的,虽然可以设置打开TCP连接的数量,但其上限略高于16M。

但是,虽然在技术上你可以拥有大量的连接,但实际上存在一些问题会限制连接的数量:

  • 每个连接都由服务器地址和端口以及客户端地址和端口进行标识。理论上,两台机器之间的连接数量非常大,但通常服务器使用单个端口来限制数量。并且很少有单个客户端会打开数千个连接,但在NAT情况下可能会看起来像是这样。

  • 服务器只能处理一定量的数据和每秒钟的数据包,因此高速数据传输或大量小数据包可能会导致数量下降。

  • 网络硬件可能无法处理所有进入的流量。

  • 服务器必须为每个连接分配内存,这再次限制了数量。

  • 此外,服务器所做的事情也是一个重要问题。它是实时游戏服务器还是系统在人们思考15分钟的棋步之间传递棋步的服务器。


@HarryJohnston 但是没有硬件信息和使用的软件,这是不可能说的。此外,问题提到了Linux中的硬编码限制,在Windows中不存在。因此,当然不能指望一台慢速机器具有单个NIC来处理一百万个活动FTP连接,但是一台强大的机器可能会处理相同数量的连接,或者是象棋服务器的一万亿个连接。 - Sami Kuhmonen
1
实际上似乎存在一个固定的限制(请参见我的答案),但在实践中,您提出的观点更为重要。 - Harry Johnston
感谢Sami和Harry提供的出色信息和见解。在我的情况下,有多个客户端每个都会初始化连接并保持其活动状态以发送定期数据。这基本上是来自现场的一些传感器数据(例如温度)。因此,可以同时有多个客户端与服务器上的同一端口进行通信。看起来,与其限制连接内存,网络硬件可能更具限制性。我们将很快开始进行一些压力测试。 - Rahul J

4
除了Sami的回答中提到的许可和实用限制外,事实上还有一项可配置的限制同时打开连接数,由TcpNumConnections设置确定。默认值也是最大值,略低于16M。
(链接的文档适用于Windows 2003。对于更高版本的Windows Server的相应文档似乎不存在。但是,我找不到任何迹象表明该设置已被删除。) 然而,在实践中,在达到此限制之前,您很可能会遇到Sami回答中概述的实际问题。(当然,除非系统管理员手动更改了该设置。)

没错,我找不到任何信息表明这不是允许的最大值,尽管也没有明确表明这是正确的。但我也会倾向于它存在,因为至少提到了 WS 2008。 - Sami Kuhmonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接