aula 7 camada de transporte

38
Fundamento de Redes de Computadores Aula 7 Camada de Transporte

Upload: wab030

Post on 06-Jun-2015

1.424 views

Category:

Education


4 download

TRANSCRIPT

Page 1: Aula 7   camada de transporte

Fundamento de Redes de Computadores

Aula 7

Camada de Transporte

Page 2: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 2/38

Notas da Aula

✔ A avaliação será dia 24 de Abril.✔ Individual e sem consulta.

Page 3: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 3/38

Relembrando as Camadas

Page 4: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 4/38

Serviços da Camada de Transporte

Oferecem comunicação lógica entre processos de aplicação rodando em hospedeiros diferentes

Protocolos de transporte rodam em sistemas finais

−Lado remetente: divide as msgs da aplicação em segmentos, passa à camada de rede

−Lado destinatário: remonta os segmentos em msgs, passa à camada de aplicação

Mais de um protocolo de transporte disponível às aplicações

−Internet: TCP e UDP

aplicaçãotransporteredeenlacefísica

aplicaçãotransporteredeenlacefísica

transporte lógico fim a fim

Page 5: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 5/38

Camada de Transporte Versus Rede

Camada de rede: comunicação lógica entre hospedeiros

Camada de transporte: comunicação lógica entre processos

−Conta com e amplia os serviços da camada de rede

Analogia com a família:12 crianças mandando

carta a 12 crianças−Processos = crianças−Msgs da aplicação =

cartas nos envelopes−Hospedeiros = casas−Protocolo de transporte

= Ana e Bill−Protocolo da camada

de rede = serviço postal

Page 6: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 6/38

Protocolos da Camada de Transporte da Internet

Remessa confiável e em ordem (TCP)

−Controle de congestionamento−Controle de fluxo−Estabelecimento da conexão

Remessa não confiável e desordenada: UDP

−Extensão sem luxo do IP pelo “melhor esforço”

Serviços não disponíveis: −Garantias de atraso−Garantias de largura de banda

redeenlacefísica

redeenlacefísica

aplicaçãotransporteredeenlacefísica

networkdata linkphysical

redeenlacefísica

redeenlacefísica

redeenlacefísica

redeenlacefísica

aplicaçãotransporteredeenlacefísica

logical end-end transport

Page 7: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 7/38

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

P2P3 P4P1

hospedeiro 1 hospedeiro 2 hospedeiro 3

= processo = socket

entregando segmentosrecebidos ao socket correto

demultiplexação no destinatário:

colhendo dados de múltiplossockets, envelopando dadoscom cabeçalho (usados depoispara demultiplexação)

multiplexação no remetente:

Page 8: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 8/38

Como Funciona a Demultiplexação

Hospedeiro recebe datagramas IP

−Cada datagrama tem endereço IP de origem, endereço IP de destino

−Cada datagrama carrega 1 segmento da camada de transporte

−Cada segmento tem número de porta de origem, destino

Hospedeiro usa endereços IP & números de porta para direcionar segmento ao socket apropriado

# porta origem # porta destino

32 bits

dados daaplicação(mensagem)

outros campos de cabeçalho

formato do segmento TCP/UDP

Page 9: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 9/38

Demultiplexação não Orientada para Conexão

Cria sockets com números de porta:

−DatagramSocket mySocket1 = new DatagramSocket(12534);

−DatagramSocket mySocket2 = new DatagramSocket(12535);

Socket UDP identificado por tupla de dois elementos:

−(endereço IP destino, número porta destino)

Quando hospedeiro recebe segmento UDP:

−verifica número de porta de destino no segmento

−direciona segmento UDP para socket com esse número de porta

Datagramas IP com diferentes endereços IP de origem e/ou números de porta de origem direcionados para o mesmo socket

Page 10: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 10/38

DatagramSocket serverSocket = new DatagramSocket(6428);

ClienteIP:B

P2

cliente IP: A

P1P1P3

servidorIP: C

SP: 6428DP: 9157

SP: 9157DP: 6428

SP: 6428DP: 5775

SP: 5775DP: 6428

SP oferece “endereço de retorno”

Page 11: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 11/38

Demultiplexação orientada para conexão

Socket TCP identificado por tupla de 4 elementos:

−Endereço IP de origem−Número de porta de

origem−Endereço IP de destino−Número de porta de

destinoHospedeiro destinatário

usa todos os quatro valores para direcionar segmento ao socket apropriado

Hospedeiro servidor pode admitir muitos sockets TCP simultâneos:

−Cada socket identificado por usa própria tupla de 4

Servidores Web têm diferentes sockets para cada cliente conectando

−HTTP não persistente terá diferentes sockets para cada requisição

Page 12: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 12/38

clienteIP:B

P1

cliente IP: A

P1P2P4

servidorIP: C

SP: 9157DP: 80

