Você está na página 1de 66

Capítulo 3: Camada de Transporte

Metas do capítulo: Sumário do capítulo:


 apresentar os  serviços da camada de transporte
serviços da camada  multiplexação/demultiplexação
de transporte:  transporte sem conexão: UDP
 multiplexação/  princípios de transferência confiável
demultiplexação de dados
 transferência
 transporte orientado à conexão: TCP
confiável de dados
transferência confiável
 controle de fluxo 
controle de fluxo
controle de


congestionamento  gerenciamento de conexões
 princípios de controle de
 descrever a congestionamento
implementação dos  controle de congestionamento em TCP
serviços na Internet
3: Camada de Transporte 3a-1
3a-2
Serviços de Camada de Transporte

 protocolos de transporte Host A


executam em hosts (sistemas aplicação
finais) transporte
rede
enlace rede
física enlace
 fornecem comunicação lógica
rede
enlace física

entre processos de física


rede
aplicação executando em enlace

hosts diferentes
física
rede
enlace
física
rede
 camada de transporte enlace
física
versus camada de rede:
 camada de rede: dados são aplicação
transporte
transferidos entre hosts rede
enlace
 camada de transporte: física

dados são transferidos Host B


entre processos de
aplicação
➢ depende de serviços da
camada de rede
3: Camada de Transporte 3a-3
Serviços de Camada de Transporte - exemplo

LAN 1 LAN 2

3: Camada de Transporte 3a-4


Camada de Transporte vs. Camada de Rede
 camada de transporte: fornece comunicação lógica entre
processos de aplicação
 serviço de entrega processo-a-processo
 depende do serviço de entrega entre hosts prestado pela camada
de rede

 camada de rede: fornece comunicação lógica entre hosts


 serviço de entrega host-a-host
 usa o modelo de serviço “melhor esforço”

Camada Camada
de Transporte de Transporte
Camada Camada
de Rede de Rede

3: Camada de Transporte 3a-5


Comunicação Física entre Camadas

3: Camada de Transporte 3a-6


Camadas: tipos de comunicação lógica

3: Camada de Transporte 3a-7


Camada de Transporte vs. Camada de Rede

3: Camada de Transporte 3a-8


Visão geral da camada de transporte na Internet
Alguns serviços da camada de
transporte na Internet:
aplicação
transporte
 entrega confiável, ordenada, rede
enlace
ponto a ponto (TCP):
rede
física enlace
rede
física
 orientado à conexão enlace
física

 transferência confiável de rede


enlace
dados física
rede
enlace
 controle de fluxo física
rede
 controle de congestionamento enlace
física

 entrega não confiável, (“melhor


aplicação
esforço”), não ordenada, ponto a transporte
rede
ponto ou multiponto (UDP) enlace
física

 serviços não disponíveis:


 atraso fim a fim limitado
 garantia de vazão
3: Camada de Transporte 3a-9
Multiplexação/Demultiplexação
serviço fundamental da camada de transporte: é uma ampliação
do serviço de entrega host-a-host da camada de rede para um
serviço de entrega processo-a-processo da camada de transporte

Camadas Host A Host B

Aplicação

Transporte

Rede

3: Camada de Transporte 3a-10


Multiplexação/Demultiplexação
Multiplexação (remetente): Demultiplexação (receptor):
aos dados provenientes de um entrega de dados contidos em
processo de aplicação são um segmento da camada de
acrescentados um cabeçalho transporte ao processo de
(útil no mux/demux), formando aplicação destinatário
um segmento

destinatário
dados da camada P3 P4
M M’
de aplicação remetente 2
remetente 1
cabeçalho aplicação P2
do segmento P1 transporte M’
M rede aplicação
aplicação enlace
segmento transporte
Ht M transporte física rede
datagrama Hn segmento rede
enlace
enlace
física
física
cabeçalho
host 2 host 3
do datagrama host 1 3: Camada de Transporte 3a-11
Multiplexação/Demultiplexação

Como ocorre a demultiplexação: Formato básico de um segmento:


 cada datagrama contém campos
com o endereço IP de origem e 32 bits
o endereço IP de destino
porta de origem porta de destino
 cada datagrama transporta um
segmento da camada de
transporte outros campos
 cada segmento contém campos
