Buscar

Infraestrutura de Comunicação (Camada de Transporte versão 2)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

MÓDULO 3: Camada 
Transporte 
3.1 Serviços da camada transporte 
● A camada de transporte provê o 
transporte fim-a-fim lógico da 
camada de aplicação de um host 
até um servidor 
● Serviços e protocolos de transporte: 
− Proveem comunicação lógica 
entre processos aplicativos 
executando em hosts distintos. 
− Protocolos “rodam” em end 
systems 
o Lado emissor: quebra 
mensagens da 
aplicação em 
segmentos que são 
passados à camada de 
rede 
o Lado receptor: remontar 
segmentos em 
mensagens e os passa à 
camada aplicação 
− Mais de um protocolo de 
transporte disponível para as 
aplicações (Internet: TCP, UDP) 
● Camada transporte x de rede: 
− Rede: comunicação lógica 
entre hosts 
− Transporte: comunicação 
lógica entre processos 
− A camada de transporte conta 
com serviços da camada de 
rede e pode melhorá-los 
(prover confiabilidade, por ex) 
● Protocolos da camada transporte da 
Internet: 
− TCP: 
o Entrega confiável (em 
ordem) 
o Controle de 
congestionamento 
o Estabelecimento de 
conexão 
− UDP: 
o Entrega não-confiável 
(sem garantia de ordem) 
o Extensões “sem 
ornamentos” ao serviço 
de melhor esforço (best 
effort) IP 
− Serviços indisponíveis: garantia 
de atraso e de banda passante 
3.2 Multiplexação Demultiplexação 
● Demultiplexação no host receptor: 
entrega dos segmentos recebidos aos 
sockets corretos 
● Multiplexação no host emissor: coletar 
dados dos vários sockets, adiciona 
cabeçalho aos dados (mais tarde 
usados para demultiplexação) 
● Funcionamento da demultiplexação: 
− Host recebe datagramas IP na 
camada de rede 
o Cada datagrama possui 
endereço IP fonte 
(camada de rede) e de 
destino 
o Cada datagrama 
carrega 1 segmento da 
camada de transporte 
o Cada segmento possui o 
número de porta de 
origem (camada 
transporte) e da porta 
de destino 
− Host usa os endereços IP e os 
números das portas para enviar 
segmento ao socket adequado 
● Demultiplexação com UDP: 
− Criar sockets com portas 
respectivas 
− Socket UDP identificado pela 
tupla: 
o Endereço IP de destino 
o Número da porta de 
destino 
OBS.: Para entregar o segmento ao processo 
adequado, só precisa conferir o IP destino e 
o número da porta de destino. Ou seja, não 
importa qual o IP e a porta de origem. 
− Quando um host recebe um 
segmento UDP: 
o Verifica o número da 
porta de destino no 
segmento 
o Direciona segmento UDP 
p/ o socket com número 
da especificado 
− Datagramas IP com endereço 
IP fonte diferentes e/ou 
números de porta diferentes 
são direcionados ao mesmo 
socket 
● Demultiplexação com TCP: 
− Socket TCP é identificado pela 
quádrupla: 
o Endereço IP de origem 
o Número da porta de 
origem 
o Endereço IP de destino 
o Número da porta de 
destino 
− O host receptor usa os 4 valores 
para enviar o segmento ao 
socket adequado 
− O host servidor pode suportar 
diversos sockets TCP 
simultaneamente (cada socket 
é identificado por sua própria 
tupla quádrupla) 
− Servidores web possuem 
sockets diferentes para cada 
cliente conectado 
o HTTP não-persistente terá 
diferentes sockets para 
cada requisição 
3.3 UDP (Transporte não orientado à 
conexão) 
● Protocolo Internet de transporte “sem 
ornamentos” e com “elementos 
básicos” 
● Serviço “best-effort” 
− Segmentos UDP podem ser 
perdidos ou entregues à 
aplicação fora da ordem que 
foram enviados 
● Não orientado à conexão 
− Sem handshaking entre o 
emissor e o receptor UDP 
− Cada segmento UDP é tratado 
de forma independente dos 
outros 
● Usado para aplicações multimídia de 
streaming 
− Tolerante à perda 
− Sensível à taxa de dados 
● Outros usos do UDP: DNS e SNMP 
● Pontos positivos: 
− Sem estabelecimento de 
conexão (pode gerar atraso) 
− É simples (sem estado de 
conexão no emissor nem no 
receptor) 
− Cabeçalho do segmento 
pequeno (menos informações 
pois tem menos serviços sendo 
oferecidos) 
− Não tem controle de 
congestionamento (aplicações 
de áudio e vídeo requerem 
taxa de envio constante, e 
com o controle, a taxa varia) 
OBS.: Se a aplicação necessitar de 
transferência confiável de dados, a 
confiabilidade pode ser adicionada na 
camada de aplicação. 
● Formato do segmento UDP: 
− Porta de origem (16 bits) 
− Porta de destino (16 bits) 
− Tamanho (em bytes do 
segmento UDP, incluindo o 
cabeçalho) 
− Checksum (detectar erros no 
segmento transmitido; troca de 
bits, erro de transmissão) 
− Dados da aplicação 
(mensagem) 
3.4 Princípios da transferência 
confiável de dados 
● Importante nas camadas aplicação, 
transporte e enlace (transferência 
confiável existe também nessas 
camadas, além da de aplicação) 
● Características do canal não 
confiável determinará a 
complexidade do protocolo de 
transferência confiável 
● Funcionamento: 
− Rdt_send(): chamado pela 
camada superior (aplicação) 
para passar seus dados 
− Udt_send(): chamado pelo 
protocolo rdt para transferir 
pacote pelo canal não-
confiável ao receptor 
− Rdt_rcv(): chamado quando o 
pacote chega no lado 
receptor do canal 
− Deliver_data(): chamado pelo 
rdt para enviar dados à 
camada superior 
 
