TCP: Visão geral
RFCs: 793, 1122, 1323, 2018, 2581
 Transmissão de dados bi-
 Ponto-a-ponto:
Um emissor, um receptor
 Cadeia de bytes ordenada e
fiável:
 Não há “fronteiras nas
mensagens”
direccional:

 pipelined:


Transmissão de dados bidireccional na mesma
ligação
MSS: maximum segment
size
 Orientado-à-ligação:

handshaking (transferência
de mensagens de controlo)
TCP dimensão das janelas de
• Inicia o estado do emissor
controlo de congestão e de
e do receptor antes de
transferir os dados
fluxo ajustável
 Buffers no emissor e receptor  Fluxo controlado:

socket
door
Aplicação
Escrita de dados
Aplicação
Leitura de dados
TCP
Buffer de envio
TCP
Buffer de recepção
segmento

socket
door
Emissor não sobrecarrega o
receptor
3: Nível de Transporte
3b-1
TCP: estrutura do segmento
32 bits
# porto origem # porto destino
Número sequência
Número acknowledgment
head not
UA P R S F
len used
checksum
rcvr window size
ptr urgent data
Opções (dimensão variável)
application
data
(variable length)
3: Nível de Transporte
3b-2
TCP: estrutura do segmento
32 bits
 Nº de sequência e Nº de ACKS:



Contagem por bytes de dados
Não segmentos !
Head Length em palavras de 32 b

Dimensão sem extensões 20 B
 RCVR Window Size:

Nº de Bytes que o receptor espera
receber
 Opções:

Negociação de parâmetros
• MSS (usual 1500; 536; 512 B)
• Factor de escala p/ janela em
ligações de alto débito
# porto origem # porto destino
Número sequência
Número acknowledgment
head not
UA P R S F
len used
checksum
rcvr window size
ptr urgent data
Opções (dimensão variável)
application
data
(variable length)
3: Nível de Transporte
3b-3
TCP: estrutura do segmento
32 bits

Flags de sinalização de informação
urgente:



Flags de controlo



U – URG: dados que o nível superior do
emissor sinalizou como urgentes
P – PSH: O receptor deve passar os
dados para o nível superior imediata/
A – ACK: valor válido no campo ACK
R- RST; S- SYN; F – FIN:
estabelecimento e terminação da
ligação
Ptr Urgent data

Apontador para o último byte de dados
que contém dados urgentes
# porto origem # porto destino
Número sequência
Número acknowledgment
head not
UA P R S F
len used
checksum
rcvr window size
ptr urgent data
Opções (dimensão variável)
application
data
(variable length)
3: Nível de Transporte
3b-4
TCP nº de sequência e ACK
Seq. #’s:
Host B
Host A
 Nº da cadeia de
bytes do primeiro
Utilizador
byte do segmento de
digita
dados
‘C’
ACKs:
Sistema Terminal
 Nº de seq. do
recebe ‘C’ e
próximo byte
e ecoa de volta
esperado do outro
o ‘C’
lado
 ACK acumulativo
Sistema Terminal
Q: Como é que o receptor
confirma (ACK)
processa segmentos for a
e ecoa o ‘C’
de ordem ?
 A: A especificação
