TCP: Visão geral RFCs: 793, 1122, 1323, 2018, 2581 Transmissão de dados bi- Ponto-a-ponto: Um emissor, um receptor Cadeia de bytes ordenada e fiável: Não há “fronteiras nas mensagens” direccional: pipelined: Transmissão de dados bidireccional na mesma ligação MSS: maximum segment size Orientado-à-ligação: handshaking (transferência de mensagens de controlo) TCP dimensão das janelas de • Inicia o estado do emissor controlo de congestão e de e do receptor antes de transferir os dados fluxo ajustável Buffers no emissor e receptor Fluxo controlado: socket door Aplicação Escrita de dados Aplicação Leitura de dados TCP Buffer de envio TCP Buffer de recepção segmento socket door Emissor não sobrecarrega o receptor 3: Nível de Transporte 3b-1 TCP: estrutura do segmento 32 bits # porto origem # porto destino Número sequência Número acknowledgment head not UA P R S F len used checksum rcvr window size ptr urgent data Opções (dimensão variável) application data (variable length) 3: Nível de Transporte 3b-2 TCP: estrutura do segmento 32 bits Nº de sequência e Nº de ACKS: Contagem por bytes de dados Não segmentos ! Head Length em palavras de 32 b Dimensão sem extensões 20 B RCVR Window Size: Nº de Bytes que o receptor espera receber Opções: Negociação de parâmetros • MSS (usual 1500; 536; 512 B) • Factor de escala p/ janela em ligações de alto débito # porto origem # porto destino Número sequência Número acknowledgment head not UA P R S F len used checksum rcvr window size ptr urgent data Opções (dimensão variável) application data (variable length) 3: Nível de Transporte 3b-3 TCP: estrutura do segmento 32 bits Flags de sinalização de informação urgente: Flags de controlo U – URG: dados que o nível superior do emissor sinalizou como urgentes P – PSH: O receptor deve passar os dados para o nível superior imediata/ A – ACK: valor válido no campo ACK R- RST; S- SYN; F – FIN: estabelecimento e terminação da ligação Ptr Urgent data Apontador para o último byte de dados que contém dados urgentes # porto origem # porto destino Número sequência Número acknowledgment head not UA P R S F len used checksum rcvr window size ptr urgent data Opções (dimensão variável) application data (variable length) 3: Nível de Transporte 3b-4 TCP nº de sequência e ACK Seq. #’s: Host B Host A Nº da cadeia de bytes do primeiro Utilizador byte do segmento de digita dados ‘C’ ACKs: Sistema Terminal Nº de seq. do recebe ‘C’ e próximo byte e ecoa de volta esperado do outro o ‘C’ lado ACK acumulativo Sistema Terminal Q: Como é que o receptor confirma (ACK) processa segmentos for a e ecoa o ‘C’ de ordem ? A: A especificação TCP não é clara, tempo deixando esta questão para a Cenário simples de Telnet implementação 3: Nível de Transporte 3b-5 TCP: cenários de retransmissão tempo Host A Host B X loss Perda de ACK Host B Seq=100 timeout Seq=92 timeout timeout Host A tempo Timeout antecipado, ACKs acumulativo 3: Nível de Transporte 3b-6 TCP: transferência de dados fiável evento: dados recebidos das aplicações dos níveis superiores criação, envio do segmento wait wait for for event event Emissor simplificado, assume: •Transferência de dados uni-direcccional •Sem controlo de fluxo •Sem controlo de congestão evento: temporizador expira para o segmento com o nº de seq. y Retransmisssão do segmento y evento: ACK recebido com ACK y ACK processado 3: Nível de Transporte 3b-7 TCP: 00 01 sendbase = initial_sequence number nextseqnum = initial_sequence number 02 03 loop (forever) { 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 transferência de dados fiável Emissor TCP simplificado 25 26 switch(event) event: data received from application above create TCP segment with sequence number nextseqnum start timer for segment nextseqnum pass segment to IP nextseqnum = nextseqnum + length(data) event: timer timeout for segment with sequence number y retransmit segment with sequence number y compute new timeout interval for segment y restart timer for sequence number y event: ACK received, with ACK field value of y if (y > sendbase) { /* cumulative ACK of all data up to y */ cancel all timers for segments with sequence numbers < sendbase = y } else { /* a duplicate ACK for already ACKed segment */ increment number of duplicate ACKs received for y if (number of duplicate ACKS received for y == 3) { /* TCP fast retransmit */ resend segment with sequence number y restart timer for segment y } } /* end of loop forever */ 3: Nível de Transporte 3b-8 TCP Controlo de fluxo Controlo de fluxo Emisor não sobrecarrega o receptor por transmitir demasiadamente rápido receptor: Informa explicitamente o emissor da quantidade de buffer livre, de forma dinâmica RcvWindow: • campo usado do cabeçalho TCP emissor: Não controla o que se passa na rede Mantém a quantidade de dados transmitidos e não confirmados (unACKed) inferior ao valor mais recente que recebeu da janela RcvWindow 3: Nível de Transporte 3b-10 TCP Controlo de fluxo - receptor RcvBuffer = dimensão do buffer de recepção do TCP RcvWindow = quantidade de espaço disponível no buffer LastByteRcv LastByteRead LastByteRead = nº do último byte lido do buffer pela aplicação do lado B LastByteRcv = nº do último byte recebido da rede e colocado no buffer do lado B LastByteRcv – LastByteRead <= RcvBuffer RcvWindow = RcvBuffer – [LastByteRcv – LastByteRead] 3: Nível de Transporte 3b-11 TCP Controlo de fluxo - emissor RcvBuffer = dimensão do buffer de recepção do TCP RcvWindow = quantidade de espaço disponível no buffer LastByteSend= nº do último byte enviado para a rede LastByteAck = nº do último byte que foi confirmada a recepção LastByteSend – LastByteAcK <= RcvWindow receptor: Sinaliza o emissor RcvWindow = 0 Não tem mais informação para enviar para o emissor emissor: Não pode enviar mais informação ! Solução: TCP “obriga” o emissor a enviar um segmento de 1 B para obrigar o receptor a responder 3: Nível de Transporte 3b-12 TCP Round Trip Time eTimeout Q: como estabelecer o valor de timeout do TCP? Superior a RTT nota: RTT vai variar Muito pequeno: timeout antecipado Retransmissões desnecessárias Muito longo: reacção lenta à perda de segmentos Q: Como estimar RTT? SampleRTT: tempo medido desde a transmissão do segmento para o nível de rede até à recepção do ACK Ignora retransmissões, Faz o ACK acumulativo dos segmentos SampleRTT vai variar, Estimar RTT de forma “suave” Usar várias medidas recentes e não apena o valor corrente de SampleRTT 3: Nível de Transporte 3b-13 TCP Round Trip Time e Timeout EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT Exponential weighted moving average Influência de uma amostra decresce com uma rapidez exponencial Valor típico de x: 0.125 Parametrizando o timeout EstimatedRTT mais “margem de segurança” Grande variação em EstimatedRTT -> margem de segurança superior Timeout = EstimatedRTT + 4*Deviation Mede a variação de SampleRTT em relação ao EstimatedRTT Deviation = (1-x)*Deviation + x*|SampleRTT-EstimatedRTT| 3: Nível de Transporte 3b-14 TCP Gestão das ligações Recordar: O emissor TCP estabelece uma ligação antes de iniciar a transmissão dos segmentos Inicialização das variáveis TCP: Nº de sequência Buffers Informação de janela de controlo de fluxo (RcvWindow) Cliente: Inicia a ligação socket_fd=socket(Domínio, Tipo, 0) connect(socket_fd,estr_ender,dim_estr_ender) Domínio =PF_INET(comunicação entre STs IPVv4) Tipo = SOCK_STREAM (TCP) ou SOCK_DGRAM (UDP) estr_end = domínio; porto; end IP destino) Servidor: contactado pelo cliente socket_fd=socket(Domínio, Tipo, 0) bind(socket_fd1,estr_endereços,dim_estr_ender) listen (socket_fd1, num_lig_em_espera) new_fd=accept(socket_fd1, estr_endereços, dim) estr_end = domínio; porto; end IP origem) 3: Nível de Transporte 3b-15 TCP Gestão das ligações: Estabelecimento Passo 1: Ligação pedidda Sistema Terminal do cliente envia segmento SYN =1 para o servidor Não tem campo de dados Define o nº de seq. original • client_isn Passo 3: Ligação confirmada Passo 2: Sistema Terminal do Servidor recebe o segmento de controlo SYN =1 Sistema Terminal do cliente envia segmento SYN = 0 para o servidor Ligação concedida Não tem campo de dados Confirma a recepção do seg. • Ack = client_isn+1 Define o nº de seq. inicial do servidor • Server_isn Responde com o segmento de controlo SYNACK Reserva buffers e variáveis Confirma a recepção do seg. • Ack = server_isn+1 3: Nível de Transporte 3b-16 TCP Gestão das ligações: Estabelecimento cliente servidor pedido Reserva buffers e variáveis estabelecimento Reserva buffers e variáveis tempo 3: Nível de Transporte 3b-17 TCP Gestão das ligações: Fecho Cliente: fecha a ligação close(sock_fd) Servidor: fecha a ligação com o cliente close(sock_fd1) Passo 1/2: Pedido de fim de Passo 3/4: Pedido de fim de Sistema Terminal do cliente Sistema Terminal do servidor envia ligação do cliente envia o segmento de controlo FYN = 1 para terminar a ligação TCP Cancela a reserva de recursos Sistema Terminal do servidor confirma a recepção do FYN do cliente Envia ACK ligação do servidor o segmento de controlo FYN = 1 para terminar a ligação TCP Cancela a reserva de recursos Sistema Terminal do cliente confirma a recepção do FYN do cliente Envia ACK Espera um tempo até dar a ligação por terminada 3: Nível de Transporte 3b-18 TCP Gestão das ligações: Fecho cliente servidor Fechando Tempo de espera Fechando Fechou Fechou 3: Nível de Transporte 3b-19 TCP Gestão das ligações: ciclo de vida Ciclo de vida do servidor TCP Ciclo de vida do cliente TCP 3: Nível de Transporte 3b-20 Princípios de controlo de congestão Congestão: Informalmente: “demasiadas fontes enviam informação a um ritmo muito superior ao que a rede é capaz de processar” Diferente do controlo de fluxo! Sintomas: Perda de pacote (buffer overflow nos routers) Atrasos elevados (queueing nos buffers dos router) Problema da lista dos TOP 10! 3: Nível de Transporte 3b-21 Causas e custos do controlo de congestão: cenário 1 Dois emissores Dois receptores Um router Buffer infinito Sem retransmissões Atraso elevado em situação de congestão Débito máximo atingível 3: Nível de Transporte 3b-22 Causas e custos do controlo de congestão: cenário 2 um router buffers finitos Emissor retransmite pacotes perdidos 3: Nível de Transporte 3b-23 Causas e custos do controlo de congestão: cenário 2 = l out (goodput) in 2 - Retransmissões ocorrem quando há perdas: 1 - Situação ideal : l l > lout in 3 - Retransmissões de pacotes atrasados (não perdidos) faz maior para o mesmo lout l in 1 1 2 3 “custos” da congestão: Mais trabalho (retrans) para um dado “goodput” Retransmissões desnecessárias: ligação transporte múltiplas cópias do pacote 3: Nível de Transporte 3b-24 Causas e custos do controlo de congestão: cenário 3 4 emissores Caminho com vários nós timeout/retransmissões Q: o que acontece quando lin e l in aumenta ? A C: R1 R2 B D: R2 R3 C A: R3 R4 D B: R4 R1 3: Nível de Transporte 3b-25 Causas e custos do controlo de congestão: cenário 3 A C: R1 R2 B D: R2 R3 C A: R3 R4 D B: R4 R1 lin pequeno Mais dados são transmitidos na rede e entregues ao destino Overflow de buffers é raro lout também aumenta lin e l’in muito elevado (B->D) Tráfego de A que chega a R2 pode ser aproximadamente R Tráfego de B->D que chega a R2 é muito superior ao tráfego proveniente de A->C). Quando maior for o tráfego de B->D maior é a probabilidade do tráfego de A->C encontrar o buffer de R2 cheio com um pacote de B 3: Nível de Transporte 3b-26 Causas e custos do controlo de congestão: cenário 3 Outro “custo” da congestão: Quando um pacote se perde, qualquer capacidade de transmisssão que já tenha sido usada para o transmitir é perdida! 3: Nível de Transporte 3b-27 Aproximações ao controlo de congestão Duas aproximações ao controlo de congestão: Controlo de congestão extremo-a-extremo: Não há feedback da rede Congestão inferida pelos Sistemas Terminais, quando detectam perdas na rede Aproximação do TCP Controlo de congestão assistido pela rede: Routers fornecem feedback aos Sistemas Terminas Um único bit indica a congestão Envio explicíto do ritmo a que o emissor pode enviar 3: Nível de Transporte 3b-28 Caso de estudo: Controlo de congestão ATM ABR ABR: available bit rate: “Serviço elástico” Se o caminho do emissor não está carregado: Emissor deve usar a largura de banda disponível Se o caminho do emissor não está congestionado : Emissor envia apenas ao ritmo mínimo garantido RM (resource management) cells: Enviadas pelo emissor, intercaladas com as células de dados Bits nas células RM activadas pelos switches (“networkassisted”) NI bit: não aumentar o ritmo (congestão média) CI bit: indicador de congestão Células RM cells retornadas pelo receptor com os bits intactos 3: Nível de Transporte 3b-29 Caso de estudo: Controlo de congestão ATM ABR ER (explicit rate) campo de 2 bytes numa célula RM switch congestionado pode diminuir o valor de ER da célula Emissor envia ao ritmo mínimo suportado pelo caminho EFCI bit na célula de dados: EFCI = 1 indica congestão no switch Se as células de dados que precedem a célula RM têm EFCI ctivo, receptor activa CI na célula RM de retorno Bits CI e NI Um switch pode activar o bit NI/CI, o qual deverá ser retornado ao emissor na próxima célula RM 3: Nível de Transporte 3b-30 Controlo de congestão no TCP Controlo extremo-a-extremo (não assistido pela rede) Ritmo de transmissão limitado pela dimensão da janela de congestão, Congwin: Congwin W segmentos, cada um com MSS bytes enviados em cada RTT: Débito = w * MSS Bytes/sec RTT 3: Nível de Transporte 3b-31 Controlo de congestão no TCP “probing” para a largura de banda utilizável: Idealmente: transmite táo rápido quanto possível sem perdas (Congwin tão grande quando possível) aumenta Congwin até perdas (congestão) perdas: diminui Congwin, então aumenta o probing Duas fases slow start congestion avoidance Variáveis importantes: Congwin threshold • Define o valor de limiar (threshold) entre duas fases slow start e controlo de congestao 3: Nível de Transporte 3b-32 TCP Slowstart Host A initialize: Congwin = 1 for (each segment ACKed) Congwin++ until (loss event OR Congwin > threshold) RTT Algoritmo de Slowstart Host B Aumenta exponencialmente (por RTT) o tamanho da janela Evento de perda: Tempo TCP Tahoe : Timeout TCP Reno: Timeout e/ou três ACKs duplicados (recebidos antes do timeout) 3: Nível de Transporte 3b-33 TCP Congestion Avoidance Congestion avoidance /* slowstart is over */ /* Congwin > threshold */ Until (loss event) { every w segments ACKed: Congwin++ } threshold = Congwin/2 Congwin = 1 1 perform slowstart 1: TCP Reno ultrapassa o slowstart (recuperação rápida ) após 3 ACKs duplicados 3: Nível de Transporte 3b-34 AIMD –Additive Increase Multiplicative Decrease TCP Fairness Método de evitar congestão: Incrementa a janela 1 unidade por RTT Decrementa a janela 2 unidades por evento de perda Ligação TCP 2 Objectivo de justiça: se uma ligação estrangulada é partilhada por N sessões TCP, cada uma delas deve obter 1/N da capacidade da ligação Ligação TCP 1 bottleneck router Capacidade = R 3: Nível de Transporte 3b-35 Porque é que o TCP é justo ? Duas sessões em competição: Aumento aditivo: Aumento origina um declive de 1, quando o débito aumenta Decréscimo multiplicativo: Débito decresce proporcionalmente R Evitar a congestão: aumento aditivo Largura de Banda partilhada igualmente D B Perdas: janela decresce por um factor 2 C A Débito da ligação 1 R 3: Nível de Transporte 3b-36 Modelo de latência do TCP Q: Quanto tempo demora a receber um objecto um dum Web servidor depois de enviar um pedido ? Estabelecimento duma ligação TCP Fase de transferência de dados Pressupostos: Ligação Cliente e o Servidor não é partilhada com outro tipo de tráfego TCP ou UDP. Sem retransmissões Sem perdas Sem corrupção Headers desprezáveis Tempo de transmissão Só é significativo para os segmentos de dimensão máxima Controlo de fluxo: Não afecta os resultados Controlo de congestão Threshold tão elevado que não é atingido 3: Nível de Transporte 3b-37 Modelo de latência do TCP Notações: R = Ritmo de transferência [b/s] W= Dimensão da janela de congestão [segmentos] S = MSS Dimensão do maior segmento [bits] O = Dimensão do objecto [bits] Dois casos a considerar: Servidor recebe o ACK do 1º segmento antes de transmitir todos os dados da janela WS/R > RTT + S/R O Servidor transmite os dados da janela antes de receber o ACK do 1º segmento; espera ACK antes de prosseguir a transmissão WS/R < RTT + S/R 3: Nível de Transporte 3b-38 Modelo de latência TCP Caso 1: latencia = 2RTT + O/R W=4 Nº de janelas que é preciso para txd o objecto • K:= O/WS Caso 2: latencia = 2RTT + O/R + (K-1)[S/R + RTT - WS/R] W=2 3: Nível de Transporte 3b-39 Modelo de latência TCP: Slow Start Supondo que a janela cresce de acordo com o SlowStart. A latência de um objecto de dimensão O é: Latency 2 RTT O S S P RTT (2 P 1) R R R Em que P é o nº de vezes que o TCP no servidor bloqueia (stall) P min{Q, K 1} -em que Q é o nº de vezes que o servidor pára se o objecto tiver uma dimensão infinita - K é o nº da janela que cobre o objecto 3: Nível de Transporte 3b-40 Modelo de latência TCP: Slow Start Exemplo: O/S = 15 segmentos K = 4 janelas initiate TCP connection request object first window = S/R RTT second window = 2S/R Q=2 third window = 4S/R P = min{K-1,Q} = 2 Servidor pára P=2 vezes. fourth window = 8S/R complete transmission object delivered time at client time at server 3: Nível de Transporte 3b-41 Modelo de latência TCP: Slow Start S RTT Tempo desde que o servidor inicia a transmiss ão do objecto até que recebe o ACK R initiate TCP connection 2 k 1 S Tempo para transmiti r a janela K R S k 1 S RTT 2 T empode R R espera apósa transmissão da janela K request object first window = S/R RTT second window = 2S/R third window = 4S/R P O Latência 2 RTT Tem poParagemp R p 1 P O S S 2 RTT [ RTT 2 k 1 ] R R k 1 R O S S 2 RTT P[ RTT ] (2 P 1) R R R fourth window = 8S/R complete transmission object delivered time at client time at server 3: Nível de Transporte 3b-42 Chapter 3: Summary Princípios do serviço do nível de transporte: multiplexagem/demultiplexagem Transferência de dados fiável Controlo de fluxo Controlo de congestão Instanciação e implementação na Internet UDP TCP Próximo: Deixar a periferia da rede Entrar no ”core” da rede 3: Nível de Transporte 3b-43