Sei sulla pagina 1di 29

Funzioni del protocollo TCP

Prof. Ing. Carla Raffaelli


Anno accademico 2004-2005

Il TCP

• Il TCP e’ un protocollo orientato alla connessione


utilizzato per gestire il trasferimento end-to-end di
informazioni e renderlo affidabile
• Schema di riferimento

applicazione applicazione
byte byte
TCP TCP
Send buffer Receive buffer
segmenti

1
La famiglia dei protocolli TCP/IP

Applicazioni
e-mail,ftp,telnet,www…

TCP UDP

ARP
ICMP IP
RARP

IEEE 802-Ethernet-X25-Aloha ecc.

Collegamento fisico

Transmission Control Protocol - RFC 793

• Protocollo di tipo connection-oriented


• Ha lo scopo di realizzare una comunicazione full-
duplex affidabile e di tipo end-to-end fra processi
applicativi di due host, facenti parte di un sistema di
reti interconnesse
• E’ progettato assumendo che:
– il livello inferiore sia in grado di fornire solamente un
semplice ed inaffidabile servizio di trasferimento dei
pacchetti di tipo connection-less (esattamente quello che
fa l’IP)

2
Scopo del TCP
• Affidabilità del collegamento: il TCP garantisce la
completa correttezza nella consegna dei dati a meno
di partizioni della rete dovute a guasti ai collegamenti
fisici
• A tale fine utilizza:
– numerazione sequenziale dei dati, prendendo come unità
di riferimento il byte
– conferma esplicita della ricezione di ogni blocco di byte da
parte del ricevitore (acknowledge)
– ritrasmissione dei dati di cui non viene confermata la
ricezione

Funzioni del TCP


• Controllo dell’errore
– per il riconoscimento degli errori di trasmissione viene
effettuato un controllo mediante 16 bits
• Controllo di flusso:
– meccanismo a finestra che permette al trasmettitore di
regolare il flusso dati inviati in relazione allo stato del
ricevitore
• Controllo di congestione
– meccanismo a finestra che permette al trasmettitore di
regolare il flusso di dati in base allo stato percepito della
rete

3
Procedura connection-oriented
• Per garantire affidabilità e controllo di flusso, il TCP
lavora in modo connection-oriented
– l’instaurazione della connessione
– la chiusura della connessione
• Multiplazione: permette a più processi di utilizzare le
funzioni di comunicazione contemporaneamente

Connessioni
• Una connessione è costituita da una coppia di end-
points:
– il numero di porta, concatenato con il numero IP dell’host
costituisce un end-point
– una coppia di end-points identifica in modo univoco una
particolare connessione, così che un singolo end-point può
essere condiviso tra più connessioni sulla stessa macchina
– E’ un identificativo che equivale concettualmente al Service
Access Point (SAP) secondo la terminologia OSI, per
identificare il processo destinazione
– L’host che inizia la connessione deve comunicare a quale porta
si vuole connettere e qual è il numero di porta da lui utilizzato

4
Connessioni e Multiplazione

Host C
Host A
25 23 TCP
300 301 TCP
137.204.59.1 IP
137.204.59.10 IP

Host B

301 TCP

137.204.59.20 IP

Attivazione della connessione TCP

• La procedura viene innescata dalla active open lato client


• Viene inviato un segmento TCP con SYN=1. Il client sceglie
anche un numero di sequenza iniziale per il segmento TCP.
Il segmento viene incapsulato in un datagramma IP e inviato
al server
• Il server risponde con un segmento TCP con SYN=1 e
predispone i buffer per la ricezione
• Quando il client riceve la conferma dal server predispone le
risorse per la trasmissione e invia un segmento TCP con
SYN=0.
• La connessione e’ stabilita

5
Apertura connessione
TCP A TCP B
CLOSED LISTEN
SYN-
SYN-SENT SeqN=100 SYN=1 ACK=0 SYN-
SYN-RECEIVED
ESTABLISHED SYN-
SYN-RECEIVED
ESTABLISHED ESTABLISHED
ESTABLISHED ESTABLISHED

• TCP A attiva una porta e cerca di connettersi ad una


