Sei sulla pagina 1di 36

Transmission Control Protocol

(TCP)
Andrea Detti
Transmission Control Protocol (TCP)
Trasferisce un flusso informativo bi-direzionale non
strutturato tra due host ed effettua operazioni di
multiplazione e de-multiplazione
E un protocollo con connessione
Funzioni eseguite
controllo e recupero di errore
controllo di flusso
ri-ordinamento delle unit informative
indirizzamento di una specifica applicazione allinterno di un host
Unit dati TCP
Il TCP interpreta il flusso dati come sequenza di ottetti
La sequenza di ottetti suddivisa in segmenti
Source Port
HLEN Reserved Code bits
Acknowledegment Number
Sequence Number
Checksum
0 4 8 16 24
Destination Port
Window
Options (if any) Padding
Data
Urgent Pointer
Data
31
Unit dati TCP
Source Port (16 bit) e Destination Port (16 bit)
identificano i processi sorgente e destinazione dei dati
Sequence Number (32 bit)
numero di sequenza in trasmissione
contiene il numero di sequenza del primo byte di dati contenuti nel
segmento a partire dall'inizio della sessione TCP
Acknowledgement Number (32 bit)
numero di sequenza in ricezione
se ACK=1, contiene il numero di sequenza del prossimo byte che il
trasmettitore del segmento si aspetta di ricevere
possibile la modalit piggybacking di riscontro
Unit dati TCP
HLEN (4 bit)
contiene il numero di parole di 32 bit contenute nell'intestazione TCP
l'intestazione TCP non supera i 60 byte ed sempre un multiplo di 32
Reserved (6 bit)
riservato per usi futuri, per ora contiene degli zeri
Window (16 bit)
larghezza della finestra in byte (controllo di flusso orientato al byte)
il numero di byte che, ad iniziare dal valore del campo Ack Number, il
trasmettitore del segmento in grado di ricevere
Checksum (16 bit)
protegge lintero segmento pi alcuni campi dellheader IP (es. indirizzi)
Unit dati TCP
Control bit (6 bit)
URG
uguale a 1 quando il campo urgent pointer contiene un valore significativo
ACK
uguale a 1 quando il campo Ack Number contiene un valore significativo
PSH
uguale a 1 se i dati devono essere consegnati all'applicazione ricevente
prescindendo dal riempimento dei buffer di ricezione
RST
uguale a 1 in caso di richiesta di reset della connessione
SYN
uguale a 1 solo nel primo segmento inviato durante la fase di
sincronizzazione fra le entit TCP
FIN
uguale a 1 quando la sorgente ha esaurito i dati da trasmettere
Unit dati TCP
Urgent Pointer (16 bit)
contiene il numero di sequenza dellultimo byte dei dati che devono
essere consegnati urgentemente al processo ricevente
tipicamente sono messaggi di controllo (out-of-band traffic)
Options (di lunghezza variabile)
sono presenti solo raramente
Esempi:
End of Option List, No-operation, MaximumSegment Size (MSS)
Padding (di lunghezza variabile)
impone che l'intestazione abbia una lunghezza multipla di 32 bit
La connessione TCP
Il protocollo TCP un protocollo di tipo orientato alla
connessione
Le due entit TCP remote si sincronizzano scambiandosi
il proprio numero di sequenza iniziale, che rappresenta il
numero a partire dal quale tutti i byte trasmessi saranno
numerati in sequenza
La sincronizzazione necessaria per risolvere potenziali
situazioni anomale dovute alla non affidabilit del
protocollo IP
La connessione TCP
Una connessione TCP identificata dalla coppia di
socket associati agli endpoint tra cui vengono scambiate
informazioni
Un endpoint pu essere impegnato allo stesso tempo in
pi connessioni TCP
(TCP; 21; 151.100.37.13) (TCP; 21; 128.10.2.3) (TCP; 21; 18.26.0.36)
Connessione
1
Connessione
2
Endpoint
A
Endpoint
A
Endpoint
B
Endpoint
B
Endpoint
C
Endpoint
C
La connessione TCP
La sincronizzazione avviene con un meccanismo detto
three way handshaking
TCP
B
TCP
B
SYN_segment (SYN,ISN=x)
ACK_segment (ACK, Ack N.=y+1)
SYN_segment (SYN, ACK, Ack N.=x+1, ISN=y)
TCP
A
TCP
A
ACK (Ack N.=y+1)
La connessione TCP
Nella fase di rilascio le due vie sono chiuse
indipendentemente
FIN_segment (FIN, FSN=x)
FIN_segment (FIN, FSN=y)
ACK (ACK, Ack N.=x+1)
TCP
A
TCP
A
Chiusura della via A-B
Chiusura della via B-A
TCP
B
TCP
B
Controllo di errore
Il TCP prevede esclusivamente riscontri positivi (ACK)
La ritrasmissione dei segmenti innescata dalla
mancata ricezione degli ACK entro un fissato tempo
limite (Timeout)
Il dimensionamento del timeout un aspetto critico nelle
prestazioni del TCP
se il suo valore troppo piccolo, alcuni segmenti in ritardo a causa di
congestione, potrebbero considerati persi e quindi ri-trasmessi con
conseguente perdita di efficienza
se il suo valore troppo grande, la risposta ad un evento di perdita
sarebbe troppo lenta con conseguente perdita di efficienza
Controllo di errore
Il Retransmission TimeOut (RTO) determinato con uno
schema adattativo
Il TCP misura dinamicamente il Round Trip Time (RTT)
RTT = ritardo tra linvio di un segmento e la ricezione del relativo ACK
Il valore di RTO scelto maggiore del valore medio
osservato del RTT
La misura del RTT affetta dai seguenti errori
lemissione degli ACK da parte del ricevente pu essere non immediata
se stata effettuata una ritrasmissione impossibile distinguere se
lACK si riferisce alla trasmissione iniziale o alla ritrasmissione
lo stato di congestione della rete pu cambiare molto rapidamente
Calcolo del Retransmission TimeOut (RTO)
Il Round Trip Time misurato segmento per segmento
il RTT di un segmento misurato come lintervallo di tempo tra listante di
emissione del segmento e quello di ricezione del relativo ACK
Nella specifica originale si utilizza una media pesata di
RTT, denominata Smoothed Round Trip Estimate (SRTT)
il valore di SRTT al passo k dato da (il valore raccomandato per il
parametro 0.9)
Il valore di RTO dato da (il valore raccomandato per il
parametro detto delay variance factor 2)
+ = + + SRTT(k 1) SRTT(k) (1 ) RTT(k 1)
= RTO(k) SRTT(k)
Calcolo di RTO
Il metodo di misura standard di SRTT non adatto a
situazioni in cui la varianza del ritardo di rete elevata
in caso di bit rate basso, il valore di SRTT dipende dalla dimensione
del segmento
in caso di cambio repentino di carico in rete
in caso di ritardi nellinvio dei riscontri da parte del ricevente
La stima della deviazione standard di RTT troppo
complessa
Si stima la Deviazione Media Pesata (MSDEV) di RTT
Calcolo di RTO
Algoritmo di calcolo di RTO(k)
calcolo dellerrore
calcolo del valore della media pesata (il valore raccomandato di g 0.125)
calcolo della deviazione media pesata (il valore raccomandato di h 0.25)
calcolo di RTO
= Err(k) RTT(k) SRTT(k 1)
= + SRTT(k) SRTT(k 1) g Err(k)
[ ]
= + MSDEV(k) MSDEV(k 1) h Err(k) MSDEV(k 1)
= + RTO(k) SRTT(k) 4 MSDEV(k)
Exponential RTO Backoff
Determina il valore di RTO associato ad un segmento
ritrasmesso
consigliabile variare RTO sui segmenti ritrasmessi perch
lesaurimento del timeout dovuto a congestione in rete
consigliabile variare il valore di RTO delle sorgenti che sono
coinvolte nella congestione per evitare ritrasmissioni contemporanee
Una sorgente TCP duplica il valore di RTO per ogni
ritrasmissione (exponential backoff process) fino ad un
valore massimo di 64. Quindi se RTO
0
lo RTO della
prima trasmissione, il valore utilizzato alla i-esima
ritrasmissione
=
i
i 0
RTO max(2,64) RTO
Karn Algorithm
In caso di ritrasmisssione TCP non distingue se il
riscontro si riferisce (retransmission ambiguity problem)
alla prima trasmissione del segmento, timeout troppo elevato con
perdita di efficienza e inutili ritardi
alla ritrasmissione del segmento, timeout troppo breve e quindi
ritrasmissioni eccessive e nuovi errori di misura
Lalgoritmo di Karn stabilisce di
non considerare il RTT dei segmenti ritrasmessi
usare come RTO il valore dato dalla procedura di exponential backoff
ricalcolare il nuovo valore di RTO solo al momento della ricezione di un
ACK di un segmento non ritrasmesso
Esempio di calcolo di RTO
0.00
2.00
4.00
6.00
8.00
10.00
12.00
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
RTO
RTT
Segmenti
T
e
m
p
o

