Documente Academic
Documente Profesional
Documente Cultură
(IF678)
Módulo III
Fonte: kurose
Adaptações : Prof. Paulo Gonçalves
pasg@cin.ufpe.br
CIn/UFPE
mais de um protocolo de
transporte disponível para as
aplicações
Internet: TCP e UDP
Camada Transporte 3-4
CamadaTransporte vs. Camada de
Rede
analogia:
Camada de rede: 12 crianças enviando
comunicação lógica cartas à 12 crianças
entre hosts processos = crianças
Camada transporte: mensagens da aplic.=
comunicação lógica cartas em envelopes
entre processos
hosts = casas
Conta com (e melhora)
serviços da camada de Protocolo de
rede transporte = Ana e Bill
Protocolo da camada
de rede = serviço
postal
Camada Transporte 3-5
Protocolos da camada transporte da
Internet
Entrega confiável, em ordem aplicação
(TCP)
transporte
rede
enlace rede
Controle de física enlace
rede
congestionamento enlace
física
física
Controle de fluxo rede
enlace
Estabelecimento de conexão física rede
enlace
Entrega não-confiável, sem física
serviços indisponíveis:
Garantias de atraso
Garantias de banda passante
P3 P1
P1 P2 P4 aplicação
aplicação aplicação
host 2 host 3
host 1
Camada Transporte 3-8
Como a demultiplexação funciona
host recebe datagramas IP
cada datagrama possui 32 bits
endereço IP fonte,
# porta de origem # porta de destino
endereço IP de destino
cada datagrama carrega 1
segmento da camada outros campos do cabeçalho
transporte
cada segmento possui
número de porta de origem Dados da
e de porta de destino aplicação
host usa os endereços IP & (mensagem)
número das portas para enviar
segmento ao socket adequado
Formato do segmento TCP/UDP
P2 P1
P1
P3
P1 P4 P5 P6 P2 P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
P1 P4 P2 P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
Emissor: Receptor:
Trata o conteúdo de computa o checksum do
segmentos como uma segmento recebido
seqüência de inteiros de
16 bits Verifica se o checksum
checksum: adição (soma
computado bate com o valor
complemento 1) do informado no campo
conteúdo do segmento checksum:
Emissor coloca o valor do Não - erro detectado
checksum no campo Sim - nenhum erro
checksum do UDP detectado. Mas pode
haver erros? Mais em
breve … Camada Transporte 3-18
Exemplo de Checksum Internet
Nota
Ao adicionar números, não esquecer do “vai um”
Examplo: adição de dois inteiros de 16 bits
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
wraparound 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
soma 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
Camada Transporte 3-19
Resumo do Módulo 3
3.1 Serviços da camada 3.5 transporte orientado
transporte à conexão: TCP
3.2 Multiplexação e Estrutura do segmento
demultiplexão Transferência de dados
confiável
3.3 transporte não-
Controle de fluxo
orientado à conexão:
Gerenciamento de
UDP conexão
3.4 Princípios da 3.6 Princípios do
transferência controle de
confiável de dados congestionamento
3.7 controle de
congestionamento TCP
lado lado
emissor receptor
emissor receptor
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
U L/R .008
sender
= = = 0.00027 = 0.027%
RTT + L / R 30.008 microsec
onds
U 3*L/R .024
sender
= = = 0.0008
RTT + L / R 30.008 microsecon
ds = 0.08%
Camada Transporte 3-44
Go-Back-N
Emissor:
# de seq. de k bits no cabeçalho do pacote
“janela” de até N consecutivos pacotes não confirmados permitida
Utilizáveis,
Já mas não
confirmados enviados
Enviados mas Não
não utilizáveis no
confirmados momento
Tamanho da janela = 4
Camada Transporte 3-48
SR - Selective Repeat
Receptor confirma individualmente cada pkt
recebido corretamente
armazena pkts, quando necessário, para eventual envio
de pacotes ordenados à camada superior
Emissor reenvia somente pkts para os quais o
ACK não foi recebido
Emissor possui temporizador para cada pacote não
confirmado (unACKed pkt)
Janela do emissor
N consecutivos #s de seq.
Novamente limita #s de seq. de enviados, pkts não
confirmados (unACKed pkts)
Fora de ordem
(armazenados), Aceitáveis
mas já (dentro da
confirmados janela)
Sendo Não
aguardados utilizáveis no
momento
Receptor não vê
diferença nos dois
cenários!
Incorretamente passa
dados duplicados como
sendo novos no
exemplo (a)
350
300
250
RTT (milliseconds)
200
150
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
(tipicamente, = 0.25)
transfe-
01 nextseqnum = número de seqüência inicial
02
03 loop (forever) {
rência
04 switch(event)
05 event: dados recebidos da aplicação acima
06 cria segmento TCP com número de seqüência nextseqnum
confiável 07
08
inicia temporizador para segmento nextseqnum
passa segmento para IP
de dados
09 nextseqnum = nextseqnum + comprimento(dados)
10 event: expirado temporizador de segmento c/ no. de seqüência y
11 retransmite segmento com número de seqüência y
12 calcula novo intervalo de temporização para segmento y
emissor 13 reinicia temporizador para número de seqüência y
14 event: ACK recebido, com valor de campo ACK de y
TCP 15 se (y > sendbase) { /* ACK cumulativo de todos dados até y */
simplificado 16 cancela temporizadores p/ segmentos c/ nos. de seqüência < y
17 sendbase = y
18 }
19 senão { /* é ACK duplicado para segmento já reconhecido */
20 incrementa número de ACKs duplicados recebidos para y
21 if (número de ACKs duplicados recebidos para y == 3) {
22 /* TCP: retransmissão rápida */
23 reenvia segmento com número de seqüência y
24 reinicia temporizador para número de seqüência y
25 }
26 } /* fim de loop forever */
Camada Transporte 3-65
Eventos no emissor TCP:
dados receb. da aplic.: timeout:
retransmite segmento que
Cria segmento com #
causou o timeout
de seq.
reinicia temporizador
# de seq. é o número Ack recebido:
do primeiro byte de Se confirma segmentos
dados no segmento prévios não-confirmados
Inicia temporizador se Atualiza o que é conhecido
a ser confirmado
já não estiver
Inicia temporizador se
executando existem segmentos
Intervalo de devidos
expiração:
TimeOutInterval
Seq=92 timeout
timeout
X
perd a
Sendbase
= 100
Seq=92 timeout
SendBase
= 120
SendBase
= 100 SendBase
= 120 Timeout prematuro
tempo tempo
Cenário com ACK perdido
Camada Transporte 3-67
TCP: + cenários com retransmissão
Host A Host B
timeout
X
perda
SendBase
= 120
tempo
Cenário com ACK cumulativo
serviço de “casamento”
de taxas: “casar” a
taxa de envio com a
taxa de drenagem de
dados da aplicação
Processo aplicação
receptora
pode ser lento ao ler
dados do buffer
Camada Transporte 3-73
Controle de fluxoTCP:
funcionamento
Recept. informa espaço
livre através da
inclusão nos segmentos
do valor da janela de
recepção RcvWindow
(Suponha que receptor TCP Emissor limita dados
descarte segmentos for a não confirmados ao
de ordem) tamanho da janela
espaço livre no buffer RcvWindow
= RcvWindow guarante que buffer do
= RcvBuffer-[LastByteRcvd - receptor não
LastByteRead] “transborda”
fechar
cliente fecha socket:
clientSocket.close();
Espera temporizada
fechar
segmento TCP de controle
FIN ao servidor
Espera temporizada
fechar
aos FINs recebidos
fechado
Ciclo de vida do
servidor TCP
sem retransmissões
compartilhado
Atraso (delay)
muito elevado
quando rede
congestionada
Vazão
(throughput)
máxima alcançável
R/3
lout
lout
lout
R/4
a. b. c.
“custos” do congestionamento:
(b) mais trabalho (retransmissões) para dada “goodput”
(c) Retransmissões desnecessárias: enlace carrega múltiplas
cópias do mesmo pacote Camada Transporte 3-84
Causas/custos do congestionamento:
cenário 3
4 emissores
Q: o que acontece
Caminhos com múltiplos saltos quando lin e l
timeout/retransmissão aumentam ? in
Host
HostA
A lout Host B
lin : dado original
l'in : dado original, mais
dado retransmitido
buffers finitos de
enlace de saída
compartilhado
Host
Host BD R1
Host C
R4
R2
R3
Camada Transporte 3-85
Causas/custos do congestionamento:
cenário 3
H l
o
o
s
u
t
A t
H
o
s
t
B
Congwin
w * MSS
throughput = Bytes/sec
RTT
RTT
inicializa: Congwin = 1
for (cada segmento c/ ACK)
Congwin++
until (evento de perda OR
CongWin > threshold)
Comportamento 24 Kbytes
dente-de-serra:
Sondagem de 16 Kbytes
bw
8 Kbytes
tempo
time
Camada Transporte 3-94
Refinamento
Q: Quando o aumento
exponencial deve
parar para se
tornar linear?
A: Quando CongWin
assume 1/2 do seu
valor antes do
timeout.
Implementação:
Threshold (limiar) Variável
No evento de perda,
Threshold é setado para 1/2
da CongWin. Valor da janela
antes do evento de perda
1.22 MSS
RTT L
➜ L = 2·10-10 Uau!
Novas versões do TCP para altas taxas de envio
necessárias!
Conexão TCP 1
Roteador gargalo
capacidade R
conexãoTCP 2
Vazão da conexão 1 R
Camada Transporte 3-102
Justiça (mais)
Justiça e o UDP Justiça e conexões TCP paralelas
Apps multimídia geralmente Nada previne apps de abrirem
não usam TCP conexões paralelas entre dois
Para não restringir taxa hosts.
devido ao controle de Web browsers fazem isto
congestionamento Exemplo: enlace de taxa R
Em vez do TCP, as apps suportando 9 conexões;
multimídia usam UDP: Nova app requisita 1 conex.TCP,
áudio/vídeo injetados à recece taxa R/10
taxas constantes, toleram Nova app requisita 11
perdas de pacotes conex.TCPs, recebe R/2 !
Área de pesquisa: TCP
friendly (protocolos amigos
do TCP)
Primeiro caso:
WS/R > RTT + S/R: ACK para
primeiro segmento na
janela retorna antes da
transmissão de todos os
segmentos da janela
Segundo caso:
WS/R < RTT + S/R:
aguarda por ACK após
enviar todos os
segmentos previstos na
janela
delay = 2RTT + O/R
+ (K-1)[S/R + RTT - WS/R]
P min{Q, K 1}
estabelecimento de request
conex. e requisição object
first window
• O/R para transmitir = S/R
objeo RTT
• tempo que o servidor
second window
= 2S/R
espera devido ao slow
start third window
= 4S/R
Servidor espera:
P = min{K-1,Q} vezes
Exemplo: fourth window
= 8S/R
• O/S = 15 segmentos
• K = 4 janelas
•Q=2
• P = min{K-1,Q} = 2 object
complete
transmission
delivered
P
O
delay 2 RTT idleTime
atraso Tempo pde espera p fourth window
= 8S/R
R p 1
P
O S S
2 RTT [ RTT 2 k 1 ]
R k 1 R R object
complete
transmission
delivered
O S S
2 RTT P[ RTT ] (2 P 1) time at
R R R time at
client
server
K min{k : 20 S 21 S 2 k 1 S O}
min{k : 20 21 2 k 1 O / S}
O
min{k : 2 1 }
k
S
O
min{k : k log2 ( 1)}
S
O
log2 ( 1)
S
Cálculo de Q, número de “esperas” para objeto de tamanho infinito,
é similar (veja o livro).