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 Metas do capítulo: r compreender os princípios atrás dos serviços da camada de transporte:

Apresentações semelhantes


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

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

2 3: Camada de Transporte3a-2 Conteúdo do Capítulo 3 r 3.1 Serviços da camada de transporte r 3.2 Multiplexação e demultiplexação r 3.3 UDP: Transporte não orientado a conexão r 3.4 Princípios da transferência confiável de dados r 3.5 Transporte orientado a conexão: TCP m transferência confiável m controle de fluxo m gerenciamento de conexões r 3.6 Princípios de controle de congestionamento r 3.7 Controle de congestionamento do TCP

3 3: Camada de Transporte3a-3 Serviços e protocolos de transporte r provê comunicação lógica entre processos de aplicação executando em hospedeiros diferentes r protocolos de transporte executam em sistemas finais: m lado transmissor: quebra as mensagens das aplicações em segmentos, repassa-os para a camada de rede m lado receptor: remonta as mensagens a partir dos segmentos, repassa-as para a camada de aplicação r existem mais de um protocolo de transporte disponível para as aplicações m 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

4 3: Camada de Transporte3a-4 Camadas deTransporte x rede r camada de rede: comunicação lógica entre hospedeiros r camada de transporte: comunicação lógica entre processos m depende de, estende serviços da camada de rede Analogia doméstica: 12 crianças enviando cartas para 12 crianças r processos = crianças r mensagens da apl. = cartas nos envelopes r hospedeiros = casas r protocolo de transporte = Ann e Bill r protocolo da camada de rede = serviço postal

5 3: Camada de Transporte3a-5 Protocolos da camada de transporte Internet r entrega confiável, ordenada (TCP) m controle de congestionamento m controle de fluxo m estabelecimento de conexão (setup) r entrega não confiável, não ordenada: UDP m extensão sem frescuras do melhor esforço do IP r serviços não disponíveis: m garantias de atraso m 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

6 3: Camada de Transporte3a-6 Conteúdo do Capítulo 3 r 3.1 Serviços da camada de transporte r 3.2 Multiplexação e demultiplexação r 3.3 UDP: Transporte não orientado a conexão r 3.4 Princípios da transferência confiável de dados r 3.5 Transporte orientado a conexão: TCP m transferência confiável m controle de fluxo m gerenciamento de conexões r 3.6 Princípios de controle de congestionamento r 3.7 Controle de congestionamento do TCP

7 3: Camada de Transporte3a-7 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 transm.:

8 3: Camada de Transporte3a-8 r host recebe os datagramas IP m cada datagrama possui os endereços IP da origem e do destino m cada datagrama transporta 1 segmento da camada de transporte m cada segmento possui números das portas origem e destino (lembre: números de portas bem conhecidas para aplicações específicas) r 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

9 3: Camada de Transporte3a-9 Demultiplexação sem Conexões r Crie sockets com números de porta: DatagramSocket mySocket1 = new DatagramSocket(99111); DatagramSocket mySocket2 = new DatagramSocket(99222); r socket UDP identificado pela dupla: (end IP dest, no. da porta destino) r Quando host recebe segmento UDP: m verifica no. da porta de destino no segmento m encaminha o segmento UDP para o socket com aquele no. de porta r Datagramas IP com diferentes endereços IP origem e/ou números de porta origem são encaminhados para o mesmo socket

10 3: Camada de Transporte3a-10 Demultiplexação sem Conexões (cont) DatagramSocket serverSocket = new DatagramSocket(6428); 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

11 3: Camada de Transporte3a-11 Demultiplexação Orientada a Conexões r Socket TCP identificado pela 4- dupla: m endereço IP origem m número da porta origem m endereço IP destino m número da porta destino r receptor usa todos os quatro valores para direcionar o segmento para o socket apropriado r Servidor pode dar suporte a muitos sockets TCP simultâneos: m cada socket é identificado pela sua própria 4-dupla r Servidores Web têm sockets diferentes para cada conexão cliente m HTTP não persistente terá sockets diferentes para cada pedido

12 3: Camada de Transporte3a-12 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

13 3: Camada de Transporte3a-13 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

14 3: Camada de Transporte3a-14 Conteúdo do Capítulo 3 r 3.1 Serviços da camada de transporte r 3.2 Multiplexação e demultiplexação r 3.3 UDP: Transporte não orientado a conexão r 3.4 Princípios da transferência confiável de dados r 3.5 Transporte orientado a conexão: TCP m transferência confiável m controle de fluxo m gerenciamento de conexões r 3.6 Princípios de controle de congestionamento r 3.7 Controle de congestionamento do TCP

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

16 3: Camada de Transporte3a-16 Mais sobre UDP r muito utilizado para apls. de meios contínuos (voz, vídeo) m tolerantes de perdas m sensíveis à taxa de transmissão r outros usos de UDP (por quê?): m DNS (nomes) m SNMP (gerenciamento) r transferência confiável com UDP: incluir confiabilidade na camada de aplicação m 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

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

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

19 3: Camada de Transporte3a-19 Conteúdo do Capítulo 3 r 3.1 Serviços da camada de transporte r 3.2 Multiplexação e demultiplexação r 3.3 UDP: Transporte não orientado a conexão r 3.4 Princípios da transferência confiável de dados r 3.5 Transporte orientado a conexão: TCP m transferência confiável m controle de fluxo m gerenciamento de conexões r 3.6 Princípios de controle de congestionamento r 3.7 Controle de congestionamento do TCP

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

21 3: Camada de Transporte3a-21 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

22 3: Camada de Transporte3a-22 Transferência confiável de dados (rdt): como começar Iremos: r desenvolver incrementalmente os lados remetente, receptor do protocolo RDT r considerar apenas fluxo unidirecional de dados m mas info de controle flui em ambos os sentidos! r 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

23 3: Camada de Transporte3a-23 Rdt1.0: transferência confiável usando um canal confiável r canal subjacente perfeitamente confiável m não tem erros de bits m não tem perda de pacotes r FSMs separadas para remetente e receptor: m remetente envia dados pelo canal subjacente m 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

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

25 3: Camada de Transporte3a-25 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)

26 3: Camada de Transporte3a-26 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)

27 3: Camada de Transporte3a-27 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)

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

29 3: Camada de Transporte3a-29 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

30 3: Camada de Transporte3a-30 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)

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

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

33 3: Camada de Transporte3a-33 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

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

35 3: Camada de Transporte3a-35 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

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

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

38 3: Camada de Transporte3a-38 Desempenho de rdt3.0 r rdt3.0 funciona, porém seu desempenho é muito ruim r 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 m pac. de 1KB a cada 30 mseg -> vazão de 33kB/seg num enlace de 1 Gbps m protocolo limita uso dos recursos físicos!

39 3: Camada de Transporte3a-39 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

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

41 3: Camada de Transporte3a-41 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!

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

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

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

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

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

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

48 3: Camada de Transporte3a-48 Retransmissão seletiva dados de cima: r se próx. no. de seq na janela, envia pacote timeout(n): r reenvia pacote n, reiniciar temporizador ACK(n) em [sendbase,sendbase+N]: r marca pacote n recebido r 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] r envia ACK(n) r fora de ordem: buffer r 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] r ACK(n) senão: r ignora receptor remetente

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

50 3: Camada de Transporte3a-50 Retransmissão seletiva: dilema Exemplo: r nos. de seq : 0, 1, 2, 3 r tam. de janela =3 r receptor não vê diferença entre os dois cenários! r 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 Metas do capítulo: r compreender os princípios atrás dos serviços da camada de transporte:"

Apresentações semelhantes


Anúncios Google