:: Melhorando a Performance TCPIP do Windows

Provavelmente não é isto

Se você está lendo este texto, possivelmente não é isso que procura, mas sim como permitir que dez ou mais máquinas se conectem a uma máquina (comum ou servidor, mas de um jeito ou doutro estará atuando como um) compartilhando arquivos. Portanto se você quer saber como aumentar a quantidade de máquinas que podem acesssar uma outra que compartilha arquivos numa rede Windows, provavelmente este outro texto será útil: No more than 10 concurrent connections to a remote computer.

Para Windows Vista 64 ou 32 bits

A maior parte deste artigo não se aplica ao Windows Vista, somente a versões anteriores do Windows, como Windows 2000 ou Windows XP, incluindo SP2.

Se você usa o Windows Vista e deseja hackear seu TCPIP.sys, utilize este artigo: 64-bit (x64) Windows Vista SP1 (6001.1800) tcpip.sys Auto Patcher to Fix Event ID 4226 and Unlock Increase Maximum Connections Allowed. De qualquer forma, posso falar que o ganho de desempenho é ridículo. Por exemplo, usando o Absurdu's Port Scan, o desempenho antes do patch era de 0,5 conexões por segundo e após o patch do TCPIP.sys, passou a ser de 2,9 conexões por segundo... Em resumo: se quer desempenho TCP, use o Windows 2000 ou Linux!

Certo. Agora o que realmente eu escrevi

O Problema e as Soluções

Se você utiliza ferramentas de segurança, programas peer-to-peer (Kazaa, eMule, Sharezaa, Limewire), gerenciadores de download, servidores de jogos ou simplesmente navega pela Internet com dezenas de janelas abertas (eu faço!), você pode necessitar de mais performance. E se você utiliza o Windows XP Service Pack 2, então realmente você precisa melhorar a performance do seu OS. Com base em minha própria experiência trarei algumas dicas simples que vocês podem estar implementando.

Antes de outra coisa, quero avisá-los que as alterações que eu aqui indico, podem comprometer seriamente seu sistema operacional. Não há garantia de sucesso e você deve assumir toda e qualquer responsabilidade pelo uso das informações aqui contidas. Eu sugiro que você não use um sistema de produção, pois como disse antes, podem haver danos.
Bem, após os avisos legais de sempre... bla, bla, bla... vamos ao que interessa: às dicas.

As dicas estão divididas em:

Teste de Desempenho

Faça um teste de desempenho rodando o Absurdu's PortScan - scanner de portas TCP/IP.
Este PortScan pode criar até milhares de threads, cada uma com sua própria conexão, rodando todas simultaneamente. Com ele fica fácil saber se você está tendo um bom desempenho ou não. Se as suas conexões tipo half estiverem severamente limitadas (é o caso do WinXPSP2) ou se sua configuração TCP/IP estiver inadequada ele terá um desempenho horrível. Neste caso, pode ser necessário sintonizar suas configurações TCP/IP e/ou aplicar patcher no TCPIP.SYS, rebootar a máquina e em seguida rodá-lo novamente para testar a performance.

Antes de rodar o PortScan será necessário configurá-lo. Eu sugiro que use os seguintes valores: Threads=70 e TimeOut=1000. Esses valores são para teste com banda larga, a partir de 256Kbs. Se você utiliza conexão discada de 56Kbs ou menos, esses valores possivelmente não serão adequados. Neste caso, sugiro que você experimente valores menores e compare seu desempenho com o de outros usuários. Se você descobrir os valores ideiais para sua conexão, nos ajude postando um comentário neste artigo com a configuração que usou.


O Absurdu's PortScan é bem simples. Ele escaneia todos os hosts subsequentes a partir do IP inicial até ser interrompido. Na atual versão este port scanner só escaneia uma única porta por host. Eu sugiro que escaneie em busca por uma das seguintes portas:

  • 21 - FTP
  • 25 - SMTP
  • 80 - HTTP
  • 110 - POP3
  • 138 - Netbios
  • 443 - HTTP SSL
  • 1443 - MS SQL Server
  • 3050 - Interbase \ Firebird

