Otimizações de tráfego da web

Otimizações de tráfego da web

www.e.kth.se/~e94_rab/internetw.htmlpor Ralf Boström e94, 740327-0635

Introdução

Neste artigo, descreverei as mudanças que podem ser feitas para agilizar a transmissão de dados entre um servidor da Web e um cliente conectado por meio de um modem e se comunicar usando PPP pelo link serial.Muitos dos problemas que existem com o HTTP surgiram devido à má interação com o protocolo de transporte subjacente TCP. Isso ocorre porque o TCP foi originalmente desenvolvido para uso em aplicativos SMTP e NNTP e não se adaptou ao HTTP moderno. O comportamento do HTTP difere radicalmente dos outros protocolos. Uma das características mais distintas do HTTP é a alta frequência de solicitações e respostas enviadas entre o cliente e o servidor. Isso ocorre porque o cliente envia uma nova solicitação HTTP, que é seguida por uma resposta HTTP do servidor, assim que o usuário solicita um novo documento html, ou seja, segue um novo link. Uma vez que os documentos html são geralmente relativamente pequenos e o usuário pula rapidamente entre os diferentes links, torna-se bastante apertado entre as solicitações. É esse comportamento especial que faz com que o HTTP não funcione de forma muito eficiente em conjunto. Melhorias na interação entre os dois protocolos e, portanto, uma transferência de dados mais eficiente podem ser alcançadas por meio de alterações em HTTP e / ou TCP. Neste artigo, darei exemplos de mudanças em HTTP e TCP que levam a certas melhorias na transmissão de dados.

Modificações no início lento do TCP

Para garantir que todos os pacotes cheguem ao cliente a partir do servidor, a maioria dos protocolos de transporte usa uma tecnologia chamada “reconhecimento com retransmissão”. Isso significa que o remetente (servidor) deve receber a confirmação de que o destinatário (cliente) recebeu o pacote enviado antes que um novo pacote possa ser enviado. No entanto, é muito demorado deixar o transmissor constantemente inativo e aguardar a confirmação de cada pacote enviado. Portanto, o TCP usa uma tecnologia chamada “janelas deslizantes”. Enquanto o remetente aguarda a confirmação de que um pacote chegou ao receptor, ele envia novos pacotes. Quantos pacotes podem ser enviados antes que o primeiro pacote seja confirmado é chamado de tamanho da janela. Diz-se que os pacotes que atualmente podem ser enviados estão na janela. Depois de receber a confirmação da chegada de um pacote, um novo pacote é enviado do transmissor e outro pacote cabe na janela. A janela passa assim sobre os pacotes, o que deu origem ao nome de “janela deslizante”. Essa tecnologia evita o problema de o transmissor ficar inativo enquanto aguarda a confirmação e a transferência de dados se torna mais eficiente.

O TCP usa o chamado “início lento”, o que significa que o banco da janela é definido como 1. Em ocasiões especiais, ou seja, antes que um pacote possa ser enviado, o remetente deve ter recebido a confirmação de que o pacote anterior chegou ao destinatário.

O início lento ocorre em duas ocasiões: quando uma nova conexão TCP é estabelecida (por exemplo, quando o usuário segue um novo link em HTTP) ou quando nenhum dado foi transmitido por um certo tempo. Este último foi introduzido com vista ao NNTP. Em aplicações NNTP, a transferência de dados começa com uma fase de negociação em que o transmissor e o receptor concordam com certos parâmetros. Depois disso, a fase real de transferência de dados começa quando o próprio documento é enviado. Descobriu-se que a rede do lado do receptor era frequentemente inundada com dados ao entrar na fase de transferência de dados e, portanto, foi planejado que o tamanho da janela fosse definido como 1 ao passar entre as diferentes fases. Como a transição é caracterizada por uma interrupção de tempo na transmissão, o tamanho da janela foi definido para 2 quando não houve comunicação por um certo tempo.

No entanto, isso não funciona bem quando o TCP é usado por HTTP. Porque em aplicações HTTP, a transferência de dados é relativamente não contínua devido ao fato de que há uma interrupção na transferência de dados assim que o usuário pára em um documento html. Cada vez que o usuário segue um novo link, o tamanho da janela será definido como 1, o que reduz a velocidade de transferência.

Existem várias maneiras de contornar esse problema. Todos são baseados em mudanças no TCP. Uma solução é aumentar o tempo até que o tamanho da janela seja definido como 1. No entanto, isso acarreta o risco de que a rede do receptor ou os roteadores intermediários sejam inundados com dados. Outra solução não tão drástica e que não apresenta um risco tão grande de alagamento é reduzir gradativamente o tamanho da janela em caso de interrupção da comunicação. Uma terceira solução é não perder o tamanho da janela no caso de uma interrupção, mas em vez disso, perder a frequência de transmissão em pacotes para reduzir o risco de inundação.