do cabeçalho
com o número da porta de
origem e o número da porta de
destino (RFC 1700) dados da
 os dados da aplicação são aplicação
passados ao processo de (mensagem)
aplicação identificado pelo
número de porta de destino

3: Camada de Transporte 3a-12


Exemplo: inversão dos número de portas de origem e
de destino no segmento de resposta

3: Camada de Transporte 3a-13


Multiplexação e Demultiplexação Não Orientadas p/ Conexão

❑ um socket UDP é totalmente identificado por dois


valores:
➢ endereço IP de destino
➢ número da porta de destino

❑ quando o hospedeiro recebe o segmento UDP, ele:


➢ verifica o número da porta de destino no segmento
➢ direciona o segmento UDP para o socket com este número de
porta

❑ todo segmento recebido na camada de transporte


e destinado a uma dada porta UDP será entregue ao
processo correspondente, não importando o endereço IP
do host de origem, bem como o número da porta do
processo remetente
➢ característica do serviço não orientado para conexão

3: Camada de Transporte 3a-14


Exemplo: demultiplexação UDP no destino

datagrama
recebido 3: Camada de Transporte 3a-15
Multiplexação e Demultiplexação Orientadas para Conexão
❑ um socket TCP é identificado por quatro elementos:
endereço IP do host origem
número da porta origem
endereço IP do host de destino
número da porta de destino

❑ a camada de transporte no host destinatário usa todos os quatro


elementos para direcionar (demultiplexar) o segmento TCP para o
socket apropriado

❑ dois segmentos TCP oriundos de hosts diferentes ou com números


de porta diferentes serão encaminhados para sockets diferentes.

❑ um host servidor pode suportar vários sockets TCP simultâneos,


sendo cada um deles identificado pelos seus próprios quatro
elementos

❑ o estabelecimento de conexão usa o "Welcoming Socket", enquanto o


transporte de dados usa o socket da conexão TCP estabelecida
3: Camada de Transporte 3a-16
Exemplo: demultiplexação no serviço orientados à conexão

3: Camada de Transporte 3a-17


Multiplexação e Demultiplexação Orientadas para Conexão

3: Camada de Transporte 3a-18


UDP: User Datagram Protocol [RFC 768]
 fornece comunicação processo
a processo
Por quê existe UDP?
 elimina estabelecimento de
 protocolo mínimo de
transporte na Internet conexão, que causa atraso
 fornece multiplexação /  simples: não mantém estado
demultiplexação de conexão no
 serviço do tipo “melhor
remetente/receptor
esforço", segmentos UDP  cabeçalho do segmento
podem ser: UDP de tamanho reduzido
 perdidos (overhead pequeno)
 entregues à aplicação fora
 sem controle de
de ordem
congestionamento: UDP
 não orientado à conexão: pode transmitir mais
 não há fase de “setup” rápidamente, pois a taxa de
envio não é regulada
 tratamento independente
para cada segmento UDP 3: Camada de Transporte 3a-19
Mais sobre UDP
 muito utilizado pelas aplicações Estrutura do segmento UDP:
de fluxo contínuo (voz, vídeo)
 tolerantes a perdas
comprimento do
segmento UDP,
 sensíveis à vazão da rede incluindo cabeçalho

 outros usos do UDP (por quê?): 32 bits


 DNS (nomes) porta origem porta destino
 SNMP (gerenciamento) comprimento checksum
 HTTP/3 (draft)

 transferência confiável com


UDP: dados da
 deve ser implementada na
aplicação
própria aplicação (mensagem)

3: Camada de Transporte 3a-20


UDP Checksum: ideia básica

3: Camada de Transporte 3a-21


UDP Checksum

Meta: detectar “erros” no segmento UDP recebido


Remetente: Destinatário:
 trata o conteúdo do  todas as palavras de 16 bits do
segmento UDP como segmento UDP recebido são
sequência de palavras de 16 somadas, inclusive o próprio
bits checksum

 soma de todas as
palavras de 16 bits no  todos os bits do resultado da soma
segmento anterior são iguais a “1”?
 NÃO -> erro detectado
 obtém o complemento de 1  SIM -> nenhum erro detectado
