Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Capítulo 3: Camada de Transporte
Nosso objetivo:
entender 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 
13: Camada de Transporte
 aprender sobre os 
protocolos da camada de 
transporte da Internet:
 UDP: transporte não 
orientado a conexões
 TCP: transporte confiável 
orientado a conexões
 Controle de 
congestionamento do TCP
Capítulo 3: roteiro
 Serviços da camada de transporte
 Multiplexação e demultiplexação
 Transporte sem conexões: UDP
 Princípios da transferência confiável
 Transporte orientado a conexões: TCP
 Princípios de controle de 
congestionamento
 Controle de congestionamento no TCP
 Evolução da funcionalidade da camada 
de transporte
Transport Layer: 3-2
Serviços e protocolos de transporte
 fornecem comunicação lógica entre 
processos de aplicação executando em 
diferentes hospedeiros
 os protocolos de transporte são 
executados nos sistemas finais: 
• transmissor: quebra as mensagens 
da aplicação em segmentos, 
repassa-os para a camada de rede
• receptor: remonta as mensagens a 
partir dos segmentos, repassa-as 
para a camada de aplicação
 dois protocolos de transporte 
disponíveis para as aplicações 
Internet:
• TCP e UDP
3: Camada de Transporte 3
mobile network
home network
enterprise
network
national or global ISP
local or 
regional ISP
datacenter 
network
content 
provider 
network
aplicação
transporte
rede
enlace
física
aplicação
transporte
rede
enlace
física
Serviços e protocolos das camadas de Transporte x
rede
Analogia doméstica:
12 crianças na casa de Ana enviando 
cartas para 12 crianças na casa de 
Bill
 hospedeiros = casas
 processos = crianças
 mensagens da apl. = cartas nos 
envelopes
3: Camada de Transporte 4
Serviços e protocolos das camadas de Transporte x
rede
 camada de transporte:
comunicação lógica entre os 
processos
• depende de e estende serviços da 
camada de rede
 camada de rede: comunicação 
lógica entre hospedeiros
3: Camada de Transporte 5
Analogia doméstica:
12 crianças na casa de Ana enviando 
cartas para 12 crianças na casa de 
Bill
 hospedeiros = casas
 processos = crianças
 mensagens da apl. = cartas nos 
envelopes
física
enlace
rede (IP)
Aplicação
física
enlace
rede (IP)
aplicação
transport
Ações da Camada de Transporte
Transmissor:
msg apl. recebe uma mensagem da 
camada de aplicação
 determina os valores dos 
campos do cabeçalho
 cria o segmento
 passa o segmento para o 
IP
transporte
ThTh msg apl.
Transport Layer: 3-6
física
enlace
rede (IP)
aplicação
física
enlace
rede (IP)
aplicação
transporte
Ações da Camada de Transporte
transporte
Receptor:
msg. apl.  extrai a mensagem da 
camada de aplicação
 verifica valores do cabeçalho
 recebe o segmento do IP
Th msg apl.
 demultiplexa a mensagem 
para a aplicação via socket
Transport Layer: 3-7
Protocolos da camada de transporte Internet
 TCP: Transmission Control Protocol
• entrega confiável, ordenada
• controle de congestionamento
• controle de fluxo
• estabelecimento de conexão (“setup”)
UDP: User Datagram Protocol
• entrega não confiável, não ordenada: UDP
• extensão sem “gorduras” do “melhor 
esforço” do IP
 serviços não disponíveis: 
• garantias de atraso máximo
• garantias de largura de banda mínima
3: Camada de Transporte 8
mobile network
home network
enterprise
network
national or global ISP
local or
regional ISP
datacenter 
network
content
provider
network
aplicação
transporte
rede
enlace
física
aplicação
transporte
rede
enlace
física
Capítulo 3: roteiro
 Serviços da camada de transporte
 Multiplexação e demultiplexação
 Transporte sem conexões: UDP
 Princípios da transferência confiável
 Transporte orientado a conexões: 
TCP
 Princípios de controle de 
congestionamento
 Controle de congestionamento no 
TCP
 Evolução da funcionalidade da 
