Arma secreta do TCP: Controle de fluxo de rede e controle de congestionamento da rede

Transporte de confiabilidade do TCP
Todos estamos familiarizados com o protocolo TCP como um protocolo de transporte confiável, mas como isso garante a confiabilidade do transporte?

Para obter transmissão confiável, muitos fatores precisam ser considerados, como corrupção de dados, perda, duplicação e fragmentos fora de ordem. Se esses problemas não puderem ser resolvidos, a transmissão confiável não poderá ser alcançada.

Portanto, o TCP emprega mecanismos como número de sequência, resposta de reconhecimento, controle de controle, gerenciamento de conexões e controle de janelas para obter transmissão confiável.

Neste artigo, focaremos na janela deslizante, controle de fluxo e controle de congestionamento do TCP. O mecanismo de retransmissão é coberto separadamente na próxima seção.

Controle de fluxo de rede
Controle de fluxo de rede ou conhecido como controle de tráfego de rede é na verdade uma manifestação da relação sutil entre produtores e consumidores. Você provavelmente se deparou muito com esse cenário no trabalho ou em entrevistas. Se a capacidade do produtor de produzir muito exceder a capacidade do consumidor de consumir, isso fará com que a fila cresça indefinidamente. Em um caso mais sério, você pode saber que, quando as mensagens do RabbitMQ se acumulam demais, isso pode causar degradação de desempenho de todo o servidor MQ. O mesmo vale para o TCP; Se não forem controlados, muitas mensagens serão colocadas na rede, e os consumidores excederão sua capacidade, enquanto os produtores continuarão enviando mensagens duplicadas, o que afetará bastante o desempenho da rede.

Para abordar esse fenômeno, o TCP fornece um mecanismo para o remetente para controlar a quantidade de dados enviados com base na capacidade de recepção real do receptor, conhecida como controle de fluxo. O receptor mantém uma janela de recebimento, enquanto o remetente mantém uma janela de envio. Deve -se notar que essas janelas são apenas para uma única conexão TCP e nem todas as conexões compartilham uma janela.

O TCP fornece controle de fluxo usando uma variável para uma janela de recebimento. A janela de recebimento fornece ao remetente uma indicação de quanto espaço de cache ainda está disponível. O remetente controla a quantidade de dados enviados de acordo com a capacidade de aceitação real do receptor.

O host receptor notifica o remetente do tamanho dos dados que pode receber, e o remetente envia esse limite. Este limite é o tamanho da janela, lembra -se do cabeçalho do TCP? Há um campo de janela de recebimento, usado para indicar o número de bytes que o receptor pode ou disposto a receber.

O host do remetente enviará periodicamente um pacote de sonda de janela, usado para detectar se o host receptor ainda pode aceitar dados. Quando o buffer do receptor corre o risco de transbordar, o tamanho da janela é definido como um valor menor para instruir o remetente para controlar a quantidade de dados enviados.

Aqui está um diagrama de controle de fluxo de rede:

Controle de tráfego

Controle de congestionamento da rede
Antes de introduzir o controle de congestionamento, precisamos entender que, além da janela de recebimento e da janela de envio, também há uma janela de congestionamento, que é usada principalmente para resolver o problema de que taxa o remetente começa a enviar dados para a janela de recebimento. Portanto, a janela de congestionamento também é mantida pelo remetente do TCP. Precisamos de um algoritmo para decidir quanta dados é apropriada para enviar, pois o envio de poucos ou muitos dados não é ideal, daí o conceito de uma janela de congestionamento.

No controle de fluxo de rede anterior, o que evitamos foi o remetente preenchendo o cache do receptor com dados, mas não sabíamos o que estava acontecendo na rede. Normalmente, as redes de computadores estão em um ambiente compartilhado. Como resultado, pode haver congestionamento da rede devido à comunicação entre outros hosts.

Quando a rede estiver congestionada, se um grande número de pacotes forem enviados, poderá causar problemas como atraso e perda de pacotes. Nesse ponto, o TCP retransmitirá os dados, mas a retransmissão aumentará a carga na rede, resultando em atrasos maiores e mais perdas de pacotes. Isso pode entrar em um ciclo vicioso e continuar aumentando.

