Sei sulla pagina 1di 7

Il servizio di trasferimento affidabile

LEZIONE 3

IL S E R V I Z I O DI T R A S F E R I M E N T O
AFFIDABILE

IN QUESTA LEZIONE IMPAREREMO...

il concetto d segmento affidabile


i meccanismi che realizzano un trasferimento affidabile
il protocollo sliding window

Principi generali
Lo strato di rete implementa u n servizio di trasferimento che non affidabile i n quanto possibile
che vengano persi dei segmenti o si generino degli errori: compito dello strato di trasporto attuare
meccanismi che permettano d i eliminare i problemi presenti agli strati inferiori a esso.
Un servizio d i trasferimento si dice affidabile se:
t u t t i i messaggi sono consegnati a destinazione e giungono privi di errori;
ciascun messaggio consegnato una e una sola volta;
i messaggi sono consegnati nello stesso ordine i n cui sono stati trasmessi.
La trasmissione deve essere:
priva di errori;
senza d i perdita d i dati;
senza duplicazioni nella consegna dei segmenti.
L'obiettivo principale del livello d i trasporto quello d i offrire u n servizio d i trasferimento affidabile
dei messaggi ai livelli superiori da affiancare al protocollo UDP. Introduciamo la definizione d i u n
parametro che sar utile nel seguito della trattazione: sappiamo che i n una rete si definisce Round
Trip Time (RTT) l'intervallo di tempo che intercorre tra l'istante i n cui u n segmento inizia a essere
trasmesso dalla sorgente e l'istante i n cui la sorgente ne riceve i l relativo messaggio di riscontro,
cio i l tempo di andata e ritorno tra mittente e ricevente. A questo parametro viene generalmente
affiancato u n altro parametro chiamato ^ Retransmission Time O u t (RTO).
^ Retransmission Time O u t (RTO) Indica il m a s s i m o i n t e r v a l l o d i t e m p o c h e p u i n t e r c o r r e r e t r a l'i-

stante di trasmissione di un s e g m e n t o e l'istante di ricezione del corrispondente riscontro prima che la


sorgente consideri perso il s e g m e n t o stesso.

177

M Retransmission Ti me O u t (RTO) TCP retransmission t i m e o u t (RTO) occurs when A C K does


not arrives on t i m e , or does not arrive at all! Usually, RTO is not a fixed value, but changes t o
gain better network performance.

Se i l mittente non riceve i l segnale di ricezione (ACK) entro u n fissato tempo limite RTO avviene la
ritrasmissione dei segmenti da parte del mittente.
Il d i m e n s i o n a m e n t o d e l timeout un a s p e t t o critico nelle prestazioni d e l p r o t o c o l l o :
v a l o r e t r o p p o p i c c o l o : p o t r e b b e r o essere c o n s i d e r a t i persi alcuni s e g m e n t i in r i t a r d o a c a u sa d i c o n g e s t i o n e e venire ritrasmessi c o n c o n s e g u e n t e p e r d i t a d i efficienza;
valore t r o p p o g r a n d e : v e r r e b b e ritrasmesso c o n n o t e v o l e r i t a r d o un s e g m e n t o c o n s i d e r a t o
perso i n t r o d u c e n d o q u i n d i r a l l e n t a m e n t i e c o n s e g u e n t e p e r d i t a d i efficienza.

In questa lezione verranno descritti i meccanismi implementati dallo strato d i trasporto e utilizzati
nel protocollo TCP che permettono a due socket d i scambiare segmenti i n modo affidabile mediante
un canale logico.

I meccanismi impiegati
Per rendere affidabile u n canale necessario che venga effettuata la rivelazione degli errori i n ricezione e quindi avvenga la ritrasmissione dei segmenti persi o quelli i n cui sono stati rivelati errori; i meccanismi impiegati per realizzare un trasferimento di segmenti affidabile possono essere riassunti i n :
I numerazione dei segmenti trasmessi e trasmissione di messaggi di riscontro con numero di sequenza;
impiego di u n temporizzatore (timer) i n trasmissione;
impiego d i finestre i n trasmissione e i n ricezione.

Numerazione dei segmenti trasmessi