camada de transporte
Transport Layer: 3-9
Multiplexação/demultiplexação
Usa info do cabeçalho para 
entregar os segmentos 
recebidos aos sockets corretos
Demultiplexação no receptor:reúne dados de muitos sockets, adiciona 
o cabeçalho de transporte (usado 
posteriormente para a demultiplexação)
multiplexação no transmissor:
processo
socket
transporte
aplicação
física
enlace
rede
P2P1
transporte
aplicação
física
enlace
rede
P4
transporte
aplicação
física
enlace
rede
P3
3: Camada de Transporte 10
transport
physical
link
network transport
application
physical
link
network
transport
application
physical
link
network
HTTP server
client
HTTP msg
Transport Layer: 3-11
HTTP msgHt
HTTP msgHtHn
HTTP msgHtHn
HTTP msgHtHn
transport
physical
link
network transport
application
physical
link
network
transport
application
physical
link
network
cliente
HTTP msgHt
HTTP msg
Transport Layer: 3-12
HTTP msg
Q: como a camada de transporte sabia que deveria entregar a 
mensagem ao navegador Firefox e não ao processo Netflix ou ao 
processo Skype?
?
demultiplexação
?
demultiplexação
transporte
aplicação
Demultiplexação
multiplexação
multiplexação
transporte
aplicação
Multiplexação
 computador recebe os datagramas IP
• cada datagrama possui os 
endereços IP da origem e do 
destino 
• cada datagrama transporta um 
segmento da camada de 
transporte
• cada segmento possui números 
das portas origem e destino 
 O hospedeiro usa os endereços IP e 
os números das portas para 
direcionar o segmento ao socket 
apropriado
Como funciona a demultiplexação
porta origem porta destino
32 bits
dados da
aplicação
(mensagem/payload)
outros campos 
do cabeçalho
formato de segmento 
TCP/UDP
3: Camada de Transporte 21
Demultiplexação não orientada a conexões
Lembrete: 
 socket criado possui número de 
porta local ao host:
DatagramSocket mySocket1 = new 
DatagramSocket(12534);
datagramas IP com mesmo no. de porta 
destino, mas diferentes endereços IP origem 
e/ou números de porta origem podem ser 
encaminhados para o mesmo socket no 
destino
3: Camada de Transporte 22
quando o hospedeiro recebe o 
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 ao criar um datagrama para enviar 
para um socket UDP, deve 
especificar:
m endereço IP de destino
m número da porta de destino
Demultiplexação não orientada a conexões: exemplo
transport
application
physical
link
network
P3
transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
source port: 9157
dest port: 6428
source port: 6428
dest port: 9157
source port: ?
dest port: ?
source port: ?
dest port: ?
3: Camada de Transporte 23
mySocket = 
socket(AF_INET,SOCK_DGRAM)
mySocket.bind(myaddr,9157);
mySocket = 
socket(AF_INET,SOCK_DGRAM)
mySocket.bind(myaddr,5775);
mySocket = 
socket(AF_INET,SOCK_DGRAM)
mySocket.bind(myaddr,6428);
Demultiplexação Orientada a Conexões
 Socket TCP identificado pela 
quádrupla: 
• endereço IP origem
• número da porta origem
• endereço IP destino
• número da porta destino
 Servidor pode dar suporte a 
muitos sockets TCP 
simultâneos: 
• cada socket é identificado pela 
sua própria quádrupla
• cada socket está associado a um 
cliente diferente
3: Camada de Transporte 24
r Demultiplexação: receptor 
usa todos os quatro valores 
para direcionar o segmento 
para o socket apropriado
Demultiplexação Orientada a Conexões: exemplo
transport
application
physical
link
network
P1
transport
application
physical
link
P4
transport
application
physical
link
network
P2
host: 
endereço 
IP A
host: 
endereço 
IP C
network
P6P5
P3
source IP,port: A,9157
dest IP, port: B,80
source IP,port: B,80
dest IP,port: A,9157 source IP,port: C,5775
dest IP,port: B,80
source IP,port: C,9157
dest IP,port: B,80
servidor: 
endereço 
IP B
Três segmentos, todos destinadosao endereço IP: B,
porta dest: 80 são demultiplexados para diferentes sockets
Transport Layer: 3-25
Resumo
Multiplexação, demultiplexação: baseada nos valores dos 
campos de cabeçalho do segmento, datagrama.
UDP: demultiplexa usando (apenas) o número da porta de 
destino
TCP: demultiplexa usando a quádrupla: endereços IP e 
números de porta da origem e do destino
Multiplexação/demultiplexação ocorre em todas as 
camadas
26
Capítulo 3: roteiro
 Serviços da camada de transporte
 Multiplexação e demultiplexação
 Transporte sem conexões: UDP
 Princípios da transferência confiável
 Transporte orientado a conexões: 