(
s
)
Controllo di Flusso e di Congestione
Il controllo di flusso ha lo scopo di limitare il tasso di
generazione dei dati da parte di un host
tale meccanismo indispensabile in Internet dove sono presenti host
di potenzialit molto diverse
Il controllo della congestione ha lo scopo di recuperare
situazioni di sovraccarico nella rete
Controllo di Flusso
TCP utilizza un controllo di flusso a finestra basato su
finestra scorrevole di ampiezza variabile
credit allocation scheme
Il controllo di flusso opera a livello di ottetti (byte)
Gli ottetti sono numerati sequenzialmente a partire dal
numero scelto durante il 3-way handshaking
Un riscontro (ACK Number=X e Window=W) significa che
sono riscontrati tutti gli ottetti ricevuti fino a quello numerato con X-1
il trasmittente autorizzato a trasmettere fino a ulteriori w ottetti,
ovvero fino allottetto numerato con X+W-1
Controllo di Flusso
Puntatori per il controllo a finestra lato emittente
Puntatori per il controllo a finestra lato ricevente
Initial Sequence
Number
Ultimo ACK Number
(SND.UNA)
Next SN
to send
Limite superiore della finestra
(SND.UNA+SND.WND)
Ottetti trasmessi
e riscontrati
Ottetti trasmessi non
ancora riscontrati
Ottetti autorizzati alla
trasmissione
Ottetti trasmessi
Initial Sequence
Number
Ultimo ottetto
riscontrato
Ultimo ottetto ricevuto
RCV.NXT
Limite della finestra
(RCV.NXT+RCV.WND)
Ottetti ricevuti
e riscontrati
Ottetti ricevuti non
ancora riscontrati
Ottetti autorizzati alla
ricezione
Ottetti ricevuti
Controllo di Flusso
S
N
= 1001 (200)
S
N
= 1201 (400)
S
N
= 1601 (200)
1000 1001 2400 2401
Pronto a ricevere 1400 ottetti
1000 1601 2400 2401
1600 1601 2601 2600
Ricevuti 600 ottetti
disponibilit per altri 200 ottetti
A