Assim, o TCP não pode ignorar o que está acontecendo na rede. Quando a rede está congestionada, o TCP se sacrifica, reduzindo a quantidade de dados que ele envia.

Portanto, é proposto o controle de congestionamento, que visa evitar preencher toda a rede com dados do remetente. Para regular a quantidade de dados que o remetente deve enviar, o TCP define um conceito chamado janela de congestionamento. O algoritmo de controle de congestionamento ajustará o tamanho da janela de congestionamento de acordo com o grau de congestionamento da rede, de modo a controlar a quantidade de dados enviados pelo remetente.

O que é uma janela de congestionamento? O que isso tem a ver com a janela de envio?

A janela de congestionamento é uma variável de estado mantida pelo remetente que determina a quantidade de dados que o remetente pode enviar. A janela de congestionamento muda dinamicamente de acordo com o nível de congestionamento da rede.

A janela de envio é um tamanho de janela acordado entre o remetente e o destinatário que indica a quantidade de dados que o receptor pode receber. A janela de congestionamento e a janela de envio estão relacionadas; A janela de envio é geralmente igual ao mínimo das janelas de congestionamento e recebimento, ou seja, SWND = min (CWND, RWND).

A janela de congestionamento CWND muda da seguinte forma:

Se não houver congestionamento na rede, ou seja, nenhum tempo limite de retransmissão ocorre, a janela de congestionamento aumenta.

Se houver congestionamento na rede, a janela de congestionamento diminuirá.

O remetente determina se a rede está congestionada observando se o pacote de reconhecimento da ACK é recebido dentro do tempo especificado. Se o remetente não receber o pacote de reconhecimento da ACK dentro do tempo especificado, considera -se que a rede está congestionada.

Além da janela de congestionamento, é hora de discutir o algoritmo de controle de congestionamento do TCP. O algoritmo de controle de congestionamento do TCP consiste em três peças principais:

Início lento:Inicialmente, a janela de congestionamento do CWND é relativamente pequena e o remetente aumenta a janela de congestionamento exponencialmente para se adaptar rapidamente à capacidade da rede.
Evitação de congestionamento:Após a janela de congestionamento exceder um certo limite, o remetente aumenta a janela de congestionamento de maneira linear para diminuir a taxa de crescimento da janela de congestionamento e evitar sobrecarregar a rede.
Recuperação rápida:Se ocorrer congestionamento, o remetente reduz pela metade a janela de congestionamento e entra no estado de recuperação rápido para determinar a localização da recuperação da rede através do ACKS duplicado recebido e continua a aumentar a janela de congestionamento.

Início lento
Quando uma conexão TCP é estabelecida, a janela de congestionamento CWND é inicialmente definida como um valor mínimo de MSS (tamanho máximo do segmento). Dessa forma, a taxa de envio inicial é sobre o MSS/RTT Bytes/Second. A largura de banda disponível real é geralmente muito maior que o MSS/RTT, então o TCP deseja encontrar a taxa de envio ideal, que pode ser alcançada por meio de partida lenta.

No processo de partida lenta, o valor da janela de congestionamento CWND será inicializado em 1 MSS e, cada vez que o segmento de pacotes transmitido é reconhecido, o valor do CWND será aumentado por um MSS, ou seja, o valor do CWND se tornará 2 MSS. Depois disso, o valor do CWND é dobrado para cada transmissão bem -sucedida de um segmento de pacotes e assim por diante. O processo de crescimento específico é mostrado na figura a seguir.

 Controle de congestionamento da rede

No entanto, a taxa de envio nem sempre pode crescer; O crescimento tem que terminar em algum momento. Então, quando o aumento da taxa de envio termina? O Slow-Start normalmente termina o aumento da taxa de envio de uma das várias maneiras:

A primeira maneira é o caso da perda de pacotes durante o processo de envio de início lento. Quando ocorre uma perda de pacotes, o TCP define a janela de congestionamento do remetente CWND para 1 e reinicia o processo de partida lenta. Neste ponto, é introduzido um conceito de limite de início lento SSTHHREH, cujo valor inicial é metade do valor do CWND que gera perda de pacotes. Ou seja, quando o congestionamento é detectado, o valor do SSTHREH é metade do valor da janela.