SP: 9157DP: 80

P5 P6 P3

D-IP:CS-IP: AD-IP:C

S-IP: B

SP: 5775DP: 80

D-IP:CS-IP: B

Page 13: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 13/38

Demultiplexação orientada para conexão: servidor Web threaded

clienteIP:B

P1

cliente IP: A

P1P2

servidorIP: C

SP: 9157DP: 80

SP: 9157DP: 80

P4 P3

D-IP:CS-IP: AD-IP:C

S-IP: B

SP: 5775DP: 80

D-IP:CS-IP: B

Page 14: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 14/38

Transporte não Orientado para Conexão: UDP

UDP: User Datagram Protocol [RFC 768]

Protocolo de transporte da Internet “sem luxo”, básico

Serviço de “melhor esforço”, segmentos UDP podem ser:

−perdidos−entregues à aplicação fora da

ordemSem conexão:

−sem handshaking entre remetente e destinatário UDP

−Cada segmento UDP tratado independente dos outros

Por que existe um UDP?−Sem estabelecimento de

conexão (que pode gerar atraso)

−Simples: sem estado de conexão no remetente, destinatário

−Cabeçalho de segmento pequeno

−Sem controle de congestionamento: UDP pode transmitir o mais rápido possível

Page 15: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 15/38

UDP continuando

Normalmente usado para streaming de aplicações de multimídia

−Tolerante a perdas−Sensível à taxa

Outros usos do UDP−DNS−SNMP

Transferência confiável por UDP: aumenta confiabilidade na camada de aplicação

−recuperação de erro específica da aplicação!

# porta origem # porta dest.

32 bits

dados daaplicação(mensagem)

formato de segmento UDP

tamanho soma verif.tamanho,

em bytes, dosegmento UDP,

incluindocabeçalho

Page 16: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 16/38

Soma de Verificação UDP

Remetente:

Trata conteúdo de segmento como sequência de inteiros de 16 bits

Soma de verificação (checksum): adição (soma por complemento de 1) do conteúdo do segmento

Remetente coloca valor da soma de verificação no campo de soma de verificação UDP

Destinatário:

Calcula soma de verificação do segmento recebido

Verifica se soma de verificação calculada igual ao valor do campo de soma de verificação:

NÃO – erro detectadoSIM – nenhum erro detectado. Mas

pode haver erros mesmo assim? Vamos ver mais pra frente

Lembram do digito verificador de documentos?

Objetivo: detectar “erros” (ex., bits invertidos) no segmento transmitido

Page 17: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 17/38

Exemplo de Soma de Verificação da Internet

nota−Ao somar números, um carryout do bit mais

significativo precisa ser somado ao resultado

exemplo: somar dois inteiros de 16 bits

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 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 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

contorna

somasoma de

verificação

Page 18: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 18/38

Princípios de transferência confiável de dados

● Importante nas camadas de aplicação, transporte e enlace

● Lista dos 10 mais importantes tópicos de redes!● Características do canal confiável determinarão

complexidade do protocolo de transferência confiável (rdt – Reliable Data Transfer)

Page 19: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 19/38

Transferência confiável de dados: introdução

rdt_send(): chamado de cima, (p. e., pela apl.). Dados passados para remeter à camada superior do destinatário

deliver_data(): chamado pela rdt para remeter dados para cima

udt_send(): chamado pela rdt, para transferir pacote por canal não confiável ao destinatário

rdt_rcv(): chamado quando pacote chega no lado destinatário do canal

ladoremetente

ladodestinatário

Page 20: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 20/38

vamos:Desenvolver de forma incremental os lados remetente e destinatário do protocolo de transferência confiável de dados (rdt)Considerar apenas a transf. de dados unidirecional●Mas informações de controle fluirão nas duas direções!

Usar máquinas de estado finito (FSM) para especificar remetente, destinatário

estado1

estado2

evento causando transição de estadoações tomadas sobre transição de estado

estado: quando neste “estado”, próximo

estado determinadoexclusivamente pelo

próximo evento

eventoações

Page 21: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 21/38

Rdt1.0: Transferência confiável por canal confiável

Canal subjacente perfeitamente confiávelSem erros de bitSem perda de pacotesFSMs separadas para remetente e destinatário:

−remetente envia dados para canal subjacente−destinatário lê dados do canal subjacente

Esperachamadade cima packet =

make_pkt(dados)udt_send(pacote)

rdt_send(dados)

extract (pacote, dados)deliver_data(dados)

Esperachamadade baixo

rdt_rcv(pacote)

remetente destinatário

Page 22: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 22/38

Rdt2.0: Canal com erros de bit

Canal subjacente pode inverter bits no pacote−Soma de verificação para detectar erros de bit

A questão: como recuperar-se dos erros:−Reconhecimentos (ACKs): destinatário diz explicitamente ao