Rdt 1.0: Transferência confiável sobre um 
canal confiável 
● Canal de base confiável 
− Nenhum erro de bits 
− Nenhuma perda de pacotes 
● FSMs separadas para emissor e 
receptor 
− Emissor envia dados no canal 
− Receptor lê dados do canal 
● Máquina de estados: 
 
Emissor: 
− Esperando por uma chamada da 
camada de cima 
− Evento: aplicação manda dados para 
baixo chamando método rdt_send (1) 
− Ações (tomadas pelo protocolo de 
transporte): construir pacote com os 
dados que recebeu (2) + mandar 
pacote (3) 
− Permanece sempre no mesmo estado 
 
Receptor: 
− Esperando chamada da camada 
inferior 
− Evento: receber pacote (1) 
− Ações: extrai dados do pacote (2) + 
entrega esses dados para a camada 
superior (3) 
− Permanece sempre no mesmo estado 
Rdt 2.0: Canal com erros em bits 
● Canal de base pode trocar bits dos 
pacotes (checksum para detectar 
erros nos bits) 
● Mensagens de controle (como 
recuperar erros): 
− ACKs: receptor informa 
explicitamente ao emissor que 
o pacote recebido está ok 
(não detectou erro de 
checksum) 
− NAKs: receptor informa 
explicitamente ao emissor que 
o pacote possui erros 
OBS.: Emissor retransmite pacote ao receber 
um NAK do receptor 
● Novos mecanismos: 
− Detecção de erros 
− Feedback do receptor 
(mensagens de controle) 
● Máquina de estados: 
 
Emissor: 
− Esperando chamda da camada 
superior 
− Evento: aplicação gera os dados (1) 
− Ações: constrói pacote com os dados 
e com o checksum (2) + manda esse 
pacote (3) 
− Vai para o próximo estado 
− (SEM ERRO) Evento: recebeu um 
pacote e é um ACK (6) / volta para o 
primeiro estado 
− (ERRO) Evento: recebeu um pacote e 
é um NAK (4) / Ação: chama método 
para mandar novamente o mesmo 
pacote (5) / continua mesmo estado 
 
Receptor: 
− Espera chamada da camada inferior 
− (ERRO) Evento: recebeu pacote e está 
corrompido (1) / Ação: mandar NAK 
(2) / permanece no estado 
− (SEM ERRO) Evento: recebeu pacote e 
não está corrompido (3) / Ação: extrai 
dados do pacote, entrega dados 
para a camada superior e manda um 
ACK (4) 
● Problema fatal do Rdt 2.0: 
− ACKs ou NAKs podem ser 
corrompidos 
o Emissor não sabe o que 
aconteceu no receptor 
o Não pode só retransmitir 
(pode ter duplicação) 
− Tratando duplicações: 
o Emissor retransmite 
pacote atual se 
ACK/NAK é corrompido 
o Emissor adiciona 
números de sequência 
em cada pacote 
o Receptor descarta (não 
entrega à camada 
superior) pacotes duplos 
− Stop and wait: emissor envia 1 
pacote e aguarda pela 
resposta do receptor 
Rdt 2.1: Trata ACKs/NAKs corrompidos 
 