A segunda maneira é correlacionar-se diretamente com o valor do limite de partida lenta SSTHRESH. Como o valor do SSTHREH é metade do valor da janela quando o congestionamento é detectado, a perda de pacotes pode ocorrer com cada duplicação quando o CWND é maior que o ssThresh. Portanto, é melhor definir o CWND como SSTHREH, o que fará com que o TCP mude para o modo de controle de congestionamento e termine a partida lenta.

A última maneira que o início lento pode terminar é se três ACKs redundantes forem detectados, o TCP executa uma retransmissão rápida e entra no estado de recuperação. (Se não estiver claro por que existem três pacotes ACK, ele será explicado separadamente no mecanismo de retransmissão.)

Evitação de congestionamento
Quando o TCP entra no estado de controle de congestionamento, o CWND é definido como metade do limite de congestionamento SSTHRESH. Isso significa que o valor do CWND não pode ser dobrado toda vez que um segmento de pacotes é recebido. Em vez disso, é adotada uma abordagem relativamente conservadora, na qual o valor do CWND é aumentado em apenas um MSS (comprimento máximo do segmento de pacotes) após a conclusão de cada transmissão. Por exemplo, mesmo que 10 segmentos de pacotes sejam reconhecidos, o valor do CWND só aumentará em um MSS. Este é um modelo de crescimento linear e também tem um limite superior no crescimento. Quando ocorre a perda de pacotes, o valor do CWND é alterado para um MSS e o valor do SSTHREH é definido como metade do CWND. Ou também interromperá o crescimento do MSS quando 3 respostas redundantes do ACK forem recebidas. Se três ACKs redundantes ainda forem recebidos após a metade do valor do CWND, o valor do SSTHREH é registrado como metade do valor do CWND e o estado de recuperação rápido será inserido.

Recuperação rápida
No estado de recuperação rápida, o valor da janela de congestionamento CWND é aumentado por um MSS para cada ACK redundante recebido, ou seja, ACK que não chega em sequência. Isso é para usar os segmentos de pacotes que foram transmitidos com sucesso na rede para melhorar a eficiência da transmissão o máximo possível.

Quando um ACK do segmento de pacotes perdidos chega, o TCP diminui o valor do CWND e depois entra no estado de prevenção de congestionamento. Isso é para controlar o tamanho da janela de congestionamento e evitar aumentar ainda mais o congestionamento da rede.

Se ocorrer um tempo limite após o estado de controle de congestionamento, a condição da rede se tornará mais grave e o TCP migra do estado de prevenção de congestionamento para o estado de partida lenta. Nesse caso, o valor da janela de congestionamento CWND é definido como 1 MSS, o comprimento máximo do segmento de pacotes e o valor do limite de partida lenta SSTHRESH é definida como metade do CWND. O objetivo disso é aumentar novamente o tamanho da janela de congestionamento depois que a rede se recuperar para equilibrar a taxa de transmissão e o grau de congestionamento da rede.

Resumo
Como um protocolo de transporte confiável, o TCP implementa o transporte confiável por número de sequência, reconhecimento, controle de retransmissão, gerenciamento de conexões e controle de janelas. Entre eles, o mecanismo de controle de fluxo controla a quantidade de dados enviados pelo remetente de acordo com a capacidade de recebimento real do receptor, o que evita os problemas de congestionamento da rede e degradação do desempenho. O mecanismo de controle de congestionamento evita a ocorrência do congestionamento da rede ajustando a quantidade de dados enviados pelo remetente. Os conceitos de janela de congestionamento e janela de envio estão relacionados entre si, e a quantidade de dados no remetente é controlada ajustando dinamicamente o tamanho da janela de congestionamento. Início lento, prevenção de congestionamentos e recuperação rápida são as três partes principais do algoritmo de controle de congestionamento do TCP, que ajustam o tamanho da janela de congestionamento por meio de diferentes estratégias para se adaptar à capacidade e congestionamento da rede.

Na próxima seção, examinaremos o mecanismo de retransmissão do TCP em detalhes. O mecanismo de retransmissão é uma parte importante do TCP para obter transmissão confiável. Ele garante a transmissão confiável dos dados retransmitindo dados perdidos, corrompidos ou atrasados. O princípio da implementação e a estratégia do mecanismo de retransmissão serão introduzidos e analisados ​​em detalhes na próxima seção. Fique atento!


Hora de postagem: 24-2025 de fevereiro