TCP
 Princípios de controle de 
congestionamento
 Controle de congestionamento no 
TCP
 Evolução da funcionalidade da 
camada de transporte
Transport Layer: 3-27
UDP: User Datagram Protocol
 Protocolo de transporte da Internet 
mínimo, “sem gorduras”, 
 Serviço “melhor esforço”, segmentos 
UDP podem ser:
• perdidos
• entregues à aplicação fora de 
ordem
 sem conexão:
• não há saudação inicial entre o 
remetente e o receptor UDP
• tratamento independente para 
cada segmento UDP
3: Camada de Transporte 28
Por quê existe o UDP?
r elimina estabelecimento de 
conexão (que adiciona atraso RTT)
r simples: não mantém “estado” da 
conexão nem no remetente, nem 
no receptor
r cabeçalho de segmento reduzido
r Não há controle de 
congestionamento: 
m UDP pode transmitir tão rápido 
quanto desejado (e possível)
m funciona mesmo diante de 
congestionamento
UDP: User Datagram Protocol
Uso do UDP:
• aplicações de fluxos (streaming) multimídia (tolerante a perdas, 
sensível à taxa de transmissão)
• DNS
• SNMP
• HTTP/3
caso seja necessária transferência confiável sobre o UDP 
(ex., HTTP/3):
• adiciona confiabilidade necessária na camada de aplicação
• adiciona controle de congestionamento na camada de aplicação
29
UDP: User Datagram Protocol [RFC 768]
3: Camada de Transporte 30
servidor SNMPcliente SNMP
transporte
(UDP)
física
enlace
rede (IP)
aplicação
UDP: Ações da Camada de Transporte
transporte
(UDP)
física
enlace
rede (IP)
aplicação
Transport Layer: 3-31
servidor SNMPcliente SNMP
transporte
(UDP)
física
enlace
rede (IP)
aplicação
transporte
(UDP)
física
enlace
rede (IP)
aplicação
UDP: Ações da Camada de Transporte
ações do transmissor UDP: 
SNMP msg recebe uma mensagem da 
camada de aplicação
 determina os valores dos 
campos de cabeçalho UDP
 cria segmento UDP
 passa o segmento para o IP
UDPhUDPh SNMP msg
Transport Layer: 3-32
servidor SNMPcliente SNMP
transporte
(UDP)
física
enlace
rede (IP)
aplicação
transporte
(UDP)
física
enlace
rede (IP)
aplicação
UDP: Ações da Camada de Transporte
ações do receptor UDP:
SNMP msg
 extrai a mensagem da 
camada de aplicação
 Verifica o valor do campo 
de checksum do cabeçalho
 recebe segmento do IP
UDPh SNMP msg
 demultiplexa a mensagem 
para a aplicação via socket
Transport Layer: 3-33
UDP: Cabeçalho do segmento
3: Camada de Transporte 34
# porta origem # porta dest
32 bits
dados da
aplicação
(carga)
formato do segmento UDP
comprimento checksum
comprimento, em 
bytes do segmento 
UDP segment, 
incluindo o cabeçalho
dados de/para a 
camada de aplicação
UDP: Cabeçalho do segmento
porta origem porta dest.
32 bits
Dados de 
aplicação 
(mensagem)
Formato do segmento UDP
comprimento checksum
Comprimento em bytes do
segmento UDP,
incluindo cabeçalho
3: Camada de Transporte 35
Soma de Verificação (checksum) UDP
Objetivo: detectar “erros” (ex.: bits trocados) no segmento transmitido
3: Camada de Transporte 36
Transmitido: 5 6 11
Recebido: 4 6 11
1o número 2o número soma
soma de verificação 
calculada no receptor
soma de verificação calculada 
no transmissor (como recebida)=
Soma de Verificação (checksum) UDP
transmissor:
 trata conteúdo do segmentoUDP