Emissor: 
− Espera chamada 0 camada superior 
− Evento: aplicação gera os dados (1) 
− Ação: construir pacote com número 
de sequência, dados e checksum + 
mandar pacote (2) 
− Próximo estado: esperando por ACK 
ou NAK do pacote 0 que mandou 
− (ERRO) Evento: Recebe um pacote e 
ele está corrompido oué um NAK (3) / 
Ação: manda pacote novamente (4) 
/ Permanece no estado 
− (SEM ERRO) Evento: Recebe um 
pacote e não está corrompido e é um 
ACK (5) / Passa para próximo estado 
− Próximo estado: espera chamada 1 
da camada superior e passos 
repetem com 1 e não 0 (6, 7, 8, 9 e 10) 
 
Receptor: 
− Inicialmente esperando por chamada 
com pacote 0 da camada abaixo 
− Evento: Recebe pacote, não está 
corrompido e tem número de 
sequência 0 que é o esperado (1) 
− Ação: Extrai dados do pacote, 
entrega os dados para a camada 
superior, constrói ACK (outro pacote) 
com seu checksum e manda (2) 
− Próximo estado: esperando chamada 
da camada inferior com número 1 
− (ERRO) Evento: recebe pacote 
corrompido (3) / Ação: constrói NAK 
com seu checksum e manda (4) / 
Permanece no mesmo estado 
− (SEM ERRO) Evento: recebe pacote 
não corrompido e com número de 
sequência 0 (5) / Ação: constrói ACK 
com seu checksum e manda (6) / 
Permanece no mesmo estado 
− Próximo estado: espera chamada 1 
da camada inferior e passos repetem 
com 1 e não 0 (7,8, 9,10,11 e 12) 
● Características do emissor e receptor: 
− Emissor: 
o Num de seq adicionado 
aos pacotes 
o Só precisamos de dois 
números (0 e 1) pois a 
abordagem é stop and 
wait 
o Deve verificar se ACK ou 
NAK recebido está 
corrompido 
o Duas vezes mais estados 
que a versão 2.0: state 
deve “recordar” se o 
pacote atual possui num 
de seq 0 ou 1 
− Receptor: 
o Deve verificar se pacote 
recebido é duplicado 
(estado indica se o num 
de seq do pacote 
esperado é 0 ou 1) 
o Receptor não pode 
saber se seu último ACK 
ou NAK foi recebido ok 
no emissor (a conexão 
não terminaria nunca, 
pois sempre teria uma 
nova confirmação) 
Rdt 2.2: Um protocolo sem NAKs 
● Igual ao Rdt 2.1 mas usando ACKs 
somente 
● Ao invés de NAK, receptor envia ACK 
do último pacote recebido 
corretamente 
− Receptor deve incluir 
explicitamente o num de seq 
do pacote sendo confirmado 
● ACK duplicado no emissor resulta na 
mesma ação como para o NAK: 
retransmissão do pacote atual 
● Diferenças nas máquinas de estado: 
Emissor: 
− Manda pacote e vai para o estado 
esperando ACK 0 
− Recebe pacote e está corrompido ou 
é o ACK do pacote 1 
− Recebe pacote, não está corrompido 
e é o ACK esperado, então muda de 
estado 
Receptor: 
− Vindo de outro estado, recebe 
pacote não corrompido com num de 
seq 1 (esperado) 
− Extrai os dados do pacote, entrega 
para aplicação, constrói ACK do 
pacote 1 que recebeu e manda o 
pacote 
− Vai para o estado esperando 
chamada da camada anterior com 
num de seq 0 
 
