Capítulo 3: Camada de Transporte
Metas do capítulo:
Sumário do Capítulo:
 compreender os
 serviços da camada de transporte
princípios atrás dos
serviços da camada de
transporte:




multiplexação/
desmultiplexação
transferência confiável
de dados
controle de fluxo
controle de
congestionamento
 multiplexação/desmultiplexação
 transporte sem conexão: UDP
 transporte orientado a conexão: TCP



transferência confiável
controle de fluxo
gerenciamento de conexões
 controle de congestionamento em TCP
 instanciação e
implementação na
Internet
3: Camada de Transporte
3a-1
Serviços e protocolos de transporte
 provê




comunicação lógica
entre processos de aplicação
executando em hospedeiros
diferentes
protocolos de transporte
executam em sistemas
terminais
serviços das camadas de
transporte X rede:
camada de rede : dados
transferidos entre sistemas
camada de transporte: dados
transferidos entre processos

aplicação
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
aplicação
transporte
rede
enlace
física
depende de, estende serviços
da camada de rede
3: Camada de Transporte
3a-2
Protocolos da camada de transporte
Serviços de transporte na
Internet:
 entrega confiável, ordenada,
ponto a ponto (TCP)



congestionamento
controle de fluxo
estabelecimento de conexão
(setup)
 entrega não confiável,
(“melhor esforço”), não
ordenada, ponto a ponto ou
multiponto: UDP
 serviços não disponíveis:



tempo-real
garantias de banda
multiponto confiável
aplicação
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
aplicação
transporte
rede
enlace
física
3: Camada de Transporte
3a-3
Multiplexação/desmultiplexação
Lembrança: segmento unidade de dados trocada
entre entidades da camada
de transporte
 = TPDU: transport
protocol data unit
dados da camada
de aplicação
cabeçalho
de segmento
P1
M
aplicação
segmento Ht M transporte
Hn segmento
rede
Desmultiplexação: entrega de
segmentos recebidos para os
processos da camada de apl
corretos
P3
receptor
M
M
aplicação
transporte
rede
P4
M
P2
aplicação
transporte
rede
3: Camada de Transporte
3a-4
Multiplexação/desmultiplexação
Multiplexação:
juntar dados de múltiplos
processos de apl, envelopando
dados com cabeçalho (usado
depois para desmultiplexação)
multiplexação/desmultiplexação:
 baseadas em números de porta
e endereços IP de remetente e
receptor
 números de porta de
remetente/receptor em
cada segmento
 lembrete: número de porta
bem conhecido para
aplicações específicas
32 bits
porta remetente porta receptor
outros campos
do cabeçalho
dados da
aplicação
(mensagem)
formato de segmento
TCP/UDP
3: Camada de Transporte
3a-5
Multiplexação/desmultiplexação: exemplos
estação
A
porta orig.: x
porta dest: 23
servidor
B
porta orig:23
porta dest: x
IP orig : C
IP dest: B
porta orig: y
porta dest: 80
uso de portas:
apl. simples de telnet
cliente WWW
estação A
Web client
host C
IP orig: A
IP dest: B
porta orig: x
porta dest: 80
IP orig: C
IP dest: B
porta orig: x
porta dest: 80
servidor
WWW B
uso de portas :
servidor WWW
3: Camada de Transporte
3a-6
UDP: User Datagram Protocol [RFC 768]
 Protocolo de transporte da
Internet mínimo, “sem
frescura”,
 Serviço “melhor esforço”,
segmentos UDP podem ser:
 perdidos
 entregues à aplicação fora
de ordem do remesso

sem conexão:


não há “setup” UDP entre
remetente, receptor
tratamento independente
de cada segmento UDP
Por quê existe um UDP?
 elimina estabelecimento de
conexão (o que pode causar
retardo)
 simples: não se mantém
“estado” da conexão no
remetente/receptor
 pequeno cabeçalho de
segmento
 sem controle de
congestionamento: UDP
pode transmitir o mais
rápido possível
3: Camada de Transporte
3a-7
Mais sobre UDP
Comprimento em
bytes do
segmento UDP,
incluindo
 muito utilizado para apls. de
cabeçalho
meios contínuos (voz, vídeo)