Un segmento composto da pi byte e lo strato di trasporto considera la sequenza dei segmenti trasmessi come una sequenza ordinata di byte: viene quindi numerata progressivamente. Il numero d i sequenza (sequence number) associato a u n segmento i l numero d'ordine del primo byte che compone
i l segmento stesso e serve a posizionare i l carico utile del segmento TCP all'interno del flusso d i dati.
II campo Sequence Number (SN) contiene i l numero sequenziale di ciascun byte d i dati a partire
d a l l ' ^ Initial S e q u e n c e N u m b e r (ISN) : i l primo vero byte d i dati spedito ha come numero di sequenza S N = ! S N + 1 , che solitamente ha valore 1 . Quindi i l S N identifica la posizione nello stream
del primo byte d i dati del segmento: se per esempio i l primo byte nel flusso di dati ha come S N = 1
(quindi i l ISN aveva valore I S N = 0 ) e sono gi stati trasferiti 5 0 0 0 byte, i l primo byte d i dati nel segmento corrente 5 0 0 1 e quindi i l suo S N viene settato a 5 0 0 1 .
Initial Sequence N u m b e r (ISN) Si tratta di un numero intero progressivo che viene inizializzato a un
valore compreso tra 0 e (2 1) m e d i a n t e un sistema di numerazione di t i p o ciclico, ovvero: ISN = x
m o d 2 . Per esempio per determinare il numero di sequenza ISN del prossimo s e g m e n t o a partire dal
valore dell'ultimo s e g m e n t o
compreso tra
= {0,..., (2 - 1)} e dalia sua dimensione K, si sostituisce a il valore x = N + K o t t e n e n d o
= (N + K) m o d 2 .
32

32

32

32

Lo standard TCP non richiede che ogni sistema inizi a numerare i byte partendo da uno specifico
numero; ogni sistema sceglie liberamente i l numero da cui iniziare la numerazione. Inoltre si aspetta
di ricevere i l segmento successivo all'ultimo segmento ricevuto i n ordine, ovvero quello il cui numero
di sequenza pari al numero d i sequenza dell'ultimo segmento ricevuto i n ordine pi la dimensione

178

Lezione 3

del carico utile dello stesso segmento (cio del suo campo Data). Quando viene ricevuto un segmento, si controlla se i l numero di sequenza ricevuto quello atteso e i n caso affermativo i l destinatario
pu inviare direttamente i l carico utile al processo di livello applicativo e liberare i propri buffer di
ricezione: se invece riceve un numero di sequenza maggiore d i quello atteso, memorizza temporaneamente i dati nel buffer di ricezione nell'attesa che giungano i segmenti mancanti andati persi oppure
in ritardo sulla rete. Se i l numero di sequenza ricevuto inferiore a quello atteso significa che questo
segmento gi stato ricevuto e quindi si tratta di un duplicato che viene scartato.
In ogni segmento inviato presente u n Acknowledgment Number, o numero di riscontro, che riguarda il flusso di dati nella direzione opposta: i l numero che i l mittente invia al destinatario i l
numero del primo byte che i l mittente si attende di ricevere e quindi i l numero che deve avere i l
dato i n risposta a quella trasmissione.
Il protocollo TCP adotta la politica d i conferma cumulativa: i l numero d i riscontro che viene trasmesso indica al ricevente che i l mittente ha ricevuto e inoltrato al processo applicativo di livello
superiore i l segmento avente numero di sequenza uguale al numero di riscontro indicato (-1) e
anche tutti i segmenti a esso precedenti.

ln t r a s m i s s i o n e , il p r o t o c o l l o TCP m a n t i e n e t e m p o r a n e a m e n t e una c o p i a d i t u t t i i d a t i inviati


ma n o n ancora riscontrati e solo al m o m e n t o d e l riscontro t r a m i t e I'
libera il p r o p r i o b u f fer d a q u e s t i d a t i d a t o che ha a v u t o la c o n f e r m a d i c o n s e g n a al d e s t i n a t a r i o . Q u e s t a tecnica

nota c o m e tecnica Go-Back-N.

e W

Quindi i l segmento d i acknowledgment svolge due funzioni, cio quella di segnalare l'avvenuta r i cezione (positive acknoledgment) e quella di controllare la sequenza e quindi l'ordine dei segmenti
(flow control).
ESEMPIO

Per esempio, se i l primo byte spedito ha


ISN=62 e sono stati trasferiti correttamente
8 byte, l'Acknowledgment Number 70.

Se i l primo byte spedito ha ISN=1 e sono stati trasferiti correttamente 567 byte,
l'Acknowledgment Number 568.

Tempo

Tempo

179

La somma dei byte ricevuti deve naturalmente rispettare la sequenza, altrimenti i l


ricevente non l i conteggia e non viene aggiornato i l totale presente nel contatore: se
l'host A ha ricevuto dall'host B u n segmento
con i byte da 1 a 567 e un segmento con i
byte da 900 a 2000 riconosce che "ne manca u n pezzo" e come conferma all'host A
invia u n segmento dove scrive nel campo
riscontro i l valore 568 che i l numero d i
byte che si aspetta dall'host R per ricreare
il flusso completo.