Rdt 3.0: Canais com erros e perdas 
● Canal de base pode agora perder 
pacotes (dados ou ACKs) 
− Checksum, num de seq, ACKs, 
retransmissões ajudam, mas 
não serão suficientes 
● Emissor aguarda um tempo “razoável” 
a recepção de ACKs 
− Retransmite se nenhum ACK é 
recebido nesse tempo 
− Se pacote ou ACK está apenas 
atrasado (não foi perdido): 
o Retransmissão causará 
duplicação, mas num de 
seq trata isso 
o Receptor deve 
especificar num de seq 
do pacote que está 
sendo confirmado 
− Requer temporizador 
● Máquina de estados: 
 
Emissor: 
− Começa esperando por uma 
chamada da camada de cima com 
num de seq 0 
− Aplicação gera os dados 
− Constrói pacote com os dados, num 
de seq 0 e checksum, manda o 
pacote e inicializa temporizador 
(diferença básica) 
− Próximo estado: aguardar ACK 0 
− Receber um pacote e está 
corrompido ou é ACK 1, não faz nada 
e continua no mesmo estado 
− Deu timeout (temporizador expirou), 
manda de novo o pacote e reinicia o 
tempo, continua no estado 
− Receber pacote e não está 
corrompido e é ACK 0, para o 
temporizador e vai para o próximo 
estado 
− Passos se repetem para o número 1 
● Desempenho: 
− Funciona, mas o desempenho 
do Rdt 3.0 é ruim 
− Utilização é a fração do tempo 
em que o emissor está 
ocupado enviando o pacote 
− O protocolo de rede limita o 
uso de recursos físicos 
● Funcionamento do stop and wait: 
 
Protocolos com pipeline: 
● Pipelining (otimização): emissor 
permite múltiplos pacotes enviados 
que ainda não foram confirmados 
− Range do num de seq deve ser 
aumentado 
− “Bufferização” (memória) no 
emissor e/ou receptor 
 
● Aumento da utilização: 
 
GO-BACK-N (GBN): 
● Feito numa época em que memória 
era caro (o protocolo foi feito para 
lidar com o fato de que não tinha 
buffer para receber muitos pacotes) 
● Emissor: 
− Num de seq de k bits no 
cabeçalho do pacote 
− Janela de até N consecutivos 
pacotes não confirmados 
permitida (deslizante para a 
direita) 
 
● Regras: 
− ACK(n): confirma todos os 
pacotes até o num de seq n 
(“ACK cumulativo”) 
− Temporizador para cada 
pacote enviado 
− Timeout(n): retransmite pacote 
n e todos os pacotes com num 
de seq maiores que estão 
dentro da janela 
− ACK-only: sempre envia ACK 
para pacote recebido “na 
ordem” corretamente com 
num de seq mais elevado 
o Pode gerar ACKs 
duplicados 
o Precisa recordar 
somente o num de seq 
esperado 
− Pacote fora de ordem: 
o Descarta (não 
armazena) pois receptor 
não tem buffer 
o Confirma o pacote com 
num de seq mais 
elevado e na ordem 
certa (último recebido) 
OBS.: Como o receptor não tem buffer na 
camada de transporte, ou seja, só cabe um 
pacote, se o primeiro pacote da janela deu 
timeout, todos da frente foram descartados, 
mesmo se tiverem chegado ok do outro 
lado, pois chegaram fora da ordem 
esperada (como não tem memória para 
guarda-los até receber o certo, descarta 
para deixar o espaço livre para receber o 
pacote esperado) 
 
SELECTIVE REPEAT (SR): 
● Outra abordagem, não havia mais 
limitação de memória (lidar agora 
com buffer para armazenar pacotes 
que saíram da ordem correta) 
● Receptor confirma individualmente 
cada pacote recebido corretamente 
− Armazena pacotes, quando 
necessário, para eventual envio 
de pacotes ordenados à 
camada superior 
● Emissor reenvia somente pacotes para 
os quais ACK não foi recebido 
− Emissor possui temporizador 
para cada pacote não 
confirmado 
● Mesma ideia de janela deslizante do 
emissor (mandar pacotes em avanço) 
− N consecutivos num de seq 
− Limita num de seq de enviados 
a pacotes não confirmados 
 
● Regras emissor: 
− Recebeu dados da camada 
superior: 
o Se o próximo num de seq 
estiver disponível dentro 
da janela, envia o 
pacote 
− Se der timeout(n): 
o Reenvia somente o 
pacote n e reinicia o 
temporizador 
− Se receber ACK(n) que esteja 
dentro do intervalo [sendbase, 
sendbase+N]: 
o Marca pacote n como 
recebido 
o Se n é o menor num de 
seq de pacotes não 
confirmados, avança 
base da janela para o 
próximo num de seq não 
confirmado 
 
