0% acharam este documento útil (0 voto)
2 visualizações71 páginas

Redes Cap3a

O capítulo 3 aborda a camada de transporte, destacando seus serviços como multiplexação/demultiplexação, transporte confiável (TCP) e não confiável (UDP). Ele diferencia a comunicação entre processos de aplicação e entre hosts, além de discutir a implementação de controle de fluxo e congestionamento. O capítulo também explora os princípios de transferência confiável de dados e os mecanismos de detecção e correção de erros.

Enviado por

El Axo
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
2 visualizações71 páginas

Redes Cap3a

O capítulo 3 aborda a camada de transporte, destacando seus serviços como multiplexação/demultiplexação, transporte confiável (TCP) e não confiável (UDP). Ele diferencia a comunicação entre processos de aplicação e entre hosts, além de discutir a implementação de controle de fluxo e congestionamento. O capítulo também explora os princípios de transferência confiável de dados e os mecanismos de detecção e correção de erros.

Enviado por

El Axo
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

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 da 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
física
hosts diferentes 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

3: Camada de Transporte 3a-5


Camada de Transporte vs. Camada de Rede

Camada Camada
de Transporte de Transporte
Camada Camada
de Rede 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”
3: Camada de Transporte 3a-6
Comunicação física entre camadas

3: Camada de Transporte 3a-7


Camadas: tipos de comunicação lógica

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 rede
ponto a ponto (TCP) física
rede enlace
enlace física
 orientado à conexão 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):


manipula mensagens geradas
usa o cabeçalho do segmento
por diferentes processos de
para entregar a mensagem ao
aplicação, acrescentando um
processo de aplicação
cabeçalho e formando um
destinatário correto
segmento

destinatário
dados da camada P3 P4
de aplicação M M’
remetente 1 remetente 2
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)
 a mensagem com dados da mensagem
aplicação é repassada ao
processo de 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 de conexão 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” rapidamente, 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)

 protocolo de overhead reduzido

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

 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

1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
1
1
soma: 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

soma+Checksum: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

 note que o “vai um” no bit mais significativo precisa ser adicionado ao
resultado ("wraparound") 3: Camada de Transporte 3a-23
UDP Checksum: falha na proteção
exemplo

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 para deliver_data(): chamada


passar dados a serem entregues ao para entregar dados para a
processo de aplicação destinatário camada superior

remetente destinatário

udt_send(): chamada para rdt_rcv(): chamada que ocorre


transferir pacotes para o lado quando o pacote chega no lado
receptor pelo canal subjacente receptor
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):


 detecção de erros
 realimentação realizada pelo receptor por meio de mensagens
de controle (ACK e NAK) enviadas ao remetente
 retransmissão de pacotes recebidos com erro
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)

Packet received
with error bit

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 Enfrentando as duplicações
um ACK ou NAK estiver  o remetente deve adicionar o
corrompido? campo número de sequência ao
cabeçalho de cada pacote
 neste caso, o remetente não tem transmitido
como saber se o destinatário
recebeu os dados transmitidos
 o destinatário deve descartar
(i.e., não entregar à camada
superior) cada pacote detectado
O que fazer? como duplicado
 o remetente deve reenviar o
pacote de dados Stop-and-Wait
 todavia, este procedimento remetente envia um pacote e,
poderá causar a retransmissão então, aguarda a resposta do
de um pacote recebido OK, destinatário
provocando a duplicação dos
pacote de dados 3: Camada de Transporte 3a-37
rdt2.1 remetente: ACK ou NAK com erro

rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
Wait for Wait for isNAK(rcvpkt) )
call 0 from ACK or
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) &&
&& notcorrupt(rcvpkt)
isACK(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) NAK 1 above
&& (corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)

udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum)


udt_send(sndpkt)

3: Camada de Transporte 3a-38


rdt2.1 receptor: 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 do


protocolo rdt2.1

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


lugar, uma cópia do ACK que foi enviado para o último
pacote recebido OK, ou seja, um ACK duplicado é
enviado

 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

rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK isACK(rcvpkt,1) )
call 0 from
above 0 udt_send(sndpkt)
sender FSM
fragment rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || L
has_seq1(rcvpkt)) Wait for receiver FSM
0 from
below fragment
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
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
sequência já cuida disso
 P: Como lidar com perdas?
 receptor deve especificar no
 remetente espera até ter
“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
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer

Wait for Wait


call 0 from for
above ACK0
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Wait Wait for
for call 1 from
ACK1 above

rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer

3: Camada de Transporte 3a-45


rdt3.0 remetente
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer L
L Wait for Wait
for timeout
call 0 from
ACK0 udt_send(sndpkt)
above
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Wait Wait for
timeout for call 1 from
udt_send(sndpkt) ACK1 above
start_timer rdt_rcv(rcvpkt)
rdt_send(data) L
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
L