HostB

^ ^ H o s t A

ACKr> = 568_

Tempo

Tempo

Non richiesta la trasmissione di u n messaggio di AGK a ogni segmento ricevuto: i l riscontro che
arriva alla sorgente di tipo cumulativo.
C o n N A C K si i n t e n d o n o i m e s s a g g i d i A C K n e g a t i v i , c i o i m e s s a g g i c h e i n d i c a n o un riscont r o n e g a t i v o : i p r o t o c o l l i d i t r a s p o r t o n o n p r e v e d o n o l ' i m p i e g o d i tali m e s s a g g i , in q u a n t e
al loro p o s t o si utilizzano i m e s s a g g i N A C K d i t i p o i m p l i c i t o , d e d u c e n d o d a i valori d i
il
c o m p o r t a m e n t o da intraprendere.

Temporizzazione della trasmissione


Timer di ritrasmissione
Per ciascun segmento inviato, TCP avvia u n timer, detto timer di ritrasmissione
RTO (Retransmission Time Out, generalmente indicato come timeout) che indica al modulo d i origine dopo quanto
tempo deve essersi considerato perso l'ultimo segmento trasmesso e quindi necessita la sua trasmissione: se nessun ACK viene ricevuto dal mittente i n quell'intervallo d i tempo questo ritrasmette
tutti i segmenti inviati dall'ultimo che stato confermato.

Nel caso riportato i n figura viene


perso i l messaggio d i ACK e quindi,
al termine del RTO, l'host A provvede a ritrasmettere i l segmento precedente.

Host A

^ ^ H o s t B

= 72, 28

byte di dati

RTO

Perdita

RTO

ACKn=J00_
t
Tempo

180

Tempo

Il servizio di trasferimento affidabile

Nell'esempio seguente i l segmento di


AGK non raggiunge la destinazione
nell'intervallo di tempo RTO e quindi nessuno dei due segmenti inviati
dall'host A viene confermato: si procede con la ritrasmissione del primo
segmento.

Host B

RTO

1
1

"3
o
a>
E