● Regras receptor: 
− O pacote n no intervalo 
[rcvbase, rcvbase+N-1] envia 
ACK(n): 
o Se o pacote está fora da 
ordem esperada: vai 
para o buffer (memória) 
o Se está ordenado: 
entrega os pacotes para 
a camada superior 
(incluindo pacotes 
ordenados no buffer) e 
avança a janela para o 
próximo pacote ainda 
não recebido 
− Se o pacote n estiver no 
intervalo [rcvbase-N, rcvbase-1] 
manda o ACK(n) 
− Caso contrário: ignorar 
OBS.: As janelas do emissor e do receptor se 
movem de maneiras diferentes. A do emissor 
só muda quando ACK chega e a do 
receptor, quando o pacote é recebido (na 
ordem)
 
3.5 TCP (Transporte orientado à 
conexão) 
Overview: 
● Ponto a ponto: liga um emissor a um 
receptor 
● Stream de bytes confiável e em ordem 
− “Mensagens não possuem 
limites” 
− Contagem do que recebe em 
bytes e não em pacotes 
● Pipelined: controle de fluxo e 
congestionamento do TCP setam 
tamanho da janela 
● Buffers no emissor e no receptor (não 
tinha mais problema com memória) 
● Dados full duplex: 
− Fluxo de dados bidirecional 
sobre a mesma conexão 
− MSS (Maximum Segment Size)= 
tamanho máximo do segmento 
● Orientado à conexão: 
− Handshaking (troca de 
mensagens) inicia emissor e 
estado do emissor antes da 
troca de dados 
● Controle de fluxo: 
− Emissor não envia mais dadosque o receptor pode receber 
Estrutura do segmento TCP: 
 
● Num de seq: número do primeiro byte 
do segmento do dado 
● ACKs: num de seq do próximo byte 
aguardado pelo outro lado (ACK 
cumulativo) 
● Especificação do TCP não diz como 
receptor trata segmentos fora de 
ordem (deixado para desenvolvedor) 
● Timeout: 
− Maior que o RTT (mas o RTT 
varia) 
− Muito curto: timeout prematuro 
(retransmissões desnecessárias) 
− Muito longo: reação lenta à 
perda de segmentos 
● RTT: 
− SampleRTT: tempo medido a 
partir da transmissão do 
segmento até a recepção do 
ACK (ignora retransmissões) 
− SampleRTT varia, deseja-se uma 
estimativa de RTT “suavizada” 
o Faz-se uma média de 
várias medidas recentes, 
não se usa somente a 
atual 
Transferência de dados confiável: 
● TCP cria serviço de transferência 
confiável no topo do serviço não 
confiável do IP 
● Segmentos “pipelined” (vários ao 
mesmo tempo) 
● ACKs cumulativos (menos sensível a 
perda de partes) 
● Conceitualmente o TCP usa múltiplos 
temporizadores de transmissão 
● Retransmissões são disparadas por: 
− Eventos de expiração (timeout), 
quando houve erro (perda de 
pacotes) 
− ACKs duplicados (otimização) 
● Eventos no emissor TCP: 
− Dados recebidos da aplicação: 
o Cria segmento com num 
de seq 
o Num de seq é o número 
do primeiro byte de 
dados no segmento 
o Inicia temporizador se já 
não estiver executando 
o Intervalo de expiração: 
TimeOutInterval 
− Timeout: 
o Retransmite segmento 
que causou o timeout 
o Reinicia temporizador 
− ACK recebido: 
o Se confirma segmentos 
prévios não confirmados 
(atualiza o que é 
conhecido a ser 
confirmado e inicia 
temporizador se existem 
segmentos devidos) 
● Cenários com retransmissão: 
 
 
● Geração de ACKS no TCP: 
 