=

1
6
0
1
;

W

=

1
0
0
0
1000 1001 2400 2401
Finestra iniziale 1400 ottetti
S
N
= 1801 (200)
1000 2001 2400 2401
1600 1601 2601 2001 2600
Ricevuti ulteriori 400 ottetti
1600 1601 2601 2001 2600
Finestra incrementata di 200 ottetti
2600 2601 4000 4001
Ricevuti ulteriori 600 ottetti
disponibilit per altri 1400 ottetti
S
N
= 2001 (200)
S
N
= 2401 (200)
S
N
= 2201 (200)
1600 1601 2600 2601
Finestra esaurita
A
= 2601; W
= 1400
2600 2601 4000 4001
Finestra incrementata di 1400 otteti
Controllo di Flusso
Il throughput (S) di una
connessione TCP dipende da:
dimensione della finestra (W)
ritardo di propagazione (D)
bit rate (R)

<

>
=
4 / RD W se
D R
W 4
4 / RD W se 1
S
0,2
0,4
0,6
0,8
1
W=65.535 ottetti
W=4
.
W
T
r
o
u
g
h
p
u
t
0
1 10
1
R
.
D (bit)
10
2
10
3
10
4
10
5
10
6
10
7
10
8
1 Ggb/s Ethernet
(100 m)
Satellite link
(1.544 Mbit/s m)
SDH STM-1
(NY-Tokyo)
Controllo di congestione
Ha lo scopo di recuperare situazioni di sovraccarico
nella rete limitando il traffico offerto alla rete
Difficolt:
il protocollo IP (protocollo di rete) non possiede alcun meccanismo per
rivelare e controllare la congestione
il TCP un protocollo end-to-end e pu rivelare e controllare la
congestione solo in modo indiretto
la rete non coopera con gli host per il controllo della congestione
la conoscenza dello stato della rete da parte delle entit TCP
imperfetta a causa dei ritardi di rete
le entit TCP che usano la rete non cooperano tra loro, anzi competono
per luso delle risorse distribuite
Controllo di congestione
In caso di congestione, il controllo di flusso a finestra
protegge implicitamente, oltre al destinatario, anche la
rete
se la rete congestionata arriveranno meno riscontri e quindi saranno
emessi un numero minore di segmenti
il meccanismo adattativo di timeout evita ritrasmissioni che
porterebbero ad un aumento della congestione invece che ad una sua
diminuzione
Il controllo di flusso end-to-end riesce ad adattare il rate
di emissione della sorgente a quello corrispondente al
bottleneck della rete (propriet di self-clocking)
Controllo di congestione
I bottleneck in rete possono essere
logici, causati dalla congestione nei router
fisici, causati dalla limitazione della banda nei collegamenti fisici
dovuti al ricevitore, per la limitata capacit elaborativa del ricevitore
Il controllo di flusso di TCP
non in grado di distinguere il tipo di bottleneck di rete
non pu stabilire il tipo di contromisura pi adatta
TCP utilizza la stima di RTT come misura di congestione,
lo scadere del timeout di ritrasmissione considerato un
sintomo di congestione
Controllo di congestione
Bottleneck
allinterno della rete
A
r
A
s
P
r
Segmenti dati
Destinazione Sorgente
A
b
ACK
P
b
Bottleneck
al ricevitore
Segmenti dati
ACK
P
b
P
r
A
b
A
r
A
s
Destinazione Sorgente
Controllo di congestione
Sono definiti dei meccanismi addizionali
Esistono varie implementazioni di TCP
Berkeley
Tahoe
Reno
W
i
n
d
o
w
Slow Start
Congestion Avoidance
Fast retransmit
Fast recovery
Meccanismo
TCP
Berkeley
TCP
Tahoe
TCP
Reno


