TCP

Transcrição

TCP
Transmission Control Protocol
(TCP)
TCP
Serviço orientado a conexão
Baseado em fluxo (stream):
– Seqüência de bytes não estruturada
Confiável
Detecção e correção de erros
Controle de fluxo
Controle de congestionamento
TCP
Segmentos
– Fluxo de dados tratado como uma seqüência de
bytes divididos em segmentos
– Cada segmento (apenas os dados) mais o
cabeçalho TCP é encapsulado dentro de um
datagrama IP
– Tamanho máximo do segmento: MSS
Números de Seqüência
– Bytes no fluxo de dados são numerados
seqüencialmente
TCP
Confiabilidade
– Reconhecimento Positivo (ACK) com
Retransmissão
– Utiliza Piggybacking no reconhecimento
ACK que pega carona é carregado no cabeçalho do TCP
– Retransmissão baseada em time-out
Comportamento do TCP
Usa o conceito de janela deslizante
Sempre que um pacote é recebido no destino, um
ACK é retornado, confirmando os bytes recebidos
corretamente e em seqüência
– ACK carrega a indicação do próximo byte esperado
Sempre tenta incrementar a banda ofertada,
aumentando o tamanho da janela de transmissão à
medida que recebe confirmações (ACKs)
– Controle de Fluxo
– Controle de Congestionamento
Seqüenciamento e ACKs
Estrutura do segmento TCP
ACK: campo de ACK
é válido
contagem por
bytes de dados
(não segmentos!)
Funcionamento do TCP
Sempre que um segmento é transmitido, um time-out
é disparado
Quando ACK do segmento chega, o time-out é
cancelado
Quando um pacote é perdido, mas os pacotes
subseqüentes chegam ao destino, ACKs de mesmo
valor são gerados e recebidos como ACK duplicados
A chegada de três ACKs duplicados força a retx do
segmento perdido, cancelando o estouro do time-out
(Fast Retransmit)
Cenários de retransmissão
ACK 120
ACK 120 dup
Perda do ACK e
retx por time-out
Temporização prematura,
ACK duplicado
Cenários de retransmissão
ACK cumulativo
Fast Retransmit
Host A
Send Seg 1
Send Seg 2
Start Timer
Send Seg 3
Send Seg 4
Receive ACK 2
Send Seg 5
Receive ACK 2 Dup #1
Receive ACK 2 Dup #2
Host B
Receive Seg 1
Send ACK 2
Receive Seg 3
Send ACK 2
Receive Seg 4
Send ACK 2
Receive Seg 5
Send ACK 2
Receive ACK 2 Dup #3
Retx Seg 2
Cancel timer
Receive Seg 2
Send ACK 6
Receive ACK 6
Send Seg 6
Controle de Fluxo
• lado receptor da conexão TCP possui um buffer de recepção
processos de aplicação
podem ser lentos para ler
o buffer
Controle de fluxo
• Transmissor não deve
esgotar os buffers de
recepção enviando dados
rápido demais
• Serviço de speed-matching:
encontra a taxa de envio
adequada à taxa de vazão da
aplicação receptora
Controle de Fluxo: como funciona
RcvWindow = RcvBuffer-[LastByteRcvd - LastByteRead]
RcvWindow informado nos segmentos enviados pelo receptor
Transmissor limita os dados não confirmados ao RcvWindow
– Garantia contra overflow no buffer do receptor
Parâmetros de Controle do TCP
Controle de fluxo
– Advertised Receiver Window Size (rcvwnd)
Enviado nos segmentos gerados pelo receptor para o
transmissor (ACK ou dados)
Indica a quantidade máxima de bytes que o receptor
ainda pode receber (disponibilidade de buffers na
recepção)
O transmissor não deve nunca transmitir bytes não
confirmados acima deste valor, exceto dados urgentes
Detecção de Congestionamento
Assume que pacotes são raramente corrompidos por
erros e sempre que uma perda ocorre, o TCP
assume isso como indício de congestionamento
Congestionamento é detectado por time-out ou
recepção de acks duplicados
Usa mecanismo de feedback, reduzindo a janela de
transmissão face a indícios de congestionamento
Reação a Perda
A perda eventual de um pacote, sentida pela
recepção de três ACKs duplicados, força a
retransmissão antecipada do pacote e redução da
oferta de tráfego à metade
O estouro de um time-out indica um forte
congestionamento (perda de pacotes em rajada) e
força a conexão TCP a reiniciar com oferta de banda
mínima e retx do pacote
Parâmetros de Controle do TCP
Controle de transmissão
– Congestion window (cwnd)
Janela que indica os bytes que podem ser transmitidos
– Threshold
Parâmetro que afeta crescimento de cwnd
Controle do TCP
Janelas e ACKs referenciados em termos de bytes e
usam unidades do tamanho máximo de segmento
– Maximum segment size (MSS)
MSS limitado pelo MTU (maximum transmission unit)
para evitar fragmentação
– Procedimentos de MTU discovery
Em qualquer instante, a janela de transmissão
(txwnd) = mín {rcvwnd, cwnd}
MSS
cabeçalho TCP
dados TCP
MSS
cabeçalho IP
dados IP
datagrama IP
MTU
cabeçalho enlace
dados do enlace
CRC
quadro da camada de enlace
MSS = MTU – 20 bytes (cabeçalho TCP) – 20 bytes (cabeçalho IP)
para não haver fragmentação do datagrama IP
MSS default mínimo = 536 bytes, porque qualquer rede deve suportar
pelo menos um datagrama IP de 576 bytes
Inicialização
Advertised Receiver Window Size (rcvwnd)
Limitada pelo buffer de recepção no destino
Valor inicial Informado na abertura da conexão TCP
(SYN)
Congestion window (cwnd)
Inicializada com 1 (MSS bytes)
Threshold
Inicializado em 65535 bytes
Estados de Operação do TCP
Slow Start
Congestion Avoidance
Slow Start e Congestion
Avoidance
Slow Start
– Inicia com cwnd =1 (MSS)
– Incrementa cwnd de 1 MSS a cada ack recebido, ou seja, duplica a
cada RTT, crescendo exponencialmente até alcançar threshold, e
entrando em congestion avoidance
– Em slow start, temos cwnd < threshold
cwnd
threshold 8
4
2
1
RTT
2RTT
3RTT
4RTT
5RTT
6RTT
7RTT tempo
Slow Start (Partida Lenta)
hospedeiro A
RTT
Cnwd = 1
Cnwd = 2
hospedeiro B
um segme
nto
RTT
dois segm
entos
Cnwd = 3
Cnwd = 4
quatro seg
mentos
tempo
Slow Start e Congestion
Avoidance
Congestion Avoidance
– A partir daí aumenta linearmente, incrementando de 1 (MSS) a cada
RTT, ou seja, ao receber um ack incrementa cwnd de 1/cnwd
Incremento de cwnd pode não ser suficiente para permitir o envio de um
pacote naquele instante
– Em congestion avoidance, cwnd ≥ threshold
cwnd
12
11
10
9
threshold 8
4
2
1
RTT
2RTT
3RTT
4RTT
5RTT
6RTT
7RTT tempo
Comportamento do TCP
Vazão num dado instante = txwnd/ RTT
Quando ocorre perda com redução da janela de
transmissão, threshold é sempre colocado na metade do
valor da janela que existia antes da deteção da perda
– No caso de ack duplicado, nova janela é metade da anterior, ou
seja, reinicia com valor igual ao threshold e entra-se em congestion
avoidance (cwnd ≥ threshold)
– No caso de time-out, nova janela é colocada em 1 MSS e entra-se
em slow start
Threshold inicial: 65535 bytes
Controle de congestionamento
TCP: busca por largura de banda
“procura por largura de banda”: aumenta taxa de
transmissão no recebimento do ACK até por fim ocorrer
perda; depois diminui taxa de transmissão
continua a aumentar no ACK, diminui na perda (pois largura de
banda disponível está mudando, dependendo de outras conexões
na rede)ACKs sendo recebidos,
X perda e diminuição de taxa
taxa de emissão
de modo que aumenta taxa
X
X
X
comportamento
“dente de serra”
do TCP
X
tempo
P: Com que velocidade aumentar/diminuir?
detalhes a seguir
Comportamento do TCP
Vazão ocorre em dente de serra
três acks
duplicados
Congestion
window
Kbytes
Time-out
threshold
threshold
threshold
threshold
slow
start
Referência
threshold
congestion
avoidance
slow
start
tempo
congestion
avoidance
– RFC2001, TCP Slow Start, Congestion Avoidance, Fast
Retransmit, and Fast Recovery Algorithms, Janeiro 1997
Vazão Inicial
Slow start inicial e assuma RTT = 100 ms,
MSS=1000bytes
Ao final do slow start, se não houvesse perda, o TCP
atingiria uma vazão de 64 kbytes/100 ms = 5 Mbps
Este ponto seria atingido em 6 RTTs ou 0,6 s de
transmissão
Esta é a meta inicial de oferta de tráfego do TCP
Na Internet, dificilmente se consegue esta taxa de
tráfego
Congestionamento em
Roteadores
Comportamento Internet: o tráfego nos roteadores
chega em rajadas
Na falta de buffers e com fila FIFO no roteador,
descarte simultâneo ocorre em conexões TCP
compartilhando o gargalo
Conseqüências:ocorre sincronização global
– As sessões TCP reagem ao mesmo instante reduzindo a
banda e crescem novamente de forma simultânea
– Tráfego no enlace oscila, utilização média do link diminui,
causando ineficiência
RTO (Time-out de Retx)
Se o time-out for menor do que o RTT real na rede,
haverá retransmissão desnecessária
Se o time-out for muito grande em relação ao real,
em caso de congestionamento severo, a reação a
este congestionamento será mais lenta, pois
dependerá do time-out.
Cálculo do RTO
Nas fórmulas abaixo
– M é o RTT instantâneo
– A é o valor estimado do RTT
– D é o valor estimado da variação do RTT (jitter)
A cada ACK recebido, pode-se calcular M, que é o tempo entre
o envio de um pacote e o recebimento do ACK correspondente
A ← 0,875 *A + 0,125*M
D ← 0,75*D + 0,25 * (|M - A|)
RTO = A + 4D
Inicialmente, A = 0, D = 0 e M é igual ao RTT medido pelas
primitivas iniciais de SYN (estabelecimento da conexão)
Exemplo de estimativa do RTT
Cenário Esperado
O cálculo de RTO espera que a variação de RTT
(jitter) seja grande na rede
Caso RTT tenha pequenas variações apenas num
tempo longo, RTO tende a se aproximar do RTT
instantâneo
– Tempo de propagação grande e pequenas filas nos hops
intermediários leva a este cenário
– Nestas condições, qualquer atraso repentino na chegada de
um ACK acarreta estouro do RTO
Camada de Transporte (Kurose)
• 3.1 Serviços da camada de transporte
• 3.2 Multiplexação e demultiplexação
• 3.3 Transporte não orientado à conexão: UDP
• 3.4 Princípios de transferência confiável de dados
• 3.5 Transporte orientado à conexão: TCP
• Estrutura do segmento
• Transferência confiável de dados
• Controle de fluxo
• Gerenciamento de conexão
• 3.6 Princípios de controle de congestionamento
• 3.7 Controle de congestionamento do TCP
Gerenciamento de conexão TCP
TCP transmissor estabelece conexão com o receptor
antes de trocar segmentos de dados
Inicializar variáveis e informar parâmetros
– Números de seqüência
– Buffers, controle de fluxo (ex. RcvWindow)
– MSS desejável
Cliente: iniciador da conexão
– Socket clientSocket = new Socket(“hostname","port
number");
Servidor: chamado pelo cliente
– Socket connectionSocket = welcomeSocket.accept();
Cenário Problemático
MTU=1500
A
MTU=1500
MTU=1500 MTU=256
MTU=256 MTU=1500
R1
A
R2
SYN <MSS 1460>
SYN <MSS 1460>
Fragmentação ocorrerá entre R1 e R2.
Como evitar isso?
– Path MTU Discovery Protocol: encontrar MTU mínimo numa rota
Envia pacotes de controle de tamanho cada vez maior, com a indicação de não
fragmentar (ICMP don’t fragment no cabeçalho IP)
Quando uma rota não pode repassar o pacote sem fragmentar, pacote de erro é
retornado (ICMP can’t fragment)
Inicia com o menor entre os MSS trocados
Por questão de desempenho, evitar o MSS default de 536 bytes, pois
não ajuda a encontrar um melhor valor (= MTU mínimo – 40 bytes)
Abertura de conexão: three way
handshake
Passo 1: cliente envia TCP SYN ao servidor
Passo 2: servidor responde com segmento SYNACK
Passo 3: cliente confirma o SYNACK recebido
– Especifica número de seqüência inicial
– Opcionalmente informa o MSS, obrigando a outra ponta a não enviar
segmento maior que esse valor indicado
– Caso o MSS não seja anunciado, a outra ponta pode assumir o valor
default de 536 bytes
–
–
–
–
Confirma e o SYN recebido
Aloca buffers
Especifica o número de seqüência inicial do servidor
Opcionalmente informa o MSS, obrigando a outra ponta a não enviar
segmento maior que esse valor indicado
– Caso o MSS não seja anunciado, a outra ponta pode assumir o valor
default de 536 bytes
Three way handshake
Host A
Host B
SYN seq=x MSS=256
SYN seq=x MSS=256
SYN seq=y ACK=x+1 MSS=1460
SYN seq=y ACK=x+1 MSS=1460
seq=x+1 ACK=y+1
seq=x+1 ACK=y+1
Interface serial
MTU = 296
Ethernet v2
MTU = 1500
Host A usará o MSS = 256 por causa do MTU local
Host B usará o MSS = 256 anunciado pelo Host A por ser mais restritivo
•
Pode evitar problemas em conexões como Velox que limitam o tamanho do pacote
Estados de abertura
Fechando a conexão TCP
Fechando uma conexão:
cliente fecha o socket:
clientSocket.close();
Passo 1: o cliente envia o segmento
TCP FIN ao servidor
Passo 2: servidor recebe FIN,
responde com ACK. Fecha a
conexão, envia FIN
Passo 3: cliente recebe FIN,
responde com ACK.
• Entra “espera temporizada”
- vai responder com ACK a FINs
recebidos
Passo 4: servidor, recebe ACK.
Conexão fechada
Nota: com uma pequena
modificação, pode-se manipular
FINs simultâneos
Estados de fechamento
Gerenciamento de conexão TCP
Estados do cliente
Estados do servidor
Estrutura do segmento TCP
ACK: campo de ACK
é válido
URG: dados urgentes
(pouco usado)
PSH: pede a entrega
imediata dos dados para a
aplicação (pouco usado)
RST, SYN, FIN:
(comandos de aborta,
criação e término)
Internet checksum
(como no UDP)
contagem por
bytes de dados
(não segmentos!)
número de bytes o
receptor está
pronto para aceitar
aponta para o
último byte de
dados urgentes
Pseudo header para cálculo do checksum
Adicional
PUSH flag
URGENT flag
– Implementações BSD Unix ignoram o PUSH recebido porque
normalmente nunca atrasam a entrega de dados para a aplicação
– APIs podem não fornecer as possibilidades de setar o bit PUSH
– Ponteiro aponta para o último byte de dados urgente
– Bit URGENT setado indica que o estado urgente foi iniciado e não
exatamente quando iniciou
– Depende de implementação o manuseio do flag
Receive Window
– Um novo valor de rcvwnd no receptor pode ser repassado à fonte
num pacote de ACK, a qualquer instante durante uma sessão TCP
– Dados urgentes podem eventualmente ser enviados com rcwnd=0
Comportamento Adicional do
TCP
Nas implementações, para minimizar tráfego,
ACKs são atrasados e um único ACK pode
confirmar dois pacotes recebidos
corretamente
– Nas implementacões, o ACK indica o próximo
byte esperado, confirmando todos os anteriores
ACK atrasado pelo SO
Dificuldades no TCP
Sempre incrementa a alocação de banda e,
conseqüentemente, a possibilidade de
congestionamento
Retransmissões frente a congestionamento só
realimentam o processo de degradação
Vazão prejudicada quando perdas devido ao meio
são interpretadas como congestionamento
– Ambiente de redes sem fio (redes wireless)
Quando RTT é elevado (ex.: satélite), realimentação
é lenta e retx gera ineficiência
– Usar FEC é solução
TCP throughput
Qual é o throughout médio do TCP como uma função
do tamanho da janela e do RTT?
– Ignore a partida lenta
Seja W o tamanho da janela quando ocorre perda
– Para janela = W, throughput = W/RTT
– Logo após a perda
janela cai para W/2
throughput vai para W/2RTT
Throughout médio: 0,75 W/RTT
Futuro do TCP
Exemplo: segmento de 1500 bytes, RTT de 100 ms, deseja 10
Gbps de throughput
Requer janela = 83.333 para os segmentos em trânsito
Throughput em termos da taxa de perda (ver exercicio):
1.22⋅ MSS
RTT L
Requerida taxa de perda L bem baixa (L = 2·10-10) para
alcançar 10 Gbps!
São necessárias novas versões de TCP para alta velocidade!
Eqüidade do TCP
Objetivo de eqüidade: se k sessões TCP compartilham o
mesmo enlace do gargalo com largura de banda R, cada uma
deve ter taxa média de R/k
Por que o TCP é justo?
duas sessões concorrentes:
aumento aditivo dá inclinação 1, pois vazão aumenta
diminuição multiplicativa diminui vazão proporcionalmente
R
Vazão da conexão 2
compartilhamento de largura de banda igual
perda: diminui janela por fator de 2
prevenção de congestionamento: aumento aditivo
perda: diminui janela por fator de 2
prevenção de cong.: aumento aditivo
Vazão da conexão 1
R
Por que o TCP é justo com conexões
com RTT semelhante?
Duas sessões concorrentes
–
–
O aumento aditivo fornece uma inclinação de 1, quando a vazão aumenta
Redução multiplicativa diminui a vazão proporcionalmente
•perda: reduz janela por um fator de 2
•prevenção de congestionamento:
aumento aditivo
•perda: reduz janela por um fator de 2
•prevenção de congestionamento :
aumento aditivo
Eqüidade
Eqüidade e UDP
– Aplicações multimídia normalmente não usam TCP, pois
não querem a taxa estrangulada pelo controle de
congestionamento
– Em vez disso, usam UDP
Trafega áudio/vídeo a taxas constantes, toleram perda de
pacotes
– área de pesquisa: TCP amigável
Eqüidade e conexões TCP paralelas
– Web browsers podem abrir conexões paralelas com servidor
– Exemplo: enlace de taxa R suportando 9 conexões TCP;
Nova aplicação pede 1 conexão TCP, obtém taxa de R/10
Nova aplicação pede 11 conexões TCPs, obtém R/2!
Falta de Eqüidade com TCP
Congestionamento afetando muitas ( > 100)
conexões TCP pode levar a ineqüidade na captura
da banda
– Conexões com RTT menor reagem mais rápido às perdas
e estabelecem equilíbrio num ponto com vazão maior
– Referência: R. Morris, TCP Behavior with Many Flows,
IEEE International Conference on Networks, Outubro
1997
Variações de TCP
Cabeçalho TCP
Options
Opções do TCP
Negociados na abertura da conexão
Fator de escala da janela tem que ser previamente
determinado e apresentado no SYN/SYNACK
durante a abertura da conexão
– Fator de escala em outros segmentos são ignorados
– No máximo, shift de 14 posições, levando a janela de 1
Gbytes (230)
Opção de uso de timestamp deve ser indicada no
SYN
– Interpretado como uma extensão superior do
sequenciamento
– Usado tanto em dado como em ACK, nas duas direções
Fast Retransmit
Ao receber três ACKs duplicados, a cwnd é reduzida
pela metade, sendo este valor salvo no ssthresh.
O pacote “perdido” é retransmitido e transmissor fica
esperando a chegada do ACK confirmando o pacote
retransmitido
Após a chegada do ACK confirmando o pacote retx,
a cwnd volta a ter o tamanho salvo no ssthresh e o
algoritmo de congestion avoidance é executado
Fast Retransmit: bloqueio
Numa operação tradicional, ao reduzir após a perda
a janela pela metade, o TCP fica bloqueado sem
transmitir novos pacotes aguardando o ACK do
pacote retransmitido, pois todos os pacotes na janela
CWND já foram transmitidos e estão aguardando
confirmação
Comportamento do TCP
cwnd=8,<1,2,3,4,5,6,7,8>
ACK 1
ACK 1 dup
ACK 1 dup
ACK 1 dup
ACK 1 dup
Fast Retransmit
1
2
3
X
5
7
4
6
8
1
ACK 1 dup
Recupera a perda do
pacote 1 em um RTT
ssthresd= 4,
cwnd=8,<1,2,3,4,5,6,7,8>
ACK 9
Congestion Avoidance
ssthresd= 4, cwnd= 4,
<9,10,11,12>
9
10
11
12
Ocorre rajada ao
final da fase de
recuperação, ruim!
Melhoria: Fast Recovery
Executado junto com Fast Retransmit após receber três ACKs
duplicados
Aumenta o cwnd de 1 a cada chegada de ACK duplicado
durante a fase de recuperação, enquanto aguarda a chegada
do ACK referente ao pacote retransmitido (após RTT)
Possibilita a transmissão de novos segmentos e não ficar
apenas bloqueado e inativo com uma janela que só contém
segmentos já transmitidos
Após a chegada do ACK confirmando o pacote retx, a cwnd
volta a ter o tamanho salvo no ssthresh e o algoritmo de
congestion avoidance é executado
Fast Recovery
cwnd=8,<1,2,3,4,5,6,7,8>
ACK 1
1
2
3
ACK 1 dup
ACK 1 dup
ACK 1 dup
Fast Retransmit,
ssthresd= 4,
cwnd= 8
ACK 1 dup
cwnd=8+1=<1,2,3,4,5,6,7,8,9>
ACK 1 dup
cwnd=9+1=<1,2,3,4,5,6,7,8,9,10>
ACK 1 dup
cwnd=10+1=<1,2,3,4,5,6,7,8,9,10,11>
ACK 1 dup
cwnd=11+1=<1,2,3,4,5,6,7,8,9,10,11,12>
Congestion Avoidance
ssthresd= 4,
cwnd= 4,<9,10,11,12>
X
4
5
6
7
1
8
9
10
11
12
ACK 9
Confirma 1
cwnd= 4 = <9,10,11,12>
ACK 10
cwnd= 4+1/4 = <10,11,12,13>
ACK 11
cwnd=4+2/4 =<11,12,13,14>
13
14
ACK 12
cwnd=4+3/4=<12,13,14,15>
15
ACK 13
cwnd= 4+1 = <13,14,15,16,17>
Recupera a perda do
pacote 1 em um RTT
16
17
Evita rajada ao
final da fase de
recuperação!
Tipos de TCP
Tahoe
Reno
New Reno
SACK
Existem algumas outras variações propostas: Vegas, Westwood.
Tahoe
Primeira proposta de implementação do TCP, baseada no
algoritmo de controle de congestionamento proposto por Van
Jacobson.
– Presentes os algoritmos Slow Start e Congestion Avoidance.
– Retx ocorre apenas por time-out
Conhecida como Tahoe NoFR (no Fast Retransmit)
Melhorias feitas nesta implementação incluíram nela o
algoritmo Fast Retransmit. Por isso, algumas bibliografias
trazem tal algoritmo associado a esta implementação.
Reno
Alteração ao Tahoe proposta por Jacobson, acrescentando o
algoritmo fast retransmit e fast recovery.
Problemas com Reno
Múltiplas perdas de pacotes numa mesma janela
– Remetente só detecta perdas consecutivas de pacotes, quando
tiver recebido o ACK da primeira retransmissão
TCP sai de fast recovery e, logo em seguida, retx o segundo
pacote perdido, entrando em congestion avoidance
A recuperação do próximo pacote perdido pode acontecer
por time-out, forçando a entrada em slow start
Fato acima ocorrendo múltiplas vezes acarreta em reduções
múltiplas do threshold e cwnd, podendo levar o desempenho
a níveis extremamente baixos
Reno com múltiplas perdas
ACK 1
cwnd=8,<1,2,3,4,5,6,7,8>
1
2
3
4
5
ACK 1 dup
ACK 1 dup
Fast Retransmit,
ssthresd= 4,
cwnd= 8
ACK 1 dup
cwnd=8=<1,2,3,4,5,6,7,8>
ACK 1 dup
cwnd=8+1=<1,2,3,4,5,6,7,8,9>
ACK 1 dup
cwnd=9+1=<1,2,3,4,5,6,7,8,9,10>
ACK 1 dup
cwnd=10+1=<1,2,3,4,5,6,7,8,9,10,11>
Congestion Avoidance
ssthresd= 4,
cwnd= 4,<2,3,4,5>
Fast Retransmit
ssthresd= 2,
cwnd= 4,<2,3,4,5>
Congestion Avoidance
ssthresd= 2,
cwnd= 2,<12,13>
Confirma 1
cwnd= 4 = <2,3,4,5>
cwnd=4+1/4 =<2,3,4,5>
cwnd=4+2/4 =<2,3,4,5>
cwnd=4+3/4 =<2,3,4,5>
cwnd= <2,3,4,5>
ACK 2
7
X
X
6
8
1
9
10
11
O fato de ter transmitido durante a
recuperação permitiu a recepção
dos três ACKs duplicado, caso
contrário sairia por time-out e
entraria em slow start
ACK 2 dup
ACK 2 dup
ACK 2 dup
2
ACK 12
cwnd= <12,13>
Recupera a perda do
pacote 1 em um RTT
12
13
Recupera a perda do
pacote 2 em um RTT
New Reno
É a alteração proposta para solucionar o problema de múltiplas
perdas de pacotes na mesma janela, mostrado no RENO
– RFC 2582 – The New-Reno Modification to TCP’s Fast Recovery
Algorithm, 1999
Ao entrar na fase de fast recovery pela recepção de três ACKs
duplicados, a retransmissão rápida ocorre
O algoritmo só passará para a fase de congestion avoidance,
quando for recebido um ACK que confirme todos os pacotes
enviados até o momento da retransmissão rápida
– Difere do Reno, que entra em congestion avoidance, tão logo um
ACK que confirme a retransmissão seja recebido
ACK parcial
É todo aquele ACK que confirma pacotes ainda
não confirmados dentro da janela do remetente,
mas não termina a fase do Fast Recovery, pois
não confirma todos os pacotes da janela
O recebimento de um ACK parcial causa a
retransmissão do próximo pacote esperado pelo
receptor, que necessariamente está na janela
original do transmissor
– Se não estivesse, este ACK não seria parcial!
ACK parcial
É necessariamente uma resposta a um pacote
retransmitido durante a fase de Fast Recovery
ACks parciais só ocorrerão quando perdas múltiplas na
janela ocorrerem
Reação do New Reno a ACK parcial
– Janela de congestionamento é incrementada de um (por ter
chegado um ACK) e reduzida de um valor igual à soma do
tamanho de todos os novos pacotes que acabaram de ser
confirmados
– Esta reação tem como objetivo fazer com que ao final do Fast
Recovery a quantidade de pacotes não confirmados esteja em
torno de ssthresh, pois, deste modo, não ocorrerá uma rajada de
envio de pacotes, quando começar o congestion avoidance.
ACK parcial
Cada ACK parcial recebido (RTT segundos após retx)
confirma uma nova perda na janela de transmissão
Após retx provocada pelo ACK parcial, demora mais RTT até
descobrir próxima perda ocorrida na janela
Como não se sai de Fast Recovery com o recebimento
apenas de ACKs parciais, o problema das múltiplas
reduções da janela foi resolvido.
O NewReno é a única implementação além do SACK,
apresentada abaixo, que retransmite um pacote devido ao
recebimento de um único ACK - neste caso um ACK parcial.
New Reno com múltiplas perdas
ACK 1
cwnd=8,<1,2,3,4,5,6,7,8>
1
2
3
4
5
ACK 1 dup
ACK 1 dup
Fast Retransmit,
ssthresd= 4,
cwnd= 8
ACK 1 dup
cwnd=8=<1,2,3,4,5,6,7,8>
ACK 1 dup
cwnd=8+1=<1,2,3,4,5,6,7,8,9>
ACK 1 dup
cwnd=9+1=<1,2,3,4,5,6,7,8,9,10>
ACK 1 dup
cwnd=10+1=<1,2,3,4,5,6,7,8,9,10,11>
ACK 2
Confirma 1
cwnd= 11+1-1= <1,2,3,4,5,6,7,8,9,10,11> parcial
cwnd=11+1 =<1,2,3,4,5,6,7,8,9.10,11,12>
ACK 2 dup
ACK 2 dup
cwnd=12+1 =<1,2,3,4,5,6,7,8,9.10,11,12,13>
ACK 2 dup
cwnd=13+1 =<1,2,3,4,5,6,7,8,9.10,11,12,13,14>
7
X
X
6
8
1
9
10
11
2
12
13
Recupera a perda dos
pacotes 1 e 2 em dois RTTs
na fase de recuperação, sem
correr o risco de dar time-out
14
ACK 12
Congestion Avoidance
ssthresd= 4,
cwnd= 4,<12,13,14,15>
cwnd= <12,13,14,15>
15
Após recuperação, entra em
CA com cwnd = ssthresd = 4,
após ter transmitido 14
segmentos e evitado rajadas
Problemas com perdas múltiplas
Ack cumulativo não confirma segmentos que estão
do lado direito da janela após as perdas
Isso força a espera de um RTT para descobrir cada
pacote perdido (mesmo em New Reno isso acontece
– verifique) ou retransmitir desnecessariamente
pacotes que foram recebidos corretamente
Perdas múltiplas provocam fases de recuperação de
vários RTTs, levando a perda de vazão
SACK vem para minorar este problema
– RFC 2018 – TCP Selective Acknowledgement Options
(1996)
SACK
Opção usada no início da conexão (os pacotes com
bit SYN setado) para declarar que ambas as partes
estão habilitadas para trabalhar com SACK.
SACK
Opção usada durante a
conexão, para informar
ao remetente os
números de seqüência
que formam os limites
dos blocos de bytes
fora de ordem que
foram recebidos com
sucesso.
Exemplo SACK
Suponha: pacotes 1, 2, 3, 4, 5, 6 e 7 enviados, mas 2 e 6 perdidos
–
Números de seqüência sejam respectivamente
<0-1499> para o pacote 1
<1500-2999> para o pacote 2
<3000-4499> para o pacote 3 e assim sucessivamente.
Ao receber o pacote 1:
Ao receber o pacote 3, fora de ordem:
Ao receber o pacote 4:
Na chegada do pacote 5:
Ao chegar o pacote 7:
–
–
–
–
–
Receptor envia ACK 1500 (normal)
Receptor envia ACK 1500 com opção SACK = [left=3000, right=4500] (confirma o
último byte mais 1).
Envia ACK 1500 com opção SACK = [left= 3000, right=6000] (confirmando pacotes 3 e
4 recebidos com sucesso)
Envia ACK 1500 com opção SACK = [left=3000, right=7500]
Envia ACK 1500 com SACK = [left=3000, right=7500], [left=9000, right=10500]
SACK
Resolve o problema inerente ao Reno e ao New-Reno de só
perceber no máximo uma perda por RTT
Toda vez que o receptor receber um pacote fora de ordem,
ele deve enviar um pacote ACK com o campo de opções
SACK, contendo a informação de quais segmentos foram
recebidos com sucesso
De possa da informação do SACK, o transmissor pode
retransmitir os segmentos que faltam no receptor,
retransmitindo um ou mais pacotes da janela de transmissão
New Reno com múltiplas perdas e
SACK (possível comportamento)
cwnd=8,<1,2,3,4,5,6,7,8>
Indica que não só o
pacote 1 se perdeu,
mas também o 2
Fast Retransmit,
ssthresd= 4,
cwnd= 8
ACK 1
ACK 1 dup, sack=[3]
ACK 1 dup, sack= [3-4]
ACK 1 dup,sack=[3-5]
cwnd=8=<1,2,3,4,5,6,7,8>
ACK 1 dup, sack=[3-6]
cwnd=8+1=<1,2,3,4,5,6,7,8,9>
ACK 1 dup, sack=[3-7]
cwnd=9+1=<1,2,3,4,5,6,7,8,9,10>
ACK 1 dup, sack=[3-8]
cwnd=10+1=<1,2,3,4,5,6,7,8,9,10,11>
Confirma 1
ACK 2 parcial, sack=[3-8]
cwnd= 11+1-1= <1,2,3,4,5,6,7,8,9,10,11>
ACK 9
Congestion Avoidance
ssthresd= 4,
cwnd= 4,<9,10,11,12>
1
2
3
4
5
cwnd= <9,10,11,12>
ACK 10
cwnd=4+1/4= <10,11,12,13>
ACK 11
cwnd=4+2/4= <11,12,13,14>
ACK 12
cwnd=4+3/4= <12,13,14,15>
ACK 13
cwnd=4+1= <13,14,15,16,17>
7
X
X
6
8
1
2
9
10
11
12
13
14
15
16
17
Recupera a perda dos
pacotes 1 e 2 em um RTT na
fase de recuperação, sem
correr o risco de dar time-out
Após recuperação, entra em
CA com cwnd = ssthresd = 4,
após ter transmitido 11
segmentos e evitado rajadas
Implementações
SO
FreeBSD 3.5.1
FreeBSD 4.2
FreeBSD 4.3
FreeBSD 4.4
FreeBSD 4.5
Windows 98
Windows 2000
RedHat 7.2
Moraru, B., Copaciu, F., Lazar, G., Dobrota, V. – Practical Analysis
of TCP Implementations: Tahoe, Reno, NewReno, 2003
TCP Implementation
Reno
Reno
NewReno
NewReno
NewReno
TahoeNoFR (sem Fast
Retransmit)
TahoeNoFR (sem Fast
Retransmit)
NewReno
Implementações
SO
TCP Implementation
FreeBSD 5.2
Reno
Linux 2.6
NewReno
Windows XP
TahoeNoFR
Trabalho Final de Curso 2004
–
SACK permitted
SACK+
SACK
SACK-
PESQUISA SOBRE AS CARACTERÍSTICAS DAS
IMPLEMENTAÇÕES DO TCP, Sergio Cosme Noronha Cardoso Filho
e Vitor Veneza Quimas Macedo
Desempenho
Caso Ideal
Tempos Aproximados (s)
CL10_CL10
4,45
XP_BSD
4,65
BSD_CL10
4,95
BSD_BSD
4,95
BSD_XP
5,25
CL10_BSD
5,7
XP_CL10
6,45
CL10_XP
6,5
XP_XP
6,65
Random Early Detection (RED)
Comportamento de Filas
Crítico quando a utilização (ρ) da fila se aproxima de
100%
– ρ depende das taxas de chegada e de serviço
– Tamanho e retardo nas filas é função de 1/(1−ρ)
Crescem exponencialmente com a utilização
Espaço limitado em buffers
– Políticas de filas são importantes para dar tratamento
diferenciado para tráfego sensível ou prioritário
Tráfego tende a se concentrar e chegar em rajadas
(bursty)
– Se não houver espaço em buffers na chegada de uma
rajada, perdas múltiplas ocorrerão
Filas são FIFO por default
Descarte ocorre somente quando não há
espaço disponível para acomodar chegada
Como chegadas ocorrem em rajadas,
descartes múltiplos ocorrerão em um gargalo
(fila congestionada)
Em congestionamento, mesmo tráfego com
demanda de banda mínima pode ser
descartado pela política FIFO
RED
Como evitar a sincronização global em
enlaces altamente congestionados e evitar a
exaustão de buffers?
– Começar a descartar antes do buffer esgotar
– Fazer descarte de forma randômica, procurando
afetar de forma transparente as várias sessões
que passam pelo congestionamento
Solução: Random Early Detection (RED)
Random Early Detection - RED
Controle baseado no tamanho médio da fila
– Mantém tamanho médio da fila abaixo de certo
limite máximo (menor que o tamanho do buffer)
– Com isso, mantém sempre algum espaço livre,
permitindo a recepção de rajadas de pacotes
Tamanho instantâneo da fila pode ultrapassar o limite
imposto para o tamanho médio
– Tamanho médio da fila observado no momento da
chegada do pacote para enfileiramento
Random Early Detection - RED
Operação básica
– AVG é o tamanho médio da fila
Probabilidade
de descarte
1
pa
minth
Sem
descarte
avg maxth Descarte
certo
Random Early Detection - RED
Definidos dois limiares de ocupação da fila
– minth (limite inferior)
– maxth (limite superior)
Pacotes que chegam quando
– avg < minth, não são marcados
– avg > maxth, são descartados, com prob 1
– minth < avg < maxth, são marcados ou
descartados, com uma certa probabilidade pa
Random Early Detection - RED
Dois algoritmos envolvidos
– Cálculo do tamanho médio da fila
Descartes somente poderão ocorrer quando o tamanho médio
da fila ultrapassar certo limiar
– Cálculo da probabilidade de marcação dos pacotes para
descarte em função da ocupação da fila
Fazer com que a marcação tenha um comportamento aleatório
Marcação pode implicar em descarte ou ativar um bit no pacote
para notificação de necessidade de diminuição de janela de
transmissão para a conexão
Random Early Detection - RED
Recalcula o tamanho médio da fia a cada chegada
Cálculo do tamanho médio da fila (avg)
– Se pacote encontra a fila ocupada
avg = (1 – wq ) avg + wqq,
– q é a fila instantânea e wq é o peso
– Funciona como um filtro digital passa-baixa, atenuando as
variações instantâneas
– wq é um parâmetro configurável do RED
– Se pacote encontra a fila vazia
avg = (1 – wq )m avg
– m é uma estimativa do # de pacotes que poderiam ter sido
transmitidos durante o período ocioso
– Se fila ficar ociosa muito tempo, AVG tem que tender a 0
Random Early Detection - RED
Escolha dos parâmetros ótimos
– wq depende do tamanho e duração das variações no
tamanho da fila que são permitidas
– Os limiares são função do tamanho médio de fila desejado,
que depende das características de tráfego da rede
Simulação de RED com traces reais
– 4 conexões FTP com produto atraso x banda variando entre
33 a 112 pacotes (quantidade de pacotes necessária para
preencher o caminho da sessão TCP)
– Parâmetros usados
wq = 0,002, minth = 5 pacotes, maxth = 15 pacotes, maxp = 1/50
– avg nunca ultrapassa 40 pacotes
Default da Cisco é wq = 1/2n, n =9, ou seja aprox. 0,002
Referências para RED
Floyd, S., e Jacobson, V., Random Early Detection
Gateways for Congestion Avoidance, IEEE/ACM
Transactions on Networking, V.1 N.4, Agosto 1993,
pg 397-413
RFC 2309, Recommendations on Queue
Management and Congestion Avoidance in the
Internet, 1998
Weighted RED - WRED
Introduz variações de serviço variando a
escolha dos parâmetros de RED de acordo
com a precedência IP
– Permite descartar mais agressivamente alguns
níveis de precedência e menos agressivamente
outros
– Pode ser usado em filas de entrada e nas filas de
saída
– Pode ser implementado em software ou hardware
WRED Cisco
maxp
s
cla
pb
minth
0
cla
ss
ei
pb
se
minth avg
maxth
Usa maxth fixo, enquanto minth varia por precedência IP
Default para precedência 0 é minth = maxth /2
– Necessário que, para as outras classes de maior
precedência, o mínimo seja bem maior que para a classe 0
Recomendações para RED
Nunca habilitar RED para tráfego de voz
Em filas FIFO congestionadas, habilitar RED ou WRED para
o tráfego de dados, para que haja espaço em buffer para o
tráfego de voz
WRED pode e deve ser usado para beneficiar tráfegos de
dados prioritários em enlaces congestionados
RED só terá efeito em filas com utilização média alta
Revisão RED
Quando RED deve ser usado?
– Posso usar RED em baixa carga?
Posso usar RED com tráfego de tempo real como VoIP ou
vídeoconferência?
Quais as vantagens de se habilitar RED em fila congestionada?
Posso mexer nos parâmetros de WRED?
Como WRED pode melhorar desempenho da rede?
Preciso de RED em banda larga?
Preciso de RED na estações dos usuários?
RED é habilitado por interface ou por fila?
Por que RED é baseado no tamanho médio da fila e não no
tamanho instantâneo?
TCP ECN
TCP operando com notificação
explícita de congestionamento
Explicit Congestion Notification
Sistema de filas ativos nos roteadores podem marcar
pacotes IP ao invés de descartá-los, evitando a
retransmissão de segmentos e consumo de banda
Isso só será feito se a camada de transporte nas
duas pontas for capaz de reagir aos pacotes
marcados como reagiria em caso de descarte
– TCP-ECT (ECN capable)
Bits de marcação nos cabeçalhos de IP e TCP
RFC-3168, The Addition of ECN to IP, 2001
Eventos
A
Reage como se
detetada uma perda:
• reduz cwnd à metade
• entra em CA com
cwnd=ssthresd
IP ECT
R
Fila de saída
congestionada
IP CE
TCP ECN-ECHO
B
CE pede redução
de vazão
ECN-ECHO repassa
aviso ao transmissor
TCP ECN-ECHO
TCP CWR
Envia CWR
confirmando que
reduziu a vazão
TCP ECN-ECHO
Reenvia ECN-ECHO
até confirmação
Pára de gerar
ECN-ECHO
IP
TRANSPORTE
MSG
64
64 K
K
64
64 K
K
64
64 K
K
REDE
VERSION
64
64 K
K
IHL
TYPE OF SERVICE
DF MF
IDENTIFICATION
TIME TO LIVE
TOTAL LENGTH MAX 64 K
PROTOCOL
OFFSET 8 bytes
HEADER CHECKSUM
SOURCE
DESTINATION
OPTIONS
Campo Type of Service (TOS)
– Serve para marcar os pacotes com diferentes prioridades e outras
funções (ECN)
ECN no IP
Campo ECN formado pelos bits 6 e 7 do campo TOS do IPv4,
que corresponde ao octeto de classe de tráfego no IPv6
0
1
2
3
4
5
6
7
+---------+---------+---------+---------+---------+---------+---------+---------+
|
Campo DS
|
Campo
|
| DSCP (code point para serviços diferenciados) |
ECN
|
+---------+---------+---------+---------+---------+---------+---------+---------+
Campo ECN
0
0
Not-ECT
0
1
ECT
1
0
ECT
1
1
CE
– Bits 6 e 7 anteriormente definidos pela RFC-2481 ficam alterados
– Uso de 2 bits garante robustez e evita comportamento errado de
implementações de roteadores ou receptores TCP
ECN no TCP
Cabeçalho TCP normal
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
| U | A| P | R| S | F |
| Header Length |
Reservado
| R | C| S | S | Y | I |
|
|
| G | K| H | T | N | N |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
Cabeçalho TCP para ECN
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
| C| E| U | A| P | R| S | F |
| Header Length |
Reservado | W | C | R | C | S | S | Y | I |
|
|
| R| E| G | K| H | T | N | N |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
– ECE: ECN-Echo
– CWR: Congestion Window Reduced
TCP em Internet de alto desempenho
Ajuste do TCP para desempenho
TCP tunning guide
– http://fasterdata.es.net/TCP-tuning/
Tamanho de buffers nos sockets de tx e rx
– Kernel força uma tamanho máximo de buffer
– Se buffer de recepção é grande demais, controle de fluxo se
perde e transmissor pode inundar o receptor, causando
rwnd = 0
– Janelas grandes em excesso no transmissor não causam
problemas, desde que haja memória para suprir alocação
Linux, FreeBSD, Windows, todos suportam auto
ajuste do TCP
Ferramentas de Medição
http://fasterdata.es.net/TCP-tuning/tools.html
Iperf : medir desempenho fim a fim de TCP/UDP
pathrate/pathload : medir disponibilidade de banda e
capacidade
pipechar: análise de congestionamento hop-by-hop
UDPmon: medição de desempenho de rede
synack: para sítios que bloqueiam ping (ICMP)
Ferramentas úteis
–
–
–
–
NDT: Web100 based Network Configuration Tester
Tcpdump (coleta de cabeçalho TCP para par destino/origem)
tcptrace: formata saída do tcpdump para análise usando xplot
Wireshark
TCP em redes de PDB alto
Probabilidade de múltiplas perdas aumenta em janelas
extensas, causando perda de desempenho no TCP
Número de seqüência do TCP de 32 bits pode estourar
enquanto pacotes ainda estão na rede e pode causar
recebimento errôneo de duplicatas
– MSL (maximum segmente life) = TTL do pacote IP pode não ser
suficiente para garantir vida “curta” na rede
2**31 / B (bps) > MSL (s)
1,5 Mbps
→ 104 s (~ 3h)
10 Mbps
→ 1700 s (~ 30 min)
100 Mbps
→ 170 s (~ 2 min)
1 Gbps
→ 17 s
– Alta velocidade é a causa e não o tamanho da janela em si
Estimativa de RTT inválida com amostragem de um pacote por
janela em janelas grandes, necessitando de novos métodos
– RTTM (Round-Trip Time Measurement) – usa timestamp no campo de
opções
Options
RTTM (Round-Trip Time Measurement)
Transmite timestamp em todo pacotes
Timestamp recebido por último no recoptor é
ecoado para o transmissor
Recebendo o eco de timestamp, transmissor
calcula com precisão o RTT, pois sabe o
instante em que o timestamp ecoado foi
originalmente transmitido
Estouro de sequenciamento
PAWS (PROTECT AGAINST WRAPPED
SEQUENCE NUMBERS)
– Usa timestamp adicionalmente ao número de sequência
– Todo pacote é transmitido com timestamp
Idéia geral: Descartar pacote como duplicata se
timestamp é inferior a algum valor recebido
recentemente na conexão
– Com timestamp incrementado a cada 1 ms, 32 bits
estouram em 24,8 dias, detetando pacotes recebidos como
duplicatas se tempo na rede inferior a este valor
– Pode ser aplicado a outros segmentos TCP como SYN e
SYNACK para detetar duplicatas; todavia RST não deve ter
timestamp e prevalecer sempre
Futuro do TCP: TCP sobre
pipes “longos, gordos”
Exemplo: segmentos de 1500 bytes, RTT de
100 ms, deseja vazão de 10 Gbps
Exige janela W = 83.333 segmentos no transmissor
Vazão em termos da taxa de perda:
W
1, 22 ⋅ MSS
=
RTT
RTT L
➜ L = 2 · 10-10 Uau!
– Perda de apenas 1 pacote a cada 5 x 109 pacotes ou equivalente,
uma perda a cada 1 2/3 horas! IRREAL!
Novas versões do TCP para alta velocidade, pois simplesmente
aumentar as janelas não é suficiente
TCP para alta velocidade
Problema central: TCP incrementa sua taxa
devagar (linear) e decrementa rápido
(exponencial)
Solução: subir mais rápido e descer mais
lento
TCP alta velocidade
HS-TCP (Sally Floyd)
– RFC 3649: HighSpeed TCP for Large Congestion Windows.
Experimental,2003.
– RFC 3742: Limited Slow-Start for TCP with Large
Congestion Windows. Experimental, 2004.
Scalable TCP (cambridge)
Fast TCP (caltech)
BIC/CUBIC (NCSU)
Layered TCP (LTC)
Hamilton TCP (HTCP)
...
A maioria altera o envio do TCP
O que é HS-TCP
Semelhante a TCP padrão quando cwnd é baixo
– 38 MSS correspondendo a taxa de perda de 10-3
Mais agressivo que TCP padrão quando cwnd é alto
– Usa uma resposta modificada e procura atingir W=83.000 MSS
com perda de 10-7 (mais realista que 10-10)
W=
0,12 MSS
L0,835
– Número de RTTs entre perdas sendo dado por
1
= 12, 7W 0,2
LW
HS-TCP
L (perda)
W
RTTs entre perdas
10-2
12
8
10-3
38
25
10-4
263
38
10-5
1795
57
10-6
12279
83
10-7
83291
123
10-8
574356
180
10-9
3928088
264
10-10
268646653
388
HS-TCP emulando N conexões TCP
Em janelas grandes, High Speed TCP se comporta como um
agregado de N conexões TCP
N conexões paralelas têm uma janela agregada de
N
1, 22 ⋅ MSS
L
Em janelas grandes, High Speed TCP se comporta como um
agregado de N conexões TCP
N (W ) = 0, 23W 0,4
W
N(W)
1
1
10
1
100
1,4
1.000
3,6
10.000
9,2
100.000
23
HS-TCP versus TCP
HS-TCP em ambiente de descarte no
fim da fila (drop-tail)
Drop-tail (FIFO): pacote é descartado quando o
buffer de tamanho fixo se esgota
Gerência Ativa de fila: pacote é descartado antes do
buffer esgotar
– E.G. RED, onde tamanho médio da fila é monitorado
Em ambiente FIFO
– Assuma que TCP aumenta sua taxa para P pacotes/RTT
– Então P pacotes irão possivelmente ser descartados para
evento de congestionamento na conexão
HS-TCP requer Slow-Start Limitado
Slow-start até atingir uma janela de 83.000
pacotes não funciona bem
– Dezenas de milhares de pacotes descartados de
uma única janela de dados
– Recuperação lenta da conexão TCP
Alteração do mecanismo de Slow-Start
– Agente TCP set max_ssthresh_N
– Durante o slow-start inicial, aumenta cwnd de no
máximo N pacotes por RTT.
Slow-Start Limitado
Outras alterações
Precaução contra reordenamento de pacotes
– Esperar mais de 3 ACKs duplicados antes de
retransmitir
Recuperar de forma mais suave quando um
pacote retransmitido é perdido
Outras questões
Iniciar com janelas CWND já grandes?
Fazer uso de banda imediatamente
disponível?
Quick-Start
Especifica no campo de opção IP do pacote SYN a
taxa desejada de transmissão
– Roteadores intermediários decrementam contador TTL e
podem decrementar o valor da taxa inicial desejada se
necessário
O receptor da conexão retorna informação no
ACKSYN
–
–
–
–
O emissor sabe se todos os roteadores participaram
O emissor tem uma medida do RTT
O emissor pode setar a janela inicial cwnd
O TCP do emissor continua a operação padrão AIMD
Opção Quick-Start
Retorno de todos os roteadores ao longo da
rota seria necessário
Opção seria apenas aprovados pelos
roteadores que estão subutilizados
Nenhum estado por fluxo mantido no
roteador
Questões
Vale a pena a complexidade?
Mecanismo suficiente em diferentes
topologias e diferentes condições de tráfego?
Eqüidade
Necessidade premente?
Na realidade não
– Abrir N conexões simultâneas
– Usar MulTCP (agregado de N conexões virtuais)
Contudo, pode-se fazer melhor
– Melhor flexibilidade (sem ter que configurar N)
– Melhor escalabilidade (com variedade de banda e
de fluxos
– Competir mais equitativamente com TCP
existente (para cenários onde TCP pode obter a
banda disponível)
Referências para TCP
Stevens, W. Richard, TCP/IP Illustrated,
Volume 1 The Protocols, Addison-Wesley,
1994
RFC-793, Transmission Control Protocol,
1981
RFC-1323, RCP Extensions for High
Performance, 1992
RFC-2001, TCP Slow Start, Congestion
Avoidance, Fast Retransmit, and Fast
Recovery Algorithms, 1997
RFC-2018, TCP Selective Acknowledgement

Documentos relacionados

TCP - Suporte UFRJ

TCP - Suporte UFRJ quando podem pegar carona em dado Todavia, o envio de segmentos acumulando vários caracteres teclados pode gerar desconforto na movimentação brusca do mouse em terminais X

Leia mais