Qual é o número máximo de conexões TCP que posso ter no Windows Server 2008?


11

Eu gostaria de ter tantas conexões (conexões únicas de muitos clientes diferentes) quanto humanamente possível em um servidor executando no Windows Server 2008, a fim de oferecer suporte a um aplicativo no estilo Cometa. O aplicativo está escrito em C #. As conexões não serão tagarelas, elas só precisam estar abertas (e permanecer abertas). Comprar cargas de memória e CPUs rápidas não é um problema.

Pelo que sei, estarei limitado a 65k conexões abertas simultâneas por NIC - o número máximo de portas. Isso é preciso? Ou posso ir além de 65k conexões / NIC de alguma forma? Parece que existem pelo menos produtos de servidor para Linux que suportam centenas de milhares de conexões. Como eles fazem isso?

Respostas:


9

Você pode ir além das conexões de 65k; como você pode ter várias conexões por porta (uma vez aceito, o ouvinte pode se conectar a outro cliente). Uma extremidade ou a outra precisam ter alguma diferença, geralmente o cliente escolhe uma porta aleatória. Por padrão, o Windows está limitado a mais de 3000 dessas portas aleatórias; para que seu cliente típico atinja o máximo possível. No entanto, é possível configurar o cliente de maneira diferente, e muitos * nix são limitados a muito mais que o Windows.

Há uma configuração de registro limitando o número máximo de conexões para 16 milhões. Mas existem outros problemas mais práticos que normalmente o limitam a menos (você pode alterar o valor do registro).

  • O Windows ocupa cerca de 1 KB de RAM por conexão (cerca de 16 GB para conexões de 16 milhões); e seu aplicativo também precisará acompanhar suas conexões ativas de alguma forma (mais memória).
  • O Windows também verificará se há conexões não responsivas a cada 2 horas. Nas conexões de 16 milhões, isso ocorre a cada 0,5 ms; seria necessária uma largura de banda significativa apenas para fazer essas verificações.

1
@evilfred: portas efêmeras são para conexões TCP de saída, o que significa que uma máquina cliente usará uma porta efêmera quando se conectar ao servidor da web na porta 80. Como Chris S afirmou, uma vez que a sessão seja estabelecida, o servidor da web poderá estabelecer outra conexão na porta 80 de um cliente diferente. Além disso, acho que ele mencionou o limite da porta efêmera do cliente ao tentar ser exaustivo em sua resposta. Esse limite da porta efêmera do cliente não é sua preocupação, é a preocupação do cliente. @ Chris S: Espero não estar entendendo mal o que você quis dizer com sua resposta.
Joeqwerty

1
Portanto, não há limite real no número de conexões de entrada que um servidor pode suportar em um único IP? Como o servidor sabe para onde enviar os dados que recebe de um cliente se a porta de destino é compartilhada?

1
Eu não me importo com o cliente.

1
@evilfred: Cada sessão TCP é "gerenciada" através do que é chamado de 4-tupla, que é a porta do cliente ip | client <> server ip | server server. É assim que o servidor gerencia o tráfego entre cada sessão em uma porta "compartilhada", como a porta 80 em um servidor web.
joeqwerty

1
Eu sei disso. Existem apenas 65 mil portas de servidor possíveis por IP. Portanto, há um máximo de 65k soquetes ativos por IP.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.