l^d[dati

"
5

byte_dii 'dati

A questo punto si viene a creare


un problema d i duplicati: 2 segmenti uguali raggiungono l'host B
che per ha memorizzato i l numero di sequenza e quindi i n grado
di ignorare la seconda trasmissione
e richiedere i l segmento mancante,
cio quello successivo ai p r i m i due
ricevuti (nel nostro caso i l 150).

^ S e q ^

'

RTO

'

yte di de

La corretta impostazione d i questo timer diffcile ma molto importante, i n quanto u n timer troppo
breve comporta ritrasmissioni inutili ( i l timer scatta mentre i l riscontro o i l pacchetto sono ancora
in viaggio), mentre u n timer troppo lungo comporta attese i n caso d i perdita di pacchetti.
Timer d i keepalive
Una ulteriore temporizzazione viene effettuata mediante i l timer di keepalive: inizia i l conteggio alla
ricezione di ogni pacchetto e quando scade dichiara la connessione caduta per eccessiva inattivit.
Quindi questo timer interviene per individuare le situazioni i n cui cade la connessione.
Per evitare che il t i m e r scada i n o p p o r t u n a m e n t e , il
v u o t i se il m i t t e n t e n o n ha nulla da inviare.

si o c c u p a d i m a n d a r e d e i p a c c h et t i

Tlmed wait
I l timed wait invece i l tempo che viene atteso prima di disconnettere effettivamente una connessione ed pari al doppio del tempo d i vita d i u n comune pacchetto: questo evita che dei pacchetti
possano rimanere circolanti per la rete anche dopo la chiusura.

Timer di persistenza
Come descritto successivamente, i l TCP utilizza i l metodo della finestra scorrevole per gestire i l
flusso di dati che i l ricevente i n grado di accettare, e tra i valori validi d i questo campo v i anche
lo zero, a significare che i l ricevente richiede l'interruzione momentanea dell'invio di dati.
Se viene perso proprio i l pacchetto che riapre la finestra, i l mittente del canale TCP rimarr per
in attesa indefinita: per evitare questa situazione i l TCP avvia u n timer, detto timer d i persistenza,
ogni qual volta i l ricevente chiude la finestra.

Finestra di trasmissione e ricezione


Per effettuare la gestione dei segmenti i n viati e ricevuti, e quindi per poter individuare quali segmenti devono eventualmente essere ritrasmessi, i l terminale mittente
utilizza quella che prende i l nome d i finestra di trasmissione.

Finestra di trasmissione La finestra di trasmissione ha dimensione W e in essa veng o n o memorizzati tutti i numeri di sequenza
dei byte che la sorgente pu trasmettere
senza bisogno di ricevere alcun messaggio
ACK da parte della destinazione.
s

181

La finestra di trasmissione viene gestita come una struttura a coda, utilizzando 2 variabili (2 puntatori):
s e n d b a s e : rappresenta i l numero d'ordine del byte pi vecchio tra quelli trasmessi ma non ancora
riscontrati positivamente dalla destinazione;
I nextseqnum: rappresenta i l numero d'ordine del prossimo byte che cade nella finestra corrente e
che deve ancora essere trasmesso per la prima volta.

S e n d b a s e i n d i v i d u a l'estremo inferiore della finestra d i trasmissione c o r r e n t e e


un e l e m e n t o c e n t r a l e , m e n t r e l'estremo s u p e r i o r e d a t o dalla s o m m a tra
ghezza W .

send base

e la lar-

nextseqnum

ACK ricevuto

window size

Non ancora
ricevuto

Spedito, ACK non

Byte fuori

ancora ricevuto

finestra

Ws(byte)

Alla ricezione d i u n ACK i l mittente aggiorna i l valore d i sendbase con i l valore che gli viene comunicato se tale valore risulta essere superiore al valore corrente, altrimenti lo lascia inalterato. Aggiornando i l valore inferiore la finestra viene spostata collocandosi pi a destra dello stesso numero
di byte.
La finestra d i ricezione, avente dimensioni W pari al numero d i byte che i l ricevente i n grado
di ricevere i n quel momento, una struttura d i dati che viene mantenuta aggiornata nell'host d i
destinazione.
D

i
i
i

Fuori sequenza
ma memorizzati
e confermati con ACK
window size
W (byte)

Byte ricevibili,
non ancora
pervenuti

Attesi e non

Byte fuori

ancora ricevuti

finestra

rcv base

Nella finestra d i ricezione vengono memorizzati i numeri d'ordine dei byte che la destinazione
disposta a ricevere consecutivamente, prima d i dover inviare alcun messaggio ACK alla sorgente. La
gestione di questa finestra viene effettuata con un'unica variabile, rcv_base, che contiene i l minimo
valore che i l destinatario si attende sia perch quel byte non lo ha ancora ricevuto oppure perch
lo ha ricevuto errato.

Il servizio di trasferimento affidabile

Se per esempio viene ricevuto u n segmento con numero d i sequenza maggiore, se privo d i errori
e cade nella finestra d i ricezione viene memorizzato ma non si aggiorna i l rcvbase e si rimane i n
attesa della parte d i messaggio antecedente che ancora non pervenuta.

La d i m e n s i o n e d e l l e d u e finestre g e n e r a l m e n t e diversa in q u a n t o le v e l o c i t d i e l a b o r a z i o n e
d i m i t t e n t e e d e s t i n a t a r i o p o s s o n o essere a n c h e m o l t o diverse: affinch il m i t t e n t e n o n saturi
il d e s t i n a t a r i o , necessario c h e q u e s t o invi al p r i m o la d i m e n s i o n e della m e m o r i a d i ricezione
in m o d o che il m i t t e n t e si possa r e g o l a r e m o d i f i c a n d o i flussi d i t r a s m i s s i o n e : v e d r e m o c o m e
nel p r o t o c o l l o :
il r i c e v e n t e c o m u n i c a al t r a s m i t t e n t e la d i m e n s i o n e o p p o r t u n a d e l l a f i n e stra attraverso il c a m p o W i n d o w p r e s e n t e n e l l ' h e a d e d e i s e g m e n t i
f

Il meccanismo descritto prende i l nome d i finestra scorrevole o -4 s l i d i n g w i n d o w protocol.

A Sliding window A sliding w i n d o w protocol is a feature of packet-based data transmission


protocols.
The " w i n d o w " is the maximum amount of data we can send w i t h o u t having t o wait for ACKs. In summary, t h e operation of t h e algorithm is as follows:
t transmit all t h e new segments in t h e w i n d o w ;
ft wait for acknowledgement/s t o c o m e (several packets can b e a c k n o w l e d g e d in t h e same ACK);
t slide the w i n d o w t o the indicated position and set t h e w i n d o w size t o the value advertised in the
acknowledgement.
When we wait for an a c k n o w l e d g e m e n t t o a packet for some time a n d it has n o t arrived yet, t h e packet
is retransmitted. W h e n t h e acknowlegement arrives, it causes the w i n d o w t o b e repositioned and t h e
transmission continues from the packet f o l l o w i n g the o n e transmitted last.