tolerantes de perdas
sensíveis à taxa de
transmissão
 outros usos de UDP (por
32 bits
porta origem
porta dest.
comprimento
checksum
quê?):
DNS (nomes)
 SNMP (gerenciamento)
 transferência confiável com
UDP: incluir confiabilidade na
camada de aplicação
 recuperação de erro
específica à apl.!

Dados de
aplicação
(mensagem)
UDP segment format
3: Camada de Transporte
3a-8
Checksum UDP
Meta: detecta “erro” (e.g., bits invertidos) no
segmento transmitido
Remetente:
 trata conteúdo do
segmento como sequência
de inteiros de 16-bits
 campo checksum zerado
 checksum: soma (adição
usando complemento de 1)
do conteúdo do segmento
 remetente coloca
complemento do valor da
soma no campo checksum
de UDP
Receiver:
 computa checksum do
segmento recebido
 verifica se checksum
computado é zero:
 NÃO - erro detectado
 SIM - nenhum erro
detectado. Mas ainda
pode ter erros? Veja
depois ….
3: Camada de Transporte
3a-9
TCP: Visão geral
RFCs: 793, 1122, 1323, 2018, 2581
 ponto a ponto:
 1 remetente, 1 receptor
 transmissão full duplex:
 fluxo de dados bidirecional na mesma
 fluxo de bytes, ordenados,
conexão
confiável:
 MSS: tamanho máximo de
 não estruturado em msgs
segmento
 dutado:
 orientado a conexão:
 tam. da janela ajustado por
 handshaking (troca de
controle de fluxo e
msgs de controle) inicia
congestionamento do TCP
estado de remetente,

socket
door
buffers de envio e recepção
application
writes data
application
reads data
TCP
send buffer
TCP
receive buffer
segment
socket
door
receptor antes de trocar
dados
 fluxo controlado:
 receptor não será afogado
3: Camada de Transporte 3b-10
TCP: estrutura do segmento
32 bits
URG: dados urgentes
(pouco usados)
ACK: no. ACK
válido
PSH: envia dados já
(pouco usado)
RST, SYN, FIN:
gestão de conexão
(comandos de
estabelecimento,
liberação)
checksum
Internet
(como UDP)
no. porta origem no. porta dest
número de seqüência
número de reconhecimento
tam. sem
UA P R S F
cab. uso
checksum
janela receptor
ptr dados urg.
Opções (tam. variável)
contagem
de dados
por bytes
(não segmentos!)
no. bytes
rcpt quer
aceitar
dados da
aplicação
(tam. variável)
3: Camada de Transporte 3b-11
TCP: nos. de seq. e ACKs
Nos. de seq.:
 “número”dentro do
fluxo de bytes do
primeiro byte de
dados do segmento
ACKs:
 no. de seq do próx.
byte esperado do
outro lado
 ACK cumulativo
P: como receptor trata
segmentos fora da
ordem?
 R: espec do TCP