well-known socket di TCP B, che è in attesa
• TCP A inviaun pacchetto di apertura con il bit SYN=1
ed il suo numero di sequenza iniziale

Apertura connessione
TCP A TCP B
CLOSED LISTEN
SYN-
SYN-SENT SeqN=100 SYN=1 ACK=0 SYN-
SYN-RECEIVED
ESTABLISHED SeqN=300 AckN=101 SYN=1 ACK=1 SYN-
SYN-RECEIVED
ESTABLISHED SeqN=101 AckN=301 SYN=0 ACK=1 ESTABLISHED
ESTABLISHED DATI ESTABLISHED

• TCP B risponde con ACK=1 e SYN=1 e propone il


suo numero di sequenza
• TCP A conferma l’avvenuta apertura della
connessione con un ACK=1

6
Three ways handshake
TCP A TCP B
CLOSED LISTEN
SYN-
SYN-SENT SeqN=100 SYN=1 ACK=0 SYN-
SYN-RECEIVED
ESTABLISHED SeqN=300 AckN=101 SYN=1 ACK=1 SYN-
SYN-RECEIVED
ESTABLISHED SeqN=101 AckN=301 SYN=0 ACK=1 ESTABLISHED
ESTABLISHED DATI ESTABLISHED

• Three ways handshake è robusto anche se si tenta di


instaurare connessioni contemporaneamente
• TCP tende ad ignorare un vecchio pacchetto di inizio
connessione (esempio un duplicato o un ritardo a livello IP),
una volta instaurata la connessione
• Messaggio di reset usato per recuperare l’errore

Connessione a server web


• La porta di riferimento sul server e’ la porta 80
• Il server distingue i segmenti dei differenti client dagli
indirizzi IP di sorgente e dai numeri di porta di
sorgente
• I server web creano in genere un nuovo processo per
ogni nuova connessione
P1 P2
Porta X
Porta Y PORTA 80
IP address
IP address del server
del client

7
Formato del pacchetto TCP
32 bit

Source Port Destination Port

Sequence number

Acknowledge number

Data U A P R S F
Offset Reserved R C S S Y I Window
G K H T N N

Checksum Urgent Pointer

Opzioni Padding

Dati

Formato del pacchetto TCP (2)


• Source/Destination port: numero delle porte
sorgente e destinazione
• Sequence number: numero di sequenza del primo
byte del pacchetto; se è presente il bit SYN questo è
il numero di sequenza iniziale su cui sincronizzarsi
• Acknowledge number: se il bit ACK è a 1 allora
questo numero contiene il numero di sequenza del
blocco di dati che il ricevitore si aspetta di ricevere
• Data offset: numero di parole di 32 bit
dell’intestazione TCP; indica dove iniziano i dati
• Reserved: sei bit riservati per uso futuro

8
Formato del pacchetto TCP (3)
• Control bit: sono 6 bit di controllo
- URG posto a 1 se si deve considerare il campo
Urgent Pointer
- ACK posto a 1 se si deve considerare il campo
Acknowledge
- PSH posto a 1 serve per la funzione di push, per la
consegna immediata delle informazioni
- RST posto a 1 per resettare la connessione
- SYN posto a 1 per sincronizzare i numeri di
sequenza
- FIN posto a 1 per indicare la fine dei dati

Formato del pacchetto TCP (4)


• Window: il numero di byte, partendo dal numero di sequenza
di quello contenuto nel campo acknowledge, che il ricevitore è
disposto a ricevere
• Checksum: controllo errore sull’intestazione e dati
• Urgent Pointer: contiene puntatore a dati urgenti
eventualmente presenti nel pacchetto (es. per abortire
programma remoto in esecuzione), ha senso se il bit URG è
posto ad 1
• Options: contiene opzioni per la connessione
• Padding: bit aggiuntivi per fare in modo che l’intestazione sia
multipla di 32 bit

9
La famiglia dei protocolli TCP/IP

Applicazioni
e-mail,ftp,telnet,www…

TCP UDP
ARP
ICMP IP
RARP

IEEE 802-Ethernet-X25-Aloha ecc.

Collegamento fisico

User Datagram Protocol - RFC 768


32 bit

Source Port Destination Port

Message Lenght Checksum (optional)

Dati