remetente que o pacote foi recebido OK−Reconhecimentos negativas (NAKs): destinatário diz

explicitamente ao remetente que o pacote teve erros−Remetente retransmite pacote ao receber NAK

Novos mecanismos no rdt2.0 (além do rdt1.0):−Detecção de erro−Feedback do destinatário: msgs de controle (ACK,NAK)

destinatário->remetente

Page 23: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 23/38

Rdt2.0: Especificação da FSM (Máquina de Estado Finito)

Esperachamadade cima

snkpkt = make_pkt(dados,soma_verif)udt_send(pctenv)

extract(pctrec,dados)deliver_data(dados)udt_send(ACK)

rdt_rcv(pctrec) && notcorrupt(pctrec)

rdt_rcv(pctrec) && isACK(pctrec)

udt_send(pctenv)

rdt_rcv(pctrec) && isNAK(pctrec)

udt_send(NAK)

rdt_rcv(pctrec) && corrupt(pctrec)

EsperaACK ou

NAK

Esperachamadade baixoremetente

destinatário

rdt_send(dados)

Λ

Page 24: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 24/38

Rdt2.0: Operação sem erros

Esperachamadade cima

snkpkt = make_pkt(dados,soma_verif)udt_send(pctenv)

extract(pctrec,dados)deliver_data(dados)udt_send(ACK)

rdt_rcv(pctrec) && notcorrupt(pctrec)

rdt_rcv(pctrec) && isACK(pctrec)

udt_send(pctenv)

rdt_rcv(pctrec) && isNAK(pctrec)

udt_send(NAK)

rdt_rcv(pctrec) && corrupt(pctrec)

EsperaACK ou

NAK

Esperachamadade baixoremetente

destinatário

rdt_send(dados)

Λ

1

2

3

4

5

6

Page 25: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 25/38

rdt2.0: Cenário de erro

Esperachamadade cima

snkpkt = make_pkt(dados,soma_verif)udt_send(pctenv)

extract(pctrec,dados)deliver_data(dados)udt_send(ACK)

rdt_rcv(pctrec) && notcorrupt(pctrec)

rdt_rcv(pctrec) && isACK(pctrec)

udt_send(pctenv)

rdt_rcv(pctrec) && isNAK(pctrec)

udt_send(NAK)

rdt_rcv(pctrec) && corrupt(pctrec)

EsperaACK ou

NAK

Esperachamadade baixoremetente

destinatário

rdt_send(dados)

Λ

1

2

3

4

5

6

7

Page 26: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 26/38

Rdt2.0 tem uma falha fatal!

O que acontece se ACK/NAK for corrompido?

−remetente não sabe o que aconteceu no destinatário!

−não pode simplesmente retransmitir: possível duplicação

Tratando de duplicatas: −remetente retransmite

pacote atual se ACK/NAK corrompido

−remetente acrescenta número de sequência a cada pacote

−destinatário descarta (não sobe) pacote duplicado

remetente envia um pacote, depois espera resposta dodestinatário

Page 27: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 27/38

Rdt2.1: Remetente trata de ACK/NAKs corrompidos

Esperachamada 0

de cima

pctenv = make_pkt(0, dados, checksum)udt_send(pctenv)

rdt_send(dados)

EsperaACK ouNAK 0 udt_send(pctenv)

rdt_rcv(pctrec) && ( corrupt(pctrec) ||isNAK(pctrec) )

pctenv = make_pkt(1, dados, checksum)udt_send(pctenv)

rdt_send(dados)

rdt_rcv(pctrec) && notcorrupt(pctrec) && isACK(pctrec)

udt_send(pctenv)

rdt_rcv(pctrec) && ( corrupt(pctrec) ||isNAK(pctrec) )

rdt_rcv(pctrec) && notcorrupt(pctrec) && isACK(pctrec)

Esperachamada 1

de cima

EsperaACK ou NAK 1

ΛΛ

Page 28: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 28/38

Espera0 decima

pctenv = make_pkt(NAK, chksum)udt_send(pctenv)

rdt_rcv(pctrec) && not corrupt(pctrec) && has_seq0(pctrec)

rdt_rcv(pctrec) && notcorrupt(pctrec)

&& has_seq1(pctrec)

extract(pctrec,dados)deliver_data(dados)pctenv = make_pkt(ACK, chksum)udt_send(pctenv)

Espera1 de baixo

rdt_rcv(pctrec) && notcorrupt(pctrec) && has_seq0(pctrec)

extract(pctrec,dados)deliver_data(dados)pctenv = make_pkt(ACK, chksum)udt_send(pctenv)

