Comportamento estranho do medidor de progresso SSH / SCP

4

Eu tenho um comportamento SSH muito estranho e isso me deixa um pouco nervoso. Basicamente, o medidor de progresso é totalmente falso: tão falso que é quase inútil. E temo que possa haver algo mais acontecendo (mais sobre isso abaixo).

Basicamente eu só tenho um link de upload de 60 KB / s ou algo assim, mas cada scp que eu inicio começa dizendo que está fazendo 2 MB / s.

Em seguida, ele invariavelmente tenta "consertar" esse número, convergindo lentamente para o valor real.

Então, para arquivos "grandes" (alguns MB ou mais), ele invariavelmente fica em 100% por muitos segundos (e, eventualmente, é bem-sucedido e eu volto ao prompt).

A saída é assim:

...
test.tgz 16% 2112KB   2.1MB/s   00:04 ETA
test.tgz 17% 2208KB   1.7MB/s   00:06 ETA
test.tgz 18% 2320KB   1.2MB/s   00:08 ETA
test.tgz 19% 2448KB   1.1MB/s   00:08 ETA
test.tgz 20% 2576KB 942.2KB/s   00:10 ETA
test.tgz 21% 2704KB 697.3KB/s   00:14 ETA
test.tgz 22% 2832KB 576.3KB/s   00:16 ETA
test.tgz 23% 2960KB 478.3KB/s   00:20 ETA
test.tgz 24% 3088KB 399.0KB/s   00:23 ETA
test.tgz 25% 3216KB 334.7KB/s   00:27 ETA
test.tgz 26% 3344KB 282.6KB/s   00:32 ETA
test.tgz 27% 3472KB 240.4KB/s   00:37 ETA
test.tgz 28% 3600KB 185.6KB/s   00:48 ETA
test.tgz 29% 3728KB 161.9KB/s   00:54 ETA
test.tgz 30% 3856KB 142.7KB/s   01:01 ETA
...

(está em uma única linha: colei várias linhas aqui, o que usei com scp -vvv para explicar melhor o meu problema).

No final, quando a saída está invariavelmente parada em 100%, há muitos dados faltando: eu verifiquei isso na outra ponta e o arquivo definitivamente ainda não está lá na sua totalidade.

Todas as medições em porcentagem são basicamente inúteis: quando diz que 80% de um arquivo de 12 MB estão lá, há apenas cerca de 65% no servidor.

O que pode explicar isso?

Estou postando aqui porque fiquei imaginando como esses números seriam se um ataque man-in-the-middle estivesse acontecendo perto do meu sistema (talvez em um roteador comprometido ou algo assim).

Estou usando Linux e SSH / SCP há muitos anos e não me lembro de que esses números foram desativados.

EDITAR

O download funciona como esperado: se eu scp do host remoto para o meu computador, então o%, ETA e KB / s estão corretos.

    
por Cedric Martin 15.11.2013 / 00:51

1 resposta

8

Esse comportamento é facilmente explicado através do tamanho do buffer de saída e das configurações da janela TCP.

Primeiro, quando receber dados, você tem os bits ou não. O seu local scp sabe quanto está esperando e quanto recebeu até o momento, para que possa fornecer uma avaliação precisa do progresso e do tempo estimado restante.

Quando você envia dados , você não tem informações sobre quanto desses dados chegou ao receptor ainda. Sua máquina local terá um buffer de saída que armazena dados depois de ter sido "enviado" pelo aplicativo (scp) e antes de ser realmente transmitido na rede. Além disso, o TCP permite que uma certa quantidade de dados esteja "em trânsito" entre o remetente e o destinatário.

Ao enviar dados, scp só vê quanto foi transferido para o sistema operacional para eventual transmissão. O preenchimento dos buffers de saída acontece muito rapidamente, e é por isso que scp mede uma taxa de transmissão alta inicialmente. À medida que a transferência avança, esse valor converge para a taxa de transmissão real. Depois de ter entregado todos os dados para o seu sistema operacional, ele ainda tem que chegar ao outro lado e é por isso que parece estar "preso" a 100% por alguns segundos no final.

Os sistemas operacionais modernos e as redes TCP aumentaram o tamanho da janela TCP (consulte a opção de escala da janela TCP ) para contabilizar redes de gordura "com alta largura de banda e alta latência. É por isso que você pode estar vendo esse comportamento com mais frequência do que no passado.

    
por 15.11.2013 / 02:15