Politecnico di Milano
Facoltà di Ingegneria dell’Informazione
Il livello di trasporto
-Il protocollo UDP (User Datagram
Protocol)
-Il protocollo TCP (Transport Control
Protocol)
1
Servizio di trasporto
il livello di trasporto ha il compito di instaurare un
collegamento logico tra le applicazioni residenti su host
remoti
il livello di trasporto rende trasparente il trasporto fisico dei
messaggi alle applicazioni
Processi software
Applicativo (7)
Trasporto (4)
Rete (3)
HTTP
FTP
SMTP
…
UDP
TCP
IP
Livelli inferiori
2
Servizio di trasporto
il livello di trasporto è presente solo negli end
systems (host)
esso consente il collegamento logico tra processi
IP
applicativi
prot. appl.
TCP o UDP
DL
DL
Ph
Ph
prot. appl.
TCP o UDP
connessione logica tra end-system
IP
IP
Data Link
Data Link
Phisical
IP
IP
DL DL DL
DL DL DL
Ph
Ph
Phisical
Ph
Ph
Ph
Ph
3
Servizio di trasporto
Più applicazioni possono essere attive su
un end system
il livello di trasporto svolge funzioni di
multiplexing/demultiplexing
ciascun collegamento logico tra applicazioni è
indirizzato dal livello di trasporto
protocolli
applicativi
http ftp
smtp
entità di
trasporto
livello rete
indirizzo di liv.
trasporto
(SAP di livello 4)
protocollo di trasporto
http ftp
smtp
entità di
trasporto
livello rete
4
Indirizzamento: le porte
In Internet le funzioni di multiplexing/demultiplexing
vengono gestite mediante indirizzi contenuti nelle PDU di
livello di trasporto
tali indirizzi sono lunghi 16 bit e prendono il nome di porte
i numeri di porta possono assumere valori compresi tra 0
e 65535
i numeri noti sono assegnati ad applicativi importanti dal
lato del server (HTTP, FTP, SMTP, DNS, ecc.)
i numeri dinamici sono assegnati dinamicamente ai
processi applicativi lato client
numeri
noti
1023
0
numeri
assegnati
1024
numeri
dinamici
49151
49152
65535
5
Socket
Il numero di porta e l’indirizzo IP identifica in modo
univoco un processo applicativo (client o server) in
esecuzione su un host
la coppia di indirizzi prende il nome di indirizzo di socket
i socket dei due processi in colloquio sono sempre
contenuti negli header di livello IP e trasporto
appl.
appl.
trasporto
trasporto
livello rete
livello rete
6
Socket e connessioni
Un client si
connette alla porta
di un server SMTP
remoto (servizio di
posta elettronica)
CLIENT
Net. Add. 128.36.1.24
Port: 50358
Due client
CLIENT
accedono alla
stessa porta di un
CLIENT
server HTTP; non
Net. Add. 128.36.1.24
c’è comunque
Port 53358
ambiguità, perché
la coppia di socket Net. Add. 130.6.22.15
Port 59562
è diversa
SERVER
Net. Add. 130.42.88.22
Port: 25
SERVER
Net. Add. 130.42.88.22
Port 80
7
Servizio di trasporto
Il servizio di trasporto fornito può essere di
vari tipi
trasporto affidabile (garanzia di consegna dei
messaggi nel corretto ordine)
trasporto non affidabile (solo funzionalità di
indirizzamento)
trasporto orientato alla connessione
trasporto senza connessione
Nella suite IP sono definiti due tipi di
trasporto
TCP (Transmission Control Protocol), orientato
alla connessione e affidabile
UDP (User Datagram Protocol), senza
connessione e non affidabile
8
Applicazioni e trasporto
In base al tipo di applicazione viene scelto il tipo di
protocollo di trasporto più adatto
Source: Computer Networking, J. Kurose
9
Servizio di Buffering
I protocolli di trasporto sono implementati nei
più diffusi sistemi operativi
quando un processo viene associato ad una porta
(lato client o lato server) viene associato dal
sistema operativo a due code, una d’ingresso e
una d’uscita
Funzionalità di buffering dei dati
processo
applicativo
client
_____
_____
_____
_____
_____
porta 52300
_____
_____
_____
_____
_____
livello di
trasporto
processo
applicativo
server
porta 80
10
User Datagram Protocol (UDP) –
RFC 768
E’ il modo più semplice di usare le funzionalità di
IP
Non aggiunge nulla a IP se non:
indirizzamento delle applicazioni (mux/demux)
blando controllo d’errore sull’header (senza correzione)
… e quindi
è un protocollo datagram
non garantisce la consegna
non esercita nessun controllo (né di flusso, né
di errore)
32 bit
1
source port
destination port
length
checksum
8 BYTE
11
UDP: checksum
Il checksum si calcola in modo analogo a
quello del checksum IP
ma non viene calcolato solo considerando
l’header UDP, ma anche uno pseudo-header IP
ed i dati
32 bit
1
source IP address
destination IP address
tutti 0
protocol
N. porta sorgente
UDP length
N. porta destinazione
Lungh. trama
Checksum
pseudo-header
UDP-header
12
Transmission Control Protocol
(TCP) – RFC 793 et al.
Il TCP e’ un protocollo di trasporto che:
assicura il trasporto affidabile
in corretta sequenza
senza errori dei dati
Mediante TCP è possibile costruire applicazioni che si
basano sul trasferimento di file senza errori tra host
remoti (web, posta elettronica, ecc.)
E’ alla base della filosofia originaria di Internet: servizio
di rete semplice e non affidabile, servizio di trasporto
affidabile
Il TCP effettua anche un controllo di congestione endto-end che limita il traffico in rete e consente agli utenti
di condividere in modo equo le risorse
13
TCP: connection oriented
Il TCP è orientato alla connessione (connection oriented):
prima del trasferimento di un flusso dati occorre instaurare
una connessione mediante opportuna segnalazione
le connessioni TCP si appoggiano su una rete connectionless
(datagram)
le connessioni TCP sono di tipo full-duplex (esiste sempre un
flusso di dati in un verso e nel verso opposto, anche se
questi possono essere quantitativamente diversi)
setup
fase dati
tear down
14
TCP: controllo di flusso
Il TCP usa un controllo di flusso:
il flusso dei dati in ingresso in rete è regolato
sulla base della capacità del ricevitore di riceverli
il controllo è basato su una sliding window
sorgente
destinazione
utente
15
Il concetto di “finestra
scorrevole”
La finestra scorrevole definisce in
trasmissione i byte che possono essere
trasmessi senza dover aspettare alcun
ACK
16
Il concetto di finestra
scorrevole
ACK dei byte 1, 2 e 3
La finestra scorre a destra di un
numero di posizioni pari al numero di
byte riscontrati
17
TCP: controllo di congestione
il flusso dei dati in ingresso in
rete è anche regolato dalla
situazione di traffico in rete
se il traffico in rete porta a
situazioni di congestione il TCP
riduce velocemente il traffico in
ingresso
in rete non vi è nessun
meccanismo
per
notificare
esplicitamente le situazioni di
congestione
il TCP cerca di scoprire i
problemi di congestione sulla
base degli eventi di perdita dei
pacchetti
18
TCP: controllo di congestione
il meccanismo si basa ancora sulla sliding
window la cui larghezza viene
dinamicamente regolata in base alle
condizioni in rete (perdita di pacchetti)
tutti i flussi possono essere ridotti in modo
tale che la capacità della rete venga
condivisa da tutti in misura se possibile
uguale
19
TCP: flusso dati
Il TCP è orientato alla trasmissione di flussi continui di dati
(stream di byte)
il TCP converte il flusso di dati in segmenti che possono essere
trasmessi in IP
le dimensioni dei segmenti sono variabili
l’applicazione trasmittente passa i dati (byte) a TCP e TCP li
accumula in un buffer.
periodicamente, o quando avvengono particolari condizioni, il
TCP prende una parte dei dati nel buffer e forma un segmento
la dimensione del segmento è critica per le prestazioni, per cui
il TCP cerca di attendere fino a che un ammontare ragionevole
di dati è presente nel buffer di trasmissione
20
TCP: numerazione byte e
riscontri
Per assicurare il trasferimento affidabile del flusso
dati su una rete che non garantisce affidabilità il
TCP adotta un meccanismo per il controllo delle
perdite di pacchetti di tipo go-back-n
sistema di numerazione e di riscontro dei dati inviati
TCP numera ogni byte trasmesso, per cui ogni byte ha
un numero di sequenza
nell’header del segmento TCP è trasportato il numero
di sequenza del primo byte nel segmento stesso
il ricevitore deve riscontrare i dati ricevuti inviando il
numero di sequenza dell’ultimo byte ricevuto
correttamente ed in sequenza
se un riscontro non arriva entro un dato timeout, i
dati sono ritrasmessi
21
Segmento TCP
Source Port
Destination Port
16 bit
16 bit
Sequence Number
32 bit
20
byte
Acknowledgment Number
32 bit
HLEN Reserved
4 bit
Fino
a 40
byte
6 bit
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
Window
16 bit
Checksum
Urgent Pointer
16 bit
16 bit
Options e Padding
lunghezza variabile
Dati
lunghezza variabile
22
Header Segmento TCP (1)
Source port, Destination port: indirizzi di porta
sorgente e porta destinazione di 16 bit
Sequence Number: il numero di sequenza del primo
byte nel payload
Acknowledge Number: numero di sequenza del
prossimo byte che si intende ricevere (numero valido
solo se ACK valido)
HLEN (4 bytes words): contiene la lunghezza
complessiva dell’header TCP, che DEVE essere un
multiplo intero di 32 bit
Window: contiene il valore della finestra di ricezione
come comunicato dal ricevitore al trasmettitore
Checksum: CRC calcolato su un header virtuale
ottenuto aggiungendo gli indirizzi IP di sorgente e di
destinazione
23
Header Segmento TCP (2)
Flag:
URG: vale uno se vi sono dati ugenti; in questo caso urgent
pointer punta al primo byte dei dati urgenti all’interno dei
dati
ACK: vale uno se il pacchetto è un ACK valido; in questo
caso l’acknowledge number contiene un numero valido
PSH: vale uno quando il trasmettitore intende usare il
comando di PUSH; il ricevitore può anche ignorare il
comando (dipende dalle implementazioni)
RST: reset, resetta la connessione senza un tear down
esplicito
SYN: synchronize; usato durante il setup per comunicare i
numeri di sequenza iniziale
FIN: usato per la chiusura esplicita di una connessione
Options and Padding: riempimento (fino a multipli di 32
bit) e campi opzionali come ad esempio durante il setup per
comunicare il MSS (il valore di default è 536 byte)
24
Opzioni
Le opzioni sono aggiunte all’header TCP
Opzioni di 1 byte:
no operation: 00000001 (serve come
riempimento per avere un header multiplo di 32
bit)
end of option: 00000000 (byte di riempimento
finale)
Opzioni lunghe:
maximum segment size (MSS)
fattore di scala della finestra
timestamp
25
Opzioni: Maximum Segment
Size (MSS)
Definisce la dimensione massima del
segmento che verrà usata nella
connessione TCP
La dimensione è decisa dal mittente
durante la fase di setup
valore di default è 536 byte, il valore
massimo 65535 byte
Code
Length
MSS
(00000010)
(00000100)
16 bit
26
Opzioni: Fattore di scala
della finestra
Definisce il fattore di scala della
finestra (campo window dell’header
IP)
Il valore di default è 1 byte
con l’opzione il valore viene
modificato di un fattore pari a 2
elevato al valore contenuto nel
campo fattore di scala
Code
Length
Fattore di scala
(00000010)
(00000011)
8 bit
27
Opzioni: timestamp (poco
usata)
Usata per stimare il Round Trip Time (RTT)
La sorgente stampa l’istante di trasmissione
del pacchetto in Timestamp value
La destinazione stampa in Timestamp echo
reply il valore ricevuto in Timestamp value
quando invia un ACK per il segmento in
questione
28
Servizi e porte
La divisione tra porte note, assegnate e
dinamiche è la stessa che per UDP
Alcuni delle applicazioni più diffuse:
21
20
23
25
53
80
FTP signalling
FTP data
telnet
SMTP
DNS
HTTP
29
Setup delle connessioni
client
application
server
application
2. Active Open
TCP
1. Passive Open
TCP
Prima del call setup le applicazioni dal lato client e
dal lato server devono comunicare con il software
TCP
1. Il server fa una Passive Open, che comunica al
TCP locale che e’ pronto per accettare nuove
connessioni
2. Il client che desidera comunicare fa una Active
Open, che comunica al TCP locale che l’applicativo
intende effettuare una connessione verso un dato
socket
30
Setup delle connessioni
client
application
server
application
3. SYN, SN=67803
TCP
TCP
3. Il client TCP estrae a caso un numero di sequenza
iniziale (67803) e manda un messaggio di
SYNchronize (flag SYN=1) contenente questo numero
di sequenza. Eventualmente indica anche i parametri
della connessione (MSS, Windows Scale)
L’estrazione del numero iniziale serve a evitare
problemi nel caso in cui il setup non va a buon fine a
causa della perdita di pacchetti e un nuovo setup
viene iniziato subito dopo
31
Setup delle connessioni
client
application
server
application
4. SYN / ACK,
SN=5608, AN=67804
TCP
TCP
Quando riceve il SYN, il TCP server estrae a
caso un numero di sequenza iniziale (5608) e
manda un segmento SYN/ACK (flag SYN=1,
flag
ACK=1)
contenente
anche
un
acknowledgment number uguale a 67804,
per riscontrare il numero di sequenza iniziale
precedentemente inviato dal TCP client.
32
Setup delle connessioni
client
application
TCP
server
application
5. ACK,
SN=67804, AN=5609
TCP
Il TCP client riceve il messaggio SYN/ACK del
server, e invia un ACK per il 5609. Nel
payload
inserisce
i
primi
dati
della
connessione con numero di sequenza del
primo byte pari a 67804. Inserisce anche la
dimensione della finestra del server.
33
Setup delle connessioni
client
application
server
application
7. Connection Open
6. Connection Open
TCP
TCP
Il TCP client notifica all’applicazione che
la connessione e’ aperta
Quando il TCP server riceve l’ACK del
TCP client, notifica al suo applicativo che
la connessione e’ aperta
34
Setup delle connessioni
(sommario)
client
application
server
application
6. Connection Open
2. Active Open
7. Connection Open
1. Passive Open
TCP
TCP
3. SYN, SN=67803
4. SYN / ACK,
SN=5608, AN=67804
5. ACK,
SN=67804, AN=5609
35
Set delle connessioni
(summary)
Source: TCP/IP Protocol Suite,
B. Forouzan.
36
Tear down (chiusura) delle
connessioni
client
application
server
application
1. FIN, SN=127504
TCP
2. ACK, AN=127505
TCP
1. Il TCP che chiude la connessione invia
un messaggio di FIN (flag FIN=1) con gli
ultimi dati
2. Il TCP dall’altra parte invia un ACK per
confermare
37
Tear down (chiusura) delle
connessioni
client
application
server
application
SN=8763
TCP
TCP
SN=9001
La connessione rimane comunque aperta
nell’altra direzione e quindi il TCP dall’altra
parte può continuare ad inviare dati
38
Tear down (chiusura) delle
connessioni
client
application
server
application
3. FIN, SN=9024
TCP
4. ACK, AN=9025
TCP
3. Infine, il TCP dall’altra parte chiude la
connesssione invia un messaggio di FIN
(flag FIN=1)
4. Il TCP che aveva già chiuso la
connessione in direzione opposta invia un
ACK finale per confermare
39
Tear down delle connessioni
client
application
server
application
TCP
TCP
1. FIN, SN=120893
2. ACK,
SN=8763, AN=120894
3. FIN, SN=9025
4. ACK, AN=9026
40
Reset della connessione
La connessione può anche essere
chiusa senza scambio di messaggi
nei due versi
E’ possibile infatti settare il flag di
RESET nel segmento e interrompere
la connessione in entrambe le
direzioni
Il TCP che riceve un RESET chiude la
connessione interrompendo ogni
invio di dati
41
Implementazione del
controllo di flusso
Il TCP ricevente controlla il flusso di quello
trasmittente
Lato ricevitore:
Buffer di ricezione: accumula i byte ricevuti e
non ancora assorbiti dall’applicazione
Lato trasmettitore:
Buffer di trasmissione: accumula i byte in
attesa di essere trasmessi
42
Controllo di flusso: lato
ricevitore
100
Receiver Window (RCVWND):
spazio del buffer in ricezione
disponibile per ricevere nuovi
dati
Il buffer di ricezione può
riempirsi, per esempio, a causa
di congestione nel sistema
operativo del ricevitore
Il buffer di ricezione si estende
dall’ultimo byte inoltrato
all’applicazione fino alla fine del
buffer
La dimensione di RCWND è
segnalata in ogni segmento
inviato dal ricevitore al
trasmettitore
1100
200
1101
300
1400
Receive Window
1100
1101
1100
1101
1300
1400
Receive
Window
1101
1300
assorbimento
1200
1400
Receive Window
dell’applicazione
1300
1301
1600
Receive Window
43
Controllo di flusso: lato
trasmettitore
100
il trasmettitore mantiene un buffer
di trasmissione che tiene traccia di
dati che sono stati trasmessi ma
non ancora riscontrati
dimensione della finestra di
ricezione del partner
Il buffer di trasmissione si estende
dal primo byte non riscontrato
all’estremo a destra della finestra
di ricezione del ricevitore
Sender Window (SNDWND): parte
inutilizzata del buffer, rappresenta
i byte che possono essere
trasmessi senza attendere ulteriori
riscontri
1100
200
300
1101
1400
Send Window
1100
1101
1200
1400
Send Window
unacked
ACK=1201, Window = 200
1200
1300
1400
Send
Window
unacked
ACK=1301, Window = 300
1300
1301
1600
Send Window
44
Controllo di flusso: un
esempio (W=4)
0
sorgente
1
2
SN=0 SN=1
3
SN=2
4
SN=3
5
SN=4
6
SN=6
SN=5
destinazione
1
2
3
4
AN=6 W=4
0
AN=6 W=0
AN=5 W=1
AN=4 W=2
AN=3 W=3
AN=2 W=3
AN=1 W=3
buffer
5
6
applicazione
0
1
2,3,4,5
45
Problemi con la finestra
Silly window syndrome - lato ricevitore:
il ricevitore svuota lentamente il buffer di ricezione
invia segmenti con finestra molto piccola
il trasmettitore invia segmenti corti con molto
overhead
Soluzione (algoritmo di Clark)
il ricevitore “mente” al trasmettitore indicando una
finestra nulla sino a che il suo buffer di ricezione non
si è svuotato per metà o per una porzione almeno
pari al MSS
min (1/2 Receive_Buffer_Size, Maximum_Segment_Size).
46
Problemi con la finestra
Silly window syndrome - lato trasmettitore:
l’applicazione genera dati lentamente
invia segmenti molto piccoli man mano che vengono
prodotti
Soluzione (algoritmo di Nagle)
il TCP sorgente invia la prima porzione di dati anche
se corta
gli altri segmenti vengono generati e inviati solo se
il buffer d’uscita contiene dati sufficienti a
riempire un MSS
oppure, quando si riceve un acknowledgement
per il segmento precedente.
47
Push
Il normale funzionamento dell’inoltro del
flusso di byte può essere alterato
esplicitamente quando ci sono dati che
richiedono di essere immediatamente
consegnati all’applicazione ricevente
Per ottenere un inoltro immediato dei dati da
parte del TCP ricevente l’applicazione può
inviare un comando di PUSH
Per ottenere analogo comportamento
dall’applicazione ricevente viene settato il flag
di PUSH nel segmento
E’ questo il caso di applicazioni come TELNET
48
Dati URGENT
Alternativamente, i dati possono essere marcati come
URGENT
in questo caso il meccanismo costituisce un vero e
proprio meccanismo di segnalazione in banda
i dati urgenti sono identificati all’interno del flusso di
dati
Source Port
Destination Port
16 bit
16 bit
Sequence Number
32 bit
Acknowledgment Number
32 bit
HLEN
4 bit
Reserved
6 bit
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
FI
N
Checksum
Window
16 bit
Urgent Pointer
16 bit
16 bit
Options e Padding
lunghezza variabile
dati
49
Controllo d’errore
Detection:
Segmenti
Segmenti
Segmenti
Segmenti
corrotti
persi
duplicati
fuori sequenza
Checksum,
Acknowledgements
Timer/Time out
Correction
Ritrasmissione
Discarding
Riordino
50
Controllo d’errore
Il meccanismo di controllo d’errore del TCP
serve a recuperare pacchetti persi in rete
La causa principale della perdita è
l’overflow di una delle code dei router
attraversati a causa della congestione
Il meccanismo di ritrasmissione è di tipo
Go-back-N con Timeout
La finestra di trasmissione (valore di N)
dipende dal meccanismo di controllo di
flusso e di congestione
L’orologio per la ritrasmissione di un
segmento viene inizializzato al momento
della trasmissione e determina la
ritrasmissione quando raggiunge il valore
del Timeout
51
Controllo d’errore
esempio 1: senza errori
MSS=100 byte
Window= 4 MSS
SN=100
AN=406
SN=200
AN=406
SN=406
AN=201
SN=300
AN=406
SN=412
AN=301
SN=400
AN=412
SN=418
AN=401
SN=500
AN=418
SN=424
AN=501
SN=600
AN=424
SN=430
AN=601
SN=700
AN=430
SN=436
AN=701
52
Controllo d’errore
esempio 2: errore nei dati
MSS=100 byte
Window= 4 MSS
SN=100
AN=406
timeout
SN=200
AN=406
SN=406
AN=201
SN=300
AN=406
SN=400
AN=412
SN=412
AN=201
SN=500
AN=412
SN=418
AN=201
SN=200
AN=424
SN=424
AN=201
53
Controllo d’errore
esempio 3: errore nell’ack
MSS=100 byte
Window= 4 MSS
SN=100
AN=406
SN=200
AN=406
SN=406
AN=201
SN=300
AN=406
SN=400
AN=406
SN=412
AN=301
SN=500
AN=412
SN=418
AN=401
SN=600
AN=412
SN=424
AN=501
SN=412
AN=601
SN=700
AN=412
SN=418
AN=701
timeout
54
Gestione del Time-Out
Uno dei problemi è stabilire il valore ottimo
del timeout:
timeout troppo breve, il trasmettitore riempirà il
canale di ritrasmissioni di segmenti,
timeout troppo lungo impedisce il recupero veloce
di reali errori
il valore ottimale dipende fortemente dal
ritardo in rete (rete locale o collegamento
satellitare?)
il TCP calcola dinamicamente un valore
opportuno per il timeout stimando il RTT
(Round Trip Time)
55
Variabilità RTT
56
Stima del RTT
Il TCP adatta il timeout di trasmissione alle condizioni
reali della rete tramite gli algoritmi di Karn e Jacobson
i campioni di round-trip-time {RTT (i)} sono definiti
come il tempo che passa tra la trasmissione di un
segmento e la ricezione del relativo riscontro
Stima del valor medio
Sulla base delle misure il sender TCP calcola lo
Smoothed Rount Trip Time (SRTT) tramite l’algoritmo
di Jacobson
SRTT
(i)
= (1-α ) SRTT
(i-1)
+
α RTT (i).
Con α compreso tra 0 e 1 (tipicamente 1/8)
57
Stima del RTT
Stima della deviazione standard
Oltre al valor medio viene anche stimata la
deviazione standard dei RTT
DEV = |RTT (i) - SRTT (i-1)|
anche delle deviazione standard viene
calcolato un valore filtrato (smoothed):
SDEV (i) = 3/4 SDEV (i-1)+1/4 DEV
58
Qualità della stima RTT
59
Calcolo del Time Out
Sulla base dei valori stimati il timeout è calcolato come
TIMEOUT = SRTT + 2 SDEV
All’inizio SRTT viene posto uguale a zero e SDEV = 1.5
s, e quindi il valore del timeout parte a 3 s
A seguito di una ritrasmissione è meglio passare
all’algoritmo di Karn:
RTT non viene aggiornato
il timeout e’ moltiplicato per un fattore fisso
(tipicamente 2)
il timeout cresce fino ad un valore massimo
dopo un numero massimo di ritrasmissioni la
connessione viene chiusa
60
Persistenza
Se il destinatario fissa a zero la finestra di ricezione la
sorgente TCP interrompe la trasmissione
la trasmissione riprende quando il destinatario invia un ACK
con una dimensione della finestra diversa da zero
nel caso in cui questo ACK andasse perso la connessione
rimarrebbe bloccata
per evitare questa situazione si usa un timer di persistenza
che viene attivato quando arriva un segmento con finestra
nulla
se il timer di persistenza scade (valore di timeout uguale a
quello di ritrasmissione) viene inviato un piccolo segmento
di sonda (probe)
se viene ricevuto un ACK si esce dallo stato critico
altrimenti al nuovo scadere del timeout si invia un altro
probe
61
Controllo di congestione
Il controllo di flusso
dipende solo dalla “capacità” del ricevitore
non è sufficiente ad evitare la congestione nella rete
Nella rete INTERNET attuale non ci sono
meccanismi sofisticati di controllo di
congestione a livello di rete (come ad esempio
meccanismi di controllo del traffico in ingresso)
Il controllo di congestione è delegato al TCP!!!
Essendo il TCP implementato solo negli host il
controllo di congestione è di tipo end-to-end
62
Controllo di congestione
Il modo più naturale per controllare il ritmo di
immissione in rete dei dati per il TCP è quello
di regolare la finestra di trasmissione
Il trasmettitore mantiene una Congestion
Window (CWND) che varia in base agli eventi
che osserva (ricezione ACK, timeout)
il trasmettitore non può trasmettere più del
minimo tra RCVWND e CWND
TCP
Come
Comeregolare
regolarela
laCWND?
CWND?
Come
Comesapere
saperedella
dellacongestione?
congestione?
63
Controllo di congestione
L’idea base del controllo di congestione del TCP
è quello di interpretare la perdita di un
segmento, segnalata dallo scadere di un
timeout di ritrasmissione, come un evento di
congestione
La reazione ad un evento di congestione è
quella di ridurre la finestra (CWND)
TCP
64
Slow Start & Congestion
Avoidance
Il valore della finestra CWND viene aggiornato dal
trasmettitore TCP in base ad un algoritmo
il modo in cui avviene l’aggiornamento dipende dalla
fase (o stato) in cui si trova il trasmettitore
esitono due fasi fondamentali:
Slow Start
Congestion Avoidance
La variabile SSTHRESH e’ mantenuta al trasmettitore
per distinguere le due fasi:
se CWND < SSTHRESH si è in Slow Start
se CWND > SSTHRESH si è in Congestion
Avoidance
65
Slow Start
All’inizio, il trasmettitore pone la CWND a 1 segmento
(MSS) e la SSTHRESH ad un valore di default molto
elevato
Essendo CWND < SSTHRESH si parte in Slow Start
In Slow Start:
la CWND viene incrementata di 1 per ogni ACK
ricevuto
Si invia un segmento e dopo RTT si riceve l’ACK, si pone
CWND a 2 e si inviano 2 segmenti, si ricevono 2 ACK, si
pone CWND a 4 e si inviano 4 segmenti, ...
W
2W
RTT
4W
RTT
8W
RTT
RTT
66
Slow Start
Al contrario di quanto il nome faccia credere
l’incremento della finestra avviene in modo
esponenziale (raddoppia ogni RTT)
67
Slow Start
L’incremento può andare avanti fino
primo evento di congestione
fino a che CWND < SSTHRESH
CWND < RCWND
Insieme alla finestra aumenta il ritmo (o rate) di
trasmissione che può essere stimato come:
CWND
R=
[bit/s]
RTT
68
Evento di Congestione
Un evento di congestione si verifica quando il
ritmo di trasmissione porta in congestione un
link sul percorso in rete verso la destinazione
Un link è congestionato quando la somma dei
ritmi di trasmissione dei flussi che lo
attraversano è maggiore della sua capacità
∑R
i
>C
i
69
Evento di congestione
Scade un timeout di ritrasmissione
il TCP reagisce ponendo SSTHRESH uguale
alla metà dei “byte in volo” (byte trasmessi
ma non riscontrati); più precisamente
FlightSize ⎞
⎛
SSTHRESH = max⎜ 2 MSS ,
⎟
2
⎝
⎠
e ponendo CWND a 1
Si noti che di solito i “byte in volo” sono
pari a CWND
70
Evento di congestione
Come risultato:
CWND è minore di SSTHRESH e si entra nella fase
di Slow Start
il trasmettitore invia un segmento e la sua CWND è
incrementata di 1 ad ogni ACK
Il trasmettitore trasmette tutti i segmenti a
partire da quello per cui il timeout è fallito
(politica go-back-N)
Il valore a cui è posta la SSTHRESH è una
stima della finestra ottimale che eviterebbe
futuri eventi di congestione
71
Congestion Avoidance
Lo slow start continua fino a che CWND diventa grande
come SSTHRESH e poi parte la fase di Congestion
Avoidance
Durante il Congestion Avoidance:
si incrementa la CWND di 1/CWND ad ogni ACK ricevuto
se la CWND consente di trasmettere N segmenti, la
ricezione degli ACK relativi a tutti gli N segmenti porta la
CWND ad aumentare di 1 segmento
in Congestion Avoidance si attua un incremento lineare
della finestra di congestione
W
W+1
RTT
W+2
RTT
W+3
RTT
W+4
RTT
72
Congestion Avoidance
Dopo aver raggiunto SSTHRESH la finestra
continua ad aumentare ma molto più
lentamente
73
Esempio di
funzionamento
Slow Start
Waiting Slow Start Congestion Waiting
for
Avoidance for
timeout
timeout
Slow
Start
Congestion
Avoidance
SSTHRESH
Segment
loss
Timeout
Segment
loss
Timeout
CWND
Time
74
Fast Retransmit e Fast
Recovery
Algoritmi implementati nella
versione TCP nota come TCP Reno
ACK duplicati:
Se il TCP ricevente riceve pacchetti
fuori sequenza (diversi da quello
atteso) invia immediatamente un ACK
con il AN contenente il segmento atteso
Gli ACK duplicati possono essere
causati da perdite di pacchetti
I meccanismi di fast retrasmit e fast
recovery cercano di recuperare
velocemente queste perdite
75
Fast Retransmit e Fast
Recovery
1. Alla ricezione del 3° ACK consecutivo duplicato
(con lo stesso AN): Si pone
⎛ FlightSize
⎞
SSTHRESH = max⎜
,2 MSS ⎟
2
⎝
⎠
2. Viene ritrasmesso il pacchetto
indicato
dall’AN
3. Si pone la CWND = SSTHRESH + 3 ⋅ MSS
4. Per ogni ulteriore ACK duplicato ricevuto la
CWND viene incrementata di 1
5. Vengono trasmessi nuovi segmenti se
consentito dai valori di CWND e RWND
6. Appena arriva un ACK che riscontra nuovi dati
si esce dalla fase di fast recovery e si pone di
nuovo
⎛ FlightSize
⎞
CWND = SSTHRESH = max⎜
,2 MSS ⎟
2
⎝
⎠
76
Fast Retransmit e Fast
Recovery
Logica:
Se arrivano ACK duplicati un pacchetto sarà
andato perso
Se arrivano ACK duplicati vuol dire che i
pacchetti successivi a quello perso sono
arrivati (niente congestione)
Se non c’è congestione si può incrementare la
CWND del numero di pacchetti sicuramente
arrivati
Problemi:
Se ci sono perdite multiple nella finestra di
trasmissione prima non si riesce a recuperare
77
Condivisione equa delle
risorse
Si può far vedere che in condizioni
ideali il meccanismo di controllo del
TCP è in grado
di limitare la congestione in rete
consentire di dividere in modo equo la
capacità dei link tra i diversi flussi
Le condizioni ideali sono alterate tra
l’altro da
differenti RTT per i diversi flussi
buffer nei nodi minori del prodotto
banda-ritardo
78
Condivisione equa delle
risorse
R1 = 300 kbit/s
R2 = 300 kbit/s
C = 900 kbit/s
R3 = 300 kbit/s
I valori dei rate indicati sono solo valori medi
e valgono solo in condizioni ideali
il ritmo di trasmissione in realtà cambia
sempre e in condizioni non ideali la
condivisione può non essere equa
79
Condivisione equa delle
risorse
R4 = 400 kbit/s
R3 = 400 kbit/s
C=
C=
10 M
bit/
s
t/s
i
b
k
0
0
2
C = 1 Mbit/s
R1 = 100 kbit/s
R2 = 100 kbit/s
80
Calcolo del fair-share
Algoritmo di calcolo fair share fijz per ogni
flusso z tra i nodi sorgente-destinazione
(i,j):
Sia noto il numero di flussi nij tra ogni
coppia sorgente-destinazione (i,j)
Sia noto l’instradamento per ogni flusso
relativo alla coppia (i,j)
i
2
4
2
1 6 3 1,2,7
7
1
j nij percorso
1 4 3 3,4
4
1
6
6
1 5 4 3,5
3 6 2 4,7
3
8
5
3
5
3 5 5 4,6
2 5 3 2,6
81
Calcolo del fair-share
1. Si ponga inizialmente fijz =0 ∀ (i,j,z)
2. Si elimini dall’insieme L degli archi quelli
aventi il numero di flussi che lo attraversano
nk pari a zero
3. Per ogni link k ∈ L si calcoli il rapporto
Fk=Ck/nk, dove Ck è la capacità del link
4. Sia α | Fα=mink(Fk)
5. Si assegni fijz = Fα ∀ i,j,z : (i,j)∈ Lα dove Lα
è l’insieme dei flussi (i,j) che attraversano il
link α
z
C
=
C
−
f
6. Si assegni k
∑ ∑ ij
k
nk = nk −
( i , j )∈Lα
∑n
z
ij
( i , j )∈( Lα ∪ Lk )
7. Si elimini dall’insieme L l’arco α e tutti quelli
aventi nk pari a zero
8. Se L è vuoto STOP. Altrimenti ripeti da 3.
82
Calcolo del fair-share:
esempio
4
2
2
7
1
6
1
4
6
Capacità
8
3
5
3
5
Flussi
i
j
nij
percors
o
1
6
3
1,2,7
1
4
3
1
5
3
lin
k
1
Ck
9
2
6
3
7
3,4
4
15
4
3,5
5
12
6
2
4,7
6
2
3
5
5
4,6
7
5
2
5
3
2,6
8
5
83
Calcolo del fair-share:
esempio
4
2
2
7
1
Flussi
6
1
i
j
nij
percors
o
1
6
3
1,2,7
4
6
8
3
Step 1
5
5
3
1
4
3
3,4
link
Ck
nk
Fk
1
5
4
3,5
1
9
3
3
3
6
2
4,7
2
6
6
1
3
5
5
4,6
3
7
7
1
2
5
3
2,6
4
15
10
1.5
5
12
4
3
6
2
8
0.25
7
5
5
8
5
0
fijk
link
Ck
nk
1
9
3
2
5.25
3
i
j
nij
1
6
3
0
3
7
7
1
4
3
0
4
13.75
5
1
5
4
0
5
12
4
3
6
2
0
6
0
0
1
3
5
5
0.25
7
5
5
--
2
5
3
0.25
8
5
0
84
Calcolo del fair-share:
esempio
4
2
2
7
1
6
1
4
6
8
3
Step 2
Flussi
i
j
nij
percors
o
5
5
3
link
Ck
nk
Fk
1
9
3
3
2
5.25
3
1.75
3
7
7
1
Ck
nk
1
6
0
2
2.25
0
i
j
nij
1
6
3
1
3
7
7
1
4
3
0
4
11.75
3
1
5
4
0
5
12
4
3
6
2
1
6
0
0
1
3
5
5
0.25
7
0
0
--
2
5
3
0.25
8
5
0
1
6
3
1,2,7
1
4
3
3,4
1
5
4
3,5
4
13.75
5
2.75
3
6
2
4,7
5
12
4
3
3
5
5
4,6
6
0
0
--
2
5
3
2,6
7
5
5
8
5
0
fijz
link
85
Calcolo del fair-share:
esempio
4
2
2
7
1
6
1
4
6
8
3
Flussi
i
j
5
Step 3
nij percorso
5
3
link
Ck
nk
Fk
1
6
0
--
2
2.25
0
--
3
7
7
1
4
11.75
3
3.92
1
6
3
1,2,7
1
4
3
3,4
1
5
4
3,5
3
6
2
4,7
5
12
4
3
3
5
5
4,6
6
0
0
--
2
5
3
2,6
7
0
0
--
8
5
0
--
i
fijz
link
Ck
nk
1
6
0
2
2.25
0
3
0
0
4
8.75
0
j
nij
1 6
3
1
1
4
3
1
1
5
4
1
5
8
0
3
6
2
1
6
0
0
3
5
5
0.25
7
0
0
2
5
3
0.25
8
5
0
86
Versioni di TCP
Tahoe (quella vista)
Reno: fast retransmit/fast recovery
Vegas: tenta di evitare la congestione
piuttosto che reagire ad essa
Westwood
TIBET
........
Versioni TCP ottimizzate per scenari wireless
87
Un modulo TCP
Source: TCP/IP Protocol Suite,
B. Forouzan.
88
Scarica

Il livello di trasporto - Home page docenti