Camada de Transporte
Teleprocessamento e Redes
Instituto de Informática – UFG
Prof. Fábio M. Costa
(slides baseados em [Kurose&Ross2003])
Capítulo 3: Camada de Transporte
Objetivos do Capítulo:
Resumo do Capítulo:
 serviços da camada de transporte
 entender os princípios por trás
dos serviços da camada de
transporte:




multiplexação/demultiplexação
transferência de dados
confiável
controle de fluxo
controle de congestionamento
 instanciação e implementação
destes princípios na Internet
 multiplexação/demultiplexação
 transporte sem conexão: UDP
 princípios de transferência
confiável de dados
 transporte orientado a conexões:
TCP
 transferência confiável
 controle de fluxo
 gerenciamento de conexão
 princípios de controle de
congestionamento
 controle de congesetionamento do
TCP
Cap. 3: Camada de Transporte
2
Protocolos e Serviços de Transporte
 Comunicação lógica entre
processos de aplicação em
diferentes hosts
 Os protocolos de transporte são
executados nos sistemas finais
da rede (hosts ou “end systems”)
Serviço de Transporte versus
Serviços de Rede:
 camada de rede: transferência
de dados entre computadores
(end systems)

camada de transporte:
transferência de dados entre
processos
 utiliza e aprimora os serviços
oferecidos pela camada de
rede
aplicação
transporte
eerede
enlace
física
rede
enlace
física
rede
enlace
física
rede
enlace
física
rede
enlace
física
rede
enlace
física
aplicação
transporte
rede
enlace
física
Cap. 3: Camada de Transporte
3
Protocolos da Camada de Transporte
Serviços de Transporte da
Internet:
 confiável, seqüencial e
unicast: TCP



congestionamento
controle de fluxo
orientado a conexões
 Não-confiável (“best-
effort”), não seqüencial,
entrega unicast or multicast:
UDP
 serviços não disponíveis:



application
transporte
rede
enlace
física
rede
enlace
física
rede
enlace
física
rede
enlace
física
rede
enlace
física
rede
enlace
física
application
transporte
rede
enlace
física
tempo-real
garantia de banda
multicast confiável
Cap. 3: Camada de Transporte
4
Multiplexação / Demultiplexação
Segmento - unidade de dados
Demultiplexação: entrega de
segmentos recebidos aos
processos de aplicação corretos
trocada entre entidades da
camada de transporte
 TPDU: transport protocol
data unit (unidade de dados
do protocolo de transporte)
dados da camada
de aplicação
P1
cabeçalho do
segmento
segmento
Ht
M
M
Hn segmento
aplicação
transporte
rede
P3
receptor
M
M
aplicação
transporte
rede
P4
M
P2
aplicação
transporte
rede
Cap. 3: Camada de Transporte
5
Multiplexação / Demultiplexação
Multiplexação:
reunir dados de múltiplos
processo de aplicação, juntar
cabeçalhos com informações
para demultiplexação
Multiplexação/demultiplexação:
 baseadas no número de porta
do transmissor, número de
porta do receptor e endereços
IP
 números de porta origem e
destino em cada segmento
 Lembre-se: portas com
números bem-conhecidos
são usadas para aplicações
específicas
32 bits
porta origem
porta destino
outros campos de cabeçalho
dados de aplicação
(mensagem)
formato do segmento TCP/UDP
(campos comuns)
Cap. 3: Camada de Transporte
6
Multiplexação/Demultiplexação
 Em Protocolos Sem Conexão (UDP)


Baseado no socket UDP de destino
Socket UDP = Endereço IP + Número da Porta
 Em Protocolos Orientados a Conexão (TCP)
 Baseado no socket TCP de destino
 Socket TCP:
• Endereço IP de Origem + Número da Porta de Origem
• Endereço IP de Destino + Número da Porta de Dest.