omissa - deixado ao
implementador
Estação A
Usuário
tecla
‘C’
Estação B
B reconhece
chegada de
‘C’, ecoa
‘C’ de volta
A reconhece
chegada
do ‘C’
ecoado
cenário simples de telnet
tempo
3: Camada de Transporte 3b-12
TCP: transferência confiável de dados
event: data received
from application above
create, send segment
wait
wait
for
for
event
event
remetente simplificado,
supondo:
event: timer timeout for
segment with seq # y
•fluxo de dados uni-direcional
•sem controle de fluxo,
congestionamento
retransmit segment
event: ACK received,
with ACK # y
ACK processing
3: Camada de Transporte 3b-13
TCP:
transferência
confiável
de dados
Remetente
TCP
simplificado
00 sendbase = número de seqüência inicial
01 nextseqnum = número de seqüência inicial
02
03 loop (forever) {
04
switch(event)
05
event: dados recebidos da aplicação acima
06
cria segmento TCP com número de seqüência nextseqnum
07
inicia temporizador para segmento nextseqnum
08
passa segmento para IP
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
computa novo intervalo de temporização para segmento y
13
reinicia temporizador para número de seqüência y
14
event: ACK recebido, com valor de campo ACK de y
15
se (y > sendbase) { /* ACK cumulativo de todos dados até y */
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 */
3: Camada de Transporte 3b-14
TCP geração de ACKs [RFCs 1122, 2581]
Evento
Ação do receptor TCP
chegada de segmento em ordem
sem lacunas,
anteriores já reconhecidos
ACK retardado. Espera até 500ms
p/ próx. segmento. Se não chegar
segmento, envia ACK
chegada de segmento em ordem
sem lacunas,
um ACK retardado pendente
envia imediatamente um único
ACK cumulativo
chegada de segmento fora de
ordem, com no. de seq. maior
que esperado -> lacuna
envia ACK duplicado, indicando no.
de seq.do próximo byte esperado
chegada de segmento que
preenche a lacuna parcial ou
completamente
ACK imediato se segmento no
início da lacuna
3: Camada de Transporte 3b-15
TCP: cenários de retransmissão
Host A
tempo
X
perda
cenário do
ACK perdido
Host B
Temp. p/ Seq=100
Temp.p/ Seq=92
temporização
Estação A Estação B
tempo
temporização prematura,
ACKs cumulativos
3: Camada de Transporte 3b-16
TCP: Controle de Fluxo
controle de fluxo
remetente não esgotaria
buffers do receptor por
transmitir muito, ou
muito rápidamente
RcvBuffer = tamanho do Buffer de recepção
RcvWindow = espaço vazio no Buffer
receptor: explicitamente
avisa o remetente da
quantidade de espaço
livre disponível (muda
dinamicamente)
 campo RcvWindow
no segmento TCP
remetente: mantém a
quantidade de dados
transmitidos, porém
ainda não reconhecidos,
menor que o valor mais
recente de RcvWindow
buffering pelo receptor
3: Camada de Transporte 3b-17
TCP: Tempo de Resposta (RTT) e
Temporização
P: como escolher valor
do temporizador
TCP?
 maior que o RTT
note: RTT pode
variar
 muito curto:
temporização prematura
 retransmissões são
desnecessárias
 muito longo: reação
demorada à perda de
segmentos

P: como estimar RTT?
 RTTamostra: tempo medido
entre a transmissão do segmento
e o recebimento do ACK
correspondente
 ignora retransmissões,
segmentos com ACKs
cumulativos
 RTTamostra vai variar, queremos
“amaciador” de RTT estimado
 usa várias medições recentes,
não apenas o valor corrente
(RTTamostra)
3: Camada de Transporte 3b-18
TCP: Tempo de Resposta (RTT) e
Temporização
RTT_estimado = (1-x)* RTT_estimado + x*RTT_amostra
 média corrente exponencialmente ponderada
 influência de cada amostra diminui exponencialmente
com o tempo
 valor típico de x: 0.1
Escolhendo o intervalo de temporização
 RTT_estimado mais uma “margem de segurança”
 variação grande em RTT_estimado
-> margem de segurança maior
Temporização = RTT_estimado + 4*Desvio
Desvio = (1-x)* Desvio +
x*|RTT_amostra - RTT_estimado|
3: Camada de Transporte 3b-19
TCP: Gerenciamento de Conexões
Lembrete: Remetente,
Inicialização em 3 tempos:
receptor TCP estabelecem
Passo 1: sistema cliente envia
“conexão” antes de trocar
segmento de controle SYN do TCP
segmentos de dados
ao servidor
 inicializam variáveis TCP:
 especifica no. inicial de seq
 nos. de seq.
 buffers, info s/ controle
Passo 2: sistema servidor recebe
de fluxo (p.ex. RcvWindow)
SYN, responde com segmento de
 cliente: iniciador de conexão
controle SYNACK
Socket clientSocket = new
Socket("hostname","port


number");

servidor: contactado por

cliente
Socket connectionSocket =
welcomeSocket.accept();
reconhece SYN recebido
aloca buffers
especifica no. inicial de seq.
servidor-> receptor
3: Camada de Transporte 3b-20
TCP: Gerenciamento de Conexões (cont.)
Encerrando uma conexão:
cliente
servidor
fechar
cliente fecha soquete:
clientSocket.close();
Passo 1: sistema cliente envia
fechar
Passo 2: servidor recebe FIN,
responde com ACK. Encerra a
conexão, enviando FIN.
espera
temporizada
segmento de controle FIN ao
servidor
fechada
3: Camada de Transporte 3b-21
TCP: Gerenciamento de Conexões (cont.)
Passo 3: cliente recebe FIN,
responde com ACK.
Entre em “espera
temporizada” responderá com ACK a
FINs recebidos
Step 4: servidor, recebe
ACK. Conexão encerrada.
Note: com pequena
modificação, consegue
tratar de FINs
simultâneos.
servidor
fechando
fechando
espera
temporizada

cliente
fechada
fechada
3: Camada de Transporte 3b-22
TCP Connection Management (cont)
Ciclo de vida
de servidor TCP
Ciclo de vida
de cliente TCP
3: Camada de Transporte 3b-23
TCP: Controle de Congestionamento
 controle fim a fim (sem apoio da rede)
 taxa de transmissão limitada pela tamanho da janela
de congestionamento, Congwin:
Congwin
 w segmentos, cada um c/ MSS bytes, enviados por RTT:
vazão =
w * MSS
Bytes/seg
RTT
3: Camada de Transporte 3b-24
TCP: Controle de Congestionamento
 “sondagem” para banda
utilizável:



idealmente: transmitir o
mais rápido possível
(Congwin o máximo
possível) sem perder
pacotes
aumentar Congwin até
perder pacotes
(congestionamento)
perdas: diminui
Congwin, depois volta a
à sondagem (aumento)
novamente
 duas “fases”
 partida lenta
 evitar
congestionamento
 variáveis importantes:
 Congwin
 threshold: define
limiar entre fases de
partida lenta, controle
de congestionamento
3: Camada de Transporte 3b-25
TCP: Partida lenta
Estação A Estação B
initializa: Congwin = 1
for (cada segmento c/ ACK)
Congwin++
until (evento de perda OR
CongWin > threshold)
RTT
Algoritmo Partida Lenta
 aumento exponencial (por
RTT) no tamanho da janela
(não muito lenta!)
 evento de perda:
temporizador (Tahoe TCP)
e/ou três ACKs duplicados
(Reno TCP)
tempo
3: Camada de Transporte 3b-26
TCP: Evitar Congestionamento
Evitar congestionamento
/* partida lenta acabou */
/* Congwin > threshold */
Until (event de perda) {
cada w segmentos
reconhecidos:
Congwin++
}
threshold = Congwin/2
1
Congwin = 1
faça partida lenta
1: TCP Reno pula partida lenta (recuperação
rápida) depois de três ACKs duplicados
3: Camada de Transporte 3b-27
AADM
TCP congestion
avoidance:
 AADM: aumento
aditivo, decremento
multiplicativo


aumenta janela em 1
por cada RTT
diminui janela por
fator de 2 num
evento de perda
Justeza do TCP
Meta de justeza: se N sessões
TCP compartilham o mesmo
enlace de gargalo, cada uma
deve ganhar 1/N da
capacidade do enlace
TCP conexão 1
TCP
conexão 2
Roteador
gargalo
capacidade R
3: Camada de Transporte 3b-28
Por quê TCP é justo?
Duas sessões concorrentes:
 Aumento aditivo dá gradiente de 1, enquanto vazão aumenta
 decrementa multiplicativa diminui vazão proporcionalmente
R
compartilhamento igual da banda
perda: diminui janela por fator de 2
evitar congestionamento: aumento aditivo
perda: diminui janela por fator de 2
evitar congestionamento: aumento aditivo
Vazão da conexão 1
R
3: Camada de Transporte 3b-29
Capítulo 3: Sumário
 Princípios atrás dos
serviços da camada de
transporte:
multiplexação/
desmultiplexação
 transferência confiável de
dados
 controle de fluxo
 controle de congestionamento
 instanciação e implementação na
Internet
 UDP
 TCP

Próximo capítulo:
 saímos da “borda” da
rede (camadas de
aplicação e transporte)
 entramos no “núcleo”da
rede
3: Camada de Transporte 3b-30
Download

2 - Instituto de Computação