Por que o SSH se sente muito mais rápido que o HTTP?

3

Se eu ssh em um servidor, o tempo entre digamos, emitindo o comando ls e obtendo o resultado é quase nada.

No entanto, se eu emitir uma solicitação http para uma página html simples (contendo apenas a palavra 'hello') no mesmo servidor do navegador, levará pelo menos um segundo.

Por que isso acontece?

    
por Collierre 11.02.2014 / 00:41

4 respostas

9

Eu não sei muito sobre como o SSH funciona, mas pelo que entendi ele basicamente pega sua entrada de teclado e canaliza para o shell de um console remoto. Bastante leve, uma vez que a conexão tenha sido estabelecida e as chaves trocadas.

O HTTP é um protocolo totalmente diferente. Funciona um pouco assim, supondo que seja apenas uma página HTML estática:

  • Estabelecer sessão TCP / IP (isso pode envolver pesquisas de DNS)
  • Enviar cabeçalhos HTTP
  • Enviar corpo da solicitação HTTP (GET, POST, PUT, etc)
  • O servidor da Web recebe uma solicitação HTTP
  • O servidor da Web verifica seus mapeamentos de manipulador para descobrir como processar a solicitação
  • O servidor da Web seleciona o arquivo HTML estático
  • O servidor Web formula os cabeçalhos de resposta e os envia pelo fio
  • Servidor da Web envia o arquivo HTML estático para baixo da linha
  • Seu navegador recebe os cabeçalhos
  • Seu navegador da web recebe a resposta
  • Seu navegador aguarda a conexão ser encerrada
  • Seu navegador da Web analisa o HTML
  • Seu navegador da web renderiza o HTML para o monitor

Essa é uma visão geral bem básica, mas há muito mais que acontece no HTTP. Não é um protocolo "leve", diferente do SSH.

Além disso, ao contrário do SSH, a maioria das solicitações HTTP são independentes e suas conexões TCP são restabelecidas. O SSH mantém sua sessão TCP aberta, o que significa que toda vez que você pressiona uma tecla, você não precisa restabelecer a conexão. É por isso que seu navegador da Web pode sobreviver desconectado por alguns minutos, mas no momento em que você perde sua conexão, sua sessão SSH cai.

    
por 11.02.2014 / 00:52
9

Você está comparando maçãs com laranjas.

O tempo para você fazer o download da página da Web de uma palavra consiste principalmente no tempo necessário para realmente configurar a conexão: procurando o registro DNS do host e, em seguida, estabelecendo uma conexão TCP com ele, solicitando o documento .

Isto é mais comparável ao tempo que você leva para configurar uma conexão ssh: procurando o registro DNS para o host e então fazendo uma conexão TCP com ele, então autenticando, que é na verdade muito maior já que o ssh é muito protocolo mais complexo (e tem que configurar a criptografia).

Seu tempo de resposta interativo em uma sessão ssh é principalmente devido à quantidade de latência entre você e o servidor remoto, depois que a conexão é realmente estabelecida. Não existe um analógico um-a-um para isso em HTTP, embora o HTTP tenha uma opção keep-alive, que é ativada por padrão, e mantenha a conexão ao servidor aberta para que vários recursos possam ser baixados sem a sobrecarga de configuração do conexão novamente.

    
por 11.02.2014 / 00:50
8

Acabei de sincronizar uma conexão SSH e um wget.

$ time ssh (host) echo "" > /dev/null

real        0m0.461s
user        0m0.004s
sys         0m0.012s

$ time wget (host)

(deletia)
real        0m0.013s
user        0m0.008s
sys         0m0.000s

"Mais rápido" é relativo.

    
por 11.02.2014 / 00:56
0

Não se esqueça de que o SSH interativo configura a opção TCP NODELAY do soquete para reduzir a latência às custas da largura de banda usada, de modo que praticamente todas as teclas são enviadas para o servidor imediatamente.

    
por 11.02.2014 / 01:06