● Fast Retransmit (Retransmissão Rápida) 
− Período de expiração 
relativamente longo 
o Grande atraso antes de 
reenviar pacote perdido 
− Detecta segmentos perdidos 
via ACKs duplicados 
o Emissor frequentemente 
envia muitos segmentos 
sucessivos 
o Se segmento é perdido, 
haverá provavelmente 
muitos ACKs duplicados 
− Se emissor recebe 3 ACKs 
duplicados (4 ACKS 
consecutivos, idênticos, sem 
outros pacotes no meio) para o 
mesmo dado, ele supõe que o 
segmento após dado 
confirmado foi perdido 
o Fast retransmit: reenvia 
segmento antes do 
temporizador expirar 
Controle de fluxo: 
● Emissor não estoura o buffer do 
receptor transmitindo demais ou muito 
rápido 
● Lado receptor possui um buffer 
 
● Processo aplicação pode ser lento ao 
ler dados do buffer 
● Serviço de casamento de taxas: 
“casar” a taxa de envio com a taxa 
de drenagem de dados da aplicação 
receptora 
● Espaço livre no buffer 
− = RcvWindow 
− = RcvBuffer – [LastByteRcvd – 
LastByteRead] 
● Receptor informa espaço livre através 
da inclusão nos segmentos do valor 
da janela de recepção RcvWindow 
● Emissor limita dados não confirmados 
ao tamanho da janela RcvWindow 
− Garante que o buffer do 
receptor não transborde 
Gerenciamento de conexão: 
● Estabelecimento de conexão entre 
emissor e receptor TCP antes da troca 
de segmentos de dados 
● Inicializar variáveis TCP: 
− Num de seq 
− Cria buffers, aloca memória, 
tem informação de controle de 
fluxo (RcvWindow) 
● Cliente é o iniciador da conexão e 
servidor é contactado pelo cliente 
● Three-way handshake: 
− Passo 1: host cliente envia 
segmento SYN TCP para o 
servidor 
o Especifica num de seq 
inicial 
o Sem dados 
− Passo 2: host servidor recebe 
SYN e responde com segmento 
SYNACK 
o Servidor aloca buffers 
o Especifica num de seq 
inicial do servidor 
− Passo 3: cliente recebe 
SYNACK, responde com 
segmento ACK que pode 
conter dados 
● Fechando uma conexão: 
− Cliente fecha socket: 
clientSocket.close(); 
− Passo 1: cliente envia segment 
TCP de controle FIN ao servidor 
− Passo 2: servidor recebe FIN, 
responde com ACK. Fecha 
conexão e envia FIN 
− Passo 3: cliente recebe FIN e 
responde com ACK 
o Entra na “espera 
temporizada” 
(responderá com ACK 
aos FINs recebidos) 
− Passo 4: servidor recebe ACK. 
Conexão foi fechada 
 
● Ciclo de vida: 
− Cliente 
 
− Servidor 
 
3.6 Princípios do controle de 
congestionamento 
● Congestionamento: 
− Informalmente: fontes demais 
enviando dados demais, muito 
rápido, ultrapassando a 
capacidade da rede 
− É diferente de controle de fluxo 
− Manifestações: 
o Pacotes perdidos 
(“estouro” de buffer nos 
roteadores) 
o Atrasos elevados 
(“enfileiramento” em 
buffers nos roteadores) 
− Custos: 
o Mais trabalho 
(retransmissões) 
o Retransmissões 
desnecessárias (enlace 
carrega múltiplas cópias 
do mesmo pacote) 
o Quando um pacote é 
descartado, a 
capacidade de 
transmissão upstream 
usada para esse pacote 
foi desperdiçada 
OBS.: Se superdimensionarmos a banda 
passante, o problema de congestionamento 
é praticamente resolvido (TCP não teria que 
detectar congestionamento e derrubar a 
taxa de transmissão de dados). Isso porque o 
congestionamento ocorre se a banda 
passante da rede não é suficiente para a 
quantidade de fontes que estão mandando 
dados. No entanto, aumentar a banda 
passante ainda é caro. 
● Abordagens para o controle de 
congestionamento: 
− Controle de congestionamento 
fim-a-fim: 
o Sem feedback explícito 
da rede 
o Congestionamento 
inferido pelos end 
systems através das 
perdas e atrasos 
observados 
o Abordagem usada pelo 
TCP 
− Controle de congestionamento 
assistido pela rede: 
o Roteadores proveem 
feedback para os end 
systems (bit único 
indicando 
congestionamento e 
taxa explícita que 
emissor deve usar) 
o Abordagem usada pela 
rede ATM 
3.7 Controle de congestionamento 
TCP 
● Controle fim a fim (sem apoio da 
rede) 
● Taxa de transmissão limitada pelo 
tamanho da janela (CogWin) 
 
