A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

3: Camada de Transporte3a-1 Capítulo 3: Camada de Transporte Objetivos: compreender os princípios atrás dos serviços da camada de transporte: multiplexação/

Apresentações semelhantes


Apresentação em tema: "3: Camada de Transporte3a-1 Capítulo 3: Camada de Transporte Objetivos: compreender os princípios atrás dos serviços da camada de transporte: multiplexação/"— Transcrição da apresentação:

1 3: Camada de Transporte3a-1 Capítulo 3: Camada de Transporte Objetivos: compreender os princípios atrás dos serviços da camada de transporte: multiplexação/ demultiplexação transferência confiável de dados controle de fluxo controle de congestionamento aprender os protocolos da camada de transporte da Internet: UDP: transporte sem conexão TCP: transporte orientado a conexões Controle de congestionamento do TCP

2 3: Camada de Transporte3a-2 Serviços e protocolos de transporte provê comunicação lógica entre processos de aplicação executando em hospedeiros diferentes protocolos de transporte executam em sistemas finais: lado transmissor: quebra as mensagens das aplicações 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 existem mais de um protocolo de transporte disponível para as aplicações Internet: TCP e UDP aplicação transporte rede enlace física rede enlace física aplicação transporte rede enlace física rede enlace física rede enlace física rede enlace física rede enlace física transporte lógico fim a fim

3 3: Camada de Transporte3a-3 Camadas de Transporte x Rede camada de rede: comunicação lógica entre hospedeiros camada de transporte: comunicação lógica entre processos depende da camada rede e estende os serviços por ela oferecidos

4 3: Camada de Transporte3a-4 Protocolos da camada de transporte Internet entrega confiável, ordenada (TCP) controle de congestionamento controle de fluxo estabelecimento de conexão (setup) entrega não confiável, não ordenada: UDP extensão sem frescuras do melhor esforço do IP serviços não disponíveis: garantias de atraso garantias de largura de banda aplicação transporte rede enlace física rede enlace física aplicação transporte rede enlace física rede enlace física rede enlace física rede enlace física rede enlace física transporte lógico fim a fim

5 3: Camada de Transporte3a-5 Multiplexação/demultiplexação aplicação transporte rede enlace física P1 aplicação transporte rede enlace física aplicação transporte rede enlace física P2 P3 P4 P1 host 1 host 2 host 3 = processo= socket Entrega dos segmentos recebidos ao socket correto Demultiplexação no receptor: reúne dados de muitos sockets, envelopa os dados com o cabeçalho (usado posteriormente para a demultiplexação) Multiplexação no transmisspr:

6 3: Camada de Transporte3a-6 host 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 cada segmento possui números das portas origem e destino (lembre: números de portas bem conhecidas para aplicações específicas) host usa os endereços IP e os números das portas para direcionar o segmento ao socket apropriado Como funciona a demultiplexação porta remetenteporta receptor 32 bits dados da aplicação (mensagem) outros campos do cabeçalho formato de segmento TCP/UDP

7 3: Camada de Transporte3a-7 Demultiplexação sem Conexões socket UDP identificado pela dupla: (end IP dest, no. da porta destino) Quando host recebe segmento UDP: verifica no. da porta de destino no segmento encaminha o segmento UDP para o socket com aquele no. de porta Datagramas IP com diferentes endereços IP origem e/ou números de porta origem são encaminhados para o mesmo socket

8 3: Camada de Transporte3a-8 Demultiplexação sem Conexões (cont) Cliente IP:B P2 cliente IP: A P1 P3 servidor IP: C SP: 6428 DP: 9157 SP: 9157 DP: 6428 SP: 6428 DP: 5775 SP: 5775 DP: 6428 SP (source port) provê endereço de retorno

9 3: Camada de Transporte3a-9 Demultiplexação Orientada a Conexões Socket TCP identificado pela 4- dupla: 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 direcionar o segmento para o socket apropriado Servidor pode dar suporte a muitos sockets TCP simultâneos: cada socket é identificado pela sua própria 4-dupla Servidores Web têm sockets diferentes para cada conexão cliente HTTP não persistente terá sockets diferentes para cada pedido

10 3: Camada de Transporte3a-10 Demultiplexação Orientada a Conexões (cont) Cliente IP:B P1 cliente IP: A P1P2P4 servidor IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P5P6P3 D-IP:C S-IP: A D-IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B

