Vous êtes sur la page 1sur 33

TCP

 Protocolo de controle de transmissão


(Transmission Control Protocol)
 Definido em diversas RFCs (793, 1122, 1323,
2018 e 2581)
 Diversos flavors (tipos)
 Serviços
 Multiplexação/demultiplexação
 Detecção de erros
 Transferência de dados confiável
 Controle de fluxo
 Orientado a conexão
 Controle de congestionamento
TCP - multiplexação/demultiplexação

 Socket TCP é identificado por


 Endereço IP de fonte
 Número de porta de fonte
 Endereço IP de destino
 Número de porta de destino
Multiplexação/demultiplexação no TCP (fonte: Kurose)

P1 P4 P5 P6 P2 P1P3

SP: 5775
DP: 80
S-IP: B
D-IP:C

SP: 9157 SP: 9157


cliente DP: 80 DP: 80 cliente
servidor
IP: A S-IP: A S-IP: B IP:B
IP: C
D-IP:C D-IP:C
TCP - detecção de erros

 Análoga ao UDP

Pseudocabeçalho do TCP (fonte: Tanenbaum)


TCP - envio de dados

 Uso de buffers alocados no estabelecimento de


conexão
 TCP deve enviar dados no buffer segundo a sua
conveniência
 Dados gerados e recebidos pela aplicação são vistos
como uma sequência de octetos e não como uma
sequência de pacotes
TCP - envio de dados

Buffers do TCP (fonte: Kurose)


TCP - envio de dados

 Tamanho máximo do segmento (Maximum


Segment Size - MSS)
 Quantidade máxima de dados da camada de aplicação
no segmento
 Máximo de 64kB menos os cabeçalhos TCP e IP
 TCP faz a divisão em partes do fluxo de dados do
usuário
 Normalmente estabelecido em função da unidade
máxima de transmissão (Maximum Transmission Unit –
MTU) do hospedeiro fonte local
 RFC 1191 descobre a MTU do caminho da fonte ao
destino
 Valores comuns de MSS: 1460, 536 e 512 octetos
TCP - envio de dados

 Aplicações interativas normalmente transmitem


segmentos menores
 Ex.: Telnet
TCP - formato do segmento

Formato do segmento TCP (fonte: Kurose)


TCP - formato do segmento

 Porta de origem (16 bits)


 Porta de destino (16 bits)
 Número de sequência (32 bits)
 Usado na implementação do serviço confiável
 Número do primeiro octeto do segmento (parte de
dados)
 Segmento com flags SYN, ACK ou FIN isolados conta
um octeto
 Inicialmente é escolhido “aleatoriamente”
 Para minimizar a possibilidade de ser reutilizado em uma
nova conexão com mesmos números de porta e
endereços IPs
TCP - formato do segmento

 Número de reconhecimento (32 bits)


 Usado na implementação do serviço confiável
 Número de sequência do próximo octeto que está
aguardando do outro hospedeiro
 Reconhecimentos cumulativos
 Tratamento de segmentos fora de ordem depende da
implementação
 Mais comum é guardar o segmento
TCP - formato do segmento

Exemplo de Seq e ACK para o Telnet (fonte: Kurose)


TCP - formato do segmento

 Comprimento do cabeçalho (4 bits)


 Comprimento em palavras de 32 bits
 Variável em função do campo opções
 Flags (6 bits)
 URG - segmento contém dados urgentes
 Marcado pela camada aplicação do remetente
 Ex.: Usado por Telnet quando o usuário digita uma tecla
de interrupção
 ACK - segmento contém ou não ACK
 PSH - destinatário deve passar os dados para a
camada aplicação imediatamente
 RST - usado no estabelecimento de conexão
 SYN - usado no estabelecimento de conexão
 FIN - usado no fechamento de conexão
TCP - formato do segmento

 Janela de recepção (16 bits)


 Usada no controle de fluxo
 Número de octetos que o receptor está pronto para
aceitar
 Soma de verificação (16 bits)
 Ponteiro para dados urgentes (16 bits)
 Usado com URG
 Indica o fim dos dados urgentes
 Aplicação determina o início
TCP - formato do segmento

 Opções
 Negociação de MSS
 Fator de aumento de escala da janela de recepção
para redes de alta velocidade
 Window scale (RFC 1323): deslocamento da janela de
recepção (Window size) até 14 bits para a esquerda
 Outras
 Dados
TCP - temporização

 TCP usa temporização para recuperar


segmentos perdidos
 Gerenciamento de temporizadores por conexão
 Utiliza uma estimativa do tempo de ida e volta
(Round Trip Time - RTT)
 SampleRTT
 RTT para um determinado segmento
 Muitas implementações medem para um segmento por
vez (por RTT)
 Não calculado para retransmissões
 Pode ter valores atípicos em função de variações de
congestionamento e carga
TCP - temporização

 EstimatedRTT
 Média móvel exponencial ponderada dos SampleRTT
 Peso de um SampleRTT diminui exponencialmente
