fundo
TCP/IP
Os protocolos são a base da era da Internet atual. Todos os produtos de rede ou linguagens de desenvolvimento e estruturas de desenvolvimento são baseados em tcp/ip
protocolos. Portanto, aprender bem tcp/ip
será de grande ajuda para os indivíduos na indústria da Internet no futuro.
Mas este é um curso teórico básico, assim como o curso de sistema operacional, depois de aprendido pode não ter muito impacto em você e não vai permitir que você imediatamente tenha as habilidades para colocar em prática. Mas, precisamente porque este é um curso teórico básico, todas as tecnologias da Internet são baseadas nele. Portanto, se você entender o tcp/ip
acordo, ele terá um efeito positivo no seu desenvolvimento futuro ou na solução de problemas no trabalho.
controle de congestionamento tcp
O controle de fluxo mencionado no artigo anterior ocorreu entre C e S sem considerar o impacto do ambiente de rede pública.Se a qualidade da rede pública atual for particularmente ruim e a perda de pacotes for susceptível de ocorrer, então o remetente deve prestar atenção a isso. E esse é exatamente o problema com o qual o controle de congestionamento precisa lidar.
Janela de congestionamento: evita que o remetente envie muito rápido, tornando a rede muito atrasada para processar, resultando em congestionamento da rede! !
Para controle de congestionamento, tcp
cada conexão precisa manter 2
um estado central:
- Janela de congestionamento
- Limite de início lento
Os algoritmos envolvidos são os seguintes:
- Início lento
- Prevenção de congestionamento
- Retransmissão rápida
- Resposta rápida
A seguir, veremos esses estados e algoritmos um por um.
status
Janela de congestionamento (cwnd)
A janela de congestionamento se refere à quantidade de dados que você ainda pode transmitir. Existem algumas diferenças com a janela de recepção:
- A janela de recebimento (rwnd) é o limite dado pela extremidade receptora
- A janela de congestionamento (cwnd) é o limite do próprio remetente e o padrão é 1 segmento
Nota:
- Ambos são iguais, eles são usados para limitar o tamanho da janela de envio
发送窗口大小 = min(rwnd, cwnd)
. Pegue o mínimo dos dois, e o controle de congestionamento é usado para controlar ascwnd
mudanças
Limite de início lento (ssthresh)
O tamanho padrão é 65536byte
. Quando ocorre um tempo limite, o limite é definido como 发送窗口的一般
, cwnd
definido como 1
e reiniciado o algoritmo de início lento!
algoritmo
Início lento
Quando você começou a transferir dados, não sabia se a rede pública atual estava estável ou congestionada. Se você for muito agressivo e enviar pacotes muito rapidamente, poderá ocorrer uma perda maluca de pacotes, causando um desastre de rede em avalanche. Ao mesmo tempo, é um desperdício de recursos da rede pública.
Portanto, o controle de congestionamento deve primeiro adotar um algoritmo conservador para se adaptar lentamente a toda a rede.Este algoritmo é chamado de algoritmo de início lento. O processo é como se segue:
- Primeiro, três apertos de mão,
rwnd
o tamanho anunciado por ambas as partes - Ambas as partes inicializam seu próprio
cwnd
tamanho - No início do período de transmissão, cada vez que o remetente recebe um
ACK
, ocwnd
tamanho aumenta1
. Em outras palavras, cada vez que um passaRTT
, ocwnd
tamanho da janela dobra. Se a janela inicial for10
, depois que a primeira rodada10
de mensagens for transmitida e o remetente receber10
umaACK
confirmação, ocwnd
tamanho se torna20
; a segunda rodada passa40
a ser ; a terceira rodada80
...
cwnd
O tamanho não pode crescer indefinidamente. Quando cwnd
atinge o limite ( cwnd > ssthresh
), como controlar cwnd
o tamanho da janela? Isso é o que precisa ser feito para evitar congestionamentos.
Prevenção de congestionamento
Acontece que cada vez que uma ACK
confirmação é recebida , o cwnd
tamanho aumenta 1
. Agora, o limite é atingido, cwnd
você só pode adicionar um pouco de: 1/cwnd
. Em outras palavras, antes que um tamanho RTT
reduzido cwnd
dobrasse. Agora um RTT
abaixo, o cwnd
tamanho aumenta1
O diagrama de prevenção de congestionamento é o seguinte, onde o AIMD
método é adotado
AIMD
(A adição aumenta, a multiplicação diminui)
- Multiplicando a redução
Seja na fase de início lento ou na fase de controle de congestionamento, enquanto ocorrer o tempo limite da rede, ele serássthresh
definido para acwnd
metade e, em seguidacwnd
, para1
um segmento. Em seguida, inicie o algoritmo de início lento - Aumento aditivo
Quando a rede freqüentemente atinge o tempo limite, elessthresh
cairá rapidamente. Para reduzir o número de pacotes injetados na rede, o aumento aditivo significa que, após a implementação da prevenção de congestionamento, a janela de congestionamento é aumentada lentamente para evitar a ocorrência prematura na rede congestionamento
Nota:
- A quantidade de pacotes de dados enviados na fase de início lento aumenta exponencialmente e a fase de prevenção de congestionamento aumenta linearmente
- Os algoritmos de prevenção de congestionamento não podem evitar completamente o congestionamento da rede. Ao controlar o tamanho da janela de congestionamento, a rede não está sujeita ao congestionamento.
Retransmissão rápida
tcp
Se ocorrer perda de pacote durante a transmissão, isto é, quando a extremidade receptora descobrir que o segmento de dados não chega em ordem, o método de processamento da extremidade receptora é enviar repetidamente o pacote de dados anterior ACK
. Por exemplo, se o 4
pacote anterior tiver sido recebido e o primeiro 5
pacote for perdido, mesmo que 6、7
alcance o terminal de recebimento neste momento , o terminal de recebimento sempre retornará o 4
primeiro pacote ACK
. Quando o remetente recebe >=3
uma cópia, ACK
ele percebe que o pacote está perdido e, portanto, é retransmitido imediatamente e não precisa esperar uma única RTO
vez para retransmitir.
Esta é a retransmissão rápida, que resolve o problema de se a retransmissão é necessária .
Retransmissão seletiva
Com base na situação acima, devemos retransmitir o primeiro 5
pacote ou o 5、6、7
segundo pacote?
Agora 6、7
que a bolsa chegou, o tcp
estilista não é burro, ela foi passada, por que você ainda passa? Basta registrar quais dos pacotes a seguir chegaram e quais não chegaram e retransmiti-los de acordo.
Após receber a mensagem do remetente, o destinatário responde a uma ACK
mensagem, depois nas opções do cabeçalho da mensagem, pode-se adicionar SACK
este atributo por left edge
e right edge
informar o remetente que recebeu os dados em qual intervalo. Portanto, mesmo se o 5
primeiro pacote for perdido, quando o 6、7
primeiro pacote for recebido, a extremidade receptora dirá à extremidade emissora que esses dois pacotes chegaram e o 5
pacote será retransmitido se o primeiro pacote não tiver chegado.
Este processo é denominado retransmissão seletiva ( SACK
), que resolve o problema da retransmissão .
Recuperação rápida
O remetente recebeu 3
esta duplicata ACK
e encontrou perda de pacotes, sentiu que a rede atual já estava um pouco congestionada e entraria na fase de recuperação rápida. do seguinte modo:
ssthresh
O valor é reduzido àcwnd
metadecwnd
Valor igual assthresh
cwnd
Aumento linear (aumento aditivo)
Resumindo
Este é o oitavo artigo da série tcp / ip. Acima são os conceitos e algoritmos no controle de congestionamento. Haverá explicações mais aprofundadas e mais detalhadas sobre a cena de uso posteriormente, esta série de artigos será muito longa.
Vamos começar o próximo artigo.