Transcript Powerpoint
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