(incluindo campos do cabeçalho UDP e endereços 
IP) como sequência de inteiros de 16-
bits
 checksum: soma (adição usando 
complemento de 1) do conteúdo do 
segmento
 transmissor coloca o complemento 
do valor da soma no campo 
checksum do UDP 
receptor:
 calcula checksum do segmento 
recebido
 verifica se o checksum calculado 
bate com o valor recebido:
• NÃO - erro detectado
• SIM - nenhum erro detectado. 
Mas ainda pode ter erros? Veja 
depois ….
Objetivo: detectar “erros” (ex.: bits trocados) no segmento transmitido
3: Camada de Transporte 37
Checksum Internet: Exemplo
Exemplo: adição de dois inteiros de 16-bits
transbordo
soma
checksum
38
Note que: ao adicionar números, o transbordo (vai um) do bit mais 
significativo deve ser adicionado ao resultado
1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
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 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
Checksum Internet: proteção fraca!
transbordo
soma
checksum
39
1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
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 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
0 1 
1 0 
Apesar dos 
números terem 
mudado (troca de 
bits), o checksum
não mudou!
Exemplo: adição de dois inteiros de 16-bits
UDP: Resumo
protocolo “sem gorduras”:
• segmentos podem ser perdidos, entregues fora de ordem
• serviço melhor esforço: “envia e torce que tudo dê certo”
UDP tem pontos positivos:
• não necessita de estabelecimento de conexão 
(setup/handshaking)
• não incorrendo em um RTT adicional
• pode funcionar quando o serviço de rede estiver comprometido
• ajuda com a confiabilidade (checksum)
podem ser adicionadas funcionalidades acima do UDP na 
camada de aplicação (ex.: HTTP/3)
40
Capítulo 3: roteiro
 Serviços da camada de transporte
 Multiplexação e demultiplexação
 Transporte sem conexões: UDP
 Princípios da transferência confiável
 Transporte orientado a conexões: 
TCP
 Princípios de controle de 
congestionamento
 Controle de congestionamento no 
TCP
 Evolução da funcionalidade da 
camada de transporte
Transport Layer: 3-41
Princípios de Transferência confiável de dados
processo
remetente
dados
processo
destinatário
canal confiável
aplicação
transporte
abstração do serviço confiável
Transport Layer: 3-42
dados
Princípios de Transferência confiável de dados
processo
remetente
dados
processo
destinatário
aplicação
transporte
implementação do serviço confiável
canal não confiável
rede
transporte
lado remetente
do protocolo de
transferência
confiável 
lado destinatário
do protocolo de
transferência
confiável 
Transport Layer: 3-43
processo
remetente
dados
processo
destinatário
canal confiável
aplicação
transporte
abstração do serviço confiável
dados dados
Princípios de Transferência confiável de dados
Complexidade do protocolo de 
transferência confiável de 
dados dependerá (fortemente) 
das características do canal não 
confiável (perde, corrompe, 
reordena os dados?)
Transport Layer: 3-44
processo
remetente
dados
processo
destinatário
aplicação
transporte
implementação do serviço confiável
canal não confiável
rede
transporte
lado remetente
do protocolo de
transferência
confiável 
lado destinatário
do protocolo de
transferência
confiável 
dados
processo
remetente
dados
processo
destinatário
aplicação
transporte
implementação do serviço confiável
canal não confiável
rede
transporte
lado remetente
do protocolo de
transferência
confiável 
lado destinatário
do protocol de
transferência
confiável 
dados
Princípios de Transferência confiável de dados
Remetente, receptor não
conhecem o “estado” um do 
outro, ex., a mensagem foi 
recebida?
 a não ser que seja 