Algoritmos para setar o tamanho da janela: 
● Partida lenta (slow start): 
− Inicializa CogWin = 1 
For (cada segmento com ACK) 
 CogWin++ 
Until (evento de perda ou 
CogWin>Threshold) 
− Aumento exponencial (por RTT) 
no tamanho da janela (não 
muito lenta) 
− Evento de perda: temporizador 
(Tahoe TCP) e/ou 3 ACKs 
duplicados (Reno TCP) 
● Evitar congestionamento: 
− //Partida lenta acabou pois 
CogWin>threshold 
Until (envento de perda){ 
Cada w segmentos 
reconhecidos: CogWin++ 
} 
Threshold = CogWin/2 
CogWin = 1 
Faça partida lenta 
● Additive increase, multiplicative 
decrease (AIMD): 
− Aumentar a taxa de 
transmissão (tamanho da 
janela), sondar bw ainda 
utilizável, até ocorrência de 
perda de pacote 
− Aumento aditivo: aumenta 
CogWin de 1 MSS a cada RTT 
até perda ser detectada 
− Redução multiplicativa: reduz 
CogWin pela metade após 
detectar perda 
− Comportamento dente de 
serra 
 
OBS.: No Tahoe, quando ocorre uma perda, 
seja ela detectada por timeout ou por 3 
ACKs duplicados, a janela volta para 1 e 
começa a partida lenta. No Reno, quando a 
perda é detectada por timeout, a janela 
volta para 1. Mas, quando é detectada por 
3 ACKs duplicados, a janela volta para um 
novo limiar e começa pela fase de evitar o 
congestionamento. Ou seja, ele diferencia os 
eventos de perda enquanto o Tahoe não. 
Nos ACKs duplicados, não derruba a janela 
para 1 pois os ACKs continuam chegando, 
então entende que o problema foi somente 
pontual. Já o timeout é um cenário mais 
alarmante, e por isso volta para 1. 
 
● Após 3 ACKS duplicados: 
− CogWin é reduzida pela 
metade 
− Janela cresce linearmente 
● Após evento de timeout: 
− CogWin é setada para 1 MSS 
− Janela cresce 
exponencialmente 
− Até um threshold (limiar), e 
então volta a crescer 
linearmente 
● Sumário do controle de 
congestionamento: 
− Tahoe + Reno: Quando CogWin 
está abaixo de Threshold, 
emissor está na fase de partida 
lenta, janela cresce 
exponencialmente. 
− Tahoe + Reno: Quando CogWin 
está acima de Threshold, 
emissor está na fase de 
controle de congestionamento, 
janela cresce linearmente. 
− Reno: Quando 3 ACKs 
duplicados ocorrem, Threshold 
é setadopara CogWin/2 e 
CogWin é setado para 
Threshold. 
− Tahoe: Quando 3 ACKs 
duplicados ocorrem, Threshold 
é setado para CogWin/2 e 
CogWin é setado para 1. 
− Tahoe e Reno: Quando timeout 
ocorre, Threshold é setado para 
CogWin/2 e CogWin é setado 
para 1. 
Justiça no TCP: 
● Objetivo: se K sessões TCP 
compartilham um mesmo enlace (de 
gargalo) de banda passante R, cada 
uma deve ter uma taxa média de R/K 
● TCP é justo: 
− 2 sessões competindo: 
o Aumento aditivo, saltos 
de 1 (vazão aumenta) 
o Redução multiplicativa 
reduz vazão 
proporcionalmente 
 
Tende a compartilhar igualmente a banda 
● Justiça e o UDP: 
− Apps multimídia geralmente 
não usam TCP (para não 
restringir taxa devido ao 
controle de congestionamento) 
− Em vez do TCP, as aplicações 
multimídia usam UDP (áudio e 
vídeo injetados a taxas 
constantes, toleram perdas de 
pacotes) 
− Área de pesquisa: TCP friendly 
(protocolos amigos do TCP) 
● Justiça e conexões TCP paralelas: 
− Nada previne apps de abrirem 
conexões paralelas entre dois 
hosts 
− Web browsers fazem isso

Outros materiais