Redes de Computadores Redes de Computadores Camada Transporte 1
Camada Aplicação Revisão Princípios e caracteristicasdos protocolos da da camada de de aplicação A Web Web e o HTTP (Hypertext Transfer Protocol) Transferência de de Ficheiros (File (File Transfer) File File Transfer Protocol (FTP) (FTP) Correio Electrónico SMTP: SMTP: Simple SimpleMail Transfer Protocol, POP3, POP3, IMAP IMAP Serviço de de nomes da da Internet DNS: DNS: DomainName System protocol Partilha de de Ficheiros Peer-to-Peer (P2P) aplicação transporte rede lógica física 2 Camada de Transporte
Camada Transporte Segue Capitulo 3 do livro de J.F Kurose e K.W. Ross Serviços da camada de transporte Multiplexagem e desmultiplexagem Transporte não orientado à ligação: UDP Princípios da transferência fiável de dados Transporte orientado à ligação: TCP transferência fiável de dados controlo do fluxo Gestão de ligações Principios do controlo do congestionamento Controlo de congestionamento do TCP aplicação transporte rede lógica física Objectivos: Objectivos: Aprender Aprender sobre sobre os os protocolos protocolos da da camada camada de de transporte transporte da da Internet, Internet, e e principios principios destes. destes. 3 Camada de Transporte
Serviços e Protocolos de Transporte Os protocolos da camada de transporte executam-se nos sistemas terminais e fornecem um serviço de comunicação ao nível lógico entre as aplicações lado emissor: quebra as mensagens da aplicação em segmentos, repassa-os para a camada de rede lado receptor: remonta as mensagens a partir dos segmentos, repassa-as para a camada de aplicação Protocolos de transporte: TCP, UDP aplicação transporte rede ligação física rede ligação física transporte lógico end 2 end rede ligação física rede ligação física rede ligação física rede ligação física aplicação transporte rede ligação física 4 Camada de Transporte
Camadas de Transporte vs Rede As entidades da camada de transporte trocam entre si segmentos ou TPDU s ( Transport Protocol Data Unit ) camada de rede Transferência de dados entre sistemas terminais Não reconhecem, nem actuam, sobre informação adicionada pela camada de transporte camada de transporte comunicação lógica entre processos depende de, e estende, os serviços da camada de rede processo socket TCP ou UDP IP Analogia doméstica: 12 12 crianças enviam cartas a 12 12 crianças processos = crianças mensagens da da aplicação = cartas cartas nos nos envelopes Sistemas terminais = casas casas protocolo de de transporte = Ana Ana e Joaquim protocolo da da camada de de rede rede = serviço serviço postal postal 5 Camada de Transporte
Protocolos da Camada de Transporte Internet Comunicação fiável; com garantia de entrega na ordem de extremo a extremo unicast (TCP) controlo de congestão controlo de fluxo estabelecimento e gestão de ligações ( setup ) Protocolo leve; entrega não fiável; sem garantia de controlo de fluxo, controlo da congestão, ou entrega na ordem; de um extremo para um ou mais extremos ( unicast ou multicast ): UDP Entrega de dados entre processos Detecção de erros Serviços da camada de Rede IP: serviço de entrega não fiável entre sistemas terminais: melhor esforço Serviços não disponíveis: garantias de atraso máximo garantias de largura de banda mínima 6 Camada de Transporte
Serviços da camada de transporte Revisão Serviços da camada de transporte Multiplexagem e desmultiplexagem Transporte não orientado à ligação: UDP Princípios da transferência fiável de dados Transporte orientado à ligação: TCP transferência fiável de dados controlo do fluxo Gestão de ligações Principios do controlo do congestionamento Controlo de congestionamento do TCP Serviços e Protocolos de de Transporte Camadas de de Transporte vs vs Rede Protocolos da da Camada de de Transporte Internet 7 Camada de Transporte
Multiplexagem e Desmultiplexagem Desmultiplexagem-receptor Entrega dos segmentos recebidos ao socket correcto Multiplexagem-emissor reúne dados de muitos sockets e coloca o cabeçalho (usado depois para a desmultiplexagem) mensagem segmento datagrama H n H t H t M M M Encapsulamento 8 Camada de Transporte
Como funciona a Desmultiplexagem Computador recebe os datagramas IP cada datagrama possui os endereços IP da origem e do destino cada datagrama transporta 1 segmento da camada de transporte se sem fragmentação IP cada segmento possui números das portas origem e destino (lembrar: números de portas bem conhecidas para aplicações específicas) O sistema terminal usa os endereços IP e os números das portas para direccionar o segmento ao socket apropriado 32 bits porto emissor porto receptor outros campos do cabeçalho dados da aplicação (mensagem) formato do segmento TCP/UDP Números ds portos: 16 bits (0 65535) 0 1023 restritos para uso por aplicações conhecidas e.g. HTTP no porto 80, FTP no 21 (www.iana.org) 9 Camada de Transporte
Desmultiplexagem sem Ligação Criar sockets com números de porto DatagramSocket mysocket1 = new DatagramSocket(); DatagramSocket mysocket2 = new DatagramSocket(9157); socket UDP identificado pelo par endereço IP destino número do porto destino Atribuição de números de portos: Lado cliente aplicação: deixa a camada de transporte atribuir o número porto de forma transparente Laso servidor da aplic. Atribui um número de porto especifico Quando o receptor recebe segmento UDP: verifica número do porto de destino no segmento encaminha o segmento UDP para o socket com aquele número de porto Datagramas IP com diferentes endereços IP origem e/ou números de porta origem podem ser encaminhados para o mesmo socket 10 Camada de Transporte
Desmultiplexagem sem Ligação (cont.) DatagramSocket serversocket = new DatagramSocket(6428); P2 Multiplexagem P3 Desmultiplexagem P1P1 SP: 6428 DP: 9157 SP: 6428 DP: 5775 cliente IP: A SP: 9157 DP: 6428 servidor IP: C SP: 5775 DP: 6428 Cliente IP:B SP (source port) fornece endereço de retorno SP (source port) fornece endereço de retorno 11 Camada de Transporte
Desmultiplexagem com Ligação Socket TCP identificado pela quádrupla: endereço IP origem número da porta origem endereço IP destino número da porta destino receptor usa todos os quatro valores para direccionar o segmento para o socket apropriado Servidor pode dar suporte a muitos sockets TCP simultâneos cada socket é identificado pela sua própria quádrupla Servidores Web têm sockets diferentes para cada ligação cliente HTTP não persistente terá sockets diferentes para cada pedido 12 Camada de Transporte
Desmultiplexagem com Ligação (cont.) P1 Desmultiplexagem P4 P5 P6 P2 P1P3 SP: 5775 DP: 80 S-IP: B D-IP:C cliente IP: A SP: 9157 DP: 80 S-IP: A D-IP:C servidor IP: C SP: 9157 DP: 80 S-IP: B D-IP:C Cliente IP:B 13 Camada de Transporte
Desmultiplexagem com Ligação Servidor Web com Threads P1 Desmultiplexagem P4 P2 P1P3 SP: 5775 DP: 80 S-IP: B D-IP:C cliente IP: A SP: 9157 DP: 80 S-IP: A D-IP:C servidor IP: C SP: 9157 DP: 80 S-IP: B D-IP:C Cliente IP:B 14 Camada de Transporte
Multiplexagem e Desmultiplexagem Revisão Serviços da camada de transporte Multiplexagem e desmultiplexagem Transporte não orientado à ligação: UDP Princípios da transferência fiável de dados Transporte orientado à ligação: TCP transferência fiável de dados controlo do fluxo Gestão de ligações Principios do controlo do congestionamento Controlo de congestionamento do TCP Como funciona a Desmultiplexagem Desmultiplexagem sem sem Ligação Desmultiplexagem com com Ligação Servidor Web Web com com Threads 15 Camada de Transporte
UDP: User Datagram Protocol Protocolo de transporte da Internet [RFC 768] Protocolo de transporte mínimo (adiciona pouco ao IP) Serviço de (Des)Multiplexagem Simples detecção de erros Serviço melhor esforço, segmentos UDP podem ser: perdidos entregues à aplicação fora de ordem Sem ligação não há setup UDP entre emissor, receptor cada segmento UDP é tratado independentemente dos outros Vantagens do UDP elimina estabelecimento de ligação o que pode causar atraso simples: não se mantém estado da ligação ao nível da camada de transporte nem no emissor, nem no receptor cabeçalho de segmento reduzido emissor pode transmitir a qualquer ritmo, tão rápido quanto desejado (e possível) não há controlo de congestão 16 Camada de Transporte
Aplicações Internet: protocolos de aplicação e de transporte Recapitular Aplicação Internet correio electrónico acesso em terminal remoto Web transferência de ficheiros streaming multimedia servidor de ficheiros remoto Telefone sobre Internet Gestão de redes Protocolo de encaminhamento Tradução de nomes Protocolo da camada de aplicação SMTP telnet HTTP FTP HTTP(ex. YouTube), RTP NFS Proprietários (Skype) SNMP RIP DNS Protocolo de transporte usado TCP TCP TCP TCP tipicamente UDP tipicamente UDP tipicamente UDP tipicamente UDP tipicamente UDP tipicamente UDP 17 Camada de Transporte
Caracteristicas e Formato das Mensagens UDP Utilizado para aplicações multimédia tolerantes a perdas sensíveis à taxa de transmissão Outras aplicações: DNS (nomes) SNMP (gestão de redes) Uma aplicação pode incluir mecanismos de transferência de dados fiável, mesmo usando UDP ao nível de transporte acrescentar fiabilidade na camada de aplicação recuperação de erro específica à aplicação 18 Camada de Transporte Comprimento em bytes do segmento UDP, incluindo cabeçalho porto origem comprimento 32 bits Dados de aplicação (mensagem) soma de verificação (checksum) porto dest. checksum Formato do segmento UDP
Soma de Verificação (checksum) UDP Emissor Objectivo: detectar erros (ex.: bits trocados) no segmento transmitido Erros devido por exemplo a ruído nas ligações fisicas ou na memória do router,... trata conteúdo do segmento como sequencia de inteiros de n-bits (16 bits) campo checksum inicializado a zero Método Soma-Modular emissor coloca complemento do valor da soma no campo checksum soma (adição usando complemento de 1) do conteúdo do segmento (RFC[1071] para detalhes sobre algoritmo eficiente de calculo) Método Parity byte or parity word checksum: exclusive-or do conteúdo do segmento Receptor calcula calcula checksum checksumdo do segmento segmento recebido recebido anexado anexado com com o valor valor de de checksum checksum enviado enviado cálculo cálculo usando usando exclusive-or exclusive-or ou ou soma-modular soma-modular conforme conforme algoritmo algoritmo usado usado pelo pelo emissor emissor verifica verifica se se novo novo checksum checksum calculado calculado épalavra com com n 0s 0s (Método (Método Parity Parity byte byte or or parity parity word) word) 1s 1s (Método (Método Soma-Modular) Soma-Modular) NÃO NÃO - erro erro detectado detectado SIM SIM - - nenhum nenhum erro erro detectado detectado 19 Camada de Transporte
Checksum Internet Erros Método Parity byte or parity word soma de verificação (checksum) Método da soma-modular soma de verificação (checksum) 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 20 Camada de Transporte
Checksum Internet Erros Erros Errosde de transmissão transmissãoque queoriginem o flip flip de de apenas apenas 1 bit bit da damensagem, ou ou de de um um número númeroimpar imparde de bits, bits, irão irãoser ser detectados detectados checksum checksum incorrecto incorrecto dois dois bits bits errados errados podem podem não não ser ser detectados detectados se se bits bits estão estão na na mesma mesma posição posição em em duas duas palavras palavras diferentes diferentes checksum método parity-byte método da soma-modular 0 Para Para uma umaselecção selecçãoaleatórea aleatóreade de bits bits erradamente erradamentetransmitidos, transmitidos, a probabilidade probabilidadede de um um erro errode de dois dois bits bits não nãoser ser detectado detectado é 1/n 1/n no no método método parity-byte parity-byte menor menor a a 1/n 1/n no no método método da da soma-modular soma-modular 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 0 Flip de dois bits não detectado Flip de dois bits detectado! 21 Camada de Transporte
Transporte sem Ligação: UDP Revisão Serviços da camada de transporte Multiplexagem e desmultiplexagem Transporte não orientado à ligação: UDP Princípios da transferência fiável de dados Transporte orientado à ligação: TCP transferência fiável de dados controlo do fluxo Gestão de ligações Principios do controlo do congestionamento Controlo de congestionamento do TCP UDP: User Datagram Protocol Caracteristicas e Formato das das Mensagens UDP UDP Soma de de Verificação (checksum) UDP Checksum Internet Erros Erros 22 Camada de Transporte
Princípios de Transferência fiável de dados - Reliable Data Transfer (rdt) Importante nas camadas de transporte e ligação de dados As As características características do do canal canal de de comunicação comunicação não não fiável fiável que que está estápor por baixo baixo determinam determinam a complexidade complexidade do do protocolo protocolo de de transferência transferência de de dados dadosfiável Com um canal fiável, nenhum bit está corrompido ou está perdido, e todos são Com um canal fiável, nenhum bit está corrompido ou está perdido, e todos são entregues entregues na na ordem ordem com com que que foram foram enviados enviados Camada de aplicação Camada de transporte Camada de rede 23 Camada de Transporte
Transferência de dados fiável: Implementação rdt_send(): chamado da camada de cima, (e.g. pela aplicação). Envia dados para entrega à camada superior do receptor deliver_data(): chamado por rdt para entregar dados à camada superior lado emissor Lado receptor udt_send(): chamado pela entidade de transporte rdt, para transferir pacotes para o receptor através de um canal não fiável rdt_rcv(): chamado quando os pacotes chegam ao canal no lado do receptor 24 Camada de Transporte
Transferência de dados fiável Metodologia Λ- Nenhuma acção no evento, ou nenum evento ocorre quando acção é executada Vamos desenvolver incrementalmente os lados do emissor e receptor do protocolo de transferência de dados fiável (rdt) Considerar apenas transferência de dados unidirecional mas a informação de controlo flui em ambos os sentidos Usar máquinas de estados finitas (FSM) para especificar o emissor e o receptor Estado estado: quando se evento que causa transição de estado inicial esperam eventos. acções a executar na transição de estado Quando num estado, o próximo estado é unicamente determinado pelo próximo evento estado 1 eventos acções estado 2 25 Camada de Transporte
rdt1.0: transferência de dados fiável sobre canal fiável Canal Canal de de transmissão que que está estápor por baixo baixo é perfeitamente fiável fiável não não há háerros nos nos bits bits não não há háperda de de pacotes pacotes Máquinas de de estados separadas para para o emissor e o receptor emissor emissor envia envia dados dados para para o canal canal receptor receptor lê lê os os dados dados do do canal canal Espera dados de cima emissor rdt_send(data) 26 Camada de Transporte packet = make_pkt(data) udt_send(packet) Espera dados de baixo receptor rdt_rcv(packet) extract(packet, data) deliver_data(data)
rdt2.0: canal introduz erros nos bits Canal que está por baixo pode trocar bits nos pacotes introduzindo erros - não perde pacotes A questão: como como recuperar esses esses erros? erros? confirmações confirmaçõespositivas (acknowledgements, (acknowledgements, ACKs) ACKs) receptor informa, explicitamente, o emissor que recebeu um pacote sem erros receptor informa, explicitamente, o emissor que recebeu um pacote sem erros confirmações confirmações negativas negativas (negative (negative acknowledgements acknowledgementsnaks) receptor informa, explicitamente, o emissor que o pacote recebido tem erros receptor informa, explicitamente, o emissor que o pacote recebido tem erros emissor emissor retransmite retransmite o pacote pacote quando quando recebe recebe o NAK NAK Protocolos rdt rdt baseados na na retransmissão Conhecidos como como protocolos ARQ ARQ (AutomaticRepeat request) Novos Novos mecanismos em em rdt2.0 (para (para além além de de rdt1.0): Detecção Detecção de de erros erros Resposta Resposta (feedback) (feedback) do do receptor: receptor: mensagens mensagens de de controlo controlo (ACK,NAK) (ACK,NAK) receptor receptor emissor emissor Retransmissão em caso de erros Retransmissão em caso de erros 27 Camada de Transporte
rdt2.0: Especificação da Máquina de Estados Emissor Receptor rdt_send(data) sndpkt = make_pkt(data, checksum) udt_send(sndpkt) Espera dados de cima rdt_rcv(rcvpkt) && isack(rcvpkt) Λ Espera ACK ou NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) predicado rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Espera dados de baixo rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) 28 Camada de Transporte
rdt2.0: Funcionamento sem Erros rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from above Emissor rdt_rcv(rcvpkt) && isack(rcvpkt) Λ Wait for ACK or NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt ) Receptor rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) 29 Camada de Transporte
rdt2.0: Cenário de Erros snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from above Emissor rdt_send(data) rdt_rcv(rcvpkt) && isack(rcvpkt) Λ Wait for ACK or NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) Receptor rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) 30 Camada de Transporte
rdt2.0 mau funcionamento O que acontece se os ACKs ou os NAKs se corromperem? O emissor não sabe o que se passou no receptor! A simples retransmissão pode originar pacotes duplicados O que fazer? Emissor envia ACKs/NAKs referentes aos ACK/NAK do receptor? E se se perder os ACK/NAK do emissor? Retransmite-se!? parar e esperar Stop and wait Emissor envia um pacote e espera pela resposta do receptor Tratamento de duplicados emissor acrescenta número de sequência a cada pacote emissor retransmite o pacote corrente se o ACK/NAK se corromper receptor descarta (não os entrega à aplicação) pacotes duplicados 31 Camada de Transporte
rdt2.1: Emissor trata ACK/NAKs corrompidos rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) Λ rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isnak(rcvpkt) ) udt_send(sndpkt) Espera dados 0 de cima espera ACK ou NAK 1 rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) espera isnak(rcvpkt) ) ACK ou udt_send(sndpkt) NAK 0 Espera dados 1 de cima rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) Λ 32 Camada de Transporte
rdt2.1: Receptor, trata ACK/NAKs corrompidos rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) udt_send(sndpkt) Espera dados 0 de baixo Espera dados 1 de baixo sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) 33 Camada de Transporte
rdt2.1: discussão Emissor: Nº de sequência adicionado a cada pacote bastam dois nºs de sequência (0,1) Tem de se verificar se ACKs/NAKs recebidos estão corrompidos duplicou o nº de estados O estado tem de se lembrar se o pacote corrente tem o nº de sequência 0 ou 1 Receptor: Tem de verificar se recebeu pacotes duplicados o estado indica se se espera um pacote com o nº de sequência 0 ou 1 nota: receptor não tem como saber se o último ACK/NAK foi recebido correctamente pelo emissor 34 Camada de Transporte
rdt2.2: Protocolo sem NAKs A mesma funcionalidade do do rdt2.1, mas mas usando apenas ACKs ao ao invés de de NAK, receptor envia um um ACK ACK por por cada pacote recebido sem sem erro erro receptor tem tem de de incluir incluir explicitamente o nº nº de de sequência do do pacote pacote a ser ser confirmado, isto isto é, é, ACKed ACKed A recepção de de dois dois ACKs seguidos para para o mesmo pacote no no emissor resulta na na mesma acção que que um um NAK: retransmissão do do pacote seguinte ao ao último pacote enviado sem sem erro erro 35 Camada de Transporte
rdt2.2: fragmentos do emissor e receptor rdt_rcv(rcvpkt) && (corrupt(rcvpkt) has_seq1(rcvpkt)) udt_send(sndpkt) aguarda chamada 0 de cima aguarda 0 de baixo rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) aguarda ACK 0 Emissor parcial (fragmento FSM do emissor) Receptor parcial rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) ) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack,1, chksum) udt_send(sndpkt) Λ 36 Camada de Transporte
rdt3.0: canais com erros e perdas Nova Nova hipótese: canal canal de de transmissão que que está estápor por baixo baixo também pode pode perder perder pacotes (dados (dados ou ou ACKs) ACKs) Para recuperar da perda de pacotes, usa-se checksum, nº de Para recuperar da perda de pacotes, usa-se checksum, nº de sequência, sequência, ACK s ACK s e retransmissões retransmissões Mas Mas como como determinar determinar a perda perda de de pacotes? pacotes? Abordagem: o emissor aguarda um um tempo tempo razoável pelo pelo ACK ACK retransmite retransmite se se nenhum nenhum ACK ACK for for recebido recebido neste neste intervalo intervalo se se pacote pacote (ou (ou ACK) ACK) estiver estiver apenas apenas atrasado atrasado (e (e não não perdido): perdido): retransmissão retransmissão provoca provoca um um pacote pacote duplicado, duplicado, mas mas o uso uso do do nº nº de de sequência sequência possibilita possibilita detecção detecção correcta correcta no no receptor receptor receptor deve especificar nº de sequência do pacote sendo reconhecido receptor deve especificar nº de sequência do pacote sendo reconhecido requisitos requisitos adicionais adicionais Receptor tem de incluir em cada ACK o nº de seq. do pacote que está a confirmar Receptor tem de incluir em cada ACK o nº de seq. do pacote que está a confirmar requer temporizador ( timer ) requer temporizador ( timer ) 37 Camada de Transporte
rdt3.0: emissor rdt_rcv(rcvpkt) Λ Espera chamada 0 rdt_rcv(rcvpkt) de cima && notcorrupt(rcvpkt) && isack(rcvpkt,1) stop_timer timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,0) ) Λ Espera ACK 1 rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) Espera ACK 0 sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) ) Λ timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) Espera stop_timer chamada 1 de cima rdt_rcv(rcvpkt) Λ 38 Camada de Transporte
rdt3.0: em acção Alternating-bit protocol 39 Camada de Transporte
rdt3.0: em acção 40 Camada de Transporte
rdt3.0: Funcionamento do stop-and-wait emissor receptor 1º bit do 1º pacote transmitido, t = 0 último bit do 1º pacote transmitido, t = L / R RTT ACK chega, envia próximo pacote, t = RTT + L / R chegada do 1º bit do pacote chegada do último bit do primeiro pacote, envia ACK Desprezando duração do ACK tempo de processamento atraso de filas de espera atrasos nos nós intermédios 41 Camada de Transporte
Desempenho do rdt3.0 stop-and-wait rdt3.0 funciona, mas o desempenho... Exemplo: Ligação de 1 Gbps Tempo de propagação extremo-a-extremo de 15 ms pacote de 1KB L (tamanho pacote em bits) T transmissão = R (ritmo de transmissão, bps) = U = e m is s o r L / R R T T + L / R =.0 0 8 3 0.0 0 8 = 0.0 0 0 2 7 m ic r o s e c 8kb/pacote 10^9 b/seg = 8 µ seg Uemissor: utilização ou eficiência fracção do tempo que o emissor está ocupado a enviar Pacote de 1KB cada 27 mseg - débito de 37kB/seg numa ligação de 1 Gbps O protocolo de comunicação limita o uso dos recursos físicos! 42 Camada de Transporte
Protocolos de janela (em pipeline) Duas formas genéricas de protocolos de janela: Go-back-N, Repetição Selectiva (a) operação do protocolo stop-and-wait (b) operação do protocolo com pipeline Técnica Técnica de de janela janela (pipeline): (pipeline): o emissor emissorenvia envia múltiplos múltiplos pacotes pacotes de de seguida, seguida, sem sem esperar esperar pela pela confirmação confirmação de de cada cada um um Intervalo dos números de sequência tem de aumentar (do nº de bits para a Intervalo dos números de sequência tem de aumentar (do nº de bits para a numeração numeração de de pacotes) pacotes) Armazenamento no emissor e/ou no receptor Armazenamento no emissor e/ou no receptor 43 Camada de Transporte
Protocolos de janela (pipeline): maior utilização 1º bit transmitido, t = 0 último bit do 1º pacote transmitido, t = L / R ACK chega, envia próximo pacote t = RTT + L / R emissor RTT receptor 1º bit do pacote chega último bit do pacote chega, envia ACK último bit do 2 o pacote chega, envia ACK último bit do 3º pacote chega, envia ACK Aumenta a utilização por um factor de 3! U 3 RTT L + / R L / 0,024 30,008 tx = = = R 0,0008 44 Camada de Transporte
Voltar atrás: Go-back-N (GBN) Emissor: envia um nº máximo de pacotes de seguida, sem esperar por ACKs Cabeçalho do pacote com k-bits para o nº de sequência ([0,2 k -1] modulo 2 k ) Protocolo de janela deslizante (Sliding-window protocol) janela de tamanho N - até N pacotes consecutivos, ainda não confirmados Janela desliza para a frente ao longo dos números de sequência à medida que recebe ACKs números de sequência ACK(n): confirma todos os pacotes até o nº de sequência n ACK cumulativo, podem ser recebidos ACKs duplicados (ver receptor) temporizador único para o pacote mais antigo por confirmar timeout(n): retransmite pacote n e pacotes de nº de seq. superior na janela 45 Camada de Transporte
GBN: Máquina de estados estendida do emissor ACK based NAK free Λ base = 1 nestseqnum = 1 Num cenário mais realista Se janela cheia, pacotes colocados em fila de espera Ou implementação de semáforos rdt_rcv(rcvpkt) && corrupt(rcvpkt) Λ 46 Camada de Transporte
GBN: Máquina de estados estendida do receptor Λ expectedseqnum = 1 Make_pkt(sndpkt,0, ACK, checksum) Receptor simples: ACK: envia sempre ACK com nº de seq. mais elevado para os pacotes recebidos correctamente e ordenadamente pode gerar ACKs duplicados só tem de memorizar o nº de sequência esperado: expectedseqnum Pacotes fora de ordem: 1. descarta (não armazena) - não há necessidade de armazenamento (buffers) no receptor 2. Reconfirma o último pacote que chegou na ordem 47 Camada de Transporte
GBN em acção 48 Camada de Transporte
Repetição Selectiva ( Selective-Repeat ) Problema com GBN: Se relação (janela N x atrasos no canal) grande => pipeline pode ficar cheio em caso de erro num só pacote Receptor reconhece (ACKed) individualmente de todos os pacotes correctamente recebidos armazena pacotes em fila de espera, conforme necessário, para posterior entrega, em-ordem, à camada superior Emissor apenas reenvia pacotes para os quais o ACK não tenha sido recebido temporizador no emissor para cada pacote sem ACK Janela do emissor N números de sequência consecutivos novamente limita os números de sequência dos pacotes enviados, por confirmar 49 Camada de Transporte
Repetição Selectiva: janela do emissor e receptor (a) Visão dos números de sequência no emissor (b) Visão dos números de sequência no receptor 50 Camada de Transporte
Repetição Selectiva 1. Dados para enviar: se o próximo nº de seq disponível cabe na janela, envia o pacote 2. Timeout Temporizador(n) expirou: reenvia pacote n, reinicia o temporizador 3. ACK(n) em [sendbase,sendbase+n]: emissor marca pacote n como confirmado se n é o pacote mais antigo por confirmar, avança a base da janela para o próximo pacote por confirmar receptor Pacote n em [rcvbase, rcvbase+n-1] envia ACK(n) fora de ordem: armazena Por ordem: entrega (também entrega os pacotes em ordem na fila de espera) avança a janela para o próximo pacote ainda não recebido Pacote n em [rcvbase-n,rcvbase-1] ACK(n) Doutro modo: ignora 51 Camada de Transporte
Repetição Selectiva em acção Janela do emissor Janela do receptor 52 Camada de Transporte
Repetição Selectiva: dilema Exemplo: Nºs de seq.: 0, 1, 2, 3 Dimensão da janela =3 Dados duplicados são passados incorretamente como novos em (a) O receptor não vê diferenças entre os dois cenários! Qual a relação entre o número de nºs de sequência disponíveis e a dimensão da janela? Tamanho janela (2 k -1)/2 Na realidade, pode occorrer na rede a reordenação de pacotes 53 Camada de Transporte
Princípios da transferência fiável de dados Revisão Serviços da camada de transporte Multiplexagem e desmultiplexagem Transporte não orientado à ligação: UDP Princípios da transferência fiável de dados Transporte orientado à ligação: TCP transferência fiável de dados controlo do fluxo Gestão de ligações Principios do controlo do congestionamento Controlo de congestionamento do TCP transferência fiável rtd1.0: rtd1.0: canais canais fiáveis fiáveis rtd2.0 rtd2.0 canal canal introduz erros erros nos nos bits bits 2.1 ACKs NAKs 2.1 ACKs e NAKs corrompidos corrompidos 2.2 2.2 Sem Sem NAKs NAKs rtd3.0 rtd3.0 canais canais com com erros erros e perdas perdas Protocolos com com paralelismo (em (em pipeline) Go-back-N Repetição Selectiva 54 Camada de Transporte