3: Camada de Transporte 3a-46


rdt3.0 em ação
sender receiver
send pkt0 pkt0
sender receiver rcv pkt0
ack0 send ack0
pkt0 rcv ack0
rcv pkt0 send pkt1 pkt1
X
ack0 send ack0 loss
rcv ack0
pkt1
rcv pkt1 timeout
ack1 send ack1 resend pkt1 pkt1
rcv ack1
pkt0 rcv pkt1
rcv pkt0
ack1 send ack1
rcv ack1
ack0 send ack0
send pkt0 pkt0
rcv pkt0
ack0 send ack0

(a) no loss
(b) packet loss
3: Camada de Transporte 3a-47
rdt3.0 em ação
sender receiver
sender receiver send pkt0
pkt0
rcv pkt0
send pkt0 pkt0 send ack0
ack0
rcv pkt0 rcv ack0
ack0 send ack0 send pkt1 pkt1
rcv ack0 rcv pkt1
send pkt1 pkt1 send ack1
rcv pkt1 ack1
ack1 send ack1
X timeout
loss resend pkt1
timeout
pkt1 rcv pkt1
resend pkt1 pkt1 rcv ack1 (detect duplicate)
rcv pkt1 send pkt0 pkt0 send ack1
(detect duplicate)
ack1 send ack1 ack1 rcv pkt0
rcv ack1 rcv ack1 send ack0
send pkt0 pkt0 (ignore) ack0
rcv pkt0
ack0 send ack0 pkt1

(d) premature timeout/ delayed ACK


(c) ACK loss
3: Camada de Transporte 3a-48
Desempenho do rdt3.0
 rdt3.0 funciona, porém seu desempenho pode ser muito ruim
quando o atraso de propagação é muito grande!

❑ Exemplo:
Enlace costa-a-costa de 1 Gbps, dprop = 15 ms, pacote de 8.000
bits, transmissão livre de erros

3: Camada de Transporte 3a-49


Desempenho do rdt3.0
transmissão livre de erros de bit
 Exemplo: (continuação):

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


total que o remetente fica ocupado transmitindo no canal
Uremet = (dtrans) ÷ tT = [(L/R) ÷ (RTT + L/R)]
onde: tT = intervalo de tempo entre pacotes sucessivos

remetente destinatário
primeiro bit do primeiro pacote
transmitido, t = 0
último bit do primeiro pacote
transmitido, dTRANS = L / R
primeiro pacote
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

segundo pacote 3: Camada de Transporte 3a-50


Desempenho do rdt3.0
transmissão livre de erros de bit

Exemplo: (continuação)

RTT = 2 x dprop = 2 x 15 ms = 30 ms

L 8.000 bits
dtrans = = = 0,008 ms
109 bits/s
R
L
tT = + RTT = 0,008 ms + 30 ms = 30,008 ms
R
0,008 ms
Uremet = dtrans/tT = = 0,00027
30,008 ms

Vazão = 1 pacote/tT segundos = 8 kbits/30,008 ms = 267 kbps

➢ Conclusão: o protocolo “stop-and-wait” limita o uso do canal!

3: Camada de Transporte 3a-51


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

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

RTT

tT = RTT + L / R
Tx de pacote novo
ou retransmissão

➢ Meta: calcular tempo médio entre pacotes transmitidos com sucesso = tC

t C = Nr x t T onde Nr é o número médio de tentativas de transmissão

3: Camada de Transporte 3a-52


Desempenho do rdt3.0
transmissão sujeita a erros de bit
P = Prob{pacote recebido com erro}

Prob{i-ésimo pacote recebido OK} =


i = 1, 2, 3, ...
Nr = número médio de tentativas transmissão

Nr =

Nr = 1 / (1 – P)

tC = tempo médio entre pacotes transmitidos com sucesso

tC = Nr x tT = (RTT + L/R) / (1 – P) [s]

vazão média = 1 pacote / tC segundos = (1 – P) / (RTT + L/R) [pacotes/s]

3: Camada de Transporte 3a-53


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


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
send_base nextseqnum

 protocolo sliding-window : “desliza 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-56


Go-Back-N: receptor
janela de recepção

rcv_base

 se o pacote(n) é recebido livre de erros e com número de sequência


de acordo com o ordenamento, o ACK(n) é enviado
➢ o receptor precisa registrar apenas o valor de rcv_base
➢ a janela de recepção tem sempre tamanho igual a 1

 caso contrário (erro de bit e/ou pacote fora de ordem): ocorre


descarte do pacote recebido e retransmissão do ACK(n-1)

3: Camada de Transporte 3a-57