do resultado da soma e o
coloca no campo
checksum do cabeçalho do
segmento UDP
3: Camada de Transporte 3a-22
UDP Checksum

 note que o “vai um” no bit mais significativo precisa ser adicionado ao
resultado ("wraparound")
 exemplo: adição de duas palavras de 16 bits

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

wraparound 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

Soma: 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
Checksum: 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

3: Camada de Transporte 3a-23


UDP Checksum: falha na proteção

erros
aos
pares

não
muda!

3: Camada de Transporte 3a-24


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

 importante nas camadas de transporte e de enlace

 está na lista dos 10 tópicos mais importantes em redes!

 modelo do serviço de transferência confiável de dados:

3: Camada de Transporte 3a-25


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

 implementação do serviço de transferência confiável de dados:

3: Camada de Transporte 3a-26


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

3: Camada de Transporte 3a-27


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

rdt_send(): chamada de cima, (ex.: deliver_data(): chamada


pela apl.). Passa dados a serem para entregar dados para a
entregues à camada sup. receptora camada superior

remetente destinatário

udt_send(): chamada para rdt_rcv(): chamada quando o


transferir pacotes para o receptor pacote chega no lado receptor do
sobre o canal não confiável canal

3: Camada de Transporte 3a-28


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

Iremos:
 desenvolver incrementalmente os lados remetente e receptor do
protocolo rdt (reliable data transfer )
 considerar apenas fluxo unidirecional de dados
 porém, a informação de controle flui nos dois sentidos!
 usar máquinas de estados finitos, em inglês, "finite state machines"
(FSM) p/ especificar remetente e receptor

evento que causa a transição


ação(ões) que ocorre(m) na transição
estado:
o próximo “estado” é estado
determinado evento estado
1 2
unicamente pelo ação
próximo evento

3: Camada de Transporte 3a-29


rdt1.0: Transferência confiável usando canal
confiável
 canal subjacente é perfeitamente confiável
 não apresenta erros de bits
 não apresenta perda de pacotes

 FSMs separadas para remetente e receptor:


 remetente envia dados pelo canal confiável
 receptor recebe dados do canal confiável

3: Camada de Transporte 3a-30


rdt2.0: Transferência confiável de dados sobre
um canal com erros de bits
 canal subjacente pode inverter bits no pacote
 lembrete: checksum UDP pode detectar erros de bits

 a questão: como recuperar dos erros detectados?


 reconhecimento positivo (ACK): receptor avisa explicitamente
ao remetente que pacote chegou OK
 reconhecimento negativo (NAK): receptor avisa explicitamente
ao remetente que pacote recebido continha erros
• remetente retransmite pacote ao receber um NAK

 protocolos ARQ (automatic repeat request)


 novos mecanismos em rdt2.0 (além do rdt1.0):
 deteção de erros
 realimentação pelo receptor: mensagens de controle (ACK e
NAK) receptor -> remetente
 retransmissão de pacotes

3: Camada de Transporte 3a-31


rdt2.0: Elementos Básicos do ARQ
acknowledgements (ACKs)

ACK

3: Camada de Transporte 3a-32


rdt2.0: Elementos Básicos do ARQ

negative acknowledgements (NAKs)

NAK

3: Camada de Transporte 3a-33


rdt2.0: especificação da FSM
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt) FSM do destinatário
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L
call from
below

FSM do remetente rdt_rcv(rcvpkt) &&


notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

3: Camada de Transporte 3a-34


rdt2.0: em ação (sem erros)
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt) FSM do destinatário
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L call from
below

FSM do remetente rdt_rcv(rcvpkt) &&


notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

3: Camada de Transporte 3a-35


rdt2.0: em ação (Cenário de Erro)

rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt) FSM do destinatário
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L call from
below

FSM do remetente rdt_rcv(rcvpkt) &&


notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

3: Camada de Transporte 3a-36


rdt2.0 tem uma falha fatal!
O que pode acontecer se um ACK Enfrentando as duplicações:
ou NAK estiver corrompido?
 o remetente deve adicionar o
 remetente não tem como saber campo número de
se o destinatário recebeu OK os sequência em cada pacote
dados transmitidos  o remetente retransmite o
pacote atual se ACK ou NAK for
recebido com erro
O que fazer?
 destinatário descarta (não
entrega) pacote duplicado
 o remetente simplesmente