I.e., a conexão é identificada pelos endereços dos
dois processos conectados
Cap. 3: Camada de Transporte
7
Multiplexação: Exemplo 1
host A
porta origem: x
porta dest.: 53
servidor B
porta origem:53
port dest.: x
Aplicação: DNS (sobre UDP)
(Observe a inversão dos números de
portas na mensagem de resposta)
Cap. 3: Camada de Transporte
8
Multiplexação: Exemplo 2
Processo (ou thread)
da Aplicação
cliente Web
host C
Socket TCP
Servidor
Web
host B
Camada de
Transporte
(Demultiplex.)
IP Origem: C
IP Dest: B
porta origem: y
porta dest.: 80
IP Origem: C
IP Dest: B
porta origem: x
porta dest.: 80
IP Origem: A
IP Dest: B
porta origem : x
porta dest.: 80
cliente Web
host A
Aplicação: servidor Web
(sobre TCP)
Cap. 3: Camada de Transporte
9
UDP: User Datagram Protocol [RFC 768]
 Protocolo de transporte da
Internet “sem gorduras”,
“sem frescuras”
 Serviço “best
effort” ,
segmentos UDP podem ser:
 perdidos
 entregues fora de
ordem para a aplicação

Sem conexão:


não há apresentação
(handshaking) entre o
UDP transmissor e o
receptor
cada segmento UDP é
tratado de forma
independente dos
outros
Por que UDP?
 não há estabelecimento de
conexão (que pode redundar
em atrasos)
 simples: não há estado de
conexão nem no transmissor,
nem no receptor
 cabeçalho de segmento
reduzido: baixo overhead
 não há controle de
congestionamento: UDP pode
enviar segmentos tão rápido
quanto desejado (e possível)
Cap. 3: Camada de Transporte
10
Mais sobre UDP
 Muito usado por aplicações
de mutimídia contínua
(streaming)


tolerantes à perda
sensíveis à taxa
Tamanho, em bytes,
do segmento UDP,
incluíndo cabeçalho
32 bits
porta origem
porta destino
tamanho
checksum
 Outros usos do UDP (por
que?):


DNS
SNMP
 Transferência confiável
sobre UDP: acrescentar
confiabilidade na camada
de aplicação

recuperação de erro
específica de cada
aplicação
Dados de Aplicação
(mensagem)
formato do segmento UDP
Cap. 3: Camada de Transporte
11
UDP checksum
Objetivo: detectar “erros” (ex., bits trocados) no
segmento transmitido
Transmissor:
 trata o conteúdo do
segmento como seqüência
de inteiros de 16 bits
 checksum: complemento
de 1 da soma do conteúdo
do segmento

de 16 em 16 bits
 transmissor coloca o valor
calculado no campo de
checksum do cabeçalho
UDP
Receptor:
 computa o checksum do
segmento recebido
 verifica se o checksum
calculado é igual ao valor do
campo checksum:
 NÃO - erro detectado
 SIM - não há erros. Mas,
talvez haja erros apesar
disto? Mais sobre isto
depois ….
Cap. 3: Camada de Transporte
12
Princípios de Transferência Confiável
de Dados
 Importante nas camadas de aplicação, transporte e enlace
network
layer
 top-10 na lista dos tópicos mais importantes de redes!
 As caracteristicas do canal não confiável subjacente determinarão a
complexidade de um protocolo confiável de transferência de dados
(rdt)
Cap. 3: Camada de Transporte
13
Transferência Confiável: Modelo Básico
rdt_send(): chamada da camada superior,
(ex., pela aplicação). Passa dados para
entregar à camada superior receptora
lado
transmissor
udt_send(): chamada pela entidade
de transporte, para transferir pacotes
para o receptor através do canal não
confiável
deliver_data(): chamada pela
entidade de transporte para
entregar dados para camada superior
lado
receptor
rdt_rcv(): chamada pela entidade da
camada inferior quando o pacote chega ao
lado receptor do canal
Cap. 3: Camada de Transporte
14
Transferência confiável: O ponto de
partida
Etapas:
 desenvolver incrementalmente o transmissor e o receptor de um