Evite o algoritmo de Nagles

É ineficiente transferir pacotes muito pequenos porque quanto menores os pacotes enviados, a maior proporção das extremidades dos dados transferidos consistem em cabeçotes de pacote. Para evitar o envio de pacotes muito pequenos e agilizar a transferência de dados, o TCP usa algo chamado algoritmo de Nagle. Isso significa que o remetente espera para transmitir pacotes até que (1) a janela TCP esteja pelo menos metade cheia ou (2) o pacote transmitido mais recentemente seja confirmado pelo receptor. Isso pode levar a problemas na interação do TCP com o HTTP porque geralmente acontece, porque o usuário frequentemente solicita novos documentos, que o TCP só tem uma pequena parte de um documento html para transferir. Então, o transmissor deve esperar pela confirmação antes que o último bit de dados possa ser transmitido. Isso é particularmente lamentável quando o receptor está conectado via modem,

Conexões TCP de longa duração

O TCP abre uma nova conexão para cada solicitação feita pelo HTTP. Nos casos em que o novo documento está no mesmo servidor do anterior, este procedimento é obviamente supérfluo. Se você mantiver uma conexão TCP por mais tempo, poderá enviar várias solicitações pela mesma conexão. Isso evita o trabalho extra de abrir e fechar várias conexões TCP.

Buffer de soquete maior

Um problema é que o buffer de soquete às vezes não é grande o suficiente, o que significa que você não pode usar janelas TCP suficientemente grandes, o que, por sua vez, significa que você não pode fazer uso total da largura de banda dos fios. No entanto, isso não pode ser melhorado por alterações no HTTP, mas a alteração no tamanho do buffer de soquete deve ser feita no sistema operacional.

Compressão

Usar algum tipo de compactação pode reduzir a quantidade de dados enviados entre o cliente e o servidor. Isso, é claro, significa que menos pacotes também são enviados. Isso é especialmente benéfico nos casos em que o cliente está atrás de um modem com uma linha serial lenta, pois é uma vantagem poder transferir o mínimo de pacotes possível. Claro, levará mais tempo para compactar e descompactar os pacotes, mas isso é compensado pelo fato de que menos pacotes são enviados pela linha serial lenta.

Pipelining

O pipelining envolve permitir que o cliente compile várias solicitações HTTP em um buffer antes de enviá-las ao servidor. Se todos os documentos solicitados estiverem no mesmo servidor, essas solicitações podem ser enviadas pela mesma conexão TCP, evitando assim o tempo extra que leva para abrir novas conexões TCP. O buffer é esvaziado quando está cheio ou quando nenhuma nova solicitação é recebida por um determinado período de tempo. Uma alternativa é introduzir uma chamada solicitação NUMBER em HTTP. Isso deve fazer com que o servidor envie o documento solicitado, bem como todas as imagens nele incorporadas de uma vez. Obviamente, isso é mais eficiente do que enviar uma nova solicitação para cada imagem.

Resumo

Eu vim com várias sugestões diferentes para mudanças que podem melhorar a transferência de dados entre um servidor Web e um cliente. As alterações propostas se aplicam a HTTP e TCP. Duas dessas mudanças fornecem melhorias particularmente grandes nos casos em que o cliente está conectado por meio de um modem. Um é a compressão de dados , o que significa que você usa algum algoritmo para compressão de dados e, dessa forma, pode enviar menos pacotes, o que é muito vantajoso em relação a um link serial relativamente lento. A outra mudança que fornece melhorias particularmente importantes ao conectar um link serial é permitir que o TCP envie pacotes pequenos sem usar o algoritmo chamado algoritmo de Naglese normalmente usado em transmissões TCP. Também sugeri três outras mudanças que trazem a mesma melhoria na transferência de dados, independentemente de como o cliente e o servidor da Web estão conectados um ao outro. Pipelining , o que significa que você envia várias solicitações HTTP de uma vez em vez de uma por vez, é uma dessas mudanças. Outra são as ” conexões TCP de longa duração “, que significa que você mantém cada conexão TCP aberta por mais tempo antes de fechá-la para poder enviar várias solicitações HTTp pela mesma conexão TCP e não perder tempo abrindo uma nova. Conexão TCP para cada solicitação HTTP. Outra mudança que você pode fazer é modificar o início lento do TCP de diferentes maneiraspara evitar definir a janela TCP para 1 com cada nova solicitação HTTP. Por fim, sugeri que você aumentasse o buffer de soquete para poder usar janelas TCP maiores, o que pode ser uma vantagem se você se comunicar por meio de links com grande largura de banda.

October 9, 2020

0 responses on "Otimizações de tráfego da web"

Leave a Message

Your email address will not be published.

top
X