informado através de uma 
mensagem
Transport Layer: 3-45
Protocolo de transferência confiável (rdt): interfaces
processo
transmissor
dados
processo 
receptor
dados
canal não confiável
lado transmissor
da implementação
do protocolo 
confiável rdtlado receptor
da implementação
do protocolo 
confiável rdt
rdt_send()
udt_send() rdt_rcv()
deliver_data()
dataHeader dataHeader
rdt_send(): chamada de cima, 
(ex., pela apl.). Passa dados a 
serem entregues à camada 
superior do receptor
udt_send(): chamada pelo 
rdt para transferir um 
pacote para o receptor sobre 
um canal não confiável
rdt_rcv(): chamada quando o 
pacote chega no lado receptor 
do canal
deliver_data(): chamada pelo 
rdt para entregar dados à 
camada superior
Comunicação bidirecional sobre um 
canal não confiável
dados
pacote
Transport Layer: 3-46
Transferência confiável: ponto de partida
Iremos:
 incrementalmente desenvolver os lados transmissor e receptor de um 
protocolo de transferência confiável (reliable data transfer – rdt)
 considerar apenas fluxo unidirecional de dados
• mas info de controle flui em ambos os sentidos!
estado
1
estado
2
evento causador da transição de estado
ações executadas na transição de estado
estado: estando nesse 
“estado” o próximo 
estado é determinado
unicamente pelo 
próximo evento
evento
ações
 usar máquinas de estados finitos (FSM) para especificar transmissor, 
receptor
Transport Layer: 3-47
rdt1.0: transferência confiável sobre canal confiável
 canal de transmissão perfeitamente confiável
• sem erros de transmissão
• sem perda de pacotes
packet = make_pkt(data)
udt_send(packet)
rdt_send(data)
extract (packet,data)
deliver_data(data)
rdt_rcv(packet)Espera 
chamada 
de baixo
receptor
 FSMs separadas para transmissor, receptor:
• transmissor envia dados pelo canal subjacente
• receptor lê os dados do canal subjacente
transmissor
Espera 
chamada 
de cima
Transport Layer: 3-48
rdt2.0: canal com erros de bits
 canal subjacente pode trocar valores dos bits num pacote
• checksum (ex., checksum da Internet) para detetar bits com erro
 a questão: como recuperar esses erros?
Como as pessoas recuperam “erros” durante uma conversa?
Transport Layer: 3-49
rdt2.0: canal com erros de bits
canal subjacente pode trocar valores dos bits num pacote
• checksum pode detectar erros de bits
 a questão: como recuperar esses erros?
• reconhecimentos (ACKs - acknowledgements): receptor avisa 
explicitamente ao transmissor que o pacote foi recebido corretamente
• reconhecimentos negativos (NAKs): receptor avisa explicitamente ao 
transmissor que o pacote continha erros
• transmissor retransmite o pacote ao receber um NAK
para e espera
transmissor envia um pacote, aguarda resposta do receptor
Transport Layer: 3-50
rdt2.0: especificações das FSMs
Espera 
chamada 
de cima
udt_send(sndpkt)
Espera 
por ACK 
ou NAK
udt_send(NAK)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
Espera 
chamada 
de baixo
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt) && isACK(rcvpkt)

transmissor
receptor
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Transport Layer: 3-51
especificações das FSMs
Espera 
chamada 
de cima
udt_send(sndpkt)
Espera 
por ACK 
ou NAK
udt_send(NAK)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
Espera 
chamada 
de baixo
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt) && isACK(rcvpkt)

transmissor
receptor
Nota: “estado” do receptor (o receptor recebeu 
corretamente a minha mensagem?) não é 
conhecido pelo transmissor a menos que haja
comunicação do receptor para o transmissor
 é para isso que precisamos de um protocolo! 
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)isNAK(rcvpkt)
isACK(rcvpkt)
Transport Layer: 3-52
rdt2.0: operação com ausência de erros
Espera 
chamada 
de cima
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
udt_send(sndpkt)
udt_send(NAK)
Espera 
por ACK 
ou NAK
Espera 
chamada 
de baixo
rdt_send(data)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)

extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
transmissor
receptor
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Transport Layer: 3-53
rdt2.0: cenário com pacote corrompido
Espera 
chamada 
de cima
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)Espera 
por ACK 
ou NAK
Espera 
chamada 
de baixo
rdt_send(data)
udt_send(NAK)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)

transmissor
receptor
Transport Layer: 3-54
rdt2.0 possui uma falha fatal!
o que acontece se ACK/NAK for 
corrompido?
 transmissor não sabe o que se 
passou no receptor!
não pode apenas retransmitir: 
possibilidade de pacotes 
duplicados
lidando com duplicatas: 
 transmissor retransmite o último 
pacote se ACK/NAK chegar com 
erro
 transmissor inclui número de 
sequência em cada pacote
 receptor descarta (não entrega a 
aplicação) pacotes duplicados
para e espera
Transmissor envia um pacote,
e aguarda resposta do receptor
Transport Layer: 3-55
rdt2.1: transmissor, trata ACK/NAKs corrompidos
Espera
chamada 0 
de cima
Espera por 
ACK ou
NAK 0
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
(corrupt(rcvpkt) || 
isNAK(rcvpkt) )
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) 
&& (corrupt(rcvpkt) ||
isNAK(rcvpkt) )
Espera
chamada 1 
de cima
Espera por 
ACK ou
NAK 1
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt) 

rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) && 
isACK(rcvpkt)

Transport Layer: 3-56
rdt2.1: receptor, trata ACK/NAKs corrompidos
Espera
por 0 de 
baixo
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Espera
por 1 de 
baixo
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 
&& has_seq0(rcvpkt) 
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
rdt_rcv(rcvpkt) && 
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
not corrupt(rcvpkt) &&
has_seq1(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
Transport Layer: 3-57
rdt2.1: discussão
transmissor:
 no. de seq. adicionado ao pacote
 bastam dois nos. de seq. (0,1). 
Por quê?
 deve verificar se ACK/NAK 
recebidos estão corrompidos
 duplicou o no. de estados
• estado deve “lembrar” se pacote 
“esperado” deve ter no. de seq. 0 
ou 1
receptor:
 deve verificar se o pacote 
recebido é uma duplicata
• estado indica se no. de seq. 
esperado é 0 ou 1
 nota: receptor não tem como 
saber se último ACK/NAK foi 
recebido OK pelo transmissor
Transport Layer: 3-58
rdt2.2: um protocolo sem NAKs
mesma funcionalidade do rdt2.1, usando apenas ACKs
ao invés de NAK, receptor envia ACK para último pacote 
recebido sem erro
• receptor deve incluir explicitamente no. de seq do pacote 
reconhecido
ACKs duplicados no transmissor resultam na mesma ação do 
NAK: retransmissão do pacote atual
Como veremos, TCP usa essa abordagem para não usar NAKs
Transport Layer: 3-59
rdt2.2: fragmentos do transmissor, receptor
Espera 
chamada 0 
de cima
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)
Espera por 
ACK
0
fragmento da 
FSM do transmissor
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 
&& has_seq1(rcvpkt) 
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
Espera 
por 0 de 
baixo
rdt_rcv(rcvpkt)&& 
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
fragmento da FSM
do receptor

Transport Layer: 3-60
rdt3.0: canais com erros e perdas
Nova hipótese sobre o canal: canal subjacente também pode 
perder pacotes (dados, ACKs)
• checksum, nos. de sequência, ACKs, retransmissões poderão 
ajudar… mas, não são suficientes
Q: Como as pessoas lidam com palavras
perdidas na conversa entre transmissor e 
receptor?
Transport Layer: 3-61
rdt3.0: canais com erros e perdas
Abordagem: transmissor aguarda um tempo “razoável” pelo ACK 
 retransmite se nenhum ACK for recebido neste intervalo
 se pacote (ou ACK) estiver apenas atrasado (e não perdido):
• retransmissão será duplicata, mas uso de no. de seq. já cuida disto
• receptor deve especificar no. de seq do pacote sendo reconhecido
temporizador
 usa temporizador para interromper após um tempo “razoável”