protocolo confiável de transferência de dados (rdt)
 considerar apenas transferências de dados unidirecionais

mas informação de controle deve fluir em ambas as direções!
 usar máquinas de estados finitos (FSM) para especificar o
protocolo transmissor e o receptor
evento causando transição de estados
ações tomadas na transição de estado
estado: quando neste
“estado” o próximo
estado fica unicamente
determinado pelo
próximo evento
estado
1
evento
ações
estado
2
Cap. 3: Camada de Transporte
15
rdt1.0: Transferência confiável sobre
canais confiáveis
 canal de transmissão perfeitamente confiável
 não há erros de bits
 não há perdas de pacotes
 FSMs separadas para transmissor e receptor:
 transmissor envia dados para o canal subjacente
 receptor lê os dados do canal subjacente
Cap. 3: Camada de Transporte
16
rdt2.0: Canal com erros de bit
 Canal subjacente pode trocar valores dos bits num
pacote

lembrete: checksum do UDP pode detectar erros de bits
 A questão: Como recuperar-se desses erros?
 reconhecimentos (ACKs): receptor avisa explicitamente ao
transmissor que o pacote foi recebido corretamente
 reconhecimentos negativos (NAKs): receptor avisa
explicitamente ao transmissor que o pacote tem erros
 transmissor reenvia o pacote quando da recepção de um NAK
 cenários humanos usando ACKs, NAKs?
 Novos mecanismos no rdt2.0 (além do rdt1.0):
 deteção de erros
 retorno do receptor: mensagens de controle
(ACK,NAK) receptor -> transmissor
 retransmissão de pacotes recebidos com erro
Cap. 3: Camada de Transporte
17
rdt2.0: especificação da FSM
FSM do transmissor
FSM do receptor
Cap. 3: Camada de Transporte
18
rdt2.0: em ação (ausência de erros)
FSM do transmissor
FSM do receptor
Cap. 3: Camada de Transporte
19
rdt2.0: em ação (cenário com
erros)
FSM do transmissor
FSM do receptor
Cap. 3: Camada de Transporte
20
rdt2.0 tem um problema fatal!
O que acontece se o ACK/NAK
é corrompido?
 transmissor não sabe o que
aconteceu no receptor!
 não pode apenas retransmitir:
possível duplicata
O que fazer?
 Transmissor envia um
ACK/NAK para reconhecer o
ACK/NAK do receptor. Mas o
que acontece se este
ACK/NAK se perdem?
 receptor retransmite o
ACK/NAK. Mas isto poderia
causar confusão


p. ex.: a retransmissão de um
pacote recebido
corretamente!
isto é, duplicatas
 claramente, esta não parece
ser uma solução satisfatória!
Uma solução mais simples: Baseada na
deteção de duplicatas pelo
receptor
Tratando duplicatas:
 transmissor acrescenta
número
de seqüência em cada pacote
 Transmissor reenvia o último
pacote se ACK/NAK for perdido
 receptor descarta (não passa para
a aplicação) pacotes duplicados
stop and wait
Transmissor envia um pacote
e então espera pela resposta
do receptor
Cap. 3: Camada de Transporte
21
rdt2.1: Transmissor, trata ACK/NAKs
perdidos
Cap. 3: Camada de Transporte
22
rdt2.1: Receptor, trata ACK/NAKs
perdidos
Cap. 3: Camada de Transporte
23
rdt2.1: Receptor, trata ACK/NAKs
perdidos: Operação sem erros
Cap. 3: Camada de Transporte
24
rdt2.1: Discussão
Transmissor:
 adiciona número de
seqüência ao pacote
 Dois números (0 e 1)
bastam. Porque?
 deve verificar se os
ACK/NAK recebidos estão
corrompidos
 duas vezes o número de
estados

Receptor:
 deve verificar se o pacote