reenvia o pacote de dados se Stop-and-Wait
ACK ou NAK chegar corrompido remetente envia um pacote e,
 todavia, esse procedimento então aguarda a resposta do
poderá causar a retransmissão destinatário
de pacote recebido OK
(duplicação)
3: Camada de Transporte 3a-37
rdt2.1 remetente (trata ACK ou NAK com erro)

3: Camada de Transporte 3a-38


rdt2.1 receptor (trata ACK ou NAK com erro)
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) 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)

3: Camada de Transporte 3a-39


rdt2.1: discussão
Remetente: Receptor:
 usa número de sequência no  deve “checar” se pacote
pacote recebido foi duplicado
 estado indica se o
 bastam dois números de
número de sequência
sequência (0 e 1). Por que?
esperado é 0 ou 1
 o número de estados é
 não tem como saber se último
duplicado
ACK/NAK foi recebido OK pelo
 estado permite “lembrar”
remetente
se pacote corrente tem
número de sequência 0 ou 1
 deve “checar” se ACK/NAK
recebido tem erro

3: Camada de Transporte 3a-40


rdt2.1: discussão

3: Camada de Transporte 3a-41


rdt2.2: um protocolo sem NAKs

 só com ACKs, mas com a mesma funcionalidade de


rdt2.1

 ao invés de enviar um NAK, o receptor envia um ACK


em seu lugar para o último pacote recebido OK

 ACK duplicado: no remetente resulta na mesma ação


que o NAK: “retransmissão do pacote atual”

3: Camada de Transporte 3a-42


rdt2.2: um protocolo sem NAKs (cont.)

FSM do rdt_send(data)
remetente sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
(fragmento) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK isACK(rcvpkt,1) )
call 0 from
above 0 udt_send(sndpkt)

rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || L
has_seq1(rcvpkt)) Wait for
0 from
udt_send(sndpkt) below

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)


&& has_seq1(rcvpkt)
FSM do extract(rcvpkt,data)
receptor deliver_data(data)
(fragmento) sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) 3: Camada de Transporte 3a-43
rdt3.0: canal com erros e perdas
Nova suposição: canal Abordagem: remetente
subjacente também aguarda um tempo
pode, adicionalmente, “razoável” pelo ACK
perder pacotes (dados  retransmite se nenhum ACK é
ou ACKs) recebido neste intervalo
 checksum, no de sequência,  se pacote (ou ACK) está apenas
ACKs, retransmissões podem atrasado (e não perdido):
ajudar, mas não são
 retransmissão causa
suficientes
duplicação, mas uso de no de
 P: Como lidar com perdas? sequência já cuida disso
 remetente espera até ter  receptor deve especificar no
“certeza” que pacote ou de sequência do pacote que
ACK se perdeu e, então, está sendo reconhecido
retransmite o pacote
 requer temporizador de
 quanto tempo esperar? contagem regressiva (“timeout”)

3: Camada de Transporte 3a-44


rdt3.0 remetente

3: Camada de Transporte 3a-45


rdt3.0 em ação

3: Camada de Transporte 3a-46


rdt3.0 em ação

3: Camada de Transporte 3a-47


Desempenho do rdt3.0
 o rdt3.0 funciona, porém seu desempenho pode ser muito ruim!

Exemplo:
Enlace costa-a-costa de 1 Gbps, tprop = 15 ms, pacote de 1 kB,
transmissão livre de erros

3: Camada de Transporte 3a-48


Desempenho do rdt3.0

Exemplo: (continuação)

Uremet = Utilização do Remetente (ou do Canal) = fração do


tempo que o remetente fica ocupado transmitindo no canal

Uremet = ttrans/tT tT = intervalo de tempo entre pacotes sucessivos

L 8 kb L
ttrans = = = 0,008 ms tT = + RTT
109 b/s
R R
L/R 0,008 ms
Uremet = ttrans/tT = = = 0,00027
L/R + RTT 30,008 ms

 1 pacote de 1 kB a cada 30,008 ms produz vazão de 267 kbps

 protocolo “stop-and-wait” limita o uso dos recursos físicos!