11 3: Camada de Transporte3a-11 Demultiplexação Orientada a Conexões: Servidor Web com Threads Cliente IP:B P1 cliente IP: A P1P2 servidor IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P4 P3 D-IP:C S-IP: A D-IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B

12 3: Camada de Transporte3a-12 UDP: User Datagram Protocol [RFC 768] Protocolo de transporte da Internet mínimo, sem frescura, Serviço melhor esforço, segmentos UDP podem ser: perdidos entregues à aplicação fora de ordem do remesso sem conexão: não há setup UDP entre remetente, receptor tratamento independente de cada segmento UDP Por quê existe um UDP? elimina estabelecimento de conexão (o que pode causar retardo) simples: não se mantém estado da conexão no remetente/receptor pequeno cabeçalho de segmento sem controle de congestionamento: UDP pode transmitir o mais rápido possível

13 3: Camada de Transporte3a-13 Mais sobre UDP muito utilizado para apls. de meios contínuos (voz, vídeo) tolerantes de perdas sensíveis à taxa de transmissão outros usos de UDP: DNS (nomes) SNMP (gerenciamento) transferência confiável com UDP: incluir confiabilidade na camada de aplicação recuperação de erro específica à apl.! porta origemporta dest. 32 bits Dados de aplicação (mensagem) Formato do segmento UDP comprimento checksum Comprimento em bytes do segmento UDP, incluindo cabeçalho

14 3: Camada de Transporte3a-14 Checksum UDP Remetente: trata conteúdo do segmento como seqüência de inteiros de 16-bits campo checksum zerado checksum: soma (adição usando complemento de 1) do conteúdo do segmento remetente coloca complemento do valor da soma no campo checksum de UDP Receptor: calcula checksum do segmento recebido verifica se checksum computado é zero: NÃO - erro detectado SIM - nenhum erro detectado. Mas ainda pode ter erros? Veja depois …. Meta: detectar erro (e.g., bits invertidos) no segmento transmitido

15 3: Camada de Transporte3a-15 Exemplo do Checksum Internet Note Ao adicionar números, o transbordo do bit mais significativo deve ser adicionado o resultado Exemplo: adição de dois inteiros de 16-bits transbordo soma checksum

16 3: Camada de Transporte3a-16 Princípios de Transferência confiável de dados (rdt) importante nas camadas de transporte, enlace na lista dos 10 tópicos mais importantes em redes! características do canal não confiável determinam a complexidade de um protocolo de transferência confiável de dados (rdt)

17 3: Camada de Transporte3a-17 Transferência confiável de dados (rdt): como começar send side receive side rdt_send(): chamada de cima, (p.ex.,pela apl.). Dados recebidos p/ entregar à camada sup. do receptor udt_send(): chamada por rdt, p/ transferir pacote pelo canal ñ confiável ao receptor rdt_rcv(): chamada quando pacote chega no lado receptor do canal deliver_data(): chamada por rdt p/ entregar dados p/ camada superior

18 3: Camada de Transporte3a-18 Transferência confiável de dados (rdt): como começar Iremos: desenvolver incrementalmente os lados remetente, receptor do protocolo RDT considerar apenas fluxo unidirecional de dados mas info de controle flui em ambos os sentidos! Usar máquinas de estados finitos (FSM) p/ especificar remetente, receptor estado 1 estado 2 evento causador da transição de estado ações executadas ao mudar de estado estado: neste estado o próximo estado é determinado unicamente pelo próximo evento evento ações

19 3: Camada de Transporte3a-19 Rdt1.0: transferência confiável usando um canal confiável canal subjacente perfeitamente confiável não tem erros de bits não tem perda de pacotes FSMs separadas para remetente e receptor: remetente envia dados pelo canal subjacente receptor recebe dados do canal subjacente Wait for call from above packet = make_pkt(data) udt_send(packet) rdt_send(data) Wait for call from below rdt_rcv(packet) transmissor receptor

20 3: Camada de Transporte3a-20 Rdt2.0: canal com erros de bits canal subjacente pode inverter bits no pacote lembre-se: checksum UDP pode detectar erros de bits a questão: como recuperar dos erros? reconhecimentos (ACKs): receptor avisa explicitamente ao remetente que pacote chegou bem reconhecimentos negativos (NAKs): receptor avisa explicitamente ao remetente que pacote tinha erros remetente retransmite pacote ao receber um NAK cenários humanos usando ACKs, NAKs? novos mecanismos em rdt2.0 (em relação ao rdt1.0 ): detecção de erros realimentação pelo receptor: msgs de controle (ACK,NAK) receptor->remetente