EstimatedRTT = (1-α)*EstimatedRTT + α*SampleRTT

 α = 0,125 (RFC 2988)


TCP - temporização

Amostras de RTTs e RTTs estimados (fonte: Kurose)


TCP - temporização

 DevRTT
 Variação do RTT (RFC 2988)

DevRTT = (1-β)*DevRTT + β*|SampleRTT-EstimatedRTT|

 Tipicamente β = 0,25
 Estouro de temporizador
TimeoutInterval = EstimatedRTT + 4*DevRTT
 RTT estimado mais uma margem de segurança
 Quanto maior a variação nos valores de SampleRTT,
maior a margem
TCP - transferência confiável

 Sobre o serviço de melhor esforço do IP


(Internet Protocol)
 Usa reconhecimentos positivos, temporizadores,
números de sequência e paralelismo
 Pode usar um NACK implícito (retransmissão rápida)
 Pode usar um único temporizador de retransmissão
(RFC 2988)
 Paralelismo relacionado ao controle de fluxo e ao
controle de congestionamento
 Duas fases são apresentadas com aumento da
complexidade
 Recuperação de perdas de segmentos
 Retransmissão rápida
TCP - transferência confiável

 Inicialmente o protocolo só trata da recuperação


das perdas de segmentos
 Ignora os ACKs duplicados
 Ignora controle de fluxo e de congestionamento
 Eventos
 Dados recebidos da aplicação
 Temporizador único associado com o mais antigo
segmento não reconhecido
 Estouro do temporizador
 Retransmite o segmento e reinicia o temporizador
 Recebimento de ACK y
 SendBase → número de sequência do mais antigo octeto
não reconhecido
 y > SendBase → reconhece um ou mais octetos
Remetente TCP simplificado (fonte: Kurose)
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
loop (forever) {
switch(event)
event: dado recebido da aplicação acima
cria segmento TCP com no de sequência NextSeqNum
if (timer currently not running)
start timer
pass segment to IP
NextSeqNum = NextSeqNum + length(data)
event: tempo de confirmação do temporizador
retransmit not-yet-acknowledged segment with
smallest sequence number
start timer
event: ACK recebido, com valor do campo de ACK do y
if (y > SendBase) {
SendBase = y
if (there are currently not-yet-acknowledged
segments)
start timer
}
} /* end of loop forever */
Retransmissão devido a um ACK perdido (fonte: Kurose)
Segmento 100 não retransmitido (fonte: Kurose)
Reconhecimento cumulativo evita a retransmissão do
primeiro segmento (fonte: Kurose)
TCP - transferência confiável

 Retransmissão
 Tempo de expiração é dobrado em relação ao tempo
anterior
 Forma simples de controle de congestionamento
TCP - transferência confiável

 Segunda fase
 Retransmissão rápida
 Associada a ACKs duplicados
Geração de ACKs do TCP – RFCs 1122 e 2581 (fonte: Kurose)

Evento no receptor Ação do receptor TCP

Segmento chega em ordem, ACK retardado. Espera até 500 ms


não há lacunas, pelo próximo segmento. Se não
segmentos anteriores já aceitos chegar, envia ACK

Segmento chega em ordem, Imediatamente envia um ACK


não há lacunas, cumulativo
um ACK atrasado pendente

Segmento chega fora de ordem, Envia ACK duplicado, indicando número


número de sequência chegou de sequência do próximo byte esperado
maior: gap detectado

Chegada de segmento que Reconhece imediatamente se o


parcial ou completamente segmento começa na borda
preenche o gap inferior do gap
TCP - transferência confiável

 Retransmissão rápida (cont.)


 RFC 2581
 Três ACKs duplicados → retransmite o segmento que
falta
 Modificação no remetente TCP simplificado
Mudança no remetente TCP (fonte: Kurose)

event: ACK received, with ACK field value of y


if (y > SendBase) {
SendBase = y
if (there are currently not-yet-acknowledged segments)
start timer
}
else {
increment count of dup ACKs received for y
if (count of dup ACKs received for y = 3) {
resend segment with sequence number y
}
Retransmissão rápida (fonte: Kurose)
Hosp. A Hosp. B

seq # x1
seq # x2
seq # x3
ACK x1
seq # x4 X
seq # x5
ACK x1
ACK x1
ACK x1
ACKs
duplicados
três vezes
timeout

tempo
TCP - transferência confiável

 Parecido com o Go-Back-N, porém


 Geralmente armazena segmentos fora de ordem
 Evita algumas retransmissões dependendo do estouro
dos temporizadores
 Ver exemplo do Kurose na pag. 188
TCP - transferência confiável

 Reconhecimento seletivo
 RFC 2018
 Destinatário pode reconhecer seletivamente
segmentos fora de ordem
 Parecido com o protocolo Seletive Repeat

Vous aimerez peut-être aussi