Slow Start
Tende ad evitare linsorgere di congestione durante la
fase di avvio di una connessione
Regola lemissione dei segmenti allinizio di una
connessione e ha lo scopo di raggiungere il ritmo di
emissione a regime senza causare congestione
Si definisce una Congestion Window (cwdn) (misurata in
segmenti) che tende ad aumentare progressivamente
La congestion window limita il valore della finestra fino a
che questo non sia fissato dalla ricezione degli ACK
Slow Start
SMSS = Sender Maximum Segment Size
cwnd iniziale (IW) = SSMS
FLIGHT SIZE: ammontare di bytes
trasmessi ma non ancora confermati
RECEIVER WINDOW (rwnd) : lultima
ampiezza di finestra di ricezione
comunicata dal ricevitore
Durante lo slow start, alla ricezione di un
ACK, la finestra cambia come segue
come segue:
cwnd=min[cwnd+SMSS,rwnd]
NOTA: max(rwnd) = 2^16 bytes
A B
A
=
1
0
1
A
=201
A=301
A
=
40
1
A=501
A
=
6
0
1
A
=
7
0
1
CWDN=1
CWDN=2
CWDN=3
CWDN=4
CWDN=5
CWDN=6
CWDN=7
CWDN=8
SN=1
SN
=101
SN=201
SN=301
SN
=401
S
N
=501
S
N
=
6
0
1
SN=701
S
N
=
8
0
1
S
N
=901
SN
=1001
S
N
=
110
1
SN
=1201
S
N
=
1
3
0
1
S
N
=
1
4
0
1
Congestion Avoidance
Regola lampiezza della finestra in caso di congestione
di rete che non permette di arrivare al valore di finestra
indicato dal ricevitore
Una procedura identica a quella di slow start troppo
aggressiva in caso di congestione
Il meccanismo di congestion avoidance
innescato in caso di esaurimento del timeout e quindi di
ritrasmissione di un segmento
richiede la definizione di un parametro detto Slow Strat Threshold Size
(ssthresh)
Congestion Avoidance
Procedura
il valore iniziale di ssthresh dato da
si esegue la procedura slow start fino
a che
se cwdn sstresh, cwdn
incrementato di SSMS*SSMS/cwdn
(bytes) ad ogni ricezione di ACK
lo scopo quello di aumentare la
finestra al pi di un segmento ogni
round trip time