21 3: Camada de Transporte3a-21 rdt2.0: especificação da FSM Wait for call from above snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below transmissor receptor rdt_send(data)

22 3: Camada de Transporte3a-22 rdt2.0: operação sem erros Wait for call from above snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below rdt_send(data)

23 3: Camada de Transporte3a-23 rdt2.0: cenário com erros Wait for call from above snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below rdt_send(data)

24 3: Camada de Transporte3a-24 rdt2.0 tem uma falha fatal! O que acontece se ACK/NAK com erro? Remetente não sabe o que se passou no receptor! não se pode apenas retransmitir: possibilidade de pacotes duplicados O que fazer? remetente usa ACKs/NAKs p/ ACK/NAK do receptor? E se perder ACK/NAK do remetente? retransmitir, mas pode causar retransmissão de pacote recebido certo! Lidando c/ duplicação: remetente inclui número de seqüência p/ cada pacote remetente retransmite pacote atual se ACK/NAK recebido com erro receptor descarta (não entrega) pacote duplicado Remetente envia um pacote, e então aguarda resposta do receptor pára e espera

25 3: Camada de Transporte3a-25 rdt2.1: remetente, trata ACK/NAKs c/ erro Wait for call 0 from above sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) Wait for ACK or NAK 0 udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) rdt_send(data) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) Wait for call 1 from above Wait for ACK or NAK 1

26 3: Camada de Transporte3a-26 rdt2.1: receptor, trata ACK/NAKs com erro Wait for 0 from below sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Wait for 1 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt)

27 3: Camada de Transporte3a-27 rdt2.1: discussão Remetente: no. de seq no pacote bastam dois nos. de seq. (0,1). Por quê? deve checar se ACK/NAK recebido tinha erro duplicou o no. de estados estado deve lembrar se pacote corrente tem no. de seq. 0 ou 1 Receptor: deve checar se pacote recebido é duplicado estado indica se no. de seq. esperado é 0 ou 1 note: receptor não tem como saber se último ACK/NAK foi recebido bem pelo remetente

28 3: Camada de Transporte3a-28 rdt2.2: um protocolo sem NAKs mesma funcionalidade que rdt2.1, só com ACKs ao invés de NAK, receptor envia ACK p/ último pacote recebido bem receptor deve incluir explicitamente no. de seq do pacote reconhecido ACK duplicado no remetente resulta na mesma ação que o NAK: retransmite pacote atual

29 3: Camada de Transporte3a-29 rdt2.2: fragmentos do transmissor e receptor Wait for call 0 from above sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) Wait for ACK 0 Fragmento da FSM do transmissor Wait for 0 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt)) udt_send(sndpkt) Fragmento da FSM do receptor

30 3: Camada de Transporte3a-30 rdt3.0: canais com erros e perdas Nova suposição: canal subjacente também pode perder pacotes (dados ou ACKs) checksum, no. de seq., ACKs, retransmissões podem ajudar, mas não serão suficientes P: como lidar com perdas? remetente espera até ter certeza que se perdeu pacote ou ACK, e então retransmite eca!: desvantagens? Abordagem: remetente aguarda um tempo razoável pelo ACK retransmite se nenhum ACK for recebido neste intervalo se pacote (ou ACK) apenas atrasado (e não perdido): retransmissão será duplicada, mas uso de no. de seq. já cuida disto receptor deve especificar no. de seq do pacote sendo reconhecido requer temporizador

31 3: Camada de Transporte3a-31 rdt3.0: remetente sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) Wait for ACK0 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) Wait for call 1 from above sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) stop_timer timeout udt_send(sndpkt) start_timer timeout rdt_rcv(rcvpkt) Wait for call 0from above Wait for ACK1 rdt_rcv(rcvpkt) udt_send(sndpkt) start_timer

32 3: Camada de Transporte3a-32 rdt3.0 em ação

33 3: Camada de Transporte3a-33 rdt3.0 em ação

