Verifique a integridade e a disponibilidade de seus servidores Linux para obter desempenho ideal com a ferramenta de monitoramento Linux do Site24x7.
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.
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:
Fig 1. Como funcionam as janelas TCPNo 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.
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
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.
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
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.
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.
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