=


FlightSize
ssthresh min
2
cwdn ssthresh
Round Trip Time
C
w
d
n

(
i
n

s
e
g
.
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0
5
10
15
0
20
Timeout
esaurito
ssthresh
Fast Retransmit
Migliora le prestazioni in caso di perdita di un singolo
segmento
velocizza la ritrasmissione del segmento perso
evita la ritrasmissione dei segmenti successivi
Procedura:
il ricevitore emette un ACK non appena rivela un fuori sequenza ed emette
un ACK per ogni segmento successivo fuori sequenza
la ricezione di tre ACK duplicati considerato sintomo di un segmento perso
la scelta di tre ACK tende ad evitare il caso in cui il segmento successivo a
quello riscontrato abbia subito un ritardo cos elevato da aver causato un fuori
sequenza
la ritrasmissione del segmento inizia non appena sono ricevuti quattro ACK
del segmento precedente anche se il timeout non scaduto
Fast Recovery
Evita linnesco della procedura standard di congestion
avoidance associata alla procedura di fast
retransmission
larrivo di ACK multipli assicura che i segmenti ricevuti sono stati
ricevuti e quindi la congestione stata superata
Rispetto alla procedura di congestion avoidance
il valore iniziale di cwdn maggiore
lincremento di cwdn sempre lineare
si evita la fase iniziale di aumento esponenziale di cwdn
Fast Recovery
La procedura la seguente
quando sono stati ricevuti tre ACK duplicati
si pone
sstresh = FlightSize/2
viene ritrasmesso il segmento perduto (se consentito dal valore della finestra)
per tener conto dei segmenti gi ricevuti si pone
cwdn = sstresh + 3
ogni volta che arriva un ACK duplicato, il valore di cwdn viene incrementato di
uno e trasmesso (se possibile) un segmento
quando viene ricevuto un ACK non duplicato (riscontro cumulativo)
si pone
cwdn = ssthresh
la finestra aggiornata come nella procedura di congestion avoidance