Escolar Documentos
Profissional Documentos
Cultura Documentos
TCP: Overview
• ponto-a-ponto: • dados full-duplex:
– um transmissor, um receptor – transmissão bi-direcional na
• confiável, seqüêncial byte mesma conexão
stream: – MSS: maximum segment size
– não há contornos de mensagens • orientado à conexão:
• pipelined: (transmissão de vários – handshaking (troca de
pacotes em confirmação) mensagens de controle) inicia o
estado do transmissor e do
– Controle de congestão e de fluxo
receptor antes da troca de dados
definem tamanho da janela
• controle de fluxo:
• buffers de transmissão e de
– transmissor não esgota a
recepção
capacidade do receptor
aplicação aplicação
envia dados lê dados
socket socket
port port
TCP TCP
buffe de txr buffer de rx
segment
Estrutura do Segmento TCP
32 bits
URG: dados urgentes contagem por
(pouco usado) porta origem porta destino
bytes de dados
número de seqüência (não segmentos!)
ACK: campo de ACK
é válido número de reconhecimento
tam. não
PSH: produz envio de cabec.usado
UA P R S F janela de recep.
dados (pouco usado) checksum dados urgentes número de bytes
receptor está
RST, SYN, FIN: Opções (tamanho variável) pronto para
estabelec. de conexão aceitar
(comandos de
criação e término)
dados de aplicação
Internet (tamanho variável)
checksum
(como no UDP)
Números de Seqüência e ACKs do TCP
Números de seqüência:
Host A Host B
– número do primeiro
byte no segmentos de Usuário Seq=4
2,
digita ACK=
dados ‘C’
79, da
t a = ‘C
’ host confirma
ACKs: recepção de
– número do próximo ‘C’, e ecoa o
C’
da ta = ‘ ’C’ de volta
byte esperado do outro CK=4
3 ,
79 , A
lado Seq=
– ACK cumulativo Q:
como o receptor trata host confirma
segmentos foram de ordem recepção Seq=4
do ‘C’ ecoado 3, ACK
=80
– A especificação do
TCP não define, fica a
critério do
implementador tempo
cenário telnet simples
TCP: transferência de dados confiável
confiável 05
06
07
event: dados recebidos da aplicação acima
cria segmento TCP com número de seqüência nextseqnum
inicia temporizador para segmento nextseqnum
08 passa segmento ao IP
09 nextseqnum = nextseqnum + length(data)
10 event: esgotamento de temp. para segmento com seq = y
11 retransmite segmento com seq = y
12 calcule nova temporização para o segmento y
Transmissor 13 reinicia temporizador para número de seqüência y
14 event: ACK recebido, com valor y no campo de ACK
TCP simplificado 15 if (y > sendbase) { /* ACK cumulativo de todos os dados até y */
16 cancela todas as temporizações para segmentos com seq < y
17 sendbase = y
18 }
19 else { /* um ACK duplicata para um segmento já reconhecido */
20 incrementa numero de duplicatas de ACKs recebidas para y
21 if (numero de duplicatas de ACKS recebidas para y == 3) {
22 /* TCP fast retransmit */
23 reenvia segmento com número de seqüência y
24 reinicia temporização para segmento y
25 }
26 } /* end of loop forever */
Geração de ACK [RFC 1122, RFC 2581]
Event0 Ação do TCP Receptor
segmento chega em ordem, ACK retardado. Espera até 500ms
não há lacunas, pelo próximo segmento. Se não chegar,
segmentos anteriores já aceitos envia ACK
Seq=9 Seq=9
2, 2, 8 b y te
8 b y te s data
s data Seq=
1
Seq=92 temp.
00, 2
temporização
0 by t
es da
t a
=100
Seq=100 temp.
ACK 0
10
X CK=
A AC K = 120
loss
Seq=9 Seq=9
2, 8 b 2, 8 b
y y t es da
tes da ta
ta
= 120
K
=100 AC
ACK
tempo tempo
cenário com perda temporização prematura,
do ACK ACKs cumulativos
TCP: Controle de Fluxo
armazenamento de recepção
TCP Round Trip Time e Temporização
Q: como escolher o valor Q: Como estimar o RTT?
da temporização do • SampleRTT: tempo medido da
TCP? transmissão de um segmento até a
respectiva confirmação
• maior que o RTT
– ignora retransmissões e segmentos
– nota: RTT varia
reconhecidos de forma cumulativa
• muito curto: temporização
• SampleRTT varia de forma rápida, é
prematura
desejável um amortecedor para a
– retransmissões estimativa do RTT
desnecessárias
– usar várias medidas recentes, não
• muito longo: a reação à apenas o último SampleRTT
perda de segmento fica obtido
lenta
TCP Round Trip Time e Temporização
Definindo a temporização
• EstimtedRTT mais “margem de segurança”
• grandes variações no EstimatedRTT -> maior margem de segurança
cliente servidor
Fechando uma conexão: close
FIN
cliente fecha o socket:
clientSocket.close();
ACK
Passo 1: o cliente envia o segmento close
TCP FIN ao servidor FIN
espera temp.
ACK
responde com ACK. Fecha a
conexão, envia FIN.
closed
TCP Término de Conexão
cliente servidor
espera temp.
Conexão fechada. ACK
closed
closed
TCP Controle de Conexão
Estados do Servidor
Estados do Cliente
Princípios de Controle de Congestionamento
Congestionamento:
• informalmente: “muitas fontes enviando dados acima da
capacidade da rede tratá-los”
• diferente de controle de fluxo!
• sintomas:
– perda de pacotes (saturação de buffer nos roteadores)
– atrasos grandes (filas nos buffers dos roteadores)
• um dos 10 problemas mais importantes na Internet!
Controle de congestionamento
(a) Uma rede rápida com um receptor de baixa capacidade. (b) Uma rede lenta
com um receptor de alta-capacidade.
Controle de congestionamento
Quando há pacotes demais presentes em parte de uma sub-rede (sub-rede lenta), o
desempenho da rede diminui.
Controle de congestionamento
Gerencia
mento da
janela
TCP.
Causas/custos do congestionamento: cenário
1
• dois transmissores, dois
receptores
• um roteador, buffers
infinitos
• não há retransmissão
• grandes atrasos
quando
congestionado
• máxima vazão
obtenível
Causas/custos do congestionamento: cenário
2
• um roteador, buffers finitos
• transmissor reenvia pacotes perdidos
Causas/custos do congestionamento: cenário
2
• sempre vale : = out(tráfego bom)
in
• “perfeita” retransmissão somente quando há perdas: > out
in
• retransmissão de pacotes atrasados (não perdidos) torna maior (que o caso
in
perfeito ) para o mesmo
out
“custos” do congestionamento:
• mais trabalho (retransmissões) para um dado “tráfego bom”
• retransmissões desnecessárias: enlace transporta várias cópias do mesmo pacote
Causas/custos do congestionamento: cenário
3
• quatro transmissores
Q: o que acontece quando
• caminhos com múltiplos saltos in
e aumentam ?
• temporizações/retransmissões in
Causas/custos do congestionamento: cenário
3
Congwin
RTT
initializar: Congwin = 1
para (cada segmento reconhecido two segm
ents
Congwin++
até (evento perda OU
CongWin > threshold)
four segm
ents
roteador com
gargalo de capacidade R
conexão TCP 2
Porque o TCP é justo?
Vazão da Conexão 2 R
TCP: modelagem da latência
P min{Q , K 1}
K = 4 janelas RTT
segunda janela
= 2S/R
Q=2
terceira janela
P = min{K-1,Q} = 2 = 4S/R
transmissão
objeto completa
entregue
tempo no
tempo no servidor
cliente
TCP Modelagem de Latência: Slow Start (cont.)
S
RTT tempo quando o servidor inicia o envio do segmento
R
até quando o servidor recebe reconhecimento
inicia
1 S conexão TCP
2k tempo para enviar a k-ésima janela
R pede
objeto
primeira janela
= S/R
S k 1 S tempo de bloqueio após a
R RTT 2 RTT
R k-ésima janela
segunda janela
= 2S/R
terceira janela
= 4S/R
P
O
latencia 2 RTT TempoBloqueio p quarta janela
R p 1 = 8S/R
P
O S S
2 RTT [ RTT 2k 1 ]
R k 1 R R
transmissão
objeto
O S S completa
2 RTT P[ RTT ] (2P 1) entregue
R R R tempo no
tempo no
servidor
cliente
UDP
UDP: User Datagram Protocol [RFC 768]
• Protocolo de transporte da
Internet “sem gorduras” Porque existe um UDP?
• serviço “best effort” , segmentos • não há estabelecimento de
UDP podem ser:
conexão (que pode redundar em
– perdidos atrasos)
– entregues fora de ordem • simples: não há estado de conexão
para a aplicação nem no transmissor, nem no receptor
• sem conexão: • cabeçalho de segmento reduzido
– não há apresentação entre o • não há controle de congestionamento:
UDP transmissor e o UDP pode enviar segmentos tão
receptor rápido quanto desejado (e possível)
– cada segmento UDP é
tratado de forma
independente dos outros
Mais sobre UDP
• muito usado por aplicações de
mutimídia contínua (streaming) 32 bits
(porque?):
– DNS
– SNMP Dados de Aplicação
(mensagem)
• transferência confiável sobre
UDP: acrescentar confiabilidade na
camada de aplicação
– recuperação de erro
formato do segmento UDP
específica de cada aplicação
UDP checksum
Objetivo: detectar “erros” (ex.,bits trocados) no segmento
transmitido
Transmissor: Receptor:
• trata o conteúdo do segmento • computa o checksum do segmento
como seqüencia de inteiros de 16 recebido
bits • verifica se o checksum calculado é
• checksum: soma (complemento de igual ao valor do campo checksum:
1 da soma) do conteúdo do – NÃO - error detectado
segmento
– SIM - não há erros. Mas, talvez
• transmissor coloca o valor do
checksum no campo de checksum
haja erros apesar disto? Mais
do UDP depois ….
Obrigado pela atenção !