Transport Layer: 3-62
Transmissor rdt3.0
Espera 
por 
ACK0
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Espera 
chamada 1 
de cima
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,0)
stop_timer
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,1)
stop_timer
Espera 
chamada 0 
de cima
Espera 
por 
ACK1
Transport Layer: 3-63
Transmissor rdt3.0
Espera 
por 
ACK0
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Espera 
chamada 1 
de cima
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,0)
stop_timer
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,1)
stop_timer
udt_send(sndpkt)
start_timer
timeoutEspera 
chamada 0 
de cima
Espera 
por 
ACK1

rdt_rcv(rcvpkt)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
rdt_rcv(rcvpkt)

udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )

Transport Layer: 3-64
rdt3.0 em ação
transmissor receptor
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) Sem perda
transmissor receptor
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(b) Pacote perdido
pkt1
X
perda
pkt1
timeout
resend pkt1
Transport Layer: 3-65
rdt3.0 em ação
rcv pkt1
send ack1
(detect duplicate)
pkt1
transmissor receptor
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) Perda de ACK
ack1
X
loss
pkt1
timeout
resend pkt1
rcv pkt1
send ack1
(detect duplicate)
pkt1
transmissor receptor
rcv pkt1
send ack0
rcv ack0
send pkt1
send pkt0
rcv pkt0pkt0
ack0
(d) Retransmissão prematura/ ACK atrasado
pkt1
timeout
resend pkt1
ack1
ack1
send ack1send pkt0
rcv ack1
pkt0
rcv pkt0
send ack0ack0
pkt1
(ignore)
rcv ack1
Transport Layer: 3-66
Desempenho do rdt3.0 (para-e-espera)
 exemplo: enlace de 1 Gbps, atraso prop. 15 ms, pacote com 
8000 bits
U trans: utilização – fração de tempo em que transmissor 
está transmitindo
Dtrans =
L
R
8000 bits
109 bits/seg= = 8 microsegs
• tempo para transmitir o pacote no canal:
Transport Layer: 3-67
rdt3.0: operação para-e-espera
transmissão do primeiro bit do pacote, t = 0
transmissor receptor
RTT
chegada do primeiro bit do pacote
chegada do último bit do 
pacote, envia ACK
chegada do ACK, envia próximo
pacote, t = RTT + L / R
Transport Layer: 3-68
rdt3.0: operação para-e-espera
transmissor receptor
Utransm
=
L / R
RTT
RTT
L/R
+ L / R
= 0,00027
= 0,008
30,008
 desempenho horrível do protocolo rdt 3.0!
 Protocolo limita o desempenho da infraestrutura subjacente (canal)
Transport Layer: 3-69
Operação de protocolos com paralelismo
paralelismo (pipelining): transmissor envia vários pacotes em sequência, 
todos esperando para serem reconhecidos
• faixa de números de sequência deve ser aumentada
• armazenamento no transmissor e/ou no receptor
Transport Layer: 3-70
Paralelismo: aumento da utilização
transmitido primeiro bit do pacote, t = 0
transmissor receptor
RTT 
Transmitido ultimo bit, t = L / R
chegada do primeiro bit do pacote
chegada do último bit do pacote, envia ACK
chegada do ACK, envia próximo 
pacote, t = RTT + L / R
chegada do último bit do 2o pacote, envia ACK
chegada do último bit do 3o pacote, envia ACK
Paralelismo com 3-pacotes aumenta
a utilização por um fator de 3!
U 
transm = 
0,0024 
30,008 
= 0,00081 
3L / R 
RTT + L / R 
= 
Transport Layer: 3-71
Go-Back-N: transmissor
 transmissor: “janela” de até N, pctes consecutivos transmitidos, mas não 
reconhecidos
• no. de seq. de k-bits no cabeçalho do pacote
 ACK cumulativo: ACK(n): ACKs todos os pacotes, incluindo no. seq. n
• ao receber ACK(n): avança a janela para iniciar com n+1
 temporizador para o pacote mais antigo ainda não confirmado
 timeout(n): retransmite pacote n e todos os seguintes na janela