recebido é duplicado

estado indica se o pacote
0 ou 1 é esperado
 nota: receptor pode não
saber se seu último
ACK/NAK foi recebido pelo
transmissor
o estado deve “lembrar” se
o pacote “corrente” tem
número de seqüência 0 ou 1
Cap. 3: Camada de Transporte
25
rdt2.2: um protocolo sem NAK
 mesma funcionalidade do
rdt2.1, usando somente
ACKs
 ao invés de enviar NAK, o
receptor envia ACK para o
último pacote recebido sem
erro

receptor deve incluir
explicitamente o número de
seqüência do pacote sendo
reconhecido
 ACKs duplicados no
transmissor resultam na
mesma ação do NAK:
retransmição do pacote
corrente
!
FSM do
transmissor
Cap. 3: Camada de Transporte
26
rdt3.0: canais com erros e perdas
Nova Hipótese: canal de
transmissão pode também
perder pacotes (de dados
ou ACKs)

checksum, números de
seqüência, ACKs,
retransmissões serão de
ajuda, mas não o bastante
Q: como tratar com perdas?


transmissor espera até
que certos dados ou ACKs
sejam perdidos, então
retransmite
problemas?
Abordagem: transmissor espera
um tempo “razoável” pelo ACK
 retransmite se nenhum ACK for
recebido neste tempo
 timeout
 se o pacote (ou ACK) estiver
apenas atrasado (não perdido):
 retransmissão será duplicata,
mas os números de seqüência
já tratam com isso
 receptor deve especificar o
número de seqüência do
pacote sendo reconhecido
 exige um temporizador
decrescente
Cap. 3: Camada de Transporte
27
rdt3.0 sender
Cap. 3: Camada de Transporte
28
rdt3.0 em ação
(a) operação sem perda
(b) pacote perdido
Cap. 3: Camada de Transporte
29
rdt3.0 em ação
(c) ACK perdido
(d) timeout prematuro
Cap. 3: Camada de Transporte
30
Desempenho do rdt3.0
 rdt3.0 funciona, mas o desempenho é sofrível
 exemplo: enlace de 1 Gbps, 15 ms de atraso de propagação,
pacotes de 1KB:
8kb/pct
=
transmissão
10**9 b/seg
= 8 ms
fração do tempo
Utilização = U = transmissor ocupado =


8 ms
30,016 ms
= 0.00015
Um pacote de 1KB cada 30 ms -> 33kB/seg de vazão sobre um
canal de 1 Gbps
o protocolo de rede limita o uso dos recursos físicos!
Cap. 3: Camada de Transporte
31
Protocolos com Paralelismo (pipelining)
Paralelismo: transmissor envia vários pacotes ao mesmo tempo,
todos esperando para serem reconhecidos


faixa de números de seqüência deve ser aumentada
armazenamento dos pacotes no transmissor e/ou no receptor
(a) operação do protocolo stop-and-wait
(a) operação do protocolo com paralelismo
 Duas formas genéricas de protocolos com paralelismo:
go-Back-N e retransmissão seletiva
Cap. 3: Camada de Transporte
32
Go-Back-N
Transmissor:
 Número de seqüência com k bits no cabeçalho do pacote
 “janela” de até N, pacotes não reconhecidos, consecutivos, são
permitidos
 ACK(n): reconhece todos os pacotes até o número de seqüência N
(incluindo este limite). “ACK cumulativo”
 pode receber ACKs duplicados (veja receptor)
 temporizador para o pacote mais antigo enviado e não confirmado
 timeout: retransmite pacote mais antigo e todos os demais pacotes que
estejam dentro da janela
Cap. 3: Camada de Transporte
33
GBN: FSM estendida para o Transmissor
Dados a enviar
Inicialização:
base = 1
nextseqnum = 1
Q: E se for um ACK atrasado (< base)?
Avança a janela
Ocorreu timeout
Ok se janela
avançou
Recebeu ACK
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
Λ
Recebeu ACK com erro
Cap. 3: Camada de Transporte
34
Possíveis respostas
 Protocolo assume que a rede/camada
