我在Windows Server 2008中最多可以有多少个TCP连接?


11

我想在Windows Server 2008上运行的服务器中尽可能多地拥有连接(来自许多不同客户端的单个连接),以便支持Comet样式的应用程序。该应用程序用C#编写。连接不会是闲聊的,它们只需要打开(并保持打开状态)即可。购买大量的内存和快速的CPU并不是问题。

据我所知,每个NIC最多只能同时进行65k个同时打开的连接-最大端口数。这个准确吗?还是可以以某种方式超越65k连接/ NIC?似乎有些Linux服务器产品至少支持数十万个连接。他们如何做到这一点?

Answers:


9

您可以超越65k的连接数;因为每个端口可以有多个连接(一旦接受,侦听器就可以连接到另一个客户端)。一端或另一端确实必须有所不同,通常客户端会选择一个随机端口。默认情况下,Windows限制为这些随机端口中的3000多个;因此您的典型客户将在此范围内发挥最大作用。但是可以对客户端进行不同的配置,并且许多* nix的限制仅限于Windows。

有一个注册表设置将最大连接数限制为1600万。但是,还有其他一些更实际的问题通常会限制您的工作量(可以更改注册表值)。

  • Windows每个连接占用大约1KB的RAM(1600万个连接大约为16GB);而且您的应用还必须以某种方式跟踪其活动连接(更多内存)。
  • Windows还将每2小时检查一次无响应的连接。在16M连接时,大约每0.5毫秒发送一次。仅进行那些检查就会占用大量带宽。

1
@evilfred:临时端口用于传出TCP连接,这意味着客户端计算机在端口80上连接到您的Web服务器时将使用临时端口。正如Chris S所述,一旦建立该会话,Web服务器就可以建立另一个来自另一个客户端的端口80上的连接。另外,我认为他在试图详尽回答客户临时端口限制时提到了此问题,该客户临时端口限制不是您所关心的,而是客户所关心的。@克里斯·S:我希望我不要误解你在回答中的意思。
joeqwerty,2010年

1
因此,服务器在单个IP上可以支持的入站连接数没有真正的限制吗?如果共享目标端口,服务器如何知道将从客户端接收的数据发送到哪里?

1
我不在乎客户。

1
@evilfred:每个TCP会话都通过所谓的4元组(即客户端ip |客户端端口<>服务器ip |服务器端口)进行“托管”。这就是服务器在“共享”端口(例如Web服务器上的端口80)上管理每个会话之间的流量的方式。
joeqwerty,2010年

1
我知道。每个IP只有65k可能的服务器端口。因此,每个IP最多有65k个活动套接字。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.