TCP não é clara,
tempo
deixando esta
questão para a
Cenário simples de Telnet
implementação
3: Nível de Transporte
3b-5
TCP: cenários de retransmissão
tempo
Host A
Host B
X
loss
Perda de ACK
Host B
Seq=100 timeout
Seq=92 timeout
timeout
Host A
tempo
Timeout antecipado,
ACKs acumulativo
3: Nível de Transporte
3b-6
TCP: transferência de dados fiável
evento: dados recebidos
das aplicações dos
níveis superiores
criação, envio do segmento
wait
wait
for
for
event
event
Emissor simplificado, assume:
•Transferência de dados
uni-direcccional
•Sem controlo de fluxo
•Sem controlo de congestão
evento: temporizador expira para
o segmento com o nº de seq. y
Retransmisssão do segmento y
evento: ACK recebido
com ACK y
ACK processado
3: Nível de Transporte
3b-7
TCP:
00
01
sendbase = initial_sequence number
nextseqnum = initial_sequence number
02
03
loop (forever) {
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
transferência
de dados
fiável
Emissor TCP
simplificado
25
26
switch(event)
event: data received from application above
create TCP segment with sequence number nextseqnum
start timer for segment nextseqnum
pass segment to IP
nextseqnum = nextseqnum + length(data)
event: timer timeout for segment with sequence number y
retransmit segment with sequence number y
compute new timeout interval for segment y
restart timer for sequence number y
event: ACK received, with ACK field value of y
if (y > sendbase) { /* cumulative ACK of all data up to y */
cancel all timers for segments with sequence numbers <
sendbase = y
}
else { /* a duplicate ACK for already ACKed segment */
increment number of duplicate ACKs received for y
if (number of duplicate ACKS received for y == 3) {
/* TCP fast retransmit */
resend segment with sequence number y
restart timer for segment y
}
} /* end of loop forever */
3: Nível de Transporte
3b-8
TCP Controlo de fluxo
Controlo de fluxo
Emisor não sobrecarrega
o receptor por
transmitir
demasiadamente rápido
receptor:


Informa explicitamente o
emissor da quantidade de
buffer livre, de forma
dinâmica
RcvWindow:
• campo usado do
cabeçalho TCP
emissor:
Não controla
o que se
passa na rede

Mantém a quantidade de
dados transmitidos e não
confirmados (unACKed)
inferior ao valor mais
recente que recebeu da
janela RcvWindow
3: Nível de Transporte 3b-10
TCP Controlo de fluxo - receptor
RcvBuffer = dimensão do buffer de recepção do TCP
RcvWindow = quantidade de espaço disponível no buffer
LastByteRcv
LastByteRead
LastByteRead = nº do último byte lido do buffer pela aplicação do lado B
LastByteRcv = nº do último byte recebido da rede e colocado no buffer do lado B
LastByteRcv – LastByteRead <= RcvBuffer
RcvWindow = RcvBuffer – [LastByteRcv – LastByteRead]
3: Nível de Transporte 3b-11
TCP Controlo de fluxo - emissor
RcvBuffer = dimensão do buffer de recepção do TCP
RcvWindow = quantidade de espaço disponível no buffer
LastByteSend= nº do último byte enviado para a rede
LastByteAck = nº do último byte que foi confirmada a recepção
LastByteSend – LastByteAcK <= RcvWindow
receptor:


Sinaliza o emissor RcvWindow = 0
Não tem mais informação para enviar para o emissor
emissor:

Não pode enviar mais informação !
Solução:

TCP “obriga” o emissor a enviar um segmento de 1 B para
obrigar o receptor a responder
3: Nível de Transporte
3b-12
TCP Round Trip Time eTimeout
Q: como estabelecer o
valor de timeout do
TCP?
 Superior a RTT
nota: RTT vai variar
 Muito pequeno: timeout
antecipado
 Retransmissões
desnecessárias
 Muito longo: reacção
lenta à perda de
segmentos

Q: Como estimar RTT?
 SampleRTT: tempo medido desde
a transmissão do segmento para o
nível de rede até à recepção do
ACK


Ignora retransmissões,
Faz o ACK acumulativo dos
segmentos
 SampleRTT vai variar,


Estimar RTT de forma “suave”
Usar várias medidas recentes
e não apena o valor corrente
de SampleRTT
3: Nível de Transporte 3b-13
TCP Round Trip Time e Timeout
EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT
 Exponential weighted moving average
 Influência de uma amostra decresce com uma rapidez
exponencial
 Valor típico de x: 0.125
Parametrizando o timeout
 EstimatedRTT mais “margem de segurança”
 Grande variação em EstimatedRTT -> margem de
segurança superior
Timeout = EstimatedRTT + 4*Deviation
Mede a variação de SampleRTT em relação ao EstimatedRTT
Deviation = (1-x)*Deviation +
x*|SampleRTT-EstimatedRTT|
3: Nível de Transporte
3b-14
TCP Gestão das ligações
Recordar:
O emissor TCP
estabelece uma ligação antes
de iniciar a transmissão dos
segmentos
 Inicialização das variáveis
TCP:



Nº de sequência
Buffers
Informação de janela de
controlo de fluxo
(RcvWindow)

Cliente: Inicia a ligação
socket_fd=socket(Domínio, Tipo, 0)
connect(socket_fd,estr_ender,dim_estr_ender)
Domínio =PF_INET(comunicação entre STs IPVv4)
Tipo = SOCK_STREAM (TCP) ou SOCK_DGRAM (UDP)
estr_end = domínio; porto; end IP destino)