• UDP è un protocollo di tipo connectionless a livello 4, per tutte


quelle applicazioni per cui la completa gestione della
connessione TCP non è necessaria
• Usato da quelle applicazioni che trasmettono pacchetti singoli,
senza necessità di acknowledgement

10
User Datagram Protocol - RFC 768 (2)
• Utilizzati solamente i campi di source e destination
port
• Anche per UDP esiste il concetto di porta, ed
aggiunge ad IP la possibilità di distinguere diverse
applicazioni entro uno stesso host
• Port 7: echo;
• Port 69: trivial file transfer protocol (TFTP)

Riepilogo

• Per attivare una connessione TCP


occorre:
– Attivare le socket per i processi client e
server
• Definire la quadrupla porta-client, IP-client,
porta-server, IP-server
– Effettuare la procedura TCP di handshake a
tre vie

11
Controllo di flusso nel TCP
• Il trasmettitore non deve saturare il ricevitore
• Utilizzo un meccanismo a finestra scorrevole
• Differenze dall’analogo meccanismo a livello di linea:
– Ritardi di andata e ritorno non costanti
– Possibilita’ di pacchetti fuori sequenza
– Diversa velocita’ delle connessioni
• Nell’intestazione del pacchetto TCP e’ contenuto il campo
advertised window

Meccanismo a finestra

• Al piu’ W pacchetti non confermati possono


essere in trasmissione
• La dimensione della finestra viene messa a punto
dinamicamente sulla base di informazioni dal
ricevente e dalla rete
– Minimo tra advertised window (dal ricevente) e
congestion window (dalla situazione di rete)

Sender’s window

1 2 3 4 5 6 7 8 9 10 11 12 13

Acks received Not transmitted

12
Controllo di flusso a finestra

Sender’s window

1 2 3 4 5 6 7 8 9 10 11 12 13

L’ack per il pacchetto 5


consente alla finestra di
Ack 5 spostarsi di due posizioni
cosi’ che i pacchetti 9 e 10
possono essere trasmessi

1 2 3 4 5 6 7 8 9 10 11 12 13

Sender’s window

Buffer di trasmissione
• Il buffer di trasmissione viene riempito dai byte generati dalla
applicazione
• Il trasmettitore non puo’ avere piu’ di AW byte in attesa di
riconoscimento
Appl.
Buffer di trasmissione

Last byte acknowledged Last byte sent Last byte written

t
• Effective window
– EW= AW-(last byte sent-last byte acknowledged)

13
Buffer di ricezione
• Il processo ricevente legge byte dal buffer di ricezione
• I dati possono arrivare fuori ordine

Appl.
Buffer di ricezione

last byte read next byte expected last byte received

t
• Il valore di AW e’ lo spazio disponibile nel buffer del ricevitore di
dimensione B
– AW= B – (last byte received – last byte read)

Attuazione del controllo


• Come un ricevitore lento blocca un trasmettitore piu’ veloce
– Il buffer di ricezione si riempie -> AW va a 0
– Il trasmettitore blocca la trasmissione perche’ EW va a 0
• Ripresa della trasmissione
– Il processo ricevente legge dal buffer
– AW diventa >0
– Il trasmettitore inizia a trasmettere
– Appena arrivano gli ack si libera il buffer di trasmissione
– Il processo trasmittente inizia a trasmettere
• Durante il blocco il trasmettitore continua ad inviare segmenti
di 1 byte per avere risposta dal ricevitore

14
Controllo di congestione
• TCP cerca di adattare la dimensione della finestra in
relazione alle condizioni della rete
• Idea base: se si verifica congestione in rete si rallenta
la trasmissione
– Quando si verifica una perdita si riduce W
– Quando gli ack arrivano correttamente W viene aumentata

Congestion window
• Il TCP mantiene una variabile detta CW (Congestion Window)
• MAXWIN = min(CW, AW)
• EW= MAXWIN- (last byte sent-last byte acknowledged)
• TCP da’ un valore a CW in base alla percezione di
congestione che riceve dalla rete.
– Non c’e’ in genere comunicazione esplicita di CW

15
Dimensione ideale della finestra
• Wid= ritardo*banda
– Rappresenta la quantita’ di informazione che utilizza al 100% la tratta tra
trasmettitore e ricevitore

