3.3.4) Protocolli a finestra scorrevole

Nei casi precedenti i frame dati viaggiano in una sola direzione e i frame di ack nella direzione contraria, quindi esistono dei frame che viaggiano in entrambe le direzioni.

Dunque, volendo stabilire una comunicazione dati bidirezionale è necessario disporre di due circuiti, il che ovviamente è uno spreco di risorse. Un'idea migliore è usare un solo circuito, nel quale far convivere tutte le esigenze.

Supponendo che la comunicazione sia fra A e B, si avrà che:


Figura 3-7: Comunicazione dati bidirezionale su unico canale

Però c'è un'idea ancora migliore: se, quando si deve inviare un ack da B ad A, si aspetta un pò fin che è pronto un frame dati che B deve inviare ad A, si può "fare autostop" e mettere dentro tale frame dati anche le informazioni relative all'ack in questione. Questa tecnica si chiama piggybacking (letteralmente, portare a spalle).


Figura 3-8: Piggybacking

Il campo ack serve proprio a questo scopo, infatti è il campo in cui viene trasportato, se c'è, un ack.

Questa tecnica consente un notevole risparmio di:

Infatti, con questa tecnica le informazioni di ack non richiedono la costruzione di un apposito frame (e quindi il tempo necessario alla creazione ed al riempimento della struttura, al calcolo del checksum, ecc.) né la sua trasmissione (e quindi l'uso di banda).

Però c'è un aspetto da non trascurare: per quanto si può aspettare un frame su cui trasportare un ack che è pronto e deve essere inviato? Non troppo, perché se l'ack non arriva in tempo il mittente ritrasmetterà il frame anche se ciò non è necessario. Dunque si stabilisce un limite al tempo di attesa di un frame sul quale trasportare l'ack; trascorso tale tempo si crea un frame apposito nel quale si mette l'ack.

I protocolli che vedremo ora appartengono alla classe dei protocolli sliding window (finestra scorrevole), sono full-duplex (per i dati), sfruttano il piggybacking e sono più robusti di quelli precedenti.

Differiscono fra loro per efficienza, complessità e capacità dei buffer. Alcuni aspetti però sono comuni a tutti gli algoritmi:


Figura 3-9: Finestra scorrevole sugli indici dei frame

In questi protocolli il livello data link ha più libertà nell'ordine di trasmissione, fermo restando che:

Protocollo a finestra scorrevole di un bit

In questo protocollo sia mittente che destinatario usano una finestra scorrevole di dimensione uno. Di fatto questo è un protocollo stop-and-wait.

Non c'è differenza di comportamento fra mittente e destinatario, tutt'e due usano lo stesso codice (questo vale anche per i protocolli successivi).

Il funzionamento, molto semplice, è il seguente:

Qui sta la principale novità rispetto al protocollo 3: l'ack è etichettato col numero di sequenza del frame a cui si riferisce. I valori dell'etichetta possono solo essere 0 e 1, come nel protocollo 3.

Il peggio che può succedere è la ritrasmissione inutile di qualche frame, ma questo protocollo è sicuro.

Protocolli go-back-n e selective repeat

Se il tempo di andata e ritorno del segnale (round-trip time) è alto, come ad esempio nel caso dei canali satellitari nei quali è tipicamente pari a 500 + 500 msec, c'è un enorme inefficienza coi protocolli stop-and-wait, perché si sta quasi sempre fermi aspettando l'ack.

Per migliorare le cose, si può consentire l'invio di un certo numero di frame anche senza aver ricevuto l'ack del primo. Questa tecnica va sotto il nome di pipelining.

Ciò però pone un serio problema, perché se un frame nel mezzo della sequenza si rovina molti altri frame vengono spediti prima che il mittente sappia che qualcosa è andato storto.

Il primo approccio al problema è quello del protocollo go-back-n:


Figura 3-10: Funzionamento del protocollo go-back-n

Si noti che il mittente deve mantenere in un apposito buffer tutti i frame non confermati per poterli eventualmente ritrasmettere. Se il buffer si riempie, il mittente deve bloccare il livello network fino a che non si ricrea dello spazio. Inoltre, vi è spreco di banda se il tasso d'errore è alto e/o il time-out è lungo.

Il secondo approccio è più efficiente, ed è chiamato selective repeat:


Figura 3-11: Funzionamento del protocollo selective repeat

Alcune considerazioni a proposito del protocollo selective repeat:

Infine, si noti che per entrambi i precedenti protocolli:

3.4) Esempi di protocolli data link

I protocolli data link più diffusi oggi sono discendenti del protocollo SDLC (Synchronous Data Link Control), nato nell'ambito dell'architettura SNA. Nel seguito verranno illustrate brevemente le caratteristiche di tre diffusi protocolli: HDLC (standard ISO), SLIP (architettura TCP/IP) e PPP (suo successore).

3.4.1) HDLC (High Level Data Link Control)

E' un protocollo bit oriented, e quindi usa la tecnica del bit stuffing. Il formato del frame HDLC è illustrato nella figura seguente.


Figura 3-12: Frame HDLC

I campi del frame hanno le seguenti funzioni:

Address utilizzato nelle linee multipunto, dove identifica i diversi terminali (il protocollo offre funzioni per il dialogo fra un concentratore e diversi terminali)
Control contiene numeri di sequenza, ack, ecc.
Dati contiene i dati da trasportare
Checksum è calcolata con CRC-CCITT


Le caratteristiche salienti sono le seguenti:

3.4.2) SLIP (Serial Line IP)

E' nato nel 1984 ed è il più vecchio protocollo di livello data link dell'Internet Protocol Suite.

Molto semplice, nacque per collegare via modem macchine Sun ad Internet. Spedisce sulla linea pacchetti IP terminati col byte 0xC0. Usa character stuffing.

Ha diverse limitazioni:

3.4.3) PPP (Point to Point Protocol)

Per migliorare le cose, IETF ha prodotto uno standard ufficiale, il Point to Point Protocol (RFC 1661, 1662 e 1663). Esso è adatto sia a connessioni telefoniche che a linee router-router.

Esso fornisce le seguenti funzionalità:

Il traffico derivante (nelle fasi iniziali e finali della connessione) dall'uso dei protocolli LCP e NCP viene trasportato dentro i frame PPP.

Il protocollo è modellato su HDLC, ma con alcune differenze:

Il formato del frame PPP è il seguente.


Figura 3-13: Frame PPP

I campi del frame hanno le seguenti funzioni:

Flag come in HDLC
Address sempre 11111111: di fatto non ci sono indirizzi, in quanto non c'è più l'idea di gestire linee multipunto
Control il default (00000011) indica un unnumbered frame, quindi relativo ad un servizio non affidabile
Protocol indica il protocollo relativo al pacchetto che si trova nel payload (LCP, NCP, IP, IPX, Appletalk, ecc.)
Payload è di lunghezza variabile e negoziabile, il default è 1500 byte
Checksum normalmente è di due byte (quattro sono negoziabili)




Torna al sommario | Vai avanti