Aumente o desempenho da rede por meio do TCP Window Scaling

O Protocolo de Controle de Transmissão (TCP) é um protocolo de rede orientado a fluxos, criado com base no Protocolo de Internet (IP). O TCP garante que os pacotes de rede sejam recebidos na ordem em que foram enviados, sem duplicação. Isso é feito por meio dos mecanismos internos do TCP de reconhecimento e retransmissão.

O TCP não exige que cada pacote IP seja confirmado antes de enviar o próximo. A quantidade de dados (pacotes IP) que pode estar em curso antes de ser confirmada pelo outro lado é chamada de "janela TCP". Originalmente, a janela TCP podia ter um tamanho máximo de 65.535 bytes. Mas o advento das redes modernas tornou esse limite impraticável.

Atualmente, os dados são transmitidos em uma velocidade muito maior do que quando o protocolo TCP foi inventado. Os dados que circulam em um data center podem facilmente atingir 100 GB/s, o que torna a pequena janela TCP um gargalo para a utilização eficiente da rede.

É por isso que o dimensionamento da janela TCP foi adicionado como uma extensão oficial do TCP na RFC 1323 em 1992. Essa extensão permite janelas TCP muito maiores, de até aproximadamente 1 GB de tamanho. Neste artigo, exploraremos como funciona o dimensionamento de janelas TCP, além de suas vantagens e desvantagens.

Entendendo as janelas TCP

Primeiro, vamos nos aprofundar um pouco mais nas janelas TCP e em como elas funcionam na prática.

Na verdade, há duas janelas TCP, uma para cada lado do fluxo. Um lado do fluxo mantém um "contador de envio" e um "contador de confirmação". O contador de envio conta quantos bytes foram enviados, enquanto o contador de confirmação informa ao outro lado quantos bytes foram recebidos. O outro lado da conexão TCP mantém os mesmos contadores. Ambos os contadores são campos de 32 bits incorporados nos cabeçalhos dos pacotes TCP.

O diagrama a seguir mostra o par da esquerda enviando 90 bytes em três pacotes e o par da direita confirmando o recebimento desses 90 bytes ao definir seu contador de confirmação como o número de sequência enviado pelo par da esquerda:

Como funcionam as janelas TCP Fig 1. Como funcionam as janelas TCP

No exemplo acima, a janela era de 90 bytes. Nas especificações originais do TCP, o número máximo de bytes que poderiam ser enviados sem receber uma confirmação era 65.535.

Por que as janelas TCP podem ser um gargalo?

No caso de uma rede rápida e confiável, o limite original da janela TCP é um grande gargalo. O tamanho máximo original da janela de 65.535 bytes se traduziria, em uma rede rápida de 100 GB/s, em cerca de 6 microssegundos de tráfego. Isso significa que o outro lado teria que confirmar os dados recebidos pelo menos a cada 6 microssegundos para utilizar totalmente a largura de banda de rede disponível.

Infelizmente, é improvável que isso aconteça devido ao curto período de tempo e porque o sistema operacional estará extremamente ocupado processando os dados recebidos e provavelmente não enviará confirmações em tempo hábil.

As transmissões geralmente são desiguais. Na maioria dos casos, um lado da conexão TCP atua como um cliente que envia uma consulta, e o outro lado responde com os dados. Portanto, na prática, em uma conexão TCP, a grande maioria dos dados flui unidirecionalmente, e o lado receptor terá de enviar pacotes vazios apenas para confirmar os dados recebidos, o que é ineficiente.

Para o tráfego intra-datacenter de alto volume, existem os quadros Ethernet jumbo. Eles podem transportar cerca de 9.000 bytes de dados, enquanto os quadros Ethernet comuns transportam cerca de 1.500 bytes. Com o uso de quadros jumbo, o limite da janela TCP pode ser atingido após apenas 7 pacotes. Novamente, a necessidade constante de confirmação do lado receptor tornará o tráfego da rede mais lento

Solução: Dimensionamento da janela TCP

O escalonamento de janela do TCP é uma extensão do TCP definida na RFC 1323. Ambas as partes negociam durante o estabelecimento da conexão com os dois primeiros pacotes que são trocados entre as duas partes. Esses dois pacotes têm o sinalizador TCP de "sincronização" definido (geralmente abreviado como sinalizador SYN). O dimensionamento da janela TCP é um multiplicador da janela TCP original. O multiplicador é uma potência de 2 e pode ir de 2^0 (ou seja, nenhuma alteração na janela TCP) a 2^14.

Se o pacote SYN inicial enviado pelo cliente incluir a extensão de escala da janela com uma escala de 0, isso permitirá que a outra parte negocie a escala da janela. Portanto, é aconselhável que, mesmo que o lado do cliente não queira aumentar o tamanho da janela TCP, ele ainda inclua uma extensão de escala de janela TCP nula para permitir que o lado do servidor negocie sua própria escala de janela TCP.

O tamanho máximo da janela TCP que pode ser alcançado usando o dimensionamento da janela TCP é para um fator de dimensionamento de 2^14=16.384, o que daria um tamanho de janela de 16.384 x 65.535 = 1.073.725.440 bytes, ou aproximadamente 1 GB. Deve-se observar que os contadores TCP têm 32 bits de tamanho, portanto, ainda podem ser usados sem alterações, pois podem conter um valor máximo de 4 GB.

Como ativar o dimensionamento da janela TCP no Linux

Se estiver executando o Linux, você poderá verificar se a extensão de dimensionamento da janela TCP está ativada executando o seguinte comando:

Isso mostrará "1" se estiver ativado, ou "0" se não estiver.

$ cat /proc/sys/net/ipv4/tcp_window_scaling 

Para ativar temporariamente o dimensionamento da janela TCP, execute o seguinte comando:

$ sysctl net.ipv4.tcp_window_scaling=1 

Veja como ativá-lo permanentemente:

 $ echo net.ipv4.tcp_window_scaling=1 \ > /etc/sysctl.d/50-tcp-window-scaling.conf \ && sysctl --system 

Quando o dimensionamento da janela TCP é uma má ideia

Os benefícios do escalonamento de janelas TCP parecem claros e você pode ficar tentado a ativá-lo em todos os lugares. No entanto, há circunstâncias em que o escalonamento de janelas TCP causará mais problemas do que os resolverá, especialmente quando a rede não for confiável ou for lenta.

Nesse caso, é melhor ter uma janela menor; caso contrário, haverá muitas retransmissões e o desempenho da conexão TCP poderá cair drasticamente, a ponto de a grande maioria do tráfego consistir em retransmissões. Considerando que a rede é lenta e/ou não confiável para começar, você pode entender que essa situação será prejudicial ao desempenho da conexão TCP.

Conclusão

Desde que a rede que você está usando seja confiável e o número de pacotes descartados ou atrasados seja baixo, ativar o dimensionamento da janela TCP é uma boa ideia e melhorará significativamente as taxas de transmissão. No entanto, você deve usar uma janela pequena em redes não confiáveis ou congestionadas para evitar que o TCP acione muitas retransmissões e congestione ainda mais a rede.

Was this article helpful?
Monitore seu ambiente Linux

Verifique a integridade e a disponibilidade de seus servidores Linux para obter desempenho ideal com a ferramenta de monitoramento Linux do Site24x7.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 "Learn" portal. Get paid for your writing.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 “Learn” portal. Get paid for your writing.

Apply Now
Write For Us