capitolo 8 data link layer
Transcript
capitolo 8 data link layer
CAPITOLO 8 DATA LINK LAYER . 1 8. DATA LINK LAYER I PROTOCOLLI DI LINEA (Data Link Layer Protocol) relativi al DATA LINK LAYER (DLL), ossia il secondo livello dell’architettura di riferimento ISO/OSI, gestiscono il colloquio tra entità fisicamente connesse (link), riducendo il tasso di errore introdotto dal mezzo di comunicazione fisico. Quindi il ruolo del DLL è quello di fornire i mezzi funzionali e procedurali per il trasferimento trasparente, affidabile ed efficiente di unità dati tra le NETWORK LAYER ENTITY, nascondendo i dettagli su come le risorse di comunicazione, fornite dal PHYSICAL LAYER, sono usate per fornire il servizio. Se si considera una linea punto-punto o una linea multipunto, opportunamente regolata attraverso un meccanismo di polling-selecting, il DATA LINK LAYER non ha bisogno di risolvere il problema della contesa per l’accesso al mezzo di comunicazione comune. Viceversa nelle reti ad accesso comune, il DATA LINK LAYER risolve la contesa suddividendosi in due sottolivelli: il sublayer inferiore MAC (Medium Access Control) che si considera come un incremento del Physical Layer e il sublayer superiore LLC (Logicol Link Control) che svolge le funzionalità di linea. Quindi, le funzionalità di linea, che esamineremo in questa sezione, riguardano il DLL o il sublayer LLC del DLL per reti ad accesso comune. L’insieme delle problematiche che il DATA LINK LAYER deve risolvere sono: • • • • • • • • framing (definizione del formato dei messaggi); sincronizzazione; trasparenza dei dati; controllo di errore; controllo di sequenza; recupero degli errori; controllo di flusso; gestione del collegamento; I protocolli di linea si distinguono in 1. CHARACTER-ORIENTED 2. BIT-ORIENTED, a secondo se l’unità informativa della frame (le PDU (PROTOCOL DATA UNIT) del DATA LINK LAYER vengono dette frame, mentre le PDU del NETWORK LAYER vengono dette Packet; per gli altri livelli si parla solo di N-PDU), è un insieme di caratteri (byte) opportunamente codificati (ad esempio con codifiche ASCII e EBCDIC), o un flusso continuo di bit. Il primo protocollo CHARACTER-ORIENTED fu il BSC (Binary Synchronous Control) trattato qui di seguito nel paragrafo 8.6 . Un’altra classificazione che si suole fare è quella di distinguere i protocolli di linea, in a) SINCRONI b) ASINCRONI. La differenza, in questo caso, dipende dal fatto che i clock delle peer entity siano o meno sincronizzati. Per essere precisi, l’entità ricevente, per interpretare correttamente il messaggio speditole, deve essere in grado di determinare: ⇒ l’inizio di ogni bit (bit or clock synchronization), 2 ⇒ l’inizio e la fine di ogni carattere (character or byte synchronization) e ⇒ l’inizio e la fine della frame (block or frame synchronization). Nei protocolli asincroni, i due interlocutori ottengono la SINCRONIZZAZIONE A LIVELLO DI CARATTERE introducendo dei pattern di bit opportuni (detti start e stop bits) per delimitare caratteri successivi. Mentre la FRAME SYNCHRONIZATION, per entrambi i protocolli, è ottenuta incapsulando la frame all’interno di opportuni delimitatori. I protocolli moderni sono tutti bit oriented e sincroni; di seguito faremo riferimento a protocolli sincroni bit oriented o character oriented. 8.1 Framing Il FRAMING consiste nell’organizzare il flusso di dati entrante in frame (trame), aventi un opportuno e ben definito formato: quindi bisogna determinare non solo la dimensione di ogni campo della frame, ma anche il tipo di codifica usata. Il formato varia chiaramente da protocollo a protocollo; comunque, una struttura di carattere generale potrebbe essere quella mostrata in Fig. 8.1-1. Synchonization Address Control Data Field Error Check Synchonization Field Field Field (Packet) Field Field Fig. 8.1-1: Formato della frame. IL SYNCHRONIZATION FIELD consente di distinguere l’inizio e la fine di una frame, mediante l’uso di opportuni pattern di bit. • Nei protocolli character oriented, l’inizio di una frame è marcato con la sequenza di caratteri ASCII DLE STX, mentre la fine con la sequenza DLE ETX; per evitare la presenza di sequenze di questo tipo all’interno dei synchronization field si usa la tecnica del character stuffing (vedi esempio in Fig. 8.1-2), la quale prevede l’inserimento di un carattere DLE prima di ogni carattere DLE presente tra i due delimitatori. DLE STX C A D DLE S DLE STX C A D DLE DLE DLE ETX S DLE ETX Stuffed DLE Fig. 8.1-2: Character stuffing. • Invece, i protocolli bit oriented, usano come synchronization field il pattern di bit 01111110; per evitare che questa sequenza sia ripetuta tra i due delimitatori si usa la tecnica del bit stuffing (to stuff = inserire a forza)(vedi esempio in Fig. 8.1-3), che prevede l’inserimento di un bit 0 ogni cinque bit 1 consecutivi, trovati all’interno dei delimitatori. 01111110 01110110010111110100011 01111110 01111110 0111011001011111 0 0100011 01111110 Stuffed bit Fig. 8.1-3: Bit Stuffing 3 In entrambi i casi, una volta che la frame è giunta a destinazione, il ricevente dovrà fare, rispettivamente, il destuffing o lo stripping. Cioè, nel caso di protocollo bit oriented, sarà compito del ricevitore analizzare che valenza ha il bit successivo ad una eventuale sequenza di cinque bit 1 consecutivi. Infatti se dopo cinque bit 1 troviamo → il bit 0, si effettua il bit stripping eliminandolo; → se, invece, il sesto è il bit 1 si esamina il settimo bit: se è un bit 0 vuol dire che il tutto rappresenta flag, viceversa significa che la trama è stata affetta da un errore che deve essere segnalato. L’ADDRESS FIELD contiene l’indirizzo del destinatario, mentre IL CONTROL FIELD contiene una serie di informazioni di controllo utilizzate per fare il controllo di sequenza e di flusso. IL DATA FIELD della frame (Fig. 8.1-1), contiene un pacchetto del Network Layer (come del resto bisognava aspettarsi per quanto descritto nei capitoli precedenti); inoltre, la lunghezza di questo campo viene, in genere, fissata in modo tale da avere un buon compromesso tra rendimento della linea e probabilità di errore. Infatti, più grande è il DATA FIELD, maggiore è sia l’utilizzazione della linea che la probabilità di errore. Infine l’Error Check Field contiene una sequenza di byte utilizzati per la rilevazione di eventuali errori presenti nella frame. 8.2 Controllo di Errore (Error Detection) Quando dei dati vengono scambiati tra due interlocutori, è comune che, a causa di disturbi elettrici, il segnale rappresentante lo stream di bit trasmesso venga alterato. La conseguenza è che il ricevitore, in alcuni casi, potrebbe ricevere un messaggio diverso da quello trasmesso. Quindi il controllo e la correzione degli errori sono delle funzioni indispensabili al fine di garantire una comunicazione “affidabile” (una comunicazione in cui la probabilità di errore sia ragionevolmente bassa). Tipicamente gli errori si presentano in burst, cioè vengono persi o alterati intere sequenze di bit (non singoli bit). La tecnica di CONTROLLO DI ERRORE (nella letteratura anglosassone, la problematica del controllo di errore è nota come Error Detection, in quanto con il termine Error Control si intende la gestione dell’errore) più usata è quella del CYCLIC REDUNDANCY CHECK (CRC); essa è adatta a rilevare errori multipli. Questo metodo considera una stringa di bit come un polinomio con coefficienti 0 ed 1. Ad una generica frame, costituita da k bit, viene associato un polinomio di grado k-1: per esempio alla stringa di bit 10101101 (k=8) corrisponde il polinomio M(x)=1⋅ x7 + 0⋅ x6 + 1⋅ x5 + 0⋅ x4 + 1⋅ x3 +1⋅ x2 +0⋅ x1 +1⋅ x0 = = x7 + x5 + x3 + x2 +1. Per usare questo metodo le parti coinvolte nella comunicazione devono concordare un Polinomio Generatore G(x) il quale deve avere sia il MSB che il LSB pari ad 1 (vedi tabella di Fig. 8.2-1). 4 L’idea alla base di questo metodo è quella di ricavare il checksum (Error Check Field) in modo tale che il polinomio associato alla frame ottenuta sia divisibile per G(x) (le operazioni di somma sottrazione sono fatte in modulo 2; ciò implica che non vi sono né riporti per le addizioni e né prestiti nelle divisioni). Dato il campo informativo di una frame, detto M(x) il polinomio da esso individuato, deve necessariamente verificarsi che: grado{M(x)} > grado{G(x)} per poter ottenere un polinomio resto R(x) dal rapporto tra M(x) e G(x), grazie al quale si effettua il controllo di errore. I passi previsti da questo controllo sono: I. detto k il grado del polinomio G(x), si considera il polinomio xk⋅M(x)=M’(x), il quale è ottenuto aggiungendo k zeri alla fine della stringa di bit del campo informativo della frame. II. Dunque si divide M’(x) per G(x); detto Q(x) il quoziente e R(x)=M’(x) - Q(x)G(x) il resto (sarà un polinomio al più di grado (k-1)), si trasforma R(x) in una sequenza di bit e si inserisce nel campo di controllo di errore FCS della frame. III. Quindi la stringa di bit associata al polinomio R(x) rappresenta il checksum. IV. In ricezione, pervenuta la frame, si estrae il contenuto tra un flag e l’altro, escludendo il campo FCS, e si divide il tutto per il polinomio generatore G(x): se il resto della divisione è uguale al polinomio R(x), contenuto nell’FCS, la trama viene riconosciuta corretta, altrimenti viene scartata. Il tasso degli errori che si possono rilevare, usando questa tecnica di controllo di errore, è notevolmente soddisfacente. CRC-CCITT CRC-16 CRC-12 x16 + x12 + x5 +1 x16 + x15 + x2 +1 x12 + x11 + x 3 + x2 +x+1 Fig. 8.2-1: Alcuni polinomi generatori standardizzati. Nonostante il metodo esposto potrebbe sembrare laborioso, Peterson e Brown (nel 1961) lo hanno applicato, effettuando tutti i calcoli necessari attraverso un circuito costituito da shift registers; nonostante ciò, questo hardware non è quasi mai usato nella pratica. 8.3 Gestione degli Errori Sinora abbiamo visto quali funzionalità devono essere presenti all’interno del DLL al fine di rendere possibile il colloquio tra due peer entities. Con le funzionalità sin ora descritte, il servizio offerto è di tipo Best-Try: infatti, quando una frame arriva a destinazione corrotta, non viene attivato alcun meccanismo di recovery (recupero). Questo può andare bene per un protocollo Connection-Less, ma è chiaramente insufficiente per un protocollo Connection Oriented. Vediamo di descrivere alcune tecniche di rilevazione e correzione degli errori, dette anche tecniche di ERROR CONTROL. L’AUTOMATIC REPEAT REQUEST (ARQ - richiesta di ripetizione automatica) è una tecnica di ERROR CONTROL, nella quale l’entità ricevente controlla di volta in volta l’integrità della frame ricevuta, preoccupandosi di inviare una frame di controllo, detta ACK (ACKnowledgement), per confermare la corretta ricezione. Nel caso in cui la frame dovesse arrivare corrotta, allora, l’entità ricevente può, semplicemente, attendere che il sender rispedisca la frame, oppure può, immediatamente, inviare un NACK (Negative ACKnowledgement) per sollecitare la ritrasmissione della frame. Esistono in sostanza due tipi di ARQ: 5 A. IDLE RQ tipicamente utilizzato in protocolli character-oriented; B. CONTINUOUS RQ usato soprattutto nei protocolli bit-oriented. IDLE RQ L’Idle RQ è stato ideato per consentire, in maniera affidabile, lo scambio tra interlocutori di frame contenenti caratteri stampabili e di controllo. Fissiamo la nomenclatura: tipicamente le frame trasmesse vengono dette Information-Frame (I-Frame), mentre l’entità trasmittente e ricevente vengono dette Primary (P) e Secondary (S). Quindi l’IDLE RQ si preoccupa di garantire lo scambio di I-Frame tra P ed S mediante un collegamento seriale. L’Idle RQ prevede che P spedisca una I-Frame, attendendo l’ACK da S; solo dopo che l’ultima frame spedita è pervenuta corretta a S, P può spedire una nuova I-Frame. D’altro canto S invia un ACK solo nel caso in cui la I-Frame ricevuta è corretta (Fig. 8.3-1). L’Idle RQ è noto in letteratura anche come Send-and-Wait o Stop-and-Wait: questi nomi enfatizzano il fatto che, come detto, l’entità Primary spedisce una I-Frame, attendendo l’ACK dalla Secondary Nel caso in cui P non riceve l’ACK, entro un certo intervallo di tempo (in cui la I-Frame è giunta corrotta a S o in cui l’ACK si è perso), tale entità trasmittente è autorizzata a rispedire l’ultima I-Frame inviata. Questa modalità di funzionamento è anche detta ⇒ Implicit Retransmission (Fig. 8.3-2), per distringuerla dalla modalità ⇒ Explicit Request (Fig. 8.3-3), nella quale S invia anche un NACK a P per sollecitare la ritrasmissione della I-Frame che è pervenuta corrotta. Osserviamo che in entrambe le configurazioni il timeout interval (intervallo di tempo entro il quale si attende l’arrivo di un ACK o NACK) deve essere scelto opportunamente: esso deve essere almeno pari al tempo che intercorre tra la ricezione della I-Frame e il processamneto della stessa da parte di S, più il tempo necessario affinché l’ACK (o NACK) sia ricevuto e processato da P. Notiamo che, nel caso in cui l’ACK non sia perduto, P, allo scadere del timeout interval, rispedisce l’ultima I-Frame non confermata, ed S riceve nuovamente la stessa frame. Questa situazione è gestita dall’Idle RQ considerando due contatori: V(S) e V(R). ¾V(S) rappresenta il numero di sequenza da assegnare alla prossima frame da spedire, ¾mentre V(R) rappresenta il numero di sequenza della prossima frame attesa. ¾Si suppone, inoltre, che i numeri di sequenza non siano limitati, ossia possono crescere indefinitivamente senza ripetersi. Il contatore V(R) viene incrementato ogni volta che viene ricevuta una I-Frame corretta, mentre V(S) viene incrementato ogni qual volta si riceve l’ACK per l’ultima I-Frame trasmessa. Grazie a questi contatori, nel caso in cui un ACK venga perso, non si hanno duplicati. Infatti, quando S riceve la I-Frame ritrasmessa da P, confrontando il suo contatore V(R) con il numero di sequenza contenuto nella frame, si rende conto di essere di fronte ad un duplicato. Trascura quindi questa I-Frame ed invia l’ACK a P per sincronizzarlo. L’ACK (o NACK) contiene sempre il numero di sequenza dell’ultima frame ricevuta. L’UTILIZZAZIONE DEL LINK con questa tecnica non è molto alta, ma può essere aumentata usando l’explicit request. Così facendo, ogni qual volta una frame viene danneggiata, non è necessario attendere un intero timeout interval per avere la ritrasmissione. Il vantaggio che si ha con l’uso di questa tecnica è tanto maggiore quanto più alto è il BER (bit error rate). Per implementare questo protocollo IDLE RQ è sufficiente un link half-duplex. 6 Timer Started Primary (P) Timer Stopped I(N) Timer Stopped I(N+1) I(N) Secondary (S) Timer Started ACK(N) I(N) Timer Started I(N+2) I(N+1) ACK(N+1) I(N+1) Fig. 8.3-1: Comportamento del protocollo Idle RQ nel caso corretta trasmissione. Timer Started Timeout Interval l Primary (P) I(N) Timer Retarded I(N) I(N) I(N) I(N) Secondary (S) Timer Stopped Timer Started I(N+1) ACK(N) I(N) Fig. 8.3-2: Idle RQ nel caso in cui si danneggia una I-Frame trasmessa - IMPLICIT RETRANSMISSION Timer Started Primary (P) I(N) I(N) Secondary (S) Timer Stopped Timer Started I(N) NACK(N) I(N) Timer Stopped I(N) Timer Started I(N+1) ACK(N) I(N) Fig. 8.3-3: Idle RQ nel caso in cui si danneggia una I-Frame - EXPLICIT REQUEST CONTINUOUS RQ Il Continuous RQ consente UTILIZZAZIONI DEL LINK decisamente migliori rispetto all’Idle RQ, a spese di maggiori requisiti in termini di buffer. Questa tecnica di ERROR CONTROL, contrariamente all’Idle RQ, prevede che P spedisca continuamente I-Frame. Poiché, istante per istante, vi sono un certo numero di frame che attendono l’ACK, P mantiene una lista detta Retransmission List, nella quale memorizza tutte le I-Frame non ancora confermate. Ogni I-Frame contiene un numero di sequenza distinto, scelto tenendo conto del contatore V(S). Le I-Frame che S riceve correttamente, vengono inserite da S in una lista di attesa, detta Link Receive List, per essere successivamente processate. 7 Inoltre per ogni frame ricevuta correttamente, S invia un ACK con numero di sequenza pari a quello della I-Frame correttamente ricevuta. La ricezione di un ACK da parte di P, porta alla rimozione della I-Frame (a cui l’ACK fa riferimento) dalla Retransmission List. In assenza di errori questa tecnica garantisce un utilizzazione del link che si avvicina al 100%, in quanto P può spedire I-Frame senza alcuna restrizione. Nel caso in cui si verifica un errore, esistono due diverse tecniche di ritrasmissione previste dal CONTINUONUS RQ, note come SELCTIVE REPEAT e GO-BACK-N. IL SELECTIVE REPEAT prevede due varianti: ⇒ l’implicit retransmission ⇒ l’explicit request proprio come nel caso dell’Idle RQ. Nell’implicit retransmission, P procede alla ritrasmissione solo allo scadere di un timeout interval associato ad una data I-Frame, che probabilmente è stata danneggiata o addirittura persa. Invece, nell’explicit request, S invia un NACK per richiedere la ritrasmissione di una ben precisa I-Frame che è pervenuta corrotta. Anche in questo caso, se P non ha ricevuto né l’ACK e né NACK, entro un prestabilito timer associato ad ogni IFrame, P ritrasmette la I-Frame in questione. Ricordiamo però che uno degli obiettivi del DLL è di consegnare i pacchetti al livello superiore nello stesso ordine con cui essi sono stati spediti. Quindi, come mostra la Fig. 8.3-4, nel caso in cui una I-Frame viene corrotta, S memorizza nella link receive list le successive frame che intanto continuano ad arrivare. Non appena la I-Frame mancante (cioè la I-Frame corrotta) arriva, S riordina la lista ed il tutto viene trasferito al livello superiore. La versione explicit request funziona in modo analogo. Fig. 8.3-4: SELECTIVE REPEAT nel caso dell’IMPLICIT RETRANSMISSION. 8 La tecnica Selective Repeat presenta il seguente problema: dovendo S bufferizzare tutte le frame ricevute fuori ordine, si ha bisogno di notevoli capacità di memoria dei buffer, presenti nel sottosistema di comunicazione, specialmente nel caso in cui le frame hanno dimensioni notevoli. A causa di questo problema molti protocolli preferiscono usare lo schema di controllo GO-BACK N. IL GO-BACK N, come suggerisce lo stesso nome, è uno schema di controllo in cui non appena S rileva una I-Frame fuori ordine, informa P, implicitamente (sfruttando il timeout interval) o esplicitamente (inviando un NACK), di iniziare a ritrasmettere le frame a partire da un certo numero di sequenza. Mentre tutte le I-Frame arrivate fuori ordine vengono scartate senza alcuna esitazione. In Fig. 8.3-5 è mostrato il comportamento del GO-BACK N nel caso di explicit request, mentre in Fig. 8.3-6 viene mostrato un esempio relativo al caso di implicit retransmission. È importante notare che nel GO-BACK N gli ACK possono essere cumulativi, ossia un dato ACK può confermare tutte le frame che precedono la frame a cui l’ACK fa riferimento. Osserviamo, infine, che poiché le frame vengono accettate solo in ordine, allora non sorge il problema di mantenere grandi buffer per riordinare le frame arrivate fuori sequenza. Fig. 8.3-5: GO-BACK N nel caso di RICHIESTA ESPLICITA. 9 Fig. 8.3-6: GO-BACK N nel caso di RICHIESTA IMPLICITA. Sin ora si è supposto che il traffico di I-Frame fosse solo da P ad S. In generale, se il traffico è bidirezionale, si può usare una tecnica nota con il nome di piggybacking (farcire il maiale), attraverso cui si invia l’ACK includendolo in un campo di controllo opportuno della I-Frame da trasmettere. In pratica ogni I-Frame ha nel control field un campo che contiene il numero di sequenza N(S) ed un campo contenente N(R), il quale rappresenta il numero di sequenza dell’ultima I-Frame ricevuta correttamente. 8.4 Controllo di Flusso Il controllo di flusso (Flow Control) consiste nell’impedire che P trasmetta ad un ritmo medio più alto rispetto a quello che S può, o vuole, accettare; in questo modo si garantisce al riceiver buffer di memorizzare tutte le I-Frame ricevute. La condizione indispensabile per non incappare in una situazione di sovraccarico è che il tempo di trasmissione di N trame deve essere inferiore al “tempo di ciclo”, ovvero al tempo di ritardo dovuto al viaggio di andata e ritorno della trama lungo il link. La tecnica tipicamente usata per realizzare il controllo di flusso è nota con il nome di SLIDING WINDOW (FINESTRA SCORREVOLE). Questa tecnica consiste nel porre un limite massimo al numero di I-Frame, che possono essere spedite da P, attraverso un’azione auto-regolante. Infatti P trasmette continuamente se S invia l’ACK (di corretta ricezione) con un ritmo compatibile a quello con cui riceve le I-Frame. Nel caso in cui S dovesse trovarsi in affanno, gli basta smettere di inviare ACK per bloccare P. Per spiegare nel dettaglio questo metodo faremo riferimento alla Fig. 8.4-1, la quale rappresenta la situazione in cui si trova ogni singola I-Frame spedita. 10 P View Frame in corso di trasmissione Prima frame non ancora confermata Frame spedibili Frame in volo I(0) I(1) I(2) … I(i t-1) I(i t) … I(i r-1) I(i r) … I(c r) … I(c t) … I(s t) … I(s r) … Senso di propagazione Ultima Frame Confermata Conferme in volo Frame ricevute ma non ancora confermate Frame in corso di ricezione S View fr Fig. 8.4-1: Sliding Window Dalla Fig. 8.4-1 si vede che la frame I(ct) è in corso di trasmissione, mentre la frame I(cr) è in fase di ricezione; quindi le frame, comprese tra queste due, sono “in volo”, ossia si stanno propagando nel mezzo di comunicazione. La frame I(i t-1) è l’ultima di cui P ha ricevuto l’ACK, mentre non ha ancora avuto alcuna conferma (né smentita) sulla corretta ricezione di I(it). Il meccanismo dello SLIDING WINDOW, consiste nell’imporre a P di trasmettere solo I-Frame il cui numero di sequenza appartiene ad un certo intervallo avente ampiezza pari ad ft, detto finestra di trasmissione. Nel caso rappresentato in Fig. 8.4-1, essendo it l’estremo inferiore di tale intervallo, P può spedire solo le frame I(k) i cui numeri di sequenza sono tali che: it ≤ k ≤ it + f t = st Per quanto riguarda il ricevitore, S ha già confermato tutte le frame sino a I(ir-1), mentre non ha ancora inviato l’ACK per la frame I(ir). Quindi l’estremo inferiore ir della finestra fr del ricevitore è ovviamente diverso dall’estremo inferiore della finestra di trasmissione; S accetterà solo le frame I(k) il cui numero di sequenza soddisfa la seguente relazione: ir ≤ k ≤ ir + f r = s r Dunque P non può trasmettere né le frame aventi numero di sequenza minore dell’estremo inferiore della finestra di trasmissione (in quanto esse sono già state ricevute correttamente) e né le I-Frame alla destra della finestra di ricezione (in quanto non ha ancora ricevuto il consenso da S). S, invece, ignorerà tutte le I-Frame il cui numero di sequenza cade fuori dalla finestra di ricezione. Nel momento in cui arriva la conferma cumulativa relativa alle trame comprese tra i t e i r-1, il margine inferiore della finestra di trasmissione verrà spostato ad i r. Conseguentemente verrà traslata tutta la finestra: questo spiega il perché tale controllo di flusso è chiamato Sliding Window (finestra scorrevole). Tipicamente le finestre di trasmissione e di ricezione si sovrappongono parzialmente: infatti ft ed fr devono essere scelte in modo tale che si abbia: ir −1 ≤ st ≤ sr Sinora abbiamo ipotizzato che i numeri di sequenza potevano crescere indefinitamente. Ma questa ipotesi è tutt’altro che realistica. 11 Nella pratica non si usa una numerazione infinita, ma di tipo modulare. In generale i numeri di sequenza possono crescere da 0 ad m-1 per una numerazione modulo m (gli incrementi devono essere intesi in modulo m). Ad esempio, in una numerazione modulo 8 (m=8), se sono state trasmesse le trame con N(S)=5,6,7,0,1,2,3 (m-1=7) (Fig. 8.4-2), bisogna necessariamente aspettare che il ricevitore invii l’ACK prima di trasmettere altre frame. N(S) _ 5 6 7 0 1 2 3 _ N(R) _ 0 7 1 6 2 5 3 4 non può essere trasferito prima dell’ACK della frame 5 Fig 8.4-2: window control in una numerazione modulo 8 Esistono situazioni in cui utilizzare una finestra di ampiezza pari a 7, è molto limitante: • in un collegamento via satellite, in cui il tempo di propagazione non è trascurabile rispetto al tempo di trasmissione, o • in link di capacità molto elevata, un tempo di trasmissione di 7 trame potrebbe risultare decisamente inferiore al round trip delay; per cui avere la possibilità di trasmettere non più di 7 trame, prima di ricevere l’ACK, può dar luogo a situazioni di ⇒ deadlock – il protocollo non riesce ad evolvere in quanto c’è una situazione di blocco (ad esempio due stazioni che aspettano qualcosa che non arriva e che non potrà mai arrivare); ⇒ starvation – il sender può trasmettere, ma è impedito a farlo in quanto il funzionamento corretto del protocollo impone che deve prima attendere l’ACK, per cui la risorsa trasmissiva risulta essere bloccata. Questo spiega perché il protocollo l’HDLC (trattato qui di seguito) utilizza anche la numerazione modulo 128, in cui si possono riservare ai N(S) e N(R), del campo di controllo, 7 bit, che corrisponde a poter trasmettere 127 trame alla volta prima di aspettare l’ACK. Inoltre, per garantire che non vengano ricevute frame duplicate, bisogna far sì che ft ed fr soddisfino la seguente relazione: ft + f r ≤ m Esistono protocolli in cui la dimensione delle finestre di trasmissione e ricezione può essere negoziata in fase di apertura della connessione, mentre in altri protocolli tali dimensioni possono essere variate dinamicamente in base alle esigenze del momento. Lo Sliding Window è un controllo di flusso esplicito che consente di ottimizzare l’efficienza della linea, ma che entra in crisi in una situazione di congestione. 12 Esistono anche tecniche di controllo di flusso preventivo, in cui il sender non può trasmettere se di volta in volta il receiver non accetta di ricevere ulteriori informazioni. 8.5 Gestione del Collegamento Sin ora abbiamo visto come sia possibile scambiare frame tra due entità connesse da un link seriale. Affinché questo scambio possa avvenire, le entità che desiderano colloquiare devono poter instaurare una connessione, ed analogamente, quando le due entità hanno concluso il loro colloquio devono poter chiudere tale connessione. Quindi uno dei requisiti dei protocolli di linea è quello di essere capaci di guidare il sistema, da una fase all’altra, seguendo una serie di procedure dipendenti dal particolare protocollo. 8.6 Il Protocollo BSC (Binary Synchronous Control) Il primo protocollo CHARACTER-ORIENTED fu il BSC (Binary Synchronous Control), introdotto dall’IBM, in cui il messaggio era una collezione sequenziale di caratteri composti da 8 bit (7 bit significativi + un bit di parità per il controllo di errore), secondo il codice ASCII. carattere Carattere di controllo Fig. 8.6-1: sequenza di caratteri Per delimitare il campo dati si utilizzavano opportuni caratteri di controllo. Inoltre era anche presente un header di caratteri di controllo. In ricezione, grazie alla presenza di questi caratteri, si riusciva a delimitare il campo, ad identificare il tipo di messaggio di controllo pervenuto, ecc. Quando non c’era nulla da trasmettere, venivano inviati in linea dei caratteri (di controllo) di riempimento. Il protocollo BSC era un protocollo two way alternate, in quanto permetteva l’invio di informazioni in maniera alternata in entrambe le direzioni (come l’Alternate Bit Protocol). Questo lo ha caratterizzato, impropriamente, di tipo “half-diplex”: in realtà ci si riferiva alla capacità logica del messaggio di sfruttare o meno una linea di trasmissione e non alla possibilità di realizzare, a livello fisico, un link che supporti simultaneamente la comunicazione nei due sensi (full-diplex) o in maniera alternata (half-diplex). In pratica, il protocollo BSC operava in handshake (a stretta di mano): una stazione, dopo aver inviato un messaggio, doveva aspettare che il ricevitore inviasse un messaggio di controllo (ACK) di corretta ricezione, prima di poter trasmettere il successivo messaggio. Secondo questo criterio, se una stazione sta trasmettendo dati, l’altra sarà vincolata a inviare solo ACK; a tal proposito si è pensato ad un meccanismo che permettesse alla stazione passiva, mediante un opportuno messaggio di controllo, di richiedere l’uso della linea per inviare dati. Il protocollo BSC è stato presto abbandonato e sostituito dal protocollo HDLC, perché non sfruttava a pieno le capacità full-duplex delle linee. 13 8.7 Il protocollo HDLC (High-Level Data Link Control) L’HDLC è nato come l’estensione del protocollo SDLC (Synchronous Data Link Control) della IBM, dopo il superamento del BSC. Dopo essere stato standardizzato, ancora oggi rappresenta il modello di riferimento classico per i protocolli di linea. Ad esempio il protocollo che viene utilizzato nelle reti ISDN a banda stretta è una variante dell’HDLC. L’HDLC, è un protocollo full-duplex (più correttamente two way symultaneus, visto che permetteva il trasferimento di informazioni contemporaneamente in entrambe le direzioni del collegamento), sincrono e bit-oriented, definito dall’ISO per essere usato sia in collegamenti puntopunto, che in collegamenti multipunto, in cui è presente una dorsale a cui è connessa una stazione Master (principale) che controlla tutte le altre stazioni secondarie dette Slave. Stazione Master Stazione Master Fig. 8.7-1:Configurazioni multipunto In particolare la stazione Master si occupa • del controllo di flusso • del recupero degli errori e • delle tecniche di arbitraggio per evitare collisioni sulla linea multipunto. In pratica la stazione Master, attraverso la tecnica di pollin-selecting (to poll=stimolare una risposta), interagisce ciclicamente con tutte le stazioni Slave, in modo round robin o con priorità, inviando messaggi di controllo che informano quale delle stazioni secondaria è autorizzata a trasmettere per un determinato lasso di tempo. Trascorso questo tempo, la stazione Master riprende il controllo per interrogare se la stazione successiva intende trasmettere. Il formato delle frame dell’HDLC è riportato in Fig. 8.7-2. Bits 8 8o multipli di 8 8 o 16 n 8 o 16 8 F A C I FCS F OPENING FLAG ADDRESS CONTROL INFORMATION FRAME CLOSING CHEK FLAG SEQUENCE Fig. 8.7-2: Formato delle frame del protocollo HDLC. IL CAMPO INFORMATION, (data field o information field) ha una lunghezza che dipende dall’ampiezza del messaggio che si vuole trasmettere. Vedremo successivamente che i pacchetti (o messaggi) di livello 3 del protocollo X.25 (che regola l’accesso alle reti pubbliche a commutazione di pacchetto) processati dall’HDLC, sono di lunghezza variabile strutturati in gruppi di 8 bit. Questo significa che il campo I è costituito da un numero di bit multiplo di 8. 14 IL CAMPO ADDRESS, formato da 8 bit o da un multiplo di ottetti, è fondamentale se l’HDLC è utilizzato in una configurazione multipunto: infatti, in tal caso, in A è contenuto l’indirizzo della stazione destinataria del messaggio. Viceversa in una configurazione punto-punto, il campo A è ridondante ed è mantenuto solo per avere l’uniformità del formato. IL CAMPO CONTROL serve a specificare se il messaggio è di controllo o con dati. Se si tratta di messaggio di controllo, C indica di che tipo di controllo si tratta. Viceversa, se il messaggio contiene dati, in C troviamo delle informazioni utili al funzionamento del protocollo. I CAMPI FLAG, costituiscono rispettivamente lo start delimiter e l’end delimiter, e sono composti dalla sequenza 01111110. Due frame contigue devono essere separate da almeno un FLAG, mentre in assenza di traffico vengono inviati continuamente FLAG. Quindi quando il ricevitore incontra l’ottetto 01111110, capisce che la trama si è conclusa ed inizia a processare tutto quello compreso tra un flag di apertura e un flag di chiusura. Un flag di chiusura di una trama può rappresentare il flag di apertura della trama successiva. Nell’HDLC, essendo un protocollo bit-oriented, la trasparenza dei dati, che consente di trasferire in linea qualunque dato, senza che esso interferisca con i meccanismi protocollari, è ottenuta utilizzando la tecnica del bit-stuffing. Per come è organizzata la frame dell’HDLC, tra due flag si ha un numero di bit che è multiplo di ottetti: quindi, visto che un carattere è composto da 8 bit (1 byte), perché l’HDLC non lo si può considerare un protocollo orientato a carattere? La risposta è immediata se tiene conto dell’operazione di bit stuffing: infatti dopo il bit stuffing non è detto che fra due flag si abbia ancora un numero di bit multiplo di otto. IL CAMPO FCS, contiene i bit di ridondanza calcolati su tutto il contenuto della frame (ossia ADDRESS+CONTROL+INFORMATION) utili ad effettuare il controllo di errore. La tecnica usata è quella del CRC (Cyclic Redundancy Check), con polinomio generatore: G(x) = x16 + x12 + x5 + 1 Quindi nel campo FCS viene riportato il polinomio resto R(x)=P(x) - Q(x)G(x) che nel nostro caso è al più del 15° grado: questo significa che in FCS è inserita una stringa di massimo 16 bits. Il ricevitore, pervenuta la frame, estrae il contenuto tra un flag e l’altro, esclude il campo FCS e divide il tutto per G(x); Se il resto della divisione è uguale al polinomio R(x), la trama viene riconosciuta corretta, altrimenti viene scartata. Nel caso in cui il resto della divisione coincide con R(x), non si può essere certi che la trama non sia affetta da errori: infatti l’errore potrebbe essere tale da ottenere un polinomio P’(x) che, diviso per G(x), dia lo stesso resto R(x). In queste situazioni ci si affida ad un meccanismo di controllo che risiede ad un livello superiore, tipicamente al quarto livello Transport Layer, dove i controlli vengono fatti end-to-end. La Fig. 8.7-3, seguente, mostra le varie fasi del processo di composizione della frame, in trasmissione e in ricezione, a partire da una DL-SDU (Data Link – Service Data Unit) proveniente dal livello superiore (livello 3). 15 I DL-SDU DL PCI PROC I A C TRASMISSIONE I A C I BIT F A C I FCS F F A C I FCS F FLAG STUFF DL-SDU DL PCI PROC FCS FCS A C RICEZIONE I A C I FCS DE FCS FLAG STUFF Fig. 8.7-3: Data Link Frame Process Le modalità secondo cui operano i due interlocutori, vengono dette, nella terminologia dell’HDLC, MODI OPERAZIONALI. Questi sono raggruppati in due classi di procedura: • UNBALANCED CONFIGURATION • BALANCED CONFIGURATION NELLA CONFIGURAZIONE UNBALANCED solo uno dei due interlocutori, detto “Primario” (P), si occupa del recupero degli errori e del controllo di flusso. Tipicamente un sistema multipunto è costituito da un primario e da un certo numero di “Secondari” (S). Inoltre per enfatizzare la sottomissione dei secondari, i messaggi inviati dal primario vengono detti comandi, mentre i messaggi inviati dai secondari risposte. In tale configurazione sono possibili due modi operazionali: 1. NRM (Normal Responce Mode) - I secondari possono iniziare la trasmissione di dati, solo dopo aver ricevuto l’esplicito permesso da parte del primario. 2. ARM (Asynchronous Responce Mode) - I secondari possono iniziare la trasmissione di dati anche senza l’esplicito permesso del primario. LA CONFIGURAZIONE BALANCED è applicabile solo a configurazioni punto-punto; in tal caso entrambi gli interlocutori possono comportarsi sia da primario che da secondario. L’unico modo operazionale definito per questa classe è l’ABM (Asyinchronous Balanced Mode), in cui entrambi gli interlocutori possono inviare comandi e risposte senza dover richiedere il permesso dell’altra entità (ad esempio nelle reti pubbliche, l’utente vuole garantita la possibilità di attivare una comunicazione in qualsiasi momento lo desideri). Il campo Address nella configurazione Balanced, viene usato solo per distinguere i comandi dalle risposte. Ogni combinazione (classe di procedura, modo operazionale) usa un certo set di comandi e risposte, i quali vengono detti, nella terminologia dell’HDLC, “ELEMENTI DI PROCEDURA”. Nella Fig. 8.7-4 è mostrata una tabella che contiene un elenco degli ELEMENTI DI PROCEDURA utilizzati nella classe bilanciata. 16 Nella tabella (Fig. 8.7-4) si può osservare che il CAMPO DI CONTROLLO, nel caso di numerazione modulo 8 (cioè non possono essere trasmesse più di 8 trame consecutive senza ricevere l’ACK), è composto da 8 bit che permettono di discriminare i diversi tipi di frame. In particolare ⇒ le Information Frame servono per trasmettere dati, ⇒ mentre le Supervisory Frame, servono per l’invio di informazioni sul controllo di flusso. ⇒ Infine le Unnumbered Frame sono usate per segnali di controllo, di inizializzazione o disconnesione della connessione. Tipo Comandi Control Field Risposte 0 1 2 3 Information 0 N(S) I (information) Frame 1000 RR (Receive Ready) Supervisory RR (Receive Ready) 1000 RNR (Receive Not Ready) RNR (Receive Not Ready) Frame REJ (Reject) REJ (Reject) 1000 1111 DM (Disconnect Mode) SABM (Set Asynchronous 1111 Balanced Mode) Unnumbered 1100 DISC (Disconnect) Frame 1100 UA (Unnambered Ack.) FRMR (Frame Reject) 1110 4 5 6 7 P/F N(R) P/F F N(R) N(R) N(R) 000 P 100 P 010 F 110 F 001 P/F P/F Fig. 8.7-4: Elementi di procedura della classe bilanciata - formato del campo di controllo in una numerazione modulo 8. Il primo bit serve a capire se si tratta di una trama informativa (bit 0) o di una controllo (bit 1). Il tipo di trama di controllo (supervisory o unnumbered) è deducibile dal secondo bit. Per quanto riguarda le trame informative, troviamo dopo il primo bit i campi N(S), P/f e N(R); nella numerazione modulo 8 solo 3 i bit che identificano N(S) e N(R), mentre nella numerazione 128 (Fig.8.7-5) N(S) e N(R) sono formati da 7 bit. INFORMATION FRAME Bits 1 2 3 4 5 0 N(S) P/F N(R) 6 7 8 SUPERVISORY FRAME Bits 1 2 3 4 5 6 1 0 S S 0 0 P/F 7 0 8 0 N(R) Fig. 8.7-5: formato del campo di controllo in una numerazione modulo 128. 17 Date due stazioni A e B agli estremi di un collegamento, N1(S), N1(R): campi delle trame trasmesse da B ad A VA(S), VA(R), VA(K) VB(S), VB(R), VB(K) 1 A 2 B N2(S), N2(R): campi delle trame trasmesse da B ad A VA(S) → Numero d’ordine dell’ultima trama inviata da A a B; VA(R) → Numero d’ordine dell’ultima trama ricevuta corretta da A; VA(K) → Numero d’ordine dell’ultima trama ricevuta corretta da B; Fig. 8.7-6: comunicazione fra due stazioni A e B agli estremi di un collegamento quando A riceve una trama informativa da B, si controlla che N2(S)=VA(R)+1 e si aggiornano i contatori VA(R) e VA(K) nel seguente modo: VA(R)= N2(S) VA(K)= N2(R)-1 Il nodo A, prima di iniziare la trasmissione di una trama verso B, controlla la differenza VA(S)-VA(K) per verificare che la trama in questione rientri nella finestra di trasmissione di lunghezza W, cioè se VA(S)-VA(K)≤W-1. Se è vera tale condizione, il nodo compie le seguenti operazioni: 1. VA(S)= VA(S)+1; 2. N1(S)=VA(S); 3. N1(R)= VA(R)+1; 4. trasmette la trama. In Fig. 8.7-7 è riportato per il protocollo HDLC un diagramma che rappresenta le fasi di colloquio in una procedura bilanciata, con numerazione delle frame modulo 8. Attraverso questo diagramma analizziamo le funzionalità di gestione della procedura di collegamento, dalla fase di setup (esplicito) alla fase di chiusura del collegamento. Osserviamo che L’INIZIALIZZAZIONE DEL LINK avviene mediante l’invio di una frame unnumbered di tipo SABM (Set Asynchronous Balanced Mode cioè inizio modo asincrono bilanciato), alla quale l’interlocutore ricevente comunica la sua disponibilità trasmettendo una frame UA (Unnumbered Acknowledgemet). Non appena l’entità A riceve la frame UA, si passa alla FASE DI TRASFERIMENTO DELLE Durante questa fase, il controllo di sequenza ed il controllo di flusso, sono implementati con un MECCANISMO A FINESTRA: questo prevede una finestra di ricezione di ampiezza unitaria (fr = 1) e una finestra di trasmissione compresa tra 1 e 7 (ft ∈[1,7]). INFORMAZIONI. 18 Ogni I-Frame contiene nel suo Control Field i due numeri di sequenza (vedi tabella di Fig. 8.7-4): N(S) e N(R). ⇒ In N(S) troviamo il numero di sequenza delle frame immesse nella linea, mentre ⇒ in N(R) troviamo il numero di sequenza delle frame ricevute correttamente. Cioè N(R) conferma la corretta ricezione delle N(R)-1 I- Frame (se N(R) > 0). Quindi N(R) effettua il piggybacking dell’ACK: infatti in una comunicazione full-duplex, la stazione che inizia a ricevere, può inviare l’ACK cumulativo, delle trame correttamente pervenute, inserendoli nel campo N(R) della trama informativa che intende trasmettere. Nel caso in cui non vi siano I-Frame da spedire su cui fare il piggybacking, vengono inviate delle Supervisory frame del tipo RR (Receive Ready) o RNR (Receive not Ready), per indicare disponibilità o meno a ricevere altre I-Frame. Il comando RNR è utilizzato specialmente se si verificano condizioni di congestione dovute alla saturazione dei buffer di ricezione. Inoltre N(S) e N(R) svolgono anche il controllo di flusso utilizzando la tecnica SLIDING WINDOW prima esaminata. Ogni FRAME RICEVUTA FUORI SEQUENZA viene scartata; in pratica quando l’entità ricevente rivela un errore di sequenza, invia un messaggio di REJ (Reject) (tabella di Fig. 8.7-4) all’entità trasmittente, la quale ritrasmette tutte le frame a partire dalla frame con il numero di sequenza N(R) presente nel campo di controllo della frame REJ. Per prevenire i problemi che potrebbero creare le PERDITE DEGLI ACK, ad ogni frame inviata è associato un timer. Lo scadere del timer implica la ritrasmissione del comando, con il 5° bit del campo di controllo posto ad 1 (questo bit viene detto Poll-bit per i comandi e Final-bit per le risposte). Così si forza l’interlocutore ad inviare comunque una risposta, anche se questo si trova in uno stato in cui non è necessario rispondere. La risposta è una Supervisory frame avente il 5° bit del campo di controllo posto ad 1. Se si riceve una trama errata, contenente ad esempio un campo di controllo non previsto, o un N(R) non valido, o un campo informativo troppo lungo, il receiver invia un FRMR (Frame Reject cioè un rifiuto di trama) che, pervenuto al trasmettitore, provoca l’invio di un SABM. Nel caso in cui una frame viene ritrasmessa un certo numero di volte, senza ottenere alcuna risposta, viene avviata la PROCEDURA DI RESET del link, che è analoga a quella di inizializzazione: infatti si invia il comando di inizializzazione SABM a cui fa seguito la trasmissione di una frame UA da parte dell’entità ricevente. Nel caso in cui non si ottiene risposta nemmeno all’SABM, dopo un certo numero di ritrasmissioni, si procede alla disconnessione del collegamento. LA PROCEDURA DI RISINCRONIZZAZIONE viene attivata ogni qual volta il recupero degli errori non è effettuato mediante la semplice ritrasmissione della frame. Terminato il colloquio fra le due entità, LA FASE DISCONNESSIONE è attivata mediante l’invio di un comando DISC, al quale l’altro interlocutore deve rispondere con un UA. 19 ENTITA’ A ENTITA’ B SABM UA I, N(S)=0, N(R)=0 I, N(S)=0, N(R)=0 I, N(S)=1, N(R)=1 I, N(S)=2, N(R)=1 I, N(S)=3, N(R)=1 I, N(S)=4, N(R)=1 I, N(S)=5, N(R)=1 REJ, N(R)=2 RR, N(R)=1 I, N(S)=1, N(R)=5 I, N(S)=2, N(R)=5 perdita in linea I, N(S)=3, N(R)=6 I, N(S)=4, N(R)=6 I, N(S)=2, N(R)=6 I, N(S)=3, N(R)=6 I, N(S)=4, N(R)=6 RR, I, N(R)=5 perdita in linea tempo di guardia I, N(S)=2, N(R)=6 REJ, N(R)=5 I, N(S)=5, N(R)=6 DISC UA Fig. 8.7-7: Esempio di colloquio tra due entità nel protocollo HDLC in una procedura bilanciata. 20 COMMENTO DELLA FIG. 8.7-7 Le due entità A e B di fig. 8.7-2 hanno una finestra di trasmissione e pari a 5. Inizialmente A e B si scambiano i messaggi SABM e UA per aprire la connessione. La stazione di sinistra A riceve la prima trama informativa dalla stazione di destra B, per cui incrementa il valore N(R) portandolo da N(R) = O a N(R)=1. In questo modo, quando A invia la sua prima trama, la stazione B capirà che A ha ricevuto correttamente la trama, con N(S)=O, che precedentemente gli aveva trasmesso. Dal momento che B non trasmette alcuna trama, allo scadere del time out manda un Receive Ready con N(R)=4, per indicare che ha ricevuto correttamente le trame fino a quella con valore N(R) = 3. Quando B trasmette ad A la trama con N(S)=2, si ha una perdita in linea: dunque A, non appena riceve la trama con N(S) = 3, accorgendosi dell’errore, trasmetterà il comando di Reject, con N(R)=2, per chiedere la ritrasmissione della trama mancante, e di tutte quelle che erano state inviate successivamente ad essa. Invece, nel caso in cui la stazione A perde il Receive Ready con N(R) = 5, trascorso il tempo di guardia, B invierà nuovamente la prima trama di cui non aveva ricevuto l'ACK. Quest’ultima, però, viene rigettata con un N(R) pari al valore dell'ultima trama ricevuta correttamente, e quindi la trasmissione riprenderà dal punto richiesto dalla stazione ricevente. Quando la stazione A manda il DISC, B risponde con un UA chiudendo la connessione. 8.8 Analisi dei Protocolli di Linea In questa sezione vedremo di valutare le prestazioni, in termini di massimo THROUGHPUT (inverso del tempo minimo che intercorre tra l’istante di trasmissione del 1° bit di una trama e l’istante di trasmissione del 1° bit della trama successiva), che si ottengono con i due protocolli: • STOP AND WAIT • GO-BACK N visti in precedenza. Ricordiamo che il protocollo STOP AND WAIT non è altro che l’IDLE RQ, mentre il protocollo GOBACK N è una delle tecniche utilizzabili in caso di CONTINUOUS RQ. L’analisi presentata qui di seguito, presuppone valide le seguenti ipotesi: 1. 2. 3. 4. 5. i numeri di sequenza non sono limitati; le frame hanno lunghezza fissa. il round trip propagation delay tra il trasmettitore ed il ricevitore è noto e costante; il processing delay al ricevitore è noto e costante; il trasmettitore opera in condizioni di saturazione, ossia ha sempre delle frame da spedire (questa ipotesi è essenziale visto che siamo interessati a ricavare il massimo throughput). I risultati che otterremo evidenzieranno le principali differenze tra i due tipi di protocolli anzidetti. PROTOCOLLO STOP AND WAIT Nelle ipotesi presupposte, valutiamo il max throughput di questo protocollo. Definiamo i seguenti tempi: ti tempo necessario per trasmettere una frame (dipende esclusivamente dalla capacità del canale;. 21 tout time-out interval, ovvero il tempo che occorre aspettare dalla trasmissione di tproc tp ts una trama alla ricezione di un ACK; tempo di processamento; tempo di propagazione che impiega il messaggio, o l’ACK, trasmesso a propagarsi lungo la linea; tempo trascorso fino all’invio dell’ACK da parte del ricevente. Osserviamo che il time-out interval tout deve soddisfare la relazione: t out ≥ t p + t proc + t s + t p ≅ 2 ⋅ t p + t s (1) dove abbiamo lecitamente supposto il tempo di processamento tproc incluso all’interno del tempo di propagazione. ts , come detto, rappresenta il tempo necessario a spedire l’ACK: esso ⇒ è trascurabile se il messaggio di ACK è breve, ⇒ mentre è notevole se il protocollo applica il piggy-backing, ovvero se la stazione, al momento ricevente, utilizza la trama informativa, che intende trasmettere, per inviare l’ACK. In tal caso è chiaro che ts è uguale al tempo di trasmissione ti relativo all’intero messaggio. Quindi, dalla (1) segue che t out ≥ 2 ⋅ t p + ti dati dati A B A ACK B ACK Fig. 8.8-1: trasferimento di dati e ACK tra le due stazioni A e B Nella condizione sfavorevole in cui la trama informativa, che viaggia da A a B, arriva quando è già stata trasmessa la trama con dati, spedita da B verso A, è necessario considerare un ulteriore ti che tenga conto del tempo di trasmissione della trama piggy-backing, la quale contiene la conferma. Cioè assumiamo come tempo minimo di trasmissione tra una trama e la successiva t out = 2 ⋅ t p + 2 ⋅ ti (2) Il tempo totale necessario affinché si concluda un ciclo nella trasmissione di una trama confermata (Fig. 8.8-2) è: tT = ti + tout (3) dove tT è anche detto “tempo di ciclo”. New Frame i … ti New (i+1) or Retransmitted (i) Frame tout ti tT … time Fig. 8.8-2: tempo minimo tra due frame successive 22 Per legare il comportamento prestazionale di tale protocollo con i parametri • • • • d = distanza del collegamento; C = capacità del link trasmissivo; v = velocità di propagazione del mezzo (tipicamente 2×108 m/s per linee dati); L = lunghezza della trama che circola; si utilizza il fattore a, definito come il rapporto tra il tempo di propagazione sul link e il tempo di trasmissione di un messaggio sull’interfaccia tra la stazione dati e il link: a= tp ti In tale accezione tp = lunghezza del mezzo [m] d = velocità di propagazione [m / s ] v ti = lunghezza del messaggio [bit ] L = capacità di trasmissione [bit / s ] C Quindi a= d L ⋅ v C In letteratura a può avere un’altra interpretazione, usata soprattutto nelle reti locali: a= = tp ti = C ⋅tp L = numero di bit in transito tra i 2 capi del mezzo = lunghezza del messaggio lunghezza del mezzo espresso in bit numero di bit per messaggio cioè, se i messaggi vengono trasmessi in modo continuativo, a rappresenta il numero di messaggi che al massimo si possono trovare in volo sul link di comunicazione. a potrebbe anche essere non intero, in quanto alcuni bit, dei messaggi trasmessi, possono non essere arrivati a destinazione. In ogni caso, il fattore a è un parametro importantissimo, che dipende dalla capacità del link e che sarà tanto più grande, quanto maggiore è la distanza del collegamento. Genericamente, per i vari tipi di collegamenti si ha: a<<1 a<1 a>1 a>>1 → → → → HSLNS e sistemi multiprocessori LANS collegamenti terresti collegamenti via satellite Nell’analisi prestazionale del protocollo STOP-AND-WAIT conviene utilizzare la seguente definizione per a: a= tT >1 ti (4) visto che tT contiene il tempo di trasmissione ti del singolo messaggio. 23 Esattamente utilizzando la (2) e la (3) segue che a= tp tT ti + t out ti + (2 ⋅ t p + 2 ⋅ ti ) = = = 3+ 2 > 3 ti ti ti ti Ritornando alla Fig. 8.8-2, allo scadere del tout, in virtù delle assunzioni fatte, o arriva un ACK, e quindi una nuova frame può essere trasmessa, oppure dovrà essere ritrasmessa l’ultima frame. Quindi, il sistema non può spedire più di una frame ogni tT secondi. Ciò equivale a dire che, nel caso in cui non vi siano errori in trasmissione, il massimo throughput 1 [ pack / sec] MAX THROUGHPUT = tT In realtà, il throughput ottenibile sarà minore, in quanto il mezzo di comunicazione sarà affetto da una certa probabilità di errore p (si trascurano gli errori sugli ACK). Detta q=(1-p) la probabilità che una frame sia ricevuta correttamente, la probabilità di ricevere una frame corretta dopo n ritrasmissioni (considerate indipendenti l’una dall’altra) è: Prob{n ritrasmissioni}=pn q Il numero medio di errori in trasmissione è quindi: ∑ n ⋅ pn ⋅ q Quindi in caso di errori in linea, il tempo medio necessario per ricevere una frame correttamente è pari a: t v = tT + [tT ⋅ (Pr ob. 1 ritrasmissione + 2tT ⋅ (Pr ob. 2 ritrasmissioni + ...] = [ ] [ ] = tT ⋅ 1 + ∑ n ⋅ p n ⋅ (1 − p) = tT ⋅ 1 + p ⋅ (1 − p) ∑ n ⋅ p n−1 = d n d = tT ⋅ 1 + p ⋅ (1 − p) ∑ p = tT ⋅ 1 + p ⋅ (1 − p) ∑ p n = dp dp 1 d 1 = tT ⋅ 1 + p ⋅ (1 − p ) = = tT ⋅ 1 + p ⋅ (1 − p) ⋅ 2 − − ( 1 ) ( 1 ) dp p p 1 − p + p t = T = tT ⋅ (1 − p ) (1 − p) Notiamo che nel caso in cui p = 0, ovvero non ci sono errori in linea, chiaramente tv coincide con tT. In questa relazione sono stati trascurati gli errori che potrebbero danneggiare gli ACK. Nelle ipotesi in cui il trasmettitore sia in saturazione, allora, tv rappresenta il tempo che trascorre tra la corretta trasmissione di due frame. Quindi il massimo throughput risulta essere l’inverso di tv, ossia: λmax = 1 (1 − p) (1 − p) = = tv tT a ⋅ ti dove si è utilizzata la (4) per esprimere λmax in funzione di a. 24 Detto λ l’effettivo arrival rate delle frame, se si considera che ρ= λ µ con 1 = ti µ segue necessariamente che ρ = λ ⋅ ti ≤ λmax ⋅ ti = (1 − p ) (1 − p ) <1 ti = a ⋅ ti a Questa relazione mostra chiaramente come il THROUGHPUT DIMINUISCA ALL’AUMENTARE DELLA PROBABILITÀ DI ERRORE E DEL FATTORE A. Questo provoca un degradamento delle prestazioni del protocollo di linea, in termini di throughput, all’aumentare della lunghezza d del collegamento (essendo d proporzionale al parametro a). PROTOCOLLO GO-BACK N Vediamo adesso di analizzare le performance di un protocollo GO-BACK N, ritenendo valide le stesse ipotesi supposte in precedenza, e supponendo, inoltre, che la finestra di trasmissione abbia dimensione infinita. Poiché, in questo protocollo, le frame vengono spedite continuamente, il tempo minimo che trascorre tra due trasmissioni risulta essere pari al tempo necessario a spedire una frame; Quindi, se non ci sono errori, t T = ti Invece in condizioni di errore, il tempo medio necessario per trasmettere una frame correttamente è pari a: t d 1 = t v = t i + ∑ np n (1 − p )tT = t i 1 + T p(1 − p )∑ np n −1 =t i 1 + ap (1 − p) ( 1 ) − t dp p i 1 + p (a − 1) 1 − p + ap 1 = t i 1 + ap(1 − p ) = ti = ti 2 (1 − p ) (1 − p) (1 − p) Poiché abbiamo supposto il sistema in condizioni di saturazione, il massimo throughput è: λ max = 1 1 (1 − p ) = t v t i 1 + p ( a − 1) mentre il fattore di utilizzazione ρ risulta essere (1 − p ) ρ = λ ⋅ t i < λmax ⋅ t i = 1 + p(a − 1) Anche in questo caso λ max diminuisce all’aumentare di p e di a. Dalla formula appena trovata si deduce, però, che, fissato a, il massimo throughput raggiungibile con il protocollo GO-BACK N risulta essere maggiore di quello ottenibile con il protocollo di tipo STOP AND WAIT (l’uguaglianza si ha quando a = 1, condizione che non si può 25 mai verificare visto che amin=3), in quanto l’incidenza di a è molto smorzata dal fattore moltiplicativo p: λmax (GO − BACK − n) >> λmax ( STOP − AND − WAIT ) Quindi tanto maggiore è a, ossia tanto maggiore è la distanza del collegamento e/o la capacità del mezzo, tanto è più vantaggioso un protocollo Go Back N rispetto ad un protocollo Stop and Wait. Per a estremamente piccolo, il protocollo Go Back N è prestazionalmente equivalente al protocollo Stop and Wait. I protocolli reali hanno una finestra di trasmissione finita, al cui dimensione influenza il throughput. Detta n la dimensione di tale finestra, n ti dovrà essere maggiore del tempo necessario a ricevere un ACK, in modo da non avere idle time, anche nel caso in cui tutte le frame sono ricevute correttamente. Si intuisce che rendere più grande l’ampiezza della finestra di trasmissione, permette di diminuire l’overhead (rapporto tra la lunghezza del campo di controllo e la lunghezza totale della trama) intrinsecamente presente in ogni protocollo di linea. Quindi è estremamente importante dimensionare opportunamente la finestra di trasmissione, visto che finestre troppo grandi causerebbero pesanti ritrasmissioni e quindi lunghi tempi di attesa. Se si adotta un meccanismo Select Repeat (utilizzato nei collegamenti satellitari) si può aumentare notevolmente l’ampiezza della finestra di trasmissione, utilizzando buffer di grande capienza, per poter contenere tutte quelle trame che, eventualmente, devono essere riordinate. 8.9 Dimensionamento della Frame La dimensione della frame, influenza chiaramente il throughput del protocollo di linea. Utilizzare frame troppo piccole equivale a spedire sul canale control bits, piuttosto che dati. La presenza di un campo dati ristretto rispetto al campo di controllo della frame, aumenterebbe notevolmente l’overhead, ma limiterebbe la probabilità di errore e di ritrasmissione. Viceversa se le frame sono troppo lunghe si ha una maggiore probabilità che queste vengano corrotte: quindi per ottenere una corretta ricezione, sono necessarie più ritrasmissioni, con conseguente riduzione del throughput. Esiste una lunghezza ottima per le frame, la quale consente di massimizzare il data throughput. Gli studi compiuti hanno mostrato che le variazioni del throughput sono contenute per lunghezze di frame appartenenti ad un ampio intorno del proprio valore ottimo. Per poter ricavare la lunghezza ottima della frame, è necessario conoscere • • • le caratteristiche del collegamento, le modalità di ritrasmissione e la probabilità di errore sul singolo link (collegamento). PER COLLEGAMENTI SATELLITARI, la probabilità pb, di avere un bit della frame corrotto, è uguale alla probabilità che venga inficiato da errore un qualsiasi altro bit: cioè gli errori si presentano in modo random, ma uniformemente distribuiti nel tempo e sulla distanza. Detta l la lunghezza in bit del data field, ed l’ la lunghezza del control field, la probabilità p che almeno un bit della frame sia affetto da errore è pari a: p = 1 − (1 − p b ) l + l ' dove pb è la probabilità di errore sul singolo bit. 26 Dalla precedente relazione, fissati pb e l’, si può ricavare il valore ottimo di l. Inoltre per piccoli valori di pb l + l' (−1) k pbk = = 1 − ∑ k =0 k l + l' 2 pb + ... ≅ (l + l ' ) pb = 1 − 1 + (l + l ' ) pb − 2 p = 1 − (1 − pb ) l +l ' l +l ' PER COLLEGAMENTI TERRESTRI, invece, l’ipotesi di bit indipendentemente soggetti ad errori, non risulta essere valida, in quanto gli errori si presentano per lo più a burst, ossia tendono a danneggiare un gruppo di bit in sequenza. Degli esperimenti condotti hanno mostrato che la probabilità di errore risulta essere proporzionale alla lunghezza della frame. Quindi è importante esaminare come la lunghezza della frame influenza il throughput del protocollo di linea. Dato il protocollo di linea GO-BACK N, consideriamo una stazione A, in saturazione, che trasmette frame con un rate pari a λmax frame/sec. Il data rate medio (numero max di bit dati che è possibile trasmettere nell’unità di tempo), inviato alla stazione ricevente è pari a: D = λmaxl = (1 − p)l {ti [1 + (a − 1) p]} Se C bps è la capacità trasmissiva del canale, ti = (l + l ' ) C ⇒ C= (l + l ' ) ti da cui segue che il data rate normalizzato alla capacità trasmissiva del link vale: (1 − p) l t (1 − p)l D ⋅ = ⋅ i = C {ti [1 + (a −1) p]} (l + l' ) 1 + (a −1) p l + l' Essendo D<C, tanto più D/C è prossimo all’unità, quanto più migliorano le prestazioni del sistema. L’andamento di D/C è riportato in Fig.8.9-1, in cui l’ = 48 bits e pb=10 -5 . È interessante notare come nella prima parte della curva, il rapporto D/C (data rate normalizzato), cresce linearmente al crescere di l. Le curve a campana mostrano che la lunghezza ottima per il campo dati della frame è di circa 1000 bits, visto che per l=1000 bits, D/C assume il valore massimo. Per il protocollo HDLC, la lunghezza ottima della frame è di 1048 bits in cui ⇒ 1024 bits sono contenuti nel campo dati ⇒ e 24 bits nell’header. 27 D/C 1 0.9 Terrestrial link 2tp=100 msec 48 kbps 0.8 Satellite link 48 kbps 2tp=700 msec 4800 bps 0.7 0.6 0.5 0.4 0.3 0.2 10 100 1000 10000 l (bits) Fig. 8.9-1: lunghezza l del campo dati in funzione del data rate normalizzato alla capacità rasmissiva del link, in un del protocollo GO-BACK N in cui pb=10 -5 e l’ = 48 bits. 28