420 likes | 536 Views
Transmissão de dados bi-direccional: Transmissão de dados bi-direccional na mesma ligação MSS: maximum segment size Orientado-à-ligação: handshaking (transferência de mensagens de controlo) Inicia o estado do emissor e do receptor antes de transferir os dados Fluxo controlado:
E N D
Transmissão de dados bi-direccional: Transmissão de dados bi-direccional na mesma ligação MSS: maximum segment size Orientado-à-ligação: handshaking (transferência de mensagens de controlo) Inicia o estado do emissor e do receptor antes de transferir os dados Fluxo controlado: Emissor não sobrecarrega o receptor Ponto-a-ponto: Um emissor, um receptor Cadeia de bytes ordenada e fiável: Não há “fronteiras nas mensagens” pipelined: TCP dimensão das janelas de controlo de congestão e de fluxo ajustável Buffers no emissor e receptor TCP: Visão geralRFCs: 793, 1122, 1323, 2018, 2581 Aplicação Aplicação Escrita de dados Leitura de dados socket socket door door TCP TCP Buffer de envio Buffer de recepção 3: Nível de Transporte segmento
32 bits # porto origem # porto destino Número sequência Número acknowledgment head len not used rcvr window size U A P R S F checksum ptr urgent data Opções (dimensão variável) application data (variable length) TCP: estrutura do segmento 3: Nível de Transporte
TCP: estrutura do segmento 32 bits # porto origem # porto destino • 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 Número sequência Número acknowledgment head len not used rcvr window size U A P R S F checksum ptr urgent data Opções (dimensão variável) application data (variable length) 3: Nível de Transporte
TCP: estrutura do segmento 32 bits # porto origem # porto destino • Flags de sinalização de informação urgente: • 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/ • Flags de controlo • 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 Número sequência Número acknowledgment head len not used rcvr window size U A P R S F checksum ptr urgent data Opções (dimensão variável) application data (variable length) 3: Nível de Transporte
Seq. #’s: Nº da cadeia de bytes do primeiro byte do segmento de dados ACKs: Nº de seq. do próximo byte esperado do outro lado ACK acumulativo Q: Como é que o receptor processa segmentos for a de ordem ? A: A especificação TCP não é clara, deixando esta questão para a implementação tempo TCP nº de sequência e ACK Host B Host A Utilizador digita ‘C’ Seq=42, ACK=79, data = ‘C’ Sistema Terminal recebe ‘C’ e e ecoa de volta o ‘C’ Seq=79, ACK=43, data = ‘C’ Sistema Terminal confirma (ACK) e ecoa o ‘C’ Seq=43, ACK=80 Cenário simples de Telnet 3: Nível de Transporte
Host A Host B Seq=92, 8 bytes data ACK=100 timeout X loss Seq=92, 8 bytes data ACK=100 tempo tempo Perda de ACK TCP: cenários de retransmissão Host A Host B Seq=92, 8 bytes data Seq=100, 20 bytes data Seq=92 timeout ACK=100 ACK=120 Seq=100 timeout Seq=92, 8 bytes data ACK=120 Timeout antecipado, ACKs acumulativo 3: Nível de Transporte
TCP: transferência de dados fiável evento: dados recebidos das aplicações dos níveis superiores Emissor simplificado, assume: • Transferência de dados uni-direcccional • Sem controlo de fluxo • Sem controlo de congestão criação, envio do segmento evento: temporizador expira para o segmento com o nº de seq. y wait for event wait for event Retransmisssão do segmento y evento: ACK recebido com ACK y ACK processado 3: Nível de Transporte
00 sendbase = initial_sequence number 01 nextseqnum = initial_sequence number 02 03 loop (forever) { 04 switch(event) 05 event: data received from application above 06 create TCP segment with sequence number nextseqnum 07 start timer for segment nextseqnum 08 pass segment to IP 09 nextseqnum = nextseqnum + length(data) 10 event: timer timeout for segment with sequence number y 11 retransmit segment with sequence number y 12 compute new timeout interval for segment y 13 restart timer for sequence number y 14 event: ACK received, with ACK field value of y 15 if (y > sendbase) { /* cumulative ACK of all data up to y */ 16 cancel all timers for segments with sequence numbers < y 17 sendbase = y 18 } 19 else { /* a duplicate ACK for already ACKed segment */ 20 increment number of duplicate ACKs received for y 21 if (number of duplicate ACKS received for y == 3) { 22 /* TCP fast retransmit */ 23 resend segment with sequence number y 24 restart timer for segment y 25 } 26 } /* end of loop forever */ TCP: transferência de dados fiável Emissor TCP simplificado 3: Nível de Transporte
receptor: Informa explicitamente o emissor da quantidade de buffer livre, de forma dinâmica RcvWindow: campo usado do cabeçalho TCP emissor: Mantém a quantidade de dados transmitidos e não confirmados (unACKed) inferior ao valor mais recente que recebeu da janela RcvWindow Controlo de fluxo TCP Controlo de fluxo Emisor não sobrecarrega o receptor por transmitir demasiadamente rápido Não controla o que se passa na rede 3: Nível de Transporte
TCP Controlo de fluxo - receptor RcvBuffer= dimensão do buffer de recepção do TCP RcvWindow = quantidade de espaço disponível no buffer LastByteRead LastByteRcv 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
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 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 3: Nível de Transporte
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 TCP Round Trip Time eTimeout 3: Nível de Transporte
Parametrizando o timeout EstimatedRTT mais “margem de segurança” Grande variação em EstimatedRTT -> margem de segurança superior 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 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
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) TCP Gestão das ligações 3: Nível de Transporte
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 TCP Gestão das ligações: Estabelecimento Passo 2: Ligação concedida • Sistema Terminal do Servidor recebe o segmento de controlo SYN =1 • 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 Passo 3:Ligação confirmada • Sistema Terminal do cliente envia segmento SYN = 0 para o servidor • Reserva buffers e variáveis • Confirma a recepção do seg. • Ack = server_isn+1 3: Nível de Transporte
TCP Gestão das ligações: Estabelecimento cliente servidor pedido Connection-request (SYN=1, seq=client_isn) Reserva buffers e variáveis Connection-granted (SYN=1, seq=server_isn, ack_client_isn+1) Reserva buffers e variáveis estabelecimento Acknowldege (SYN=0, seq=client_isn+1, ack=server_isn+1) tempo 3: Nível de Transporte
close(sock_fd) TCP Gestão das ligações: Fecho • Cliente: fecha a ligação • Servidor: fecha a ligação com o cliente close(sock_fd1) Passo 3/4:Pedido de fim de ligação do servidor • Sistema Terminal do servidor envia 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 Passo 1/2:Pedido de fim de ligação do cliente • Sistema Terminal 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 3: Nível de Transporte
TCP Gestão das ligações: Fecho cliente servidor Fechando FIN ACK Fechando FIN ACK Tempo de espera Fechou Fechou 3: Nível de Transporte
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
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! Princípios de controlo de congestão 3: Nível de Transporte
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 Causas e custos do controlo de congestão: cenário 1 3: Nível de Transporte
um router buffers finitos Emissor retransmite pacotes perdidos Causas e custos do controlo de congestão: cenário 2 3: Nível de Transporte
1 - Situação ideal : (goodput) 2 - Retransmissões ocorrem quando há perdas: 3 - Retransmissões de pacotes atrasados (não perdidos) faz maior para o mesmo l l l > = l l l in in in out out out Causas e custos do controlo de congestão: cenário 2 1 1 3 2 “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
4 emissores Caminho com vários nós timeout/retransmissões l l in in Causas e custos do controlo de congestão: cenário 3 Q:o que acontece quando e aumenta ? • A C: R1 R2 • B D: R2 R3 • C A: R3 R4 • D B: R4 R1 3: Nível de Transporte
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 • in pequeno • Mais dados são transmitidos na rede e entregues ao destino • Overflow de buffers é raro • out também aumenta • in e ’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
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
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 Aproximações ao controlo de congestão Duas aproximações ao controlo de congestão: 3: Nível de Transporte
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 (“network-assisted”) 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 Caso de estudo: Controlo de congestão ATM ABR 3: Nível de Transporte
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 Caso de estudo: Controlo de congestão ATM ABR 3: Nível de Transporte
Controlo extremo-a-extremo (não assistido pela rede) Ritmo de transmissão limitado pela dimensão da janela de congestão, Congwin: w * MSS Débito = Bytes/sec RTT Controlo de congestão no TCP Congwin • W segmentos, cada um com MSS bytes enviados em cada RTT: 3: Nível de Transporte
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 “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) aumentaCongwin até perdas (congestão) perdas: diminui Congwin, então aumenta o probing Controlo de congestão no TCP 3: Nível de Transporte
Aumenta exponencialmente (por RTT) o tamanho da janela Evento de perda: TCP Tahoe : Timeout TCP Reno: Timeout e/ou três ACKs duplicados (recebidos antes do timeout) Algoritmo de Slowstart Tempo TCP Slowstart Host A Host B one segment RTT initialize: Congwin = 1 for (each segment ACKed) Congwin++ until (loss event OR Congwin > threshold) two segments four segments 3: Nível de Transporte
TCP Congestion Avoidance Congestion avoidance /* slowstart is over */ /* Congwin > threshold */ Until (loss event) { every w segments ACKed: Congwin++ } threshold = Congwin/2 Congwin = 1 perform slowstart 1 1: TCP Reno ultrapassa o slowstart (recuperação rápida ) após 3 ACKs duplicados 3: Nível de Transporte
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 Método de evitar congestão: Incrementa a janela 1 unidade por RTT Decrementa a janela 2 unidades por evento de perda TCP Fairness AIMD –Additive Increase Multiplicative Decrease Ligação TCP 1 bottleneck router Capacidade = R Ligação TCP 2 3: Nível de Transporte
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 Porque é que o TCP é justo ? R Largura de Banda partilhada igualmente D Evitar a congestão: aumento aditivo Débito da ligação 2 B Perdas: janela decresce por um factor 2 C A Débito da ligação 1 R 3: Nível de Transporte
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 Modelo de latência do TCP 3: Nível de Transporte
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] Modelo de latência do TCP 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
Modelo de latência TCP • 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] Caso 1: latencia = 2RTT + O/R W = 4 W = 2 3: Nível de Transporte
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 é: Em que P é o nº de vezes que o TCP no servidor bloqueia (stall) • 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
Modelo de latência TCP: Slow Start Exemplo: O/S = 15 segmentos K = 4 janelas Q = 2 P = min{K-1,Q} = 2 Servidor pára P=2 vezes. 3: Nível de Transporte
Modelo de latência TCP: Slow Start 3: Nível de Transporte
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 Chapter 3: Summary 3: Nível de Transporte