Go-Back-N em ação
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, discard,
012345678 rcv ack0, send pkt4 (re)send ack1
012345678 rcv ack1, send pkt5 receive pkt4, discard,
(re)send ack1
ignore duplicate ack1 receive pkt5, discard,
(re)send ack1
pkt 2 timeout
012345678 send pkt2
012345678 send pkt3
012345678 send pkt4 rcv pkt2, deliver, send ack2
012345678 send pkt5 rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5
Go-Back-N em ação
➢Animação interativa para o Protocolo Go-Back-N:

[Link]
nt/interactiveanimations/go-back-n-protocol/[Link]
BDP (Bandwidth-Delay Product )

 BDP - produto capacidade de transmissão pelo atraso


de ida e volta é uma medida do número de bits (ou
bytes) que um remetente pode transmitir enquanto
espera por ACK do destinatário

 BDP = Rbps . (RTTmédio)seg [bits]

3: Camada de Transporte 3a-60


Exemplo:
 Projete um protocolo Go-Back-N com janela deslizante para uma rede
com capacidade de transmissão 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 transmissão igual a 2x108 m/s. Para isso, 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:
dados:
R = 100 Mbps
d = 10.000 km
L = 100.000 bits
v = 2x108 m/s

3: Camada de Transporte 3a-61


Exemplo:
a) tamanho máximo das janelas de transmissão e de recepção?

RTT = 2 x dprop = 2 x d/v


RTT = 2 x 10.000 km / 2x108 m/s = 100 ms
BDP = Rbps . (RTTmédio)seg [bits]
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

3: Camada de Transporte 3a-62


Exemplo (continuação):
b) número de bits no campo de número de sequência (m)?

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

m > log2 (tamanho da janela de transmissão)

m ≈ 7 bits

c) valor de tempo limite inferior para o timeout?

timeout mínimo = RTT = 100 ms

3: Camada de Transporte 3a-63


Retransmissão seletiva
Selective Repeate (SR)

 Go-Back-N pode apresentar baixo desempenho se o tamanho da


janela de transmissão e o BDP são grandes

 solução: evitar a retransmissão desnecessária de pacotes


reconhecendo individualmente todos os pacotes recebidos
corretamente no destino

 receptor armazena os pacotes recebidos fora de ordem no


buffer de recepção para entrega posterior, em ordem, à camada
superior

 remetente retransmite somente os pacotes não reconhecidos


e dispara temporizador (“timeout”) para cada pacote
retransmitido

 Selective Repeate usa janelas de transmissão e de recepção com


igual tamanho
3: Camada de Transporte 3a-64
Retransmissão seletiva: janelas do remetente e do
receptor

3: Camada de Transporte 3a-65


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 sequência qualquer outro pacote
 ignora o pacote
3: Camada de Transporte 3a-66
Retransmissão Seletiva em ação

sender window (N=4) sender receiver


012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, buffer,
012345678 rcv ack0, send pkt4 send ack3
012345678 rcv ack1, send pkt5
receive pkt4, buffer,
record ack3 arrived send ack4
receive pkt5, buffer,
pkt 2 timeout send ack5
012345678 send pkt2
012345678 (but not 3,4,5)
012345678 rcv pkt2; deliver pkt2,
012345678 pkt3, pkt4, pkt5; send ack2

Q: what happens when ack2 arrives?


Retransmissão
seletiva: dilema 0123012 pkt0
0123012 pkt1 0123012

Exemplo: 0123012 pkt2 X 0123012


X 0123012
 números de sequência dos X
timeout
pacotes: 0, 1, 2, 3 retransmit pkt0
pkt0
 tamanho das janelas de 0123012
will accept packet
transmissão e de recepção with seq number 0
(a)
igual a 3
 receptor não “vê” sender window receiver window
diferença entre os dois (after receipt) (after receipt)
cenários! pkt0
0123012
 incorretamente, passa-se 0123012 pkt1 0123012
dados duplicados como 0123012 pkt2 0123012
novos [Figura (a)] 0123012
0123012 pkt3
X
P: Qual a relação entre os 0123012
pkt0 will accept packet
números de sequência e o (b) with seq number 0
tamanho das janelas que
permite evitar esse dilema? 3: Camada de Transporte 3a-68
Retransmissão seletiva
Animação interativa para o Protocolo Retransmissão Seletiva:

➢ [Link]
rk_8/cw/content/interactiveanimations/selective-repeat-
protocol/[Link]

3: Camada de Transporte 3a-69


Exercício Proposto
Considere o protocolo Selective Repeate. Suponha que o espaço de
números de sequência seja de tamanho k. Qual será o maior
tamanho de janela permissível (w) que evitará o problema
apresentado nas figuras do slide 68?

3: Camada de Transporte 3a-70


Mecanismos de transferência confiável

3: Camada de Transporte 3a-71

Você também pode gostar