subjacente jamais reordena pacotes!

Neste caso específico, pacotes de ACK
 Melhorar o tratamento do evento de
recepção de ACKs para verificar se não é
um ACK ultrapassado

Suficiente para lidar com a possibilidade de
reordenação de pacotes pela camada inferior?
Cap. 3: Camada de Transporte
35
GBN: FSM estendida para o Receptor
Qualquer outro evento
Inicialização:
expectedseqnum = 1
sndpkt = make_pkt(0, ACK, checksum)
expectedseqnum++
receptor simples:
 somente ACK: sempre envia ACK para pacotes corretamente
recebidos com o mais alto número de seqüência em ordem


pode gerar ACKs duplicados
precisa lembrar apenas do número de seqüência esperado
(expectedseqnum)
 pacotes fora de ordem (pacote anterior foi perdido) -> default:
 descarte (não armazena) -> não há buffer de recepção!
 reconhece pacote com o mais alto número de seqüência em ordem
Cap. 3: Camada de Transporte
36
Go-Back-N em ação (janela: 4 pacotes)
Cap. 3: Camada de Transporte
37
Retransmissão Seletiva
 Receptor reconhece
individualmente todos os
pacotes recebidos corretamente

armazena pacotes, quando necessário, para eventual
entrega em ordem para a camada superior
 Transmissor somente reenvia os pacotes para os
quais um ACK não foi recebido

transmissor temporiza cada pacote não reconhecido
 Janela de transmissão
 N números de seqüência consecutivos
 novamente limita a quantidade de pacotes enviados, mas
não reconhecidos (i.e., com ACK pendente)
Cap. 3: Camada de Transporte
38
Retransmissão seletiva: janelas do transmissor e
do receptor
(a) visão dos números de seqüência pelo transmissor
(b) visão dos números de seqüência pelo receptor
Cap. 3: Camada de Transporte
39
Retransmissão seletiva
transmissor
dados da camada superior :

se o próximo número de seqüência
disponível está na janela, envia o
pacote
timeout(n):

reenvia pacote n, e redispara seu
temporizador de timeout
ACK(n) em [sendbase,sendbase+N]:
marca pacote n como recebido
 se n é o menor pacote não
reconhecido, avança a base da
janela para o próximo número de
seqüência não reconhecido

receptor
pacote n em
[rcvbase, rcvbase+N-1]
 envia ACK(n)
 fora de ordem: armazena
 em ordem: entrega para a
camada superior, avança janela
para o próximo pacote ainda
não recebido
pkt n em
[rcvbase-N,rcvbase-1]
 ACK(n)
caso contrário:
 ignora
Cap. 3: Camada de Transporte
40
Retransmissão seletiva em ação
Cap. 3: Camada de Transporte
41
Retransmissão seletiva:
dilema
Exemplo:
 núms. de seqüência: 0,..,3
 tamanho da janela=3
 receptor não vê
diferença nos dois
cenários!
 incorretamente passa
dados duplicados como
novos (figura a)
Q: qual a relação entre o
espaço de numeração
seqüencial e o tamanho da
janela?
Cap. 3: Camada de Transporte
42
Exercícios
 Problemas: 5, 6, 7, 10, 12, 16, 18, 19
 2a. Edição (na bibl. do INF ou no Xerox do CA)
 Prático:
 Implementar incrementalmente os protocolos estudados
na seção 3.4 (em Java ou em C)
 Sobre UDP, como se fosse a camada de rede
 Analisar o desempenho dos protocolos em uma rede local
• ênfase no throughput e eficiência de utilização

Considerar a mesma análise em uma rede com latência
maior
• ex.: introduzindo um atraso artificial

Lab. de Redes
Cap. 3: Camada de Transporte
43
Download

Powerpoint