3: Camada de Transporte 3a-49


Desempenho do rdt3.0
 Exemplo: (continuação):

remetente destinatário
primeiro bit do primeiro pacote
transmitido, t = 0
último bit do primeiro pacote
transmitido, dTRANS = L / R

primeiro bit do primeiro pacote chega


RTT último bit do primeiro pacote chega,
envia ACK

ACK chega, envia próximo


pacote, tT = RTT + L / R

L/R 0,008
U = = = 0,00027
remet 30,008
RTT + L / R microsec
onds
 conclusão: o rdt 3.0 limita o desempenho da infraestrutura (canal)

3: Camada de Transporte 3a-50


Desempenho do rdt3.0
Transmissão sujeita a erros de bit

remetente destinatário
primeiro bit do primeiro pacote
transmitido, t = 0
último bit do primeiro pacote
transmitido, dTRANS = L / R

primeiro bit do primeiro pacote chega


RTT último bit do primeiro pacote chega,
envia ACK

ACK chega, envia próximo


pacote, tT = RTT + L / R

novo quadro ou
retransmissão

3: Camada de Transporte 3a-51


Desempenho do rdt3.0
Transmissão sujeita a erros de bit

❑ seja P = Prob{pacote seja recebido com erro}

❑ neste caso, a equação da Utilização do Canal será:

Uremet = ttrans / (Nr x tT) = ttrans / [Nr(RTT + L/R)]

onde Nr é o número médio de tentativas de transmissão

Nr = = 1 / (1 – P)

Uremet = (1 – P) x ttrans / (RTT + L/R)

vazão média = (1 – P) / (RTT + L/R)

3: Camada de Transporte 3a-52


Protocolos com Pipelining
 Pipelining : ao remetente é permitido múltiplos pacotes “em trânsito”,
ainda não reconhecidos
 a faixa de números de sequência deve ser ampliada
 requer aumento de capacidade dos buffers (remetente e receptor)

 Duas formas genéricas de protocolos com pipelining :


 Go-Back-N (retransmissão integral)
 Selective Repeate (retransmissão seletiva)
3: Camada de Transporte 3a-53
Pipelining: aumento da utilização
 Exemplo: envio de três pacotes consecutivos

remetente destinatário
primeiro bit do primeiro pacote
transmitido, t = 0
último bit do primeiro pacote
transmitido, dTRANS = L / R

primeiro bit do primeiro pacote chega


RTT último bit do primeiro pacote chega, envia ACK
último bit do segundo pacote chega, envia ACK
último bit do terceiro pacote chega, envia ACK
ACK chega, envia próximo
pacote, tT = RTT + L / R

Utilização do Canal
aumenta por um
fator de 3
3*L/R 0,024
U = = = 0,0008
remet 30,008
RTT + L / R microsecon
ds3: Camada de Transporte 3a-54
Go-Back-N
Remetente:
 pode transmitir múltiplos pacotes sem esperar por ACK, mas fica
limitado em até N pacotes (“janela de transmissão”) consecutivos não
reconhecidos

 protocolo sliding-window : “deslisa janela” após uma transmissão OK


 campo “número de sequência” no cabeçalho tem m bits -> faixa de
números de sequência: [0, 2m - 1]
 ACK cumulativo: um ACK de pacote com número de sequência n
indica que todos os pacotes com número de sequência até e inclusive
n foram corretamente recebidos
 “timeout” é usado para recuperar pacote ou ACK perdido