rdt_rcv(pctrec) && (corrupt(pctrec)

pctenv = make_pkt(ACK, chksum)udt_send(pctenv)

rdt_rcv(pctrec) && not corrupt(pctrec) && has_seq1(pctrec)

rdt_rcv(pctrec) && (corrupt(pctrec)

pctenv = make_pkt(ACK, chksum)udt_send(pctenv)

pctenv = make_pkt(NAK, chksum)udt_send(pctenv)

Page 29: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 29/38

Rdt2.1: Discussão

Remetente:− # seq acrescentado ao

pkt−dois #s seq. (0,1)

bastarão. Por quê?−deve verificar se

ACK/NAK recebido foi corrompido

−o dobro de estados−estado de “lembrar” se

pacote “atual” tem # seq. 0 ou 1

Destinatário:−deve verificar se pacote

recebido está duplicado

−estado indica se 0 ou 1 é # seq. esperado do pacote

nota: destinatário não sabe se seu último ACK/NAK foi recebido OK no remetente

Page 30: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 30/38

Rdt2.2: Um protocolo sem NAK

Mesma funcionalidade de rdt2.1, usando apenas ACKs

Em vez de NAK, destinatário envia ACK para último pacote recebido OK

−Destinatário precisa incluir explicitamente # seq. do pacote sendo reconhecido com ACK

ACK duplicado no remetente resulta na mesma ação de NAK: retransmitir pacote atual

Page 31: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 31/38

Rdt2.2: Fragmentos do remetente, destinatário

Esperachamada 0

de cima

pctenv = make_pkt(0, dados, checksum)udt_send(pctenv)

rdt_send(dados)

udt_send(pctenv)

rdt_rcv(pctrec) && ( corrupt(pctrec) || isACK(pctrec,1) )

rdt_rcv(pctrec) && notcorrupt(pctrec) && isACK(pctrec,0)

EsperaACK

0

fragmento FSMdo remetente

Espera0 debaixo

rdt_rcv(pctrec) && notcorrupt(pctrec) && has_seq1(pctrec) extract(pctrec,dados)deliver_data(dados)pctenv = make_pkt(ACK1, chksum)udt_send(pctenv)

rdt_rcv(pctrec) && (corrupt(pctrec) || has_seq1(pctrec))udt_send(pctenv)

fragmento FSMdo destinatário

Λ

Page 32: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 32/38

Rdt3.0: Canais com erros e perda

nova suposição: canal subjacente também pode perder pacotes (dados ou ACKs)

−soma de verificação, # seq., ACKs, retransmissões serão úteis, mas não suficientes

Técnica: remetente espera quantidade “razoável” de tempo por ACK

Retransmite se não chegar ACK nesse tempo

Se pct (ou ACK) simplesmente atrasado (não perdido):

−Retransmissão será duplicada, mas os #s de seq. já cuidam disso

−Destinatário deve especificar # seq. do pacote sendo reconhecido com ACK

Requer contador regressivo

Page 33: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 33/38

Remetente rdt3.0

pctenv = make_pkt(0, dados, checksum)udt_send(pctenv)start_timer

rdt_send(dados)

EsperaACK0

rdt_rcv(pctrec) && ( corrupt(pctrec) ||isACK(pctrec,1) )

Esperachamada 1de cima

pctenv = make_pkt(1, dados, checksum)udt_send(pctenv)start_timer

rdt_send(dados)

rdt_rcv(pctrec) && notcorrupt(pctrec) && isACK(pctrec,0)

rdt_rcv(pctrec) && ( corrupt(pctrec) ||isACK(pctrec,0) )

rdt_rcv(pctrec) && notcorrupt(pctrec) && isACK(pctrec,1)

stop_timerstop_timer

udt_send(pctenv)start_timer

timeout

udt_send(pctenv)start_timer

timeout

rdt_rcv(pctrec)

Esperachamada 0de cima

EsperaACK1

Λrdt_rcv(pctrec)

ΛΛ

Λ

Page 34: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 34/38

RDT 3.0 em ação

Page 35: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 35/38

RDT 3.0 em ação

Page 36: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 36/38

Desempenho do rdt3.0

rdt3.0 funciona, mas com desempenho ruim pois fica esperando um ack.

ex.: enlace 1 Gbps, 15 ms atraso propriedade, pacote 8000 bits:

U remet: utilização – fração do tempo remet. ocupado enviando

U remet

= 0,008

30,008 = 0,00027

microseconds

L / R

RTT + L / R =

Pct. 1 KB cada 30 ms -> 33 kB/s vazão em enlace de 1 Gbps

protocolo de rede limita uso de recursos físicos!

ndosmicrosseguR

Ldtrans 8

bps10

bits80009

===

Page 37: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 37/38

RDT 3.0: Operação Pare e Espere

U remet

= 0,008

30,008 = 0,00027

microseconds

L / R

RTT + L / R =

Page 38: Aula 7   camada de transporte

Fundamentos de Redes de Computadores 38/38

Slides baseados no material do livro Fundamento de Redes da Pearson Editora.