• Se W < Wid: si spreca banda

• Se W > Wid: e’ necessario accodare nei router intermedi e cresce il ritardo


e quindi potenzialmente anche la perdita
• Massimo throughput ottenibile: W/RTT
– RTT: Round Trip Time

Valori della finestra ideale


• Ipotesi RTT= 100 ms
• Calcolo del prodotto banda x ritardo

Banda Banda x ritardo


T1 (1.5 Mbit/s) 18 KB
Ethernet (10 Mbit/s) 122 KB
T3 (45 Mbit/s) 549 KB
FDDI (100 Mbit/s) 1.2 MB
STS-3 (155 Mbit/s) 1.8 MB
STS-12 (622 Mbit/s) 7.4 MB
STS-24 (1.2 Gbit/s) 14.8 MB

• Con 16 bit di receiver windows si arriva la massimo a 64 KB


• Opzione window scale consente di moltiplicare il valore della AW per un fattore
di scla concordato alla instaurazione della connessione (RFC 1323)

16
Incremento additivo/decremento moltiplicativo AIMD
• La causa principale per cui un pacchetto va perduto
e’ la congestione
• Quando scatta il time out la sorgente dimezza il
valore di CW (multiplicative decrease)
• Per incrementare CW si usano modalita’ di tipo
additivo (additive increase)

Meccanismi di incremento della finestra


• Slow start
– Si applica inizialmente, W cresce di 1 per ogni ack ricevuto
– Consente un incremento rapido della finestra
(esponenziale) e quindi del throughput
• Congestion avoidance
– Dopo aver raggiunto la soglia W si incrementa di 1 per
RTT (1/W ogni ack)
– Evita di saturare la banda disponibile

17
Esempio di aggiornamento della finestra

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

W=1 all’inizio
W=(2..3) dopo il primo ack (1 RTT)
W=(3..5) dopo il secondo ack (2 RTT)
W=(4..7) dopo il terzo ack (2 RTT)
W=(8..15) dopo il gruppo di 4 ack (3 RTT)

L’ampiezza della finestra raddoppia ad ogni RTT

Esempio di evoluzione della finestra

14 Congestion
Congestion Window size

12 avoidance

10
(segments)

8 Slow start threshold


cwnd
6 (ssthresh)
4 Slow start
2
0
0 1 2 3 4 5 6 7 8
Time (round trips)

18
Meccanismo di ack
• Gli ack sono cumulativi
• Un ack si riferisce a tutti i dati ricevuti in modo
contiguo
• TCP assegna numeri di sequenza per byte
• Per semplicita’ si assumono qui numeri di sequenza
di pacchetti
• Ack(i) rappresenta l’ack per il pacchetto i

Ack cumulativi

data ack

Un nuovo ack viene generato solo quando viene ricevuto un


nuovo pacchetto in sequenza

19
Ack ritardati

• Un ack e’ ritardato fino a che


– e’ stato ricevuto un ulteriore pacchetto
– Scatta un timer di ack (200 ms)
Nuovo ack generato
• Si riduce il traffico di ack all’arrivo del pacchetto 37
anziche’ del pacchetto 36

Perdita di pacchetto

• Il TCP riconosce la perdita di pacchetto mediante


– Presenza di ack duplicati
– Scadere del time out di ritrasmissione

(delayed acks) No ack

20
Time out (RTO)

• Se un ack non arriva per un certo tempo il trasmettitore


conclude che il pacchetto e’ andato perduto
• Restringe la finestra a 1 e inizia la trasmissione slow start
• La ritrasmissione avviene a partire dal pacchetto piu’
vecchio non riconosciuto
• Problema: occorre tempo per accorgersi della perdita
(ordine del secondo contro ordine di qualche ms per la
trasmissione)
• La soglia viene posta alla meta’ del valore che aveva la
finestra prima della perdita

Effetto del time out

After timeout
Congestion window (segments)

25
cwnd = 20
20

15

10
ssthresh = 8 ssthresh = 10
5

0
12

15

20

22

25
0

Time (round trips)