34 3: Camada de Transporte3a-34 Desempenho de rdt3.0 rdt3.0 funciona, porém seu desempenho é muito ruim exemplo: enlace de 1 Gbps, retardo fim a fim de 15 ms, pacote de 1KB: T transmitir = 8kb/pacote 10**9 b/seg = 8 microseg pac. de 1KB a cada 30 mseg -> vazão de 33kB/seg num enlace de 1 Gbps protocolo limita uso dos recursos físicos!

35 3: Camada de Transporte3a-35 rdt3.0: stop-and-wait operation transmissorreceptor RTT tx último bit do pacote, t = L / R chegada do 1º bit do pacote chegada do último bit, envia ACK chegada do ACK, envia próximo pacote, t = RTT + L / R transm. do 1º bit do pacote, t = 0

36 3: Camada de Transporte3a-36 Protocolos com paralelismo (pipelined) Paralelismo (pipelining): remetente admite múltiplos pacotes em trânsito, ainda não reconhecidos faixa de números de seqüência deve ser aumentada buffers no remetente e/ou no receptor Duas formas genéricas de protocolos com paralelismo: Go-back-N, retransmissão seletiva

37 3: Camada de Transporte3a-37 Paralelismo: maior utilização transm. do 1º bit do pacote, t = 0 transmissorreceptor RTT tx do último bit, t = L / R chegada do primeiro bit chegada do último bit, envia ACK chegada do ACK, envia próximo pacote, t = RTT + L / R cheg. do último bit do 2 o pct., envia ACK cheg. do último bit do 3o pct., envia ACK Aumenta a utilização por um fator de 3!

38 3: Camada de Transporte3a-38 Go-back-N (GBN) Remetente: no. de seq. de k-bits no cabeçalho do pacote admite janela de até N pacotes consecutivos não reconhecidos ACK(n): reconhece todos pacotes, até e inclusive no. de seq n - ACK cumulativo pode receber ACKs duplicados (veja receptor) temporizador para cada pacote em trânsito timeout(n): retransmite pacote n e todos os pacotes com no. de seq maiores na janela

39 3: Camada de Transporte3a-39 GBN: FSM estendida do remetente

40 3: Camada de Transporte3a-40 GBN: FSM estendida do receptor receptor simples: usa apenas ACK: sempre envia ACK para pacote recebido bem com o maior no. de seq. em-ordem pode gerar ACKs duplicados só precisa se lembrar do expectedseqnum pacote fora de ordem: descarta (não armazena) -> receptor não usa buffers! manda ACK de pacote com maior no. de seq em-ordem expectedseqnum=expectedseqnum+1

41 3: Camada de Transporte3a-41 GBN em ação

42 3: Camada de Transporte3a-42 Retransmissão seletiva receptor reconhece individualmente todos os pacotes recebidos corretamente armazena pacotes no buffer, conforme necessário, para posterior entrega em-ordem à camada superior remetente apenas re-envia pacotes para os quais ACK não recebido temporizador de remetente para cada pacote sem ACK janela do remetente N nos. de seq consecutivos outra vez limita nos. de seq de pacotes enviados, mas ainda não reconhecidos

43 3: Camada de Transporte3a-43 Retransmissão seletiva: janelas de remetente, receptor

44 3: Camada de Transporte3a-44 Retransmissão seletiva dados de cima: se próx. no. de seq na janela, envia pacote timeout(n): reenvia pacote n, reiniciar temporizador ACK(n) em [sendbase,sendbase+N]: marca pacote n recebido se n for menor pacote não reconhecido, avança base da janela ao próx. no. de seq não reconhecido pacote n em [rcvbase, rcvbase+N-1] envia ACK(n) fora de ordem: buffer em ordem: entrega (tb. entrega pacotes em ordem no buffer), avança janela p/ próxima pacote ainda não recebido pacote n em [rcvbase-N,rcvbase-1] ACK(n) senão: ignora receptor remetente

45 3: Camada de Transporte3a-45 Retransmissão seletiva em ação

46 3: Camada de Transporte3a-46 Retransmissão seletiva: dilema Exemplo: nos. de seq : 0, 1, 2, 3 tam. de janela =3 receptor não vê diferença entre os dois cenários! incorretamente passa dados duplicados como novos em (a) Q: qual a relação entre tamanho de no. de seq e tamanho de janela?


Carregar ppt "3: Camada de Transporte3a-1 Capítulo 3: Camada de Transporte Objetivos: compreender os princípios atrás dos serviços da camada de transporte: multiplexação/"

Apresentações semelhantes


Anúncios Google