Redes de Computadores e a Internet Magnos Martinello Universidade Federal do Espírito Santo - UFES Departamento de Informática - DI Laboratório de Pesquisas em Redes Multimidia - LPRM 2011
Camada de Transporte 3.1 Serviços da camada de transporte 3.2 Multiplexação e demultiplexação 3.3 Transporte não orientado a conexão: UDP 3.4 Princípios de transferência confiável de dados 3.5 Transporte orientado a conexão: TCP Estrutura do segmento Transferência confiável dos dados Controle de fluxo 3.6 Princípios do controle de congestionamento 3.7 Controle do congestionamento do TCP
TCP: Visão Geral RFCs: 793, 1122, 1323, 2018, 2581 ponto-a-ponto: Um emissor e um receptor Fluxo de bytes confiável e em ordem Paralelismo (pipelened): Tamanho da janela de congestionamento e fluxo é ajustado dinâmicamente Buffers de envio e recepção s o c k e t d o o r a p p l i c a t i o n w r i t e s d a t a T C P s e n d b u f f e r s e g m e n t a p p l i c a t i o n r e a d s d a t a T C P r e c e i v e b u f f e r Dados full duplex: Fluxo de dados bidirecional na mesma conexão MSS: maximum segment size Orientado a conexão: Fase de apresentaçã o em 3 partes Fluxo controlado: s o c k e t d o o r Emissor não vai sobrecarregar o receptor 3
Estrutura do segmento TCP URG: dados urgentes (geralmente não usado) ACK: ACK # valid PSH: entrega dados pela aplicação (geralmente não usado) RST, SYN, FIN: estabelecimento, encerramento de conexão Internet checksum (como no UDP) 32 bits source port # dest port # head len sequence number acknowledgement number not used UAP R S F checksum Receive window Urg data pnter Options (variable length) application data (variable length) Contador pelo número de bytes e não segmentos! # bytes que o receptor está disposto a receber 4
Número das Portas Origem e Destino Identificam a aplicação transmissora e receptora, cada uma delas associada a um ponto da conexão. Esses dois valores, juntamente com os endereços IP de origem e destino, presentes no cabeçalho IP, identificam univocamente a conexão. Conexão = par de sockets.
Número de Seqüência O TCP enumera cada byte que é transmitido pela conexão. O campo número de sequência identifica o número do primeiro byte dentro do stream de bytes que está sendo transmitido naquele segmento. Assume valores entre 0 e 2 32-1.
Número do Acknowledgement Como cada byte é numerado, esse campo identifica o próximo número de sequência (próximo byte) que se espera receber do host remoto. Esse valor é igual ao número do último byte recebido + 1. O campo é válido somente se o flag de ACK estiver ligado.
Tamanho do Cabeçalho Informa o tamanho do cabeçalho do segmento, medido em palavras de 32 bits. A informação de tamanho é necessária porque o campo de Options do TCP possui tamanho variável. Com 4 bits, o tamanho do cabeçalho é limitado a 60 bytes. Sem opções, o tamanho default é de 20 bytes.
Campo de Flags Os flags identificam o propósito e o conteúdo de cada segmento. Existem seis flags: URG, ACK, PSH, RST, SYN e FIN. Um ou mais podem podem estar ligados num certo momento.
Bit URG ACK PSH RST SYN FIN Vale 1 para todos os segmentos, exceto p/ segmento SYN inicial (aknowledgement number é válido). Transmissor notifica ao receptor para que ele passe todos os dados que possui no seu buffer para o processo de aplicação. Resseta a conexão. Significado Indica a presença de dados urgentes no segmento (urgent pointer é válido). Sincroniza os números de seqüência no setup da conexão. Transmissor solicita término normal da conexão (parou de enviar dados).
Gerenciamento de conexão TCP Lembrar: TCP emissor e receptor estabelecem conexão antes de trocar segmentos de dados inicializar variáveis TCP: Números de seq. buffers, informação do controle de fluxo (e.g. RcvWindow) cliente: inicia conexão Socket clientsocket = new Socket("hostname","port number"); servidor Socket connectionsocket = welcomesocket.accept(); Three way handshake: Passo 1: host envia segmento com TCP SYN Especifica o número de sequencia inicial Sem dados Passo 2: host servidor recebe SYN, responde com segmento SYNACK servidor aloca buffers Especifica número inicial de sequência Passo 3: cliente recebe SYNACK, responde com segmento ACK, que pode conter dados 11
Número de sequência e ACKS do TCP Seq. # s: Número do primeiro byte nos dados do segmento ACKs: Número de sequencia do próximo byte esperado do outro lado ACK cumulativo Q: Como receptor trata segmentos fora de ordem? A: especificação do TCP não diz -> tarefa para o implementador Usuário digita C host ACKs do C recebido Host A Host B Seq=42, ACK=79, data = C Seq=79, ACK=43, data = C Seq=43, ACK=80 Cenário de telnet simples 12 host ACKs o C recebido, e devolve C tempo
TCP RTT (Round Trip Time) Q: Como configurar o valor do timeout no TCP? Maior do que RTT mas RTT varia Menor do que RTT: timeout prematuro Retransmissões desnecessárias Muito longo: reação lenta a perda de segmentos etimeout Q: Como estimar RTT? SampleRTT: medida de tempo a partir da transmissão do segmento até receber ACK ignorar retransmissões SampleRTT vai variar, mas queremos estimar RTT de modo que altas variações não afetem suavemente Média de várias medições recentes, não apenas o valor corrente de SampleRTT 13
TCP RTT (Round Trip Time) etimeout EstimatedRTT = (1- α )*EstimatedRTT + α *SampleRTT Média móvel exponencial ponderada Influência das amostras passadas decai exponencialmente Valor típico: α = 0.125 EstimatedRTT = 0.875*EstimatedRTT + 0.125*SampleRTT 14
Example RTT estimation: RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350 300 RTT (milliseconds) 250 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) SampleRTT Estimated RTT 15
TCP RTT e Timeout Configurando o timeout EstimtedRTT mais uma margem de segurança Ampla variação em EstimatedRTT -> maior margem de segurança Estimar primeiro quantas amostras de RTT (SampleRTT) desvia do valor estimado EstimatedRTT: DevRTT = (1-β )*DevRTT + β * SampleRTT-EstimatedRTT (tipicamente, β = 0.25) Então configurar o intervalo de timeout: TimeoutInterval = EstimatedRTT + 4*DevRTT 16
TCP: Cenários de Retransmissão Host A Host B Host A Host B timeout X perda Seq=92, 8 bytes data ACK=100 Seq=92 timeout Seq=92, 8 bytes data Seq=100, 20 bytes data ACK=100 ACK=120 SendBase = 100 tempo Seq=92, 8 bytes data ACK=100 ACK perdido Sendbase = 100 SendBase = 120 SendBase = 120 tempo Seq=92 timeout Seq=92, 8 bytes data ACK=120 Timeout prematuro 17
TCP: Cenários de Retransmissão Host A Host B Seq=92, 8 bytes data timeout Seq=100, 20 bytes data X loss ACK=100 SendBase = 120 ACK=120 tempo ACK Cumulativo 18
TCP: Go-Back-N ou SR? Reconhecimentos cumulativos Segmentos corretamente recebidos, mas fora de ordem, não são reconhecidos individualmente No Emissor, basta lembrar o menor número de sequencia de um byte transmitido mas não reconhecido (sendbase) e o número de sequencia do byte seguinte a ser enviado (nextseqnum) Quando o emissor envia uma sequencia de segmentos 1,2...N e todos os segmentos chegam ao receptor na ordem e sem erro. Se o reconhecimento para o pacote n < N se perder... mas os N-1 reconhecimentos restantes cheguam ao emissor antes do termino do timeout. O que o Go-Back N faria? 19
Camada de Transporte 3.1 Serviços da camada de transporte 3.2 Multiplexação e demultiplexação 3.3 Transporte não orientado a conexão: UDP 3.4 Princípios de transferência confiável de dados 3.5 Transporte orientado a conexão: TCP Estrutura do segmento Transferência confiável dos dados Controle de fluxo 3.6 Princípios do controle de congestionamento 3.7 Controle do congestionamento do TCP
Controle de Fluxo do TCP Lado receptor TCP possui um buffer de recepção Controle de Fluxo Emissor não sobrecarrega o receptor transmitindo muito Processo pode ser lento na leitura a partir do buffer Serviço de adequação de taxas: adequar a taxa de envio para a taxa de leitura do receptor 21
Como funciona o controle de fluxo TCP Sala de espera no buffer = RcvWindow = RcvBuffer-[LastByteRcvd LastByteRead] www.aw.com/kurose_br Receptor avisa o tamanho da sala de espera incluindo este valor no campo RcvWindow dos segmentos Emissor limita o número de pacotes não reconhecidos por RcvWindow garante que o buffer de recepção não sobrecaregue E se o recvwindow é anunciado com valor zero ao emissor e não tenha mais nada para enviar ao emissor? 22
Princípios do Controle de Congestionamento: Congestionamento informalmente: muitas fontes enviando muitos dados muito rapidamente para a rede tratar diferente do controle de fluxo! Consequencias: Perda de pacotes (sobrecarga no buffer dos roteadores ) Atrasos longos (enfileramento nos buffers dos roteadores) Um problema top-10! 23
Causas/custos do congestionamento: cenario 1 Dois emissores, dois receptores Um roteador, buffer infinito Nenhuma retransmissão Host B Host A λ in : original data unlimited shared output link buffers λ out Longos atrasos quando congestionado Maximo throughput 24
Causas/custos do congestionamento: cenario 2 Um roteador com buffer finito Emissor retransmite um pacote perdido Host A λ in : original data λ ' in : original data, plus retransmitted data λ out Host B finite shared output link buffers 25
λ = λ in out Se : (goodput) Causas/custos do congestionamento: cenario 2 Retransmissão perfeita somente quando houver perda: λ > λ in out Retransmissão de pacotes atrasados (não perdidos) aumenta o custo R/2 R/2 R/2 λ out λ out R/3 λ out R/4 λ in R/2 λ in R/2 λ in R/2 a. custos do congestionamento: Mais trabalho (retransmissão) para um dado goodput b. Retransmissões desnecessárias: enlace transporta múltiplas cópias de um dado pacote c. 26
Causas/custos do congestionamento: cenario 3 Quatro emissores Caminhos com múltiplos saltos timeout/retransmissão Host A Q: O que acontece quando aumenta? λ in : original data λ ' in : original data, plus retransmitted data finite shared output link buffers λ ou t λ in Host B 27
Causas/custos do congestionamento: cenario 3 H o s t A λ o u t H o s t B Outro custo de congestionamento: Quando pacote é descartado, qualquer capacidadde de transmissão no upstream usada por aquele pacote foi desperdiçada! 28
Capitulo 3 3.1 Serviços da camada de transporte 3.2 Multiplexação e demultiplexação 3.3 Transporte não orientado a conexão: UDP 3.4 Princípios da transferência confiável de dados 3.5 Transporte orientado a conexão: TCP Estrutura do segmento Transferência confiável de dados Controle de fluxo 3.6 Princípios do controle de congestionamento 3.7 Controle de congestionamento do TCP 29
Abordagens em direção ao controle de congestionamento Controle de congestionamento fim a fim: Nenhum feedback explícito da rede Congestionamento inferido a partir do sistema final observando perda e atrasos Abordagem adotada pelo TCP Controle de congestionamento assistido pela rede: Roteadores provem feedback aos sistemas finais Bit singular indicando congestionamento (SNA, DECbit, TCP/IP ECN, ATM) Taxa que o emissor pode enviar de modo explícito 30
Controle de congestionamento TCP: incremento aditivo e decremento multiplicativo Abordagem: aumentar a taxa de transmissão (tamanho da janela), sondando por banda usavel, até que perda ocorra Incremento aditivo: incrementar CongWin por 1 MSS todo RTT até perda detectada Decremento multiplicativo: cortar CongWin pela metade após a perda Comportamento dente de serra: sondando por banda congestion window size 2 4 K b y t e s 1 6 K b y t e s 8 K b y t e s c o n g e s t i o n w i n d o w 31 time t i m e
Controle de Congestionamento do TCP sender limits transmission: LastByteSent-LastByteAcked <= min {CongWin, RcvWin} Assim, Taxa = CongWin RTT Bytes/sec CongWin é dinâmica, função do congestionamento percebido na rede Como o emissor percebe o congestionamento? Evento de perda = timeout ou 3 Acks TCP emissor reduz taxa (CongWin) após evento de perda tres mecanismos: AIMD slow start Conservativo após eventos de timeout 32
Host A Host B X timeout resend 2 nd segment time 33 Figure 3.37 Resending a segment after triple duplicate ACK
TCP Slow Start Quando a conexão inicia, CongWin = 1 MSS Exemplo: MSS = 500 bytes & RTT = 200 msec Taxa inicial = 20 kbps Banda disponível pode ser >> MSS/RTT Desejável crescer rapidamente para uma taxa respeitável Incrementar a taxa exponencialmente até o primeiro evento de perda Exemplo: MSS = 500 bytes & RTT = 200 msec Qual a Taxa com Slow Start no primeiro segundo de transmissão? 34
TCP Slow Start (more) Quando a conexão começa, incrementa-se exponencialmente até o primeiro evento de perda: Dobra-se CongWin a cada RTT Feito pelo incremento de CongWin para cada ACK recebido RTT Host A Host B one segment two segments four segments Resumo: taxa inicial é lenta mas cresce exponencialmente time 35
Refinamento: inferindo perda Depois de 3 ACKs: CongWin é cortada pela metade Janela cresce linearmente Mas depois de um evento de timeout: CongWin é ajustada para 1 MSS; Janela cresce exponencialmente até um limear (threshold), então cresce linearmente Filosofia 3 ACKs duplicados indica que a rede é capaz de entregar alguns segmentos timeout indica um cenário de congestionamento mais alarmante 36
Refinamento Q: Quando deve haver a troca de exponencial para linear? A: Quando CongWin atingir 1/2 do seu valor antes do timeout. Implementação: Limear Variavel (Threshold) No evento de perda, Threshold é ajustado para 1/2 do CongWin imediatamente antes do evento de perda 37
Resumo: Controle de Congestionamento do TCP Quando CongWin estiver abaixo do Threshold, emissor está na fase slow-start, então a janela cresce exponencialmente. Quando CongWin estiver acima do Threshold, emissor está na fase congestion-avoidance, então a janela cresce linearmente. Quando um triplo ACK ocorre, Threshold é ajustado para CongWin/2 e CongWin ajustado para Threshold. Quando timeout ocorre, Threshold ajustado paracongwin/2 e CongWin é ajustado para 1 MSS. 38
TCP throughput Qual é o throughput médio do TCP em função do tamanho da janela e do RTT? Ignorar a fase slow start 39
Vazão do TCP Qual é o throughput médio do TCP em função do tamanho da janela e do RTT? Ignorar a fase slow start Seja W o tamanho da janela quando a perda ocorre. Quando a janela é W, throughput é W/RTT Logo após a perda, a janela cai para W/2, e o throughput é W/2RTT. Throughput médio :.75 W/RTT 40
Vazão do TCP e seu futuro Exemplo: Segmentos de tamanho (MSS) de 1500 bytes, RTT de 100ms, vazão de 10 Gbps Qual o tamanho da janela W? Novas versões de TCP para alta-velocidade 41
Justiça(Fairness) no TCP Objetivo de justiça: Se K sessões TCP compartilham um mesmo enlace com banda R, cada um deve ter taxa média de R/K TCP connection 1 TCP connection 2 bottleneck router capacity R 42
Por que o TCP é justo? Duas sessões TCP competindo : Incremento aditivo desloca em 1, enquanto o throughput aumenta Decremento multiplicativo diminui o throughput proporcionalmente R Connection 2 throughput Equidade no compartilhamento de banda Connection 1 throughput R loss: decrease window by factor of 2 congestion avoidance: additive increase loss: decrease window by factor of 2 congestion avoidance: additive increase 43
Equidade no TCP Vazão de Conexão C1 > R/2 Vazão de Conexão C2 < R/2 Supondo: C1 = 700 Kbps C2 = 200 Kbps R = 1 Mbps Incrementando linearmente: C1 700 800 C2 200 300 Após perda, decremento multiplicativo : C1 400 +300 = 700 350 +250 = 600 C2 150 +300 = 450 275 +250 = 525 44
Justiça e equidade com UDP Justiça e UDP Aplicações Multimidia frequentemente não usam TCP Ao invés disso usam UDP: Enviam audio/video a taxas constantes, toleram perda de pacote Area de pesquisa: TCP amigável (friendly) Justiça e conexões paralelas TCP Nada previne app de abrir multiplas conexões paralelas entre 2 hosts. Web browsers fazem isso Exemplo: enlace de taxa R contendo 9 conexões; nova app solicita por 1 TCP, obtem taxa R/10 nova app solicita por 11 TCPs, obtem R/2! 45
Futuro do TCP Exemplo: segmento de 1500 bytes, 100ms RTT, quer throughput de 10 Gbps Requer tamanho de janela W = 83.333 segmentos em-transito Throughput em termos de probabiliddade de perda: L = 2 10-10 Wow 1. 22 MSS RTT L Novas versões do TCP para alta-velocidade 46
Protocolos de camada de transporte DCCP RFC 4340 SCTP RFC 2960, 3286 TRFC - RFC 5348 47