Transport Layer: 3-72
já
reconhecido
enviado, mas 
ainda não 
reconhecido
autorizado, mas
ainda não enviado
não autorizado
Go-Back-N: receptor
 usa apenas ACK: sempre envia ACK para pacote recebido 
corretamente com o maior no. de seq. em ordem
• pode gerar ACKs duplicados
• só precisa se lembrar do rcv_base
 ao receber pacotes fora de ordem: 
• pode descartar (não armazenar) ou armazenar: decisão de implementação
• re-ACK pacote com o maior no. de seq. em ordem
rcv_base
recebido e reconhecido
Fora de ordem: recebido, mas não reconhecido
não recebido
Visão do receptor do espaço de números de 
sequência:
… …
Transport Layer: 3-73
Go-Back-N em ação
send pkt0
send pkt1
send pkt2
send pkt3
(wait)
transmissor receptor
receive pkt0, send ack0
receive pkt1, send ack1
receive pkt3, discard, 
(re)send ack1
send pkt2
send pkt3
send pkt4
send pkt5
Xloss
timeout
receive pkt4, discard, 
(re)send ack1
receive pkt5, discard, 
(re)send ack1
rcv pkt2, deliver, send ack2
rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5
ignore duplicate ACK
janela transmissor (N=4)
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
rcv ack0, send pkt40 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 rcv ack1, send pkt5
Transport Layer: 3-74
Repetição Seletiva: a abordagem
paralelismo: múltiplos pacotes em trânsito
 receptor reconhece individualmente todos os pacotes recebidos 
corretamente
• buferiza pacotes, caso necessário, para entrega em ordem à camada superior
 transmissor:
• mantém (conceitualmente) um temporizador para cada pacote não 
reconhecido
• timeout: retransmite apenas o pacote associado ao timeout
• mantém (conceitualmente) “janela” incluindo N #s de seq. consecutivos
• limita os pacotes em trânsito àqueles que cabem nessa janela
Transport Layer: 3-75
Retransmissão seletiva: janelas do transmissor e 
do receptor
Transport Layer: 3-76
Fora de ordem 
(no buffer), mas 
já reconhecido
Aguardado, mas 
ainda não 
recebido
Aceitável (dentro 
da janela)
Não autorizado
já
reconhecido
enviado, mas 
ainda não 
reconhecido
autorizado, mas
ainda não enviado
não autorizado
visão do transmissor dos números de sequência
visão do receptor dos números de sequência
Retransmissão seletiva: transmissor e receptor
dados de cima:
 se próx. no. seq. disponível (n) na 
janela, envia pacote, liga 
temporizador (n)
timeout(n):
 reenvia pacote n, reinicia 
temporizador
ACK(n) em [sendbase,sendbase+N]:
 marca pacote n como recebido, 
desliga temporizador(n)
 se n for o menor pacote não 
reconhecido, avança a base da 
janela para o próx. no. de seq. não 
reconhecido
transmissor
pacote n em [rcvbase, rcvbase+N-1]
 envia ACK(n)
 forade ordem: armazena
 em ordem: entrega (tb. entrega 
pacotes armazenados em ordem), 
avança janela p/ próximo pacote 
ainda não recebido
pacote n em [rcvbase-N,rcvbase-1]
 ACK(n)
senão:
 ignora 
receptor
Transport Layer: 3-77
Retransmissão seletiva em ação
send pkt0
send pkt1
send pkt2
send pkt3
(wait)
transmissor receptor
send pkt2
(but not 3,4,5)
Xloss
pkt 2 timeout
Janela do transmissor (N=4)
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
rcv ack0, send pkt40 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 rcv ack1, send pkt5
receive pkt0, send ack0
receive pkt1, send ack1
receive pkt3, buffer, 
send ack3
record ack3 arrived
receive pkt4, buffer, 
send ack4
receive pkt5, buffer, 
send ack5
rcv pkt2; deliver pkt2,
pkt3, pkt4, pkt5; send ack2
Q: o que acontece quando chegar o ack2?
Transport Layer: 3-78

Mais conteúdos dessa disciplina