Como evitar o TCP ZeroWindow ao gravar um arquivo grande em um compartilhamento do Windows?

4

Recebi acesso a um compartilhamento em um sistema Windows Server 2003 SP1 (10.a.bbb.ccc), que é um servidor de arquivos e impressoras, e arquivos regularmente grandes são copiados para esse compartilhamento. No entanto, ocasionalmente essa cópia falha. Ao reproduzir esse problema usando o Robocopy (em 10.xxx.yy.zzz), recebo algo como

 70.4%
2013/07/31 11:20:21 ERROR 64 (0x00000040) Copying File <<file name removed>>
The specified network name is no longer available.

Waiting 30 seconds... Retrying...
         New File          105.2 m   <<file name removed>>
  0.0%

dumpcap + Wireshark mostram que quando isso acontece, no meio da cópia, de repente, o servidor não aceita mais nenhum dado na porta TCP 445, definindo o tamanho da janela para zero:

No.     Time           Source                Destination           Protocol Length Info
   7303 5.841186000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7304 6.149715000    10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7305 6.150137000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7306 6.749711000    10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7307 6.750087000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7308 7.946779000    10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7309 7.947130000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7310 10.349783000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7311 10.350201000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7312 15.149910000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7313 15.150283000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7314 24.747096000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7315 24.756210000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7316 43.958531000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7317 43.958863000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7318 75.216401000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      54     57918 > microsoft-ds [RST, ACK] Seq=6973070 Ack=10864 Win=0 Len=0
   7319 75.225543000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      66     55972 > microsoft-ds [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
   7320 75.225933000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      66     microsoft-ds > 55972 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460 WS=1 SACK_PERM=1

Então, após 70 segundos, o cliente (aqui: Robocopy) encerra.

Minha pergunta: Esse é um problema conhecido com os compartilhamentos do Windows? O que pode ser investigado / depurado / rastreado no servidor de arquivos? Existem configurações específicas que precisamos analisar ou experimentar?

Obrigado antecipadamente!

    
por Marnix Klooster 31.07.2013 / 22:19

3 respostas

3

Concordo com @suprjami e gostaria de oferecer essa possível avenida de exploração: em vez de os discos do servidor serem muito lentos , considere que eles podem estar falhando (congelamentos típicos de discos rígidos por cerca de 8 segundos por clusters defeituosos lidos), severamente fragmentados, ficando sem espaço (causando fragmentação severa e muita movimentação de discos), ou você pode ter uma tarefa sobrecarregada com a CPU ou ligada a disco na máquina, deixando todo o resto sem rede, incluindo rede e disco. subsistemas. Eu recomendo verificar o Visualizador de Eventos do servidor para erros de disco e puxar o Gerenciador de Tarefas ou o Process Explorer com algumas colunas para mostrar falhas de página, uso da CPU e bytes de leitura e escrita e ver o que os números estão fazendo.

Dado que ZeroWindow é um sintoma do buffer de recebimento TCP estar cheio, estou disposto a apostar que o problema é algo que consome 100% da CPU no servidor ou algo que causa tráfego de rede excessivamente excessivo no servidor e bloqueia tudo.

Uma outra possibilidade é bufferbloat na implementação TCP de um dispositivo intermediário, se esse dispositivo estiver modificando os pacotes que ele transmite de alguma forma (ou seja, NAT). As suas transferências aumentam e diminuem na taxa de transferência, por acaso?

    
por 04.08.2013 / 18:11
0

Antes de olhar para os parâmetros de ajuste TCP (você pode ajustar a pilha TCP no Windows, mas 99,9% das vezes, o dimensionamento automático funciona bem), você poderia dar um pouco mais de fundo? por exemplo: qual é a especificação do servidor de recebimento, são cliente e servidor na mesma rede da camada 2, em que velocidade estão as NICs sendo executadas, etc.

Além disso, vale a pena experimentar com o parâmetro ROBOCOPY / IPG, talvez os parâmetros / R: e / W: (repetir e esperar)?

    
por 31.07.2013 / 22:48
0

Janela TCP Zero significa que o host de recebimento é sobrecarregado. Ele disse ao host remetente para parar de enviar dados, já que ele precisa de algum tempo para processar o que já tem.

Parece que os discos no servidor estão muito lentos, e o cliente eventualmente desiste e desconecta a conexão.

Diminua a velocidade da transferência conforme ela sai do cliente ou coloque discos mais rápidos no servidor.

    
por 03.08.2013 / 00:02