Rode o PortScan e verifique quantas conexões ele está fazendo por segundo, ele exibe o número de conexões por segundo na barra de status .
Compare o seu desempenho com o tabela abaixo:
WindowsProcessador
RAM
Modem
Modo
Conexão
Kbs
TCP/IPThreads
Timeout
con
/s
XP Pro SP2AthlonXP 2200+ 1GB
Alcatel Speed Touch Pro Bridge
400/200Inalterado70
1000
5
XP Pro SP2AthlonXP 2200+ 1GB
Alcatel Speed Touch Pro Bridge
400/200Patched + Otimizado70
1000
65
XP Pro SP2AthlonXP 2200+ 1GB
Alcatel Speed Touch Pro Bridge
400/200Patched + Otimizado125
1000
120
2K Server SP4Pentium III 500Mhz 392MB
Alcatel Speed Touch Pro Bridge
400/200Otimizado70
1000
64
2K Server SP4Pentium III 500Mhz 392MB
Alcatel Speed Touch Pro Bridge
400/200Otimizado125
1000
113
2K Pro SP4AthlonXP 1800+ 512MB
DLink DSL 500G Router
1500/256Inalterado125
1000
122
2K Pro SP4AthlonXP 1800+ 512MB
DLink DSL 500G Router
1500/256Inalterado70
1000
69
2K Pro SP4AthlonXP 1800+ 512MB
DLink DSL 500G Router
1500/256Inalterado300
1000
285
XP Pro SP2P IV 3.2GHz 1500MB
DLink DSL 500G Router
1500/256Unpachted + Otimizado70
1000
<2
XP Pro SP2P IV 3.2GHz 1500MB
DLink DSL 500G Router
1500/256Pachted + Otimizado70
1000
69
XP Pro SP2P IV 3.2GHz 1500MB
DLink DSL 500G Router
1500/256Pachted + Otimizado125
1000
35
XP Pro SP2P IV 3.2GHz 1500MB
DLink DSL 500G Bridge
1500/256Pachted + Otimizado300
1000
290
XP Pro SP1P IV 1.6GHz 256MB (Laptop)
DLink DSL 500G Router
1500/256Inalterado70
1000
68
XP Pro SP1P IV 1.6GHz 256MB (Laptop)
DLink DSL 500G Router
1500/256Inalterado125
1000
120
Server 2003Pentium III 550MHz 392MB
DLink DSL 500G Router
1500/256Inalterado70
1000
62
Server 2003Pentium III 550MHz 392MB
DLink DSL 500G Router
1500/256Inalterado125
1000
110

Veja que o fator que mais determina a velocidade é a otimização do TCPIP, assunto do qual tratamos aqui. Repare também que servidores Windows normalmente não tem restrição quanto ao número de conexões TCP tipo half. Isto faz sentido, pois os servidores necessitam de desempenho superior e geralmente são administrados por técnicos especificos - o que evita a contaminação do servidor e alastramento de vírus para a rede, ou ao menos, diminui.

Caso o desempenho do PortScan fique menor que 10 conexões por segundo e você use banda larga, sua máquina possivelmente está com a limitação do número de conexões TCP tipo half e você precisa rodar o patch. Caso você já tenha aplicado o patch (e reiniciado o computador, claro) e o problema continua, leia a seção "Otimizando o TCP do Windows" e "MODEM ADSL: Modo Router x Bridge".
Faça então as alterações e (após rebootar a máquina, claro) rode novamente o PortScan. Compare então o desempenho com o anterior às alterações. Se tudo ocorreu bem, você perceberá uma grande melhora.

Otimizando o TCP do Windows

A Microsoft foi muito criticada quando do lançamento do Windows 2000, pois ele permitia que um número quase indefinido de conexões fossem simultaneamente abertas. Isso ajudava as pragas digitais a se propagarem com uma alta velocidade. Em resposta a Microsoft lançou o service pack 2 do Windows XP (tarde, não?) com uma limitação embutida de no máximo dez conexões que podem estar simultaneamente no estado de "conectando". Apesar dessa medida ajudar a restringir a propagação de worms e outras pragas, ela prejudica aos usuários que usam determinados tipos de programas. Sintomas dessa limitação é: demora para baixar e encontrar fontes de download em programas de compartilhamento de arquivo, baixo desempenho quando usando ferramentas de segurança de rede, como PortScanner e uma demora anormal para abrir muitas páginas simultaneamente. Não tenho informação se a Microsoft procurou atualizar outras versões do Windows com essa limitação, pode ser que sim. Na dúvida eu sugiro que você siga os procedimentos que descrevo na seção Patching TCPIP.SYS.

As recomendações que farei a seguir, serão baseadas nos seguintes documentos:

Primeiro faremos algumas alterações na registry do Windows. Note que a maioria dessas alterações são para usuários de banda larga. Você deve saber como usar a registry para que possa fazer essas alterações. Se você não souber, é presumível que você pode potencialmente causar danos ao registro do Windows; neste caso, não faça essas alterações.
Modifique ou crie, se não houver, os seguintes parâmetros:
Chave: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Tcpip\Parameters
NomeTipoValorDescrição
GlobalMaxTcpWindowSizeDWORD131400Junto com TcpWindowSize controla o tamanho máximo do buffer de recepção TCP. Valores grandes, como o indicado aqui, beneficiam diretamente redes de 100Mbs ou superior, mas se combinado com o parâmetro Tcp1323Opts força o Windows a adotar um algoritmo melhorado de escala automática do tamanho do buffer. Com estes três parâmetros combinados e com os valores indicados aqui, o Windows gastará mais memória por conexão TCP efetuada, mas também estará propenso a ter uma melhor performance.
Tcp1323OptsDWORD3
MaxUserPortsDWORD65534Número máximo de portas que estão disponíveis para às aplicações.
TcpTimedWaitDelayDWORD30Tempo que uma conexão permanece retendo seus recursos após ser encerrada.