3: Camada de Transporte 3a-55
Go-Back-N: FSM estendida do remetente
rdt_send(data)
if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
}
L else
refuse_data(data)
base=1
nextseqnum=1
timeout
start_timer
Wait
udt_send(sndpkt[base])
rdt_rcv(rcvpkt) udt_send(sndpkt[base+1])
&& corrupt(rcvpkt) …
udt_send(sndpkt[nextseqnum-1])
L
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer 3: Camada de Transporte 3a-56
Go-Back-N: FSM estendida do destinatário
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
L && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(0, ACK, chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++

Destinatário:

 envia ACK(n) para pacote(n) recebido livre de erros e com número


de sequência de acordo com ordenamento
 caso contrário (erro de bit e/ou fora de ordem): descarta pacote
recebido (não armazena) e retransmite ACK(n-1)
 janela de recepção tem tamanho igual a 1
3: Camada de Transporte 3a-57
Go-Back-N
em ação

3: Camada de Transporte 3a-58


BDP (Bandwidth-Delay Product )

 BDP: Produto largura de banda-atraso é a medida do


número de bits (ou bytes) que um remetente pode
transmitir enquanto espera por um ACK do destinatário
 BDP = Rbps . (RTTmédio)seg [bits]

3: Camada de Transporte 3a-59


Exemplo:
 Projete um protocolo Go-Back-N com janela deslizante para uma rede
com largura de banda de 100 Mbps e distância entre emissor e
receptor de 10.000 km. Considere que o tamanho médio dos pacotes é
de 100.000 bits e a velocidade de propagação no meio físico de 2x108
m/s. Determine: (a) O tamanho máximo das janelas de transmissão e
de recepção. (b) O número de bits no campo de número de sequência
(m). (c) Um valor de tempo limite inferior para o timeout.
 Solução:
a) Tamanho máximo das janelas de transmissão e de recepção:
RTT médio = 2x(10.000 km) / (2x108 m/s) = 100 ms

BDP em bits = 100 Mbps x 100 ms = 10.000.000 bits


BDP em pacotes = 10.000.000 / 100.000 = 100 pacotes

Tamanho máximo da janela de transmissão = 100 pacotes

No Go-Back-N, o tamanho da janela de recepção é sempre igual a 1


pacote (veja figura a seguir).
3: Camada de Transporte 3a-60
Exemplo (continuação):
janela de recepção:

b) Número de bits no campo de número de sequência (m):


(tamanho da janela de transmissão) < 2m

100 < 2m
Assim, tem-se que m = 7 (números de sequência de 0 a 127)

c) Valor de tempo limite inferior para o timeout:

O timeout deverá ser, no mínimo, igual ao RTT = 100 ms

3: Camada de Transporte 3a-61


Retransmissão seletiva
(Selective Repeate)
 se o tamanho da janela (N) e o BDP (Bandwidth-Delay
Product ) são grandes -> Go-Back-N apresenta baixo
desempenho

 solução: receptor deve reconhecer individualmente


todos os pacotes recebidos corretamente
 armazena os pacotes recebidos fora de ordem no buffer de
recepção para posterior entrega, em ordem, à camada superior

 o remetente retransmite somente os pacotes para os


quais o ACK não foi recebido
 dispara temporizador (“timeout”) para cada pacote transmitido

 usa janelas de tamanho N para transmissão e recepção


 limita o número de pacotes pendentes não reconhecidos dentro
da rede
3: Camada de Transporte 3a-62
Retransmissão seletiva: janelas do remetente e do
receptor

3: Camada de Transporte 3a-63


Retransmissão seletiva: eventos e ações
Remetente Receptor
dados recebidos de cima: pacote n recebido OK
 se o próximo no de seq. está com no de seq. no
dentro da janela, cria e envia [rcv_base, rcv_base+(N-1)]
o pacote.  envia ACK(n)
ocorre timeout (n):  se fora de ordem: buffer
 retransmite o pacote n e  em ordem: entrega (inclui
reinicia o temporizador pacotes no buffer) e avança
ACK(n) recebido no janela p/ próximo pacote
[send_base, send_base+(N-1)]: ainda não recebido’’
 marca o pacote n como
“recebido” pacote n recebido OK no
[rcv_base-N, rcv_base-1]
 se n for igual a send_base,
avança base da janela até o  um ACK(n) deve ser gerado
pacote não reconhecido que
tiver o menor no de seq. qualquer outro :
 ignora o pacote
3: Camada de Transporte 3a-64
Retransmissão seletiva em ação

3: Camada de Transporte 3a-65


Retransmissão
seletiva: dilema
Exemplo:
 números de sequência dos
pacotes: 0, 1, 2, 3
 tamanho da janela = 3
 receptor não “vê” diferença
entre os dois cenários!
 incorretamente, passa-se
dados duplicados como
novos (figura (a))

P: Qual a relação entre os


números de sequência e o
tamanho da janela que
permite evitar esse dilema?

3: Camada de Transporte 3a-66