Servidor: contactado pelo cliente
socket_fd=socket(Domínio, Tipo, 0)
bind(socket_fd1,estr_endereços,dim_estr_ender)
listen (socket_fd1, num_lig_em_espera)
new_fd=accept(socket_fd1, estr_endereços, dim)
estr_end = domínio; porto; end IP origem)
3: Nível de Transporte 3b-15
TCP Gestão das ligações: Estabelecimento
Passo 1: Ligação pedidda
 Sistema Terminal do cliente
envia segmento SYN =1 para o
servidor


Não tem campo de dados
Define o nº de seq. original
• client_isn
Passo 3:
Ligação confirmada
Passo 2:
 Sistema Terminal do Servidor
recebe o segmento de
controlo SYN =1



 Sistema Terminal do cliente
envia segmento SYN = 0 para
o servidor


Ligação concedida

Não tem campo de dados
Confirma a recepção do seg.
• Ack = client_isn+1
Define o nº de seq. inicial do
servidor
• Server_isn
Responde com o segmento de
controlo SYNACK
Reserva buffers e variáveis
Confirma a recepção do seg.
• Ack = server_isn+1
3: Nível de Transporte 3b-16
TCP Gestão das ligações: Estabelecimento
cliente
servidor
pedido
Reserva
buffers e
variáveis
estabelecimento
Reserva
buffers e
variáveis
tempo
3: Nível de Transporte 3b-17
TCP Gestão das ligações: Fecho

Cliente: fecha a ligação
close(sock_fd)

Servidor: fecha a ligação com o cliente
close(sock_fd1)
Passo 1/2: Pedido de fim de
Passo 3/4: Pedido de fim de
 Sistema Terminal do cliente
 Sistema Terminal do servidor envia
ligação do cliente
envia o segmento de controlo
FYN = 1 para terminar a
ligação TCP
 Cancela a reserva de
recursos
 Sistema Terminal do servidor
confirma a recepção do FYN
do cliente
 Envia ACK
ligação do servidor
o segmento de controlo FYN = 1
para terminar a ligação TCP
 Cancela a reserva de recursos
 Sistema Terminal do cliente
confirma a recepção do FYN do
cliente
 Envia ACK
 Espera um tempo até dar a
ligação por terminada
3: Nível de Transporte 3b-18
TCP Gestão das ligações: Fecho
cliente
servidor
Fechando
Tempo de espera
Fechando
Fechou
Fechou
3: Nível de Transporte 3b-19
TCP Gestão das ligações: ciclo de vida
Ciclo de vida do
servidor TCP
Ciclo de vida do cliente TCP
3: Nível de Transporte 3b-20
Princípios de controlo de congestão
Congestão:
 Informalmente: “demasiadas fontes enviam
informação a um ritmo muito superior ao que a
rede é capaz de processar”
 Diferente do controlo de fluxo!
 Sintomas:
 Perda de pacote (buffer overflow nos routers)
 Atrasos elevados (queueing nos buffers dos
router)
 Problema da lista dos TOP 10!
3: Nível de Transporte 3b-21
Causas e custos do controlo de congestão: cenário 1
 Dois emissores
 Dois receptores
 Um router
 Buffer infinito
 Sem
retransmissões
 Atraso elevado
em situação de
congestão
 Débito máximo
atingível
3: Nível de Transporte 3b-22
Causas e custos do controlo de congestão: cenário 2
 um router
 buffers
finitos
 Emissor retransmite pacotes perdidos
3: Nível de Transporte 3b-23
Causas e custos do controlo de congestão: cenário 2
= l
out (goodput)
in
 2 - Retransmissões ocorrem quando há perdas:
 1 - Situação ideal :
l
l > lout
in
 3 - Retransmissões de pacotes atrasados (não perdidos) faz
maior para o mesmo
lout
l
in
1
1
2
3
“custos” da congestão:
 Mais trabalho (retrans) para um dado “goodput”
 Retransmissões desnecessárias: ligação transporte múltiplas
cópias do pacote
3: Nível de Transporte
3b-24
Causas e custos do controlo de congestão: cenário 3
 4 emissores
 Caminho com vários nós
 timeout/retransmissões
Q: o que acontece
quando lin e l
in
aumenta ?
 A  C:
R1  R2
 B  D: R2  R3
 C  A: R3  R4
 D  B: R4  R1
3: Nível de Transporte 3b-25
Causas e custos do controlo de congestão: cenário 3
 A  C:
R1  R2
 B  D: R2  R3
 C  A: R3  R4
 D  B: R4  R1
 lin pequeno



Mais dados são transmitidos na
rede e entregues ao destino
Overflow de buffers é raro
lout também aumenta
 lin e l’in muito elevado (B->D)