Caso não deseje fazer as modificações manualmente, você pode usar este utilitário: DrTCP.

Patching TCPIP.SYS

O Windows XP SP2 é uma carroça para determinados usos envolvendo os programas que cito anteriormente. Isso porque ele vem com uma limitação da quantidade de conexões que podem estar simultaneamente em estado de "conectando". O limite imposto pela Microsoft é de no máximo 10 conexões. Essa limitação está gravada diretamente no código do driver TCPIP.SYS e não há como ser alterada via registry. Felizmente algum cristão (ou não, vai saber...) fez um patcher para o TCPIP.SYS que permite modificar este limite. Eu mesmo estou usando o patch e é surpreendente a diferença após aplicá-lo. Eu aumentei meu limite para 1000 conexões :), mas você pode alterá-lo para 100 conexões que já será suficiente para ter melhorias na maior parte das aplicações.

Apesar desse problema ser bem conhecido para WinXPSP2, ele pode também afetar outras versões do Windows. Portanto pode valer a pena rodar o patch em seu micro, também.
Se você quer somente conferir se seu computador tem ou não a limitação, o patcher também pode ser usado para isto. Basta rodá-lo e ele irá informá-lo se há necessidade de aplicá-lo. Ele, também, o informará se há a limitação e se houver, qual é o limite atual do número de conexões tipo half.

O patcher pode ser baixado do site de seu autor em: http://www.lvllord.de. Após baixá-lo, execute-o, aumente o limite para algo maior que 10, pode ser 100, e em seguida, ignore o aviso do Windows que surgirá (clique cancelar na janela de aviso do Windows), dê um reboot na máquina. Após o reboot, se tudo ocorreu bem, você estará com o novo limite de conexões tipo "half".
Se você precisar de informações mais detalhadas acerca do patcher, leia o artigo "Ultrapassando o limite de 10 conexões TCP/IP do Windows XP sp2".

É importante ressaltar que se sua máquina for contaminada por um worm ou alguma outra praga digital, o mal poderá se alastrar com grande rapidez pela rede, tanto em sua lan, quanto para a Internet. Portanto, tenha responsabilidade ;)

MODEM ADSL: Modo Router x Bridge

Eu sempre usei meu MODEM ADSL, um Alcatel Speed Touch Pro, em modo router, e contra-vontade, sempre convivi com algumas limitações dele. Nos aspectos gerais, ele é um bom MODEM. No entanto, para usuários com necessidades mais exigentes, como é meu caso, ele tem algumas características negativas. Por exemplo:

  • Não há forma de mapear uma faixa de portas no NAT;
  • O número de mapeamentos que posso fazer é limitado a 32;
  • Há um número máximo de 255 conexões que podem estar simultaneamente estabelecidas.
    Programas que abrem muitas conexões, ou mesmo muitas páginas abertas no navegador da web, podem rapidamente esgotar o número de conexões disponíveis. A partir do ponto que o MODEM não pode efetuar mais conexões, ele passa a negá-las. E para conexões de entrada, estas são encaminhadas para o servidor do MODEM, como por exemplo, conexões HTTP, FTP e Telnet. Imagine como é lindo o usuário tentar acessar sua página e ao invés de ver a sua página, ver uma tela de logon do seu MODEM ADSL...
  • Mesmo após uma conexão ser encerrada, ela permanece durante muito tempo alocando recursos do MODEM. O que gera um terrível desempenho em programas como o eMule;
A solução que encontrei foi usar o modo bridge, pois segundo o manual do MODEM, neste modo não há interferência do MODEM nos pacotes que transitam por ele. O mesmo não ocorre quando o NAT do MODEM está habilitado.

Ao mudar a configuração do MODEM para bridge, eu obtive uma performance superior com vários dos programas que antes tinha problema, incluindo o eMule e o PortScan. Portanto, se você está tendo problemas de performance, já tentou tudo que indico acima, não encontrou solução e seu MODEM usa o modo router, tente mudar para o modo bridge. Pode ser que você também seja beneficiado. O modo router consume muitos recursos do MODEM e em geral a maioria dos MODEMs com recursos de router vêm dimensionados para o usuário comum que tem poucas exigências de performance. Já em modo bridge, o MODEM apenas funciona como uma ponte entre seu computador e o provedor de Internet. Ele não tem que lidar diretamente com o tipo ou o contéudo dos pacotes, inclusive a maioria dos MODEMs em modo bridge são independentes do protocolo IP. Transportam qualquer tipo de protocolo. O mesmo não acontece em modo router...

Se após tentar todas essas sugestões você ainda estiver com problemas de performance em sua conexão TCP/IP, eu sugiro que procure um técnico especializado ou busque suporte com seu provedor de Internet.
Ah, sim. E claro:
Muita sorte para você!

Este artigo foi escrito com a gentil e paciente colaboração de Daniel Alejandro Salinas.
Valeu Daniel!