50
3: Camada de Transporte 3a-1 Capítulo 3: Camada de Transporte Metas do capítulo: 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

Capítulo 3: Camada de Transporte

  • Upload
    suchin

  • View
    27

  • Download
    0

Embed Size (px)

DESCRIPTION

Metas do capítulo: 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. Capítulo 3: Camada de Transporte. - PowerPoint PPT Presentation

Citation preview

Page 1: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-1

Capítulo 3: Camada de TransporteMetas do capítulo: 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

Page 2: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-2

Conteúdo do Capítulo 3

3.1 Serviços da camada de transporte

3.2 Multiplexação e demultiplexação

3.3 UDP: Transporte não orientado a conexão

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

3.5 Transporte orientado a conexão: TCP transferência

confiável controle de fluxo gerenciamento de

conexões 3.6 Princípios de

controle de congestionamento

3.7 Controle de congestionamento do TCP

Page 3: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-3

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çãotransporte

redeenlacefísica

redeenlacefísica

aplicaçãotransporte

redeenlacefísica

redeenlacefísica

redeenlacefísica

redeenlacefísica

redeenlacefísica

transporte lógico fim a fim

Page 4: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-4

Camadas deTransporte x rede camada de rede:

comunicação lógica entre hospedeiros

camada de transporte: comunicação lógica entre processos depende de, estende

serviços da camada de rede

Analogia doméstica:12 crianças enviando cartas

para 12 crianças processos = crianças mensagens da apl. =

cartas nos envelopes hospedeiros = casas protocolo de transporte

= Ann e Bill protocolo da camada de

rede = serviço postal

Page 5: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-5

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çãotransporte

redeenlacefísica

redeenlacefísica

aplicaçãotransporte

redeenlacefísica

redeenlacefísica

redeenlacefísica

redeenlacefísica

redeenlacefísica

transporte lógico fim a fim

Page 6: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-6

Conteúdo do Capítulo 3

3.1 Serviços da camada de transporte

3.2 Multiplexação e demultiplexação

3.3 UDP: Transporte não orientado a conexão

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

3.5 Transporte orientado a conexão: TCP transferência

confiável controle de fluxo gerenciamento de

conexões 3.6 Princípios de

controle de congestionamento

3.7 Controle de congestionamento do TCP

Page 7: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-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

P2P3 P4P1

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.:

Page 8: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-8

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 remetente porta receptor

32 bits

dados daaplicação

(mensagem)

outros campos do cabeçalho

formato de segmento TCP/UDP

Page 9: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-9

Demultiplexação sem Conexões Crie sockets com

números de porta:DatagramSocket mySocket1 =

new DatagramSocket(99111);DatagramSocket mySocket2 =

new DatagramSocket(99222);

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

Page 10: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-10

Demultiplexação sem Conexões (cont)

DatagramSocket serverSocket = new DatagramSocket(6428);

ClienteIP:B

P2

cliente IP: A

P1P1P3

servidorIP: 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”

Page 11: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-11

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

Page 12: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-12

Demultiplexação Orientada a Conexões (cont)

ClienteIP:B

P1

cliente IP: A

P1P2P4

servidorIP: C

SP: 9157

DP: 80

SP: 9157

DP: 80

P5 P6 P3

D-IP:CS-IP: A

D-IP:C

S-IP: B

SP: 5775

DP: 80

D-IP:CS-IP: B

Page 13: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-13

Demultiplexação Orientada a Conexões: Servidor Web com Threads

ClienteIP:B

P1

cliente IP: A

P1P2

servidorIP: C

SP: 9157

DP: 80

SP: 9157

DP: 80

P4 P3

D-IP:CS-IP: A

D-IP:C

S-IP: B

SP: 5775

DP: 80

D-IP:CS-IP: B

Page 14: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-14

Conteúdo do Capítulo 3

3.1 Serviços da camada de transporte

3.2 Multiplexação e demultiplexação

3.3 UDP: Transporte não orientado a conexão

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

3.5 Transporte orientado a conexão: TCP transferência

confiável controle de fluxo gerenciamento de

conexões 3.6 Princípios de

controle de congestionamento

3.7 Controle de congestionamento do TCP

Page 15: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-15

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

Page 16: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-16

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

(por quê?): 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 origem porta dest.

32 bits

Dados de aplicação

(mensagem)

Formato do segmento UDP

comprimento checksum

Comprimento embytes do

segmento UDP,incluindo cabeçalho

Page 17: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-17

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

Page 18: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-18

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

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

transbordo

somachecksum

Page 19: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-19

Conteúdo do Capítulo 3

3.1 Serviços da camada de transporte

3.2 Multiplexação e demultiplexação

3.3 UDP: Transporte não orientado a conexão

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

3.5 Transporte orientado a conexão: TCP transferência

confiável controle de fluxo gerenciamento de

conexões 3.6 Princípios de

controle de congestionamento

3.7 Controle de congestionamento do TCP

Page 20: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-20

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)

Page 21: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-21

Transferência confiável de dados (rdt): como começar

sendside

receiveside

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

pelocanal ñ 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

Page 22: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-22

Transferência confiável de dados (rdt): como começarIremos: 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

estado1

estado2

evento causador da transição de estadoações executadas ao mudar de estado

estado: neste “estado” o próximo estado é

determinado unicamente pelo próximo evento

eventoações

Page 23: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-23

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

Page 24: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-24

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

Page 25: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-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

belowtransmissor

receptorrdt_send(data)

Page 26: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-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)

Page 27: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-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)

Page 28: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-28

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

Page 29: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-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

Page 30: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-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)

Page 31: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-31

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

Page 32: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-32

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

Page 33: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-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

0Fragmento 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

Page 34: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-34

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

Page 35: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-35

rdt3.0: remetentesndpkt = 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_timerstop_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

Page 36: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-36

rdt3.0 em ação

Page 37: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-37

rdt3.0 em ação

Page 38: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-38

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:

Ttransmitir=8kb/pacote10**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!

U sender

= .008

30.008 = 0.00027

microseconds

L / R

RTT + L / R =

Page 39: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-39

rdt3.0: stop-and-wait operation

transmissor receptor

RTT

tx último bit do pacote, t = L / R

chegada do 1º bit do pacotechegada do último bit, envia ACK

chegada do ACK, envia próximo pacote, t = RTT + L / R

00027,0008,30

008,0

/RTT

/tx

RL

RLU

transm. do 1º bit do pacote, t = 0

Page 40: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-40

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

Page 41: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-41

Paralelismo: maior utilização

transm. do 1º bit do pacote, t = 0

transmissor receptor

RTT

tx do último bit, t = L / R

chegada do primeiro bitchegada do último bit, envia ACK

chegada do ACK, envia próximo pacote, t = RTT + L / R

cheg. do último bit do 2o pct., envia ACKcheg. do último bit do 3o pct., envia ACK

Aumenta a utilizaçãopor um fator de 3!

0008,0008,30

024,0

/RTT

/3tx

RL

RLU

Page 42: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-42

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

Page 43: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-43

GBN: FSM estendida do remetente

Page 44: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-44

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

Page 45: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-45

GBNem ação

Page 46: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-46

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

Page 47: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-47

Retransmissão seletiva: janelas de remetente, receptor

Page 48: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-48

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

receptorremetente

Page 49: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-49

Retransmissão seletiva em ação

Page 50: Capítulo 3: Camada de Transporte

3: Camada de Transporte 3a-50

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?