O problema
Nota: Primeiro eu gostaria de entender por que isso está acontecendo. Claro, uma solução seria legal também. :)
Ao fazer o download de um arquivo grande via HTTP em alta velocidade, meu tráfego sem fio basicamente pára: não consigo abrir páginas da web e o download em si é pausado. Ele faz uma pausa praticamente imediatamente depois de iniciá-lo; às vezes em 800 KB, às vezes em alguns MB. Após algum tempo, o download (e outro tráfego) é retomado, mas o problema continua ocorrendo durante o mesmo download.
O problema não ocorre ao usar uma conexão com fio através do mesmo roteador (Linskys WRT120N). Observe também que a conexão é não descartada quando isso acontece. É só que o tráfego pára e eu não posso navegar para páginas web, etc (pacotes SYN são enviados, mas nada é recebido, etc.)
A inspeção com o Wireshark mostra o seguinte:
- O servidor envia pacotes de dados que são reconhecidos pelo cliente
- O servidor envia um pacote, mas o SEQ indica que alguns pacotes foram perdidos (6 pacotes em uma ocorrência).
- O servidor envia mais alguns pacotes e o cliente os reconhece usando "confirmação seletiva"
- O servidor pára de enviar dados por um tempo (como os pacotes perdidos não foram confirmados ou , o roteador parou de encaminhá-los?)
- Eventualmente, o servidor faz uma "retransmissão" e o tráfego continua normalmente.
Isso tudo parece normal para mim quando ocorre perda de pacotes. É a perda consistente de pacotes em um download grande e de alta velocidade que me intriga.
O que pode causar isso?
Minha idéia é a seguinte: Minha Internet é muito rápida (100 mbps), então ao iniciar um download de arquivos grandes, o roteador armazena os dados de entrada (desde que o wireless apresenta um ligeiro atraso / menor velocidade, em parte devido a outras redes), mas o buffer transborda e o roteador descarta pacotes para regular o tráfego (e porque não tem escolha).
Mas como isso pode acontecer? O tamanho da janela TCP não limita a quantidade de dados que podem não ser reconhecidos? Então, como o buffer do roteador pode estourar se houver apenas 64 KB esperando para ser reconhecido?
Observação: desativei o dimensionamento da janela TCP e o tamanho da janela dinâmica por meio das opções netsh
, na tentativa de corrigir isso, mas isso não parece importar.
Além disso, o Wireshark mostra um padrão do servidor enviando 2 pacotes (de 1514 bytes) e o cliente enviando um ACK, isso exclui um possível estouro de buffer? E mais alguns pacotes subsequentes são recebidos ...
Eu estou perdido aqui. Obrigado por qualquer insight.
Coisas que (provavelmente) NÃO são a causa / experimentei
- O navegador
- Várias opções de TCP no Windows 7 (
netsh
etc.)
- Configurações do roteador, como MTU, intervalo de beacon, UPnP, ...