Tráfego de A que chega a R2 pode ser aproximadamente R
Tráfego de B->D que chega a R2 é muito superior ao tráfego proveniente de A->C).
Quando maior for o tráfego de B->D maior é a probabilidade do tráfego de A->C
encontrar o buffer de R2 cheio com um pacote de B
3: Nível de Transporte 3b-26
Causas e custos do controlo de congestão: cenário 3
Outro “custo” da congestão:
 Quando um pacote se perde, qualquer capacidade
de transmisssão que já tenha sido usada para o
transmitir é perdida!
3: Nível de Transporte 3b-27
Aproximações ao controlo de congestão
Duas aproximações ao controlo de congestão:
Controlo de congestão
extremo-a-extremo:
 Não há feedback da rede
 Congestão inferida pelos
Sistemas Terminais,
quando detectam perdas na
rede
 Aproximação do TCP
Controlo de congestão
assistido pela rede:
 Routers fornecem
feedback aos Sistemas
Terminas
 Um único bit indica a
congestão
 Envio explicíto do ritmo
a que o emissor pode
enviar
3: Nível de Transporte 3b-28
Caso de estudo: Controlo de congestão ATM ABR
ABR: available bit rate:
 “Serviço elástico”
 Se o caminho do emissor
não está carregado:
 Emissor deve usar a
largura de banda
disponível
 Se o caminho do emissor
não está congestionado :
 Emissor envia apenas
ao ritmo mínimo
garantido
RM (resource management)
cells:
 Enviadas pelo emissor,
intercaladas com as células de
dados
 Bits nas células RM activadas
pelos switches (“networkassisted”)
 NI bit: não aumentar o
ritmo (congestão média)
 CI bit: indicador de
congestão
 Células RM cells retornadas
pelo receptor com os bits
intactos
3: Nível de Transporte 3b-29
Caso de estudo: Controlo de congestão ATM
ABR
 ER (explicit rate) campo de 2 bytes numa célula RM


switch congestionado pode diminuir o valor de ER da célula
Emissor envia ao ritmo mínimo suportado pelo caminho
 EFCI bit na célula de dados:


EFCI = 1 indica congestão no switch
Se as células de dados que precedem a célula RM têm EFCI ctivo,
receptor activa CI na célula RM de retorno
 Bits CI e NI

Um switch pode activar o bit NI/CI, o qual deverá ser retornado
ao emissor na próxima célula RM
3: Nível de Transporte
3b-30
Controlo de congestão no TCP
 Controlo extremo-a-extremo (não assistido pela rede)
 Ritmo de transmissão limitado pela dimensão da janela de
congestão, Congwin:
Congwin
 W segmentos, cada um com MSS bytes enviados em cada RTT:
Débito =
w * MSS
Bytes/sec
RTT
3: Nível de Transporte 3b-31
Controlo de congestão no TCP
 “probing” para a
largura de banda
utilizável:



Idealmente: transmite
táo rápido quanto
possível sem perdas
(Congwin tão grande
quando possível)
aumenta Congwin até
perdas (congestão)
perdas: diminui
Congwin, então aumenta
o probing
 Duas fases
 slow start
 congestion avoidance
 Variáveis importantes:
 Congwin
 threshold
• Define o valor de limiar
(threshold) entre duas
fases slow start e
controlo de congestao
3: Nível de Transporte 3b-32
TCP Slowstart
Host A
initialize: Congwin = 1
for (each segment ACKed)
Congwin++
until (loss event OR
Congwin > threshold)
RTT
Algoritmo de Slowstart
Host B
 Aumenta exponencialmente (por RTT)
o tamanho da janela
 Evento de perda:


Tempo
TCP Tahoe : Timeout
TCP Reno: Timeout e/ou três ACKs
duplicados (recebidos antes do timeout)
3: Nível de Transporte 3b-33
TCP Congestion Avoidance
Congestion avoidance
/* slowstart is over
*/
/* Congwin > threshold */
Until (loss event) {
every w segments ACKed:
Congwin++
}
threshold = Congwin/2
Congwin = 1
1
perform slowstart
1: TCP Reno ultrapassa o slowstart (recuperação rápida ) após 3 ACKs duplicados
3: Nível de Transporte 3b-34
AIMD –Additive Increase Multiplicative Decrease
TCP Fairness
Método de evitar
congestão:


Incrementa a janela
1 unidade por RTT
Decrementa a janela
2 unidades por
evento de perda
Ligação
TCP 2
Objectivo de justiça:
se uma ligação estrangulada
é partilhada por N sessões
TCP, cada uma delas deve
obter 1/N da capacidade da
ligação
Ligação TCP 1
bottleneck
router
Capacidade = R
3: Nível de Transporte 3b-35
Porque é que o TCP é justo ?
Duas sessões em competição:
 Aumento aditivo:

Aumento origina um declive de 1, quando o débito aumenta
 Decréscimo multiplicativo:

Débito decresce proporcionalmente
R
Evitar a
congestão:
aumento
aditivo
Largura de Banda
partilhada
igualmente
D
B
Perdas: janela decresce por um factor 2
C
A
Débito da ligação 1
R
3: Nível de Transporte 3b-36
Modelo de latência do TCP
Q: Quanto tempo demora a receber um objecto um dum Web servidor
depois de enviar um pedido ?


Estabelecimento duma ligação TCP
Fase de transferência de dados
Pressupostos:
 Ligação Cliente e o Servidor não é partilhada com outro tipo de tráfego

TCP ou UDP.
 Sem retransmissões


Sem perdas
Sem corrupção
 Headers desprezáveis
 Tempo de transmissão

Só é significativo para os segmentos de dimensão máxima
 Controlo de fluxo:

Não afecta os resultados
 Controlo de congestão

Threshold tão elevado que não é atingido
3: Nível de Transporte 3b-37
Modelo de latência do TCP
Notações:
 R = Ritmo de transferência [b/s]
 W= Dimensão da janela de congestão [segmentos]
 S = MSS Dimensão do maior segmento [bits]
 O = Dimensão do objecto [bits]
Dois casos a considerar:
 Servidor recebe o ACK do 1º segmento antes de transmitir
todos os dados da janela

WS/R > RTT + S/R
 O Servidor transmite os dados da janela antes de receber o
ACK do 1º segmento; espera ACK antes de prosseguir a
transmissão

WS/R < RTT + S/R
3: Nível de Transporte 3b-38
Modelo de latência TCP
Caso 1: latencia = 2RTT + O/R
W=4
Nº de janelas que é
preciso para txd o objecto
• K:= O/WS
Caso 2: latencia = 2RTT + O/R
+ (K-1)[S/R + RTT - WS/R]
W=2
3: Nível de Transporte 3b-39
Modelo de latência TCP: Slow Start
 Supondo que a janela cresce de acordo com o SlowStart.
 A latência de um objecto de dimensão O é:
Latency  2 RTT 
O
S
S

 P  RTT    (2 P  1)
R
R
R

Em que P é o nº de vezes que o TCP no servidor bloqueia (stall)
P  min{Q, K  1}
-em que Q é o nº de vezes que o servidor pára se o objecto tiver uma
dimensão infinita
- K é o nº da janela que cobre o objecto
3: Nível de Transporte 3b-40
Modelo de latência TCP: Slow Start
Exemplo:
O/S = 15 segmentos
K = 4 janelas
initiate TCP
connection
request
object
first window
= S/R
RTT
second window
= 2S/R
Q=2
third window
= 4S/R
P = min{K-1,Q} = 2
Servidor pára P=2 vezes.
fourth window
= 8S/R
complete
transmission
object
delivered
time at
client
time at
server
3: Nível de Transporte 3b-41
Modelo de latência TCP: Slow Start
S
 RTT  Tempo desde que o servidor inicia a transmiss ão do objecto até que recebe o ACK
R
initiate TCP
connection
2 k 1
S
 Tempo para transmiti r a janela K
R

S
k 1 S 

RTT

2
 T empode
R

R

espera apósa transmissão da janela K
request
object
first window
= S/R
RTT
second window
= 2S/R
third window
= 4S/R
P
O
Latência   2 RTT   Tem poParagemp
R
p 1
P
O
S
S
  2 RTT   [  RTT  2 k 1 ]
R
R
k 1 R
O
S
S
  2 RTT  P[ RTT  ]  (2 P  1)
R
R
R
fourth window
= 8S/R
complete
transmission
object
delivered
time at
client
time at
server
3: Nível de Transporte 3b-42
Chapter 3: Summary
 Princípios do serviço do nível
de transporte:
multiplexagem/demultiplexagem
 Transferência de dados fiável
 Controlo de fluxo
 Controlo de congestão
 Instanciação e implementação na
Internet
 UDP
 TCP

Próximo:
 Deixar a periferia
da rede
 Entrar no ”core” da
rede
3: Nível de Transporte 3b-43
Download

chapter3b_2002(port).