21
Descrizione in pseudo codice
1) cwnd=1MSS
rwnd=AW ssthresh= rwnd, finestra
imposta dal ricevitore
2) cwnd=cwnd+1 ad ogni ack fino a che
cwnd>ssthresh go to 3)
Slow start se si ha RTO:
ssthresh=min(cwnd,rwnd)/2
cwnd=1
go to 2)
3) cwnd=cwnd+1/cwnd ad ogni ack
se si ha RTO:
Congestion avoidance ssthresh=min(cwnd,rwnd)/2
cwnd=1
go to 2)

Ack duplicati

Dup ack
data ack

22
Fast retransmit/recovery
• Gli ack duplicati sono una indicazione del fatto che puo’
esserci stata perdita
– Se si ricevono tre ack per lo stesso pacchetto si effettua ritrasmissione
(fast retransmit)
– Si riduce la soglia alla meta’ del valore corrente della finestra
– Si pone la finestra pari al valore della soglia+3 (per tenere degli ack
duplicati ricevuti)
– Il segmento supposto perduto viene ritrasmesso e si entra nella fase di
fast recovery
– Si trasmettono segmenti nuovi
– fino a che non arriva l’ack per il pacchetto perduto la finestra di
congestione viene incrementata di 1 per ogni ack ricevuto come nella
fase di slow start
– Quando arriva l’ack per il pacchetto perduto finisce la fase di fast
recovery, il trasmettitore entra in congestion avoidance partendo dal
valore impostato per ssthr

Finestra di congestione: fast retransmit/fast recovery

Valore massimo della finestra


tre ack duplicati: ssthr=cw/2
slow start
cw=ssthr+3
Finestra di congestione (segmenti)

fast retransmit
ssthr: coda vuota

Tempo (s)
Transitorio iniziale con perdite multiple

23
Occupazione della coda di trasmissione

Occupazione coda (segmenti)

Tempo (s)

Fairness del meccanismo AIMD


• Due connessioni condividono la banda di un singolo
link con capacita’ B
– B1+B2 = B (al massimo)
– Equita’: B1=B2

In presenza di perdita si attua


La riduzione moltiplicativa (retta per l’origine che passa per 2)
4
B2
2
5
3 In congestion avoidance la finestra (e quindi anche il throughput)
1 aumenta in maniera additiva (retta a 45 gradi)

B1

24
Altre versioni di TCP

• Problema delle perdite multiple nel RTT


– Fast recovery puo’ portare al time out in caso di perdite multiple
nel RTT
• TCP New Reno
– Rimane in fast recovery fino a che tutte le perdite nella finestra
non sono state recuperate
– Recupera una perdita per RTT
• TCP- SACK (Selective Acknowledgment)
– Fornisce informazioni sui pacchetti ricevuti fuori sequenza
– Puo’ recuperare piu’ pacchetti perduti per RTT

TCP New Reno RFC2582


• Se in una finestra vengono perduti piu’ segmenti si innesca un
processo di riduzione della cwnd che spesso porta il
trasmettitore a non poter piu’ trasmettere segmenti per
generare dupack di ritorno.
– Scatta il time out e si innesca lo slow start
• New Reno in presenza di ack parziale assume che il
segmento immediatamente successivo a quello riconosciuto
sia andato perduto e lo ritrasmette
• Fast recovery inizia con tre ack duplicati e finisce quando sono
stati riconosciuti tutti i segmenti in trasmissione nel momento
in cui e’ iniziato il fast retransmit.
• Gli ack parziali decrementano il valore della finestra corrente
della quantita’ di dati riconosciuta, la incrementano di un
segmento e ri-innescano il fast recovery

25
TCP with selective acknowledgements
• TCP SACK: il ricevitore indica al trasmettitore quali segmenti
sono stati ricevuti correttamente su un certo insieme in modo
che il trasmettitore ritrasmette solo quelli
• Solo quando nessun segmento trasmesso richiede ulteriori
ritrasmissioni vengono trasmessi nuovi segmenti
• In SACK viene mantenuta una nuova variabile pipe che indica
il numero di segmenti in trasmissione
• Nella fase di fast recovery vengono inviati segmenti (nuovi o
ritrasmessi) solo se pipe <cwnd
– Il valore della pipe viene incrementato ogni volta che viene trasmesso
un segmento e decrementato ogni volta che si riceve un ack.
• La fase di fast recovery termina quando tutti i segmenti in
corso di trasmissione all’inizio della procedura sono stati
riconosciuti

