Camada de transporte TCP Controle de congestionamento Gerenciamento da conexão n n n O lado cliente envia um segmento TCP especial ao lado servidor. Este segmento não contém dados. O bit SYN é ajustado para 1. O cliente escolhe aleatoriamente um número de sequência. (client_isn) e coloca-o no campo “número de sequência”. O segmento é encapsulado em um datagrama IP e enviado ao servidor Gerenciamento da conexão n n n n n Assim que o datagrama IP chega ao servidor, este extrai o segmento TCPSYN, aloca buffers e variáveis. Este segmento também não contém dados. O bit SYN está com valor 1 O campo de reconhecimento está ajustado para clint_isn+1. O servidor escolhe o seu próprio número de sequência. Gerenciamento da conexão n n n Ao receber o segmento SYNACK o cliente também reserva buffers e variáveis para a conexão. Reconhece o segmento de confirmação colocando o valor de client_isn+1 no campo de reconhecimento. O bit SYN é ajustado para 0, já que a conexão está estabelecida. Relembrando algumas variáveis n RTT q n n Tempo de viagem de ida e volta da conexão RcvWindow q Janela de recepção q (RcvWindow – RcvBuffer – [LastByteRcvd – LastByteRead] MSS (Tamanho de Segmento Máximo) q q Limita a quantidade de dados que a entidade que o TCP irá enviar num único datagrama IP. Valores para MSS são trocados nos pacotes SYN (requisição de conexão) que abrem a conexão TCP. Tráfego de dados n Taxa média de dados q n n n Quantidade de bits enviados dividida pelo intervalo de tempo decorrido durante a transmissão. Taxa constante de bits (CBR) Taxa variável de bits (VBR) Rajada de dados Causas do congestionamento n Por que ocorrem congestionamentos? n Qual a solução? Congestionamento n n O congestionamento pode ocorrer se a carga (quantidade de pacotes enviados para a rede) superar a capacidade da rede (quantidade de pacotes que uma rede consegue controlar). O congestionamento ocorre em sistemas que envolvem algum tipo de espera. Soluções n n n A solução é diminuir a taxa de transmissão dos dados. A idéia é não incluir um novo pacote na rede até que o anterior a tenha deixado. O TCP tenta alcançar esse objetivo manipulando dinamicamente o tamanho da janela. Detectando o congestionamento n O primeiro passo é detectar o congestionamento q q q Pacotes perdidos devido a ruídos na rede. Esgotamento de buffers nos roteadores. Atualmente todos os algorítmos TCP que atuam na Internet presumem que os timeouts são provocados por congestionamentos. Atrasos em uma rede n n n De empacotamento De processamento De propagação Mecanismos de controle de congestionamento n Fim-a-fim q q n A camada de rede não oferece nenhum suporte explícito à camada de transporte A perda de segmentos TCP é tomada como uma indicação de congestionamento. Assistido pela rede q A rede informa sobre o congestionamento n n Roteador envia ao remetente um pacote de congestionamento (choke packet). Roteador marca um campo em um pacote indicando o congestionamento. Controle de congestionamento em malha aberta n Evitam o congestionamento antes que ele ocorra. q q q q q Política de retransmissão Política de janelas Política de confirmação imposta pelo receptor Política de descarte de pacotes Política de admissão (qualidade de serviço) Reação do TCP à congestionamentos n n n Estabelece-se a conexão. Neste momento o tamanho da janela é escolhido. O receptor especifica o tamanho da janela de acordo com o espaço livre em seu buffer. Se o transmissor se mantiver dentro do tamanho da janela, não haverá problemas causados por sobrecargas nos buffers do receptor. Causas dos congestionamentos n Causas internas da rede. Múltiplas conexões. n Dois problemas potenciais: n q A capacidade da rede A capacidade do receptor q Duas soluções: q n n A janela de recepção A janela de congestionamento (CongWin) NOTA: O número de bytes que o transmissor irá enviar será o mínimo das duas janelas. Janela de congestionamento n n n n É uma variável denominada CongWin. Impõe uma limitação à taxa à qual um remetente TCP pode enviar tráfego para dentro da rede. A quantidade de dados não reconhecidos em um hospedeiro não pode exceder o mínimo de CongWin e Rcvindow. LastByteSent – LastByteAcked < ou = min{CongWin, RcvWindow} Janela Efetiva n É o mínimo que transmissor e receptor consideram viáveis. q q q Se o receptor informar 10Kb como tamanho da janela (neste caso o receptor estará dizendo: Envie 10 Kb!)... Mas o tamanho da Janela de Congestionamento do transmissor informar que rajadas acima de 5Kb irão congestionar a rede... Neste caso o transmissor enviará apenas 5Kb. Janela Efetiva n Agora o contrário. q q q O receptor informa: Envie 20Kb... O transmissor percebe que 40Kb passam pela rede sem problemas... Neste caso, o transmissor enviará apenas 20Kb. Controle de congestionamento em malha fechada n Alivia um congestionamento após ele ter ocorrido. q q q Partida lenta (Slow start) Aumento aditivo, diminuição multiplicativa (additive increase, Multiplicative decrease) Threshold Partida lenta (SlowStart) q q q q Quando ocorre a conexão o transmissor ajusta a Janela de Congestionamento ao tamanho máximo do segmento em uso pela conexão (MSS). Caso o segmento seja confirmado antes do timeout, o transmissor adiciona o número de bytes de um segmento à Janela de Congestionamento, que passará a ter o tamanho de dois segmentos. A medida que novas confirmações cheguem, a janela vai sendo ampliada exponencialmente, até que ocorra um timeout ou a janela do receptor seja alcançada. Quando isto ocorre, a Janela de Congestionamento é mantida com o tamanho anterior ao timeout. Partida lenta (SlowStart) n Exemplo: q q q O tramissor enviou rajadas de 1024, 2048, 4096 bytes que obtiveram confirmações. Ao enviar uma rajada de 8192 bytes ocorreu um timeout. A Janela de Congestionamento será mantida com o tamanho de 4096 bytes. n n Nenhuma rajada superior a isso será enviada. Não importando qual seja o tamanho da janela do receptor. Aumento aditivo, diminuição multiplicativa (additive increase, Multiplicative decrease) n A questão é: q O quanto o transmissor deve diminuir ou aumentar o tamanho de sua janela. n Diminuição: q q q Após um evento de perda, a janela é alterada para a metade do valor corrente de CongWin. Se outro evento ocorrer a janela será novamente cortada pela metade. Não é permitido ao tamanho da janela ser inferior ao de um MSS. Aumento aditivo, diminuição multiplicativa (additive increase, Multiplicative decrease) n Aumento: q q q A medida que os ACKs vão chegando, a Janela de Congestionamento é aumentada em um MSS a cada RTT. O TCP aumenta lentamente a sua janela. Exemplo: n n n Se o MSS for de 1460 bytes e CongWin for de 14600, então dez segmentos estarão sendo enviados dentro de um RTT. Cada ACK que chegar aumentará o tamanhode CongWin em 1/10 MSS. Após a chegada dos dez ACKs, a Janela de Congestionamento será aumentada em um MSS. Threshold n n n n n Além dos dois parâmetros (janelas de recepção e de congestionamento), um terceiro parâmetro é limitante: O threshold. Em princípio ele é de 64Kb. Quando ocorre um timeout o threshold é atribuído a metade da janela de Congestionamento atual... E a janela de Congestionamento é reinicializada para um tamanho de segmento máximo. Em seguida a partida lenta é usada para determinar o que a rede é capaz de gerenciar, mas o crescimento exponencial será interrompido quando alcançar o valor do threshold. A partir daí, as transmissões confirmadas proporcionarão um crescimento linear.