Camada de transporte Serviços fornecidos pela camada de transporte Multiplexagem/desmultiplexagem Camada de transporte não-orientada à sessão: UDP Princípios da transmissão fiável e ordenada de dados Máquina de estados Camada de transporte orientada à sessão: TCP Sessões TCP Transferência fiável e ordenada de dados Controlo de fluxo Controlo de congestão Camada de transporte 1 Serviços Proporciona comunicação lógica entre processos de aplicação Suportado na camada de rede Melhora os serviços da camada de rede Camada extremo-aextremo aplicação transporte rede dados físico Transporte lógico extremo-a-extremo rede dados físico rede dados físico rede dados físico rede dados físicol rede dados písico aplicação transporte rede dados físico Camada de transporte 2
Camada de transporte na Internet Entrega fiável, ordenada para unicast: TCP Multiplexagem Estabelecimento e terminação de sessão Controlo de erros Controlo de fluxo Controlo de congestão Entrega não-fiável, não-ordenada para unicast ou multicast: UDP Multiplexagem Detecção de erros Serviços indisponíveis Tempo-real Garantias de largura-de-banda Multicast fiável Camada de transporte 3 Multiplexagem Multiplexagem de informação vinda de processos de aplicação Porto origem e destino enviados em cada segmento Portos bem-conhecidos e portos efémeros Desmultiplexagem pode necessitar também dos endereços IP porto origem 32 bits porto destino outros cabeçalhos dados da aplicação Formato dos segmentos TCP/UDP Camada de transporte 4
estação A Multiplexagem: exemplos porto origem: x porto dest.: 23 servidor B Orientado à sessão estação C porto origem:23 porto dest.: x Não orientado à sessão IP origem: C IP destino: B porto origem: y porto dest.: 80 IP origem: C IP destino: B porto origem: x porto dest.: 80 estação A IP origem: A IP destino: B porto origem: x porto dest.: 80 servidor B Camada de transporte 5 User datagram protocol (UDP) Serviço na base do melhor esforço (best-effort) Não garante entrega de segmentos Não garante entrega ordenada de segmentos Outras características Não pressupõe estabelecimento de sessão Não mantêm informação de estado Cabeçalho pequeno Não limita o débito de transmissão Aplicações que usam UDP Streaming multimedia Telefonia pela Internet DNS Camada de transporte 6
Anatomia de um segmento UDP Portos Comprimento Dados + cabeçalho Checksum cksum := x0000 segsum := soma, em complemento para 1, de todas as palavras de 16 bits do segmento cksum := complemento para 1 de segsum cksum + segsum = xffff porto origem comprimento 32 bits porto destino checksum dados da aplicação (comprimento variável) Camada de transporte 7 Transferência fiável de dados Stop-and-wait Origem só envia pacote novo depois de saber que o último foi bem recebido Concretização do protocolo depende das características do canal não-fiável Aplicação Transporte Processo origem canal fiável Processo destino swt_send() dados Protocolo transferência fiável (origem) ch_send() pacote dados deliver_ Protocolo data() transferência fiável (destino) pacote swt_rcv() Serviço providenciado canal não-fiável Implementação Camada de transporte 8
Corrupção sem perdas Feedback Canal Retransmissão 0 Corrompe pacotes Componentes NAK Detecção de erros, e.g. chksum 0 Feedback, ACK e/ou NAKs ACK Retransmissão Numeração dos pacotes, módulo 2 1 ACK Duplicado 1 Camada de transporte 9 Perdas Canal Corrompe pacotes Perde pacotes Componentes adicionais Retransmissão por temporização Numeração dos ACKs, módulo 2 0 0 ACK0 1 ACK0 1 Retransmissão por temporização 0 ACK1 Camada de transporte 10
Troca de ordem Canal Corrompe pacotes Perde pacotes Não respeita a ordem de transmissão Alteração dos componentes Numeração dos pacotes e ACKs não é módulo 2 Módulo de numeração N = T x R T é o tempo máximo de vida de um pacote R é o débito a que os números de sequência são consumidos 0 0 1 N -1 ACK0 ACK1 Duplicado Camada de transporte 11 Máquina de estados: origem swt_rcv(rcvpkt) swt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,1) timeout ch_send(sndpkt) start_timer Espera chamada de cima 0 Espera ACK1 swt_rcv(rcvpkt) && (corrupt(rcvpkt) isack(rcvpkt,0)) swt_send(data) make_pkt(sndpkt, 0,data) ch_send(sndpkt) start_timer swt_send(data) make_pkt(sndpkt, 1,data) ch_send(sndpkt) start_timer Espera ACK0 Espera chamada de cima 1 swt_rcv(rcvpkt) && (corrupt(rcvpkt) isack(rcvpkt,1)) timeout ch_send(sndpkt) start_timer swt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) swt_rcv(rcvpkt) Camada de transporte 12
Máquina de estados: destino swt_rcv(rcvpkt) && (corrupt(rcvpkt) has_seq1(rcvpkt) ch_send(sndpkt) Espera 0 de baixo swt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) deliver_data(data, rcvpkt) make_pkt(sndpkt, ACK0) ch_send(sndpkt) Espera 1 de baixo swt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) deliver_data(data, rvpkt) make_pkt(sndpkt, ACK1) ch_send(sndpkt) swt_rcv(rcvpkt) && (corrupt(rcvpkt) has_seq0(rcvpkt) ch_send(sndpkt) Camada de transporte 13 Desempenho de stop-and-wait Parâmetros Canal a 1 Gbit/s Pacotes de 1 kbytes Atraso de propagação é 15 ms Utilização é pequeníssima! Canal de 1 Gbit/s está a ser usado a 267 kbit/s Protocolo limita o uso dos recursos de transmissão 8 Kbit d = trans 1 Gbit/s 8 µs U = 30.008 ms = 8 µs = 0.00027 Camada de transporte 14
Go-back-N Origem mantém uma janela deslizante de dimensão N, isto é tem um máximo de N pacotes não reconhecidos em voo base N nextseq Em voo Já reconhecidos Posições livres Janela deslizante no destino tem dimensão 1 Quando o temporizador do pacote i expira, a origem re-envia o pacote i bem como todos os seguintes ACKs são cumulativos Camada de transporte 15 Go-back-N: exemplo Janela na origem tem dimensão N = 6 Canal que não troca ordem de entrega de pacotes Pacotes numerados módulo (N+1) Cadência dos ACKs pode exercer controlo de fluxo [0,5] 0 1 2 3 [1,6] 4 [2,7] 5 [3,8] 6 [3,8] 3 [3,8] 4 [3,8] 5 6 [4,9] 7 [5,10] 8 [6,11] 9 [7,12] ACK1 ACK2 ACK3 ACK3 ACK3 ACK3 ACK4 ACK5 ACK6 ACK7 Camada de transporte 16
Máquina de estados: origem gbn_send(data) if (nextseq < base+n) { make_pkt(sendpkt, nextseq, data) ch_send(sendpkt(nextseq)) if (base == nextseq) start_timer nextseq = nextseq+1 } else refuse_data(data) gbn_rcv(rcvpkt) && notcorrupt(rcvpkt) ack = getacknum(rcvpkt) if (ack > base) base = ack if (base == nextseq) stop_timer else start_timer Espera timeout start_timer ch_send(sndpkt(base))... ch_send(sndpkt(nextseq-1)) Camada de transporte 17 Máquina de estados: destino ch_send(sndpkt) Espera gbn_rcv(rcvpkt) && notcorrupt(rcvpkt) && hasseq(rcvpkt, expectedseq) extract(rcvpkt, data) deliver_data(data) expectedseq = expectedseq +1 make_pkt(sndpkt, expectedseq, ACK) ch_send(sndpkt) Camada de transporte 18
Selective-repeat Origem mantém uma janela deslizante de dimensão N Destino mantém uma janela deslizante de dimensão N Quando o temporizador do pacote i expira, a origem re-envia apenas o pacote i ACKs são individuais N send_base nextseq Origem Não reconhecidos Já reconhecidos N Posições livres rcv_base Destino Camada de transporte 19 Selective-repeat: exemplo Janela na origem tem dimensão N = 6 Canal que não troca ordem de entrega de pacotes Pacotes numerados módulo 2 x N Cadência dos ACKs pode exercer controlo de fluxo [0,5] 0 1 2 3 [1,6] 4 [2,7] 5 [3,8] 6 [3,8] 3 [3,8] 7 [3,8] 8 [7,12] [8,13] 9 10 [9,14] 11 [10,15] ACK0 ACK1 ACK2 ACK4 ACK5 ACK6 ACK3 ACK7 ACK8 ACK9 Camada de transporte 20
Transmission Control Protocol (TCP) Stream de bytes ordenado e fiável Sessões ponto-a-ponto Sessão full-duplex Transferência bi-direccional de dados na mesma sessão Maximum Segment Size (MSS) Orientado à sessão Handshaking em três fases Buffers na origem e no destino Algoritmo de janela deslizante Controlo de fluxo e congestão determinam dimensão da janela Camada de transporte 21 Anatomia de um segmento TCP Números de sequência e de ACK Identificam bytes Sinalizadores RST, SYN e FIN: estabelecimento e terminação de sessão ACK: número de sequência é válido PSH: dados devem ser passados à aplicação URG: ptr dados urgentes é válido Ptr dados urgentes Deslocamento para o fim dos dados urgentes porto origem 32 bits porto destino número de sequência número de ACK comp. UAPRSF janela anunciada cab. checksum ptr dados urgentes opções (comprimento variável) dados da aplicação (comprimento variável) Camada de transporte 22
Números de sequência e de ACK Estação A Estação B dados= ABC Seq=42, ACK=79, ( ABC ) Seq=79, ACK=45, ( DEFG ) ACK + dados= DEFG ACK Seq=45, ACK=83 Camada de transporte 23 Estabelecimento e terminação de sessão cliente servidor cliente servidor CLOSED SYN x LISTEN ESTABLISHED FIN x ESTABLISHED SYN y, ACK x+1 ACK x+1 FIN y ESTABLISHED TIME_WAIT ACK y+1 ACK y+1 ESTABLISHED CLOSED Estabelecimento de sessão CLOSED Terminação de sessão Camada de transporte 24
Transferência de dados:exemplos Estação A Estação B Estação A Estação B timeout de Seq=100 timeout de Seq=92 Seq=92 (8 bytes) Seq=100 (20 bytes) ACK=100 ACK=120 Seq=92 (8 bytes) timeout Seq=92 (8 bytes) Seq=100 (20 bytes) Seq=120 (10 bytes) ACK=100 ACK=120 ACK=100 ACK=130 Camada de transporte 25 Maquina de estados Camada de transporte 26
Envio de segmentos Segmento de dados novo Número de bytes no buffer superior ou igual a MSS Periodicamente, sempre que houver bytes no buffer Solicitado na API (raro) Retransmissão de um segmento de dados Temporizador expirou Recepção de três ACKs duplicados (fast retransmit) ACK retardado Chegada de um segmento esperado ACK cumulativo Chegada de um segmento esperado e o ACK do segmento anterior ainda não tinha sido enviado ACK duplicado Chegada de um segmento duplicado Chegada de um segmento fora de ordem Camada de transporte 27 Controlo de fluxo Impede que a origem sobrecarregue o destino com dados Destino Informa explicitamente a origem do espaço disponível no buffer de recepção Campo janela anunciada dos segmentos TCP Origem Garante que o número de bytes enviados é inferior à janela anunciada Aplicação Dados TCP em buffer Janela anunciada Dimensão do buffer IP Camada de transporte 28
RTT e tempo de retransmissão Tempo de retransmissão Pequeno comparado com RTT implica retransmissões desnecessárias Grande comparado com RTT implica reacção lenta a perdas RTT varia durante uma sessão Estimação do RTT Extracção de amostras de RTT Ignorar retransmissões na extracção de amostras Calcular estimativa do RTT Determinar o tempo de retransmissão em função da estimativa de RTT Camada de transporte 29 Estimativa de RTT e tempo de retransmissão EstimatedRTT = (1-x)*EstimatedRTT + x*samplertt Deviation = (1-x)*Deviation + x* SampleRTT - EstimatedRTT Timeout = EstimatedRTT + 4*Deviation Média exponencial variante no tempo Impacto de amostras antigas decresce exponencialmente Tipicamente x = 0.125 (1/8) Camada de transporte 30
Controlo de congestão Pretende impedir que a origem sobrecarregue a rede Manifestações da congestão Perda de pacotes: descartados nos buffers dos encaminhadores Atrasos muito grandes: filas de espera longas nos buffers dos encaminhadores Controlo de congestão extremo-a-extremo Encaminhadores não providenciam feedback explícito TCP Controlo de congestão assistido pela rede Encaminhadores providenciam feedback explícito Camada de transporte 31 Congestão: cenário 1 Buffer infinito Não há retransmissões de pacotes Atrasos longos Camada de transporte 32
Congestão: cenário 2 Buffer finito Retransmissão de pacotes Carga oferecida à rede é superior à carga útil Camada de transporte 33 Congestão: cenário 3 4 encaminhadores idênticos Buffers finitos Retransmissões de pacotes Carga num encaminhador é, sobretudo, devida à estação que lhe está directamente ligada Pacotes usam recursos na primeira ligação para serem descartados na segunda! Carga gerada útil decresce com a carga oferecida Camada de transporte 34
Controlo de congestão TCP Estação origem mantém janela de congestão de dimensão cwnd e um parâmetro threshold Arranque lento: cwnd threshold Por cada segmento reconhecido incrementa cwnd Crescimento exponencial Prevenção da congestão: cwnd > threshold Por cada cwnd segmentos reconhecidos incrementa cwnd Crescimento linear Timeout threshold := cwnd/2 cwnd := 1 Decrescimento multiplicativo Camada de transporte 35 Janela de congestão TCP: exemplo Reno Tahoe Camada de transporte 36
Desempenho de uma sessão TCP perda de segmento janela de congestão W W/2 MSS Débito = 1.22 RTT 1 p tempo p taxa de perda de segmentos Camada de transporte 37 Equidade em sessões TCP com RTT igual R equidade crescimento aditivo sessão 2 decrescimento multiplicativo sessão 1 R Camada de transporte 38
Estimação de atrasos Atraso na recepção de um objecto guardado num servidor Web Notação e hipóteses R: débito da sessão cliente/servidor (bits/s) S: MSS (bits) O: dimensão do objecto (bits) W: dimensão da janela (segmentos) Não há perdas Casos W S/R S/R + RTT: janela não se esgota W S/R < S/R + RTT: janela esgota-se Camada de transporte 39 Diagramas RTT S/R O/R K= O/WS Atraso = 2RTT+O/R Atraso = 2RTT+O/R+(K-1)[S/R+RTT-WS/R] Camada de transporte 40
Estimação do atraso com arranque lento K = log 2 (O/S+1) Q = log 2 (1+RTT R/S) +1 S/R P = min(q, K-1) Atraso = 2RTT+O/R+P(RTT+S/R)- (2 P -1)S/R Camada de transporte 41