TCP Vegas
• La dinamica della finestra di trasmissione si basa su una stima
del throughput ottenuta nel modo seguente:
– Expected=Windowsize/BaseRTT, dove BaseRTT e’ il minimo valore di
RTT riscontrato
– Per ciascun segmento viene misurato RTT e il numero di byte
trasmessi in tale tempo
• Se la differenza tra il throughput atteso e il throughput calcolato e’ minore di
α si incrementa linearmente la finestra cwnd nel RTT successivo;
• Se la differenza e’ superiore a β cwnd viene decrementato linearmente nel
RTT successivo
– Slow start modificato: cerca di individuare il valore corretto della finestra
senza incorrere in una perdita
• Quando il throughput corrente e’ inferiore al throughput atteso si passa da
ss a ca
• La ritrasmissione avviene dopo un ack duplicato se la stima di
RTT e’ superiore al valore del time out

26
IETF RFCs
• 2018 SACK
• 2481 Explicit congestion notification
• 2414-6 increasing inizial window size
• 2581 slow start, congestion avoidance,fast
retransmit, fast recovery
• 2582 New Reno
• 2988 Retransmission timer (RTO) ccomputation

Riepilogo: versioni del TCP


• Tahoe
– Slow-start
– Congestion avoidance
– Fast retransmit
• Reno
– Implementa anche il fast recovery
• New Reno
– Fast recovery per recuperare perdite multiple
• SACK
– Ritrasmissione selettiva
• VEGAS
– Stima della finestra di congestione

27
Ritrasmissione adattativa
• Differentemente da quanto avviene sulla singola linea RTT
non e’ costante
• Il timeout che regola il meccanismo a finestra del TCP deve
essere determinato in modo dinamico
• L’idea base e’ di mantenere aggiornato un valore medio del
RTT e di calcolare il time out in funzione di esso
• Ogni volta che il TCP invia un segmento registra il tempo e lo
sottrae al tempo di arrivo dell’ACK ad esso relativo ottenendo
la grandezza s-RTT
• La stima di RTT si ottiene con la seguente media pesata tra il
vecchio valore e il nuovo campione:
eRTT= α eRTT + (1-α) sRTT
α=0.125 valore tipico

• Tout=2eRTT

Associazione degli ACK ai segmenti trasmessi

• ACK e’ la conferma della ricezione dei dati e non di una


particolare trasmissione
– Se un pacchetto viene ritrasmesso piu’ volte non so con quale valore
dell’istante di partenza calcolare e-RTT

Sender Receiver Sender Receiver


Orig Orig
in al tra in al tra
nsm nsm
issio issio
n n
SampleRTT
SampleRTT

Retr
an smis ACK
sion
Retr
ansm
issio
n
ACK

(a) (b)

28
Algoritmo Karn/Partridge
• S-RTT viene misurato soltanto per i segmenti che
vengono inviati una volta sola
• Ad ogni ritrasmissione il TCP raddoppia il time out
– Comunque ogni volta che arriva l’ACK si ricalcola con
l’ultimo valore di eRTT secondo la formula
• Questo meccanismo e’ una forma di controllo di
congestione che fa si che il trasmettitore aspetti un
tempo via via piu’ lungo prima di ritrasmettere un
segmento per cui non ha ancora ottenuto riscontro

Variazioni di RTT (RFC2988)


• Se le variazioni tra i campioni di RTT sono piccole non ha
senso calcolare il time out secondo la formula Tout=2eRTT
Viene effettuato sulla base della stima del RTT e della
deviazione del valore del campione di RTT rispetto alla stima
• Si calcola la deviazione del valore del campione di RTT
(sRTT) rispetto alla stima eRTT:
devRTT= (1-β) devRTT+ β |sRTT-eRTT|
• Calcolo del time out
Tout= e-RTT +4 devRTT
• Se le fluttuazioni sono piccole time out e’ circa uguale a e-RTT
altrimenti time out > e-RTT in modo piu’ consistente
β=0.25 e’ il valore raccomandato

29