sottolivello LLC
Transcript
sottolivello LLC
RETI DI TLC M. Ajmone Marsan F. Neri appunti dalle lezioni con contributi di: Andrea Bianco Claudio Casetti Renato Lo Cigno Michela Meo Antonio Nucci 124 7 Livello collegamento { sottolivello LLC 7.1 Introduzione Il secondo livello della pila OSI, denominato livello collegamento, nel caso di reti che utilizzano canali broadcast (ad accesso multiplo e a diusione circolare), quali reti via satellite, reti su canali radio, LAN e MAN, e suddiviso in due sottolivelli: LLC (Logical Link Control), che si occupa di multiplazione e demultiplazione di ussi del livello superiore, e opzionalmente della protezione da errori e perdite di PDU, e del controllo di usso, MAC (Medium Access Control), che si occupa della gestione degli accessi a un canale condiviso e della delimitazione delle PDU. Questa suddivisione non e presente in reti che utilizzano canali punto-punto. Il protocollo di livello 2 in questo caso svolge funzioni simili a quelle del protocollo di sottolivello LLC, con l'aggiunta della funzione di delimitazione delle PDU. In questo capitolo ci occupiamo del servizio e del protocollo del sottolivello LLC; il sottolivello MAC viene considerato in un capitolo a parte. Per descrivere un qualsiasi livello dell'architettura OSI e necessario denire sia il servizio fornito al livello superiore, sia il protocollo utilizzato: il servizio viene denito dalle primitive di servizio con i relativi parametri; il protocollo e denito dagli algoritmi, dai formati e dalle temporizzazioni. 7.2 Primitive Il sottolivello LLC prevede tre modi di funzionamento: 1. connectionless (senza ACK): Unacknowledged Connectionless Service; 2. connection oriented (con ACK): Connection-Oriented Service; 3. connectionless con ACK: Semireliable Service. 125 SOTTOLIVELLO LLC SOTTOLIVELLO MAC LIVELLO FISICO Figura 7.1. CANALE Sottolivelli del livello collegamento In questo capitolo limitiamo la nostra attenzione ai primi due modi di funzionamento. Il modo connectionless senza ACK ha solamente bisogno di primitive di trasferimento dati ed e particolarmente indicato nel caso di canali broadcast; per reti basate su canali broadcast infatti e inutile replicare a livello 2 i controlli di usso e di errore che sono eettuati a livello 4. Cio perche in tali reti non esistono sistemi di collegamento (relay system) e quindi i protocolli operano sempre da estremo ad estremo, al livello 2 come al livello 4. Il modo connection oriented fornisce, oltre alle primitive di trasferimento dati anche quelle di apertura e chiusura di una connessione. Questo modo di funzionamento utilizza un protocollo a nestra per le funzioni di recupero di errori, controllo di usso e mantenimento della sequenza. 7.2.1 Primitive del modo connectionless senza ACK Esistono solo due primitive per richiedere il trasferimento di dati: l data.request (sa, da, l sdu, s class) l data.indication (sa, da, l sdu, s class) dove sa e da sono rispettivamente i parametri che indicano l'indirizzo sorgente (source address) e l'indirizzo destinazione (destination address), due (L)indirizzi che identicano i due (L)SAP che partecipano alla comunicazione. L'indirizzo del destinatario puo essere anche un indirizzo di gruppo, cioe e possibile mandare un pacchetto a piu di una (3)entita contemporaneamente. Il parametro l sdu e la (L)SDU, che contiene i dati da trasferire e le informazioni di controllo dei livelli superiori. s class e la classe di servizio e permette di specicare la priorita della (L)SDU. Le due primitive sono attivate dal livello rete all'interfaccia tra il livello rete e il sottolivello LLC per richiedere un trasferimento dati senza ACK. Non essendoci ACK da parte del ricevitore, il trasmettitore non sa se la trasmissione ha avuto successo oppure no. 126 In questo caso abbiamo dunque un servizio molto semplice, in cui il controllo degli errori e di usso e delegato al livello trasporto. 7.2.2 Primitive del modo connection oriented Le primitive di questo modo di funzionamento possono essere raggruppate in cinque tipi diversi a seconda delle loro funzioni: apertura della connessione (sa, da, s class) { l connect.request { l connect.indication { l connect.conrm (sa, da, status, s class) (sa, da, status, s class) trasferimento dati (sa, da, l sdu) { l data connect.request { l data connect.indication { l data connect.conrm (sa, da, l sdu) (sa, da, status) chiusura della connessione (sa, da) { l disconnect.request { l disconnect.indication { l disconnect.conrm (sa, da, reason) (sa, da, status) reinizializzazione della connessione (sa, da) { l reset.request { l reset.indication { l reset.conrm (sa, da, reason) (sa, da, status) controllo di usso all'interfaccia con il livello rete (sa, da, amount) { l connection flowcontrol.request { l connection flowcontrol.indication (sa, da, amount) I parametri sa e da rappresentano gli indirizzi di destinazione e di sorgente, l sdu e la (L)SDU, s class e la classe di servizio. I parametri status, reason e amount sono descritti caso per caso nel paragrafo successivo. 127 Dialogo tra (3)entita Esaminiamo la sequenza delle operazioni necessarie per lo scambio di informazioni tra due (3)entita A e B. 1. La (3)entita che desidera iniziare lo scambio di informazioni, cioe la (3)entita chiamante, sia per esempio A, attiva la primitiva l connect.request, indicando il proprio (L)indirizzo e quello del destinatario (possibilmente ottenuto da una funzione (3)direttorio), come pure la classe di servizio desiderata. Per soddisfare questa richiesta si deve aprire una connessione di sottolivello LLC. 2. La (L)entita collegata alla (3)entita A invia una (L)PDU alla (L)entita che e collegata alla (3)entita B per avvisarla della richiesta di apertura di una (L)connessione. 3. La richiesta e inoltrata alla (3)entita B tramite una primitiva l connect.indication, indicando con il parametro status se il tentativo di connessione ha avuto successo, e con s class la classe di servizio desiderata per la (2)connessione. 4. La (3)entita B non rispondendo negativamente entro un tempo pressato (con una primitiva l disconnect.request) accetta implicitamente la richiesta di apertura della (L)connessione. 5. La (L)entita collegata alla (3)entita B, dopo avere atteso per il tempo in cui B puo rispondere negativamente, invia una (L)PDU alla (L)entita che e collegata alla (3)entita A, per avvisarla della avvenuta apertura di una (L)connessione. 6. L'informazione e riportata alla (3)entita chiamante A mediante l'attivazione della primitiva l connect.conrm, che informa l'entit a richiedente dell'avvenuta connessione con una classe di servizio specicata nel parametro s class. Per una visualizzazione della sequenza di primitive si veda la gura 7.2. Quando una (L)connessione e aperta, e possibile trasferire dati mediante le primitive di tipo e la conferma dell'avvenuta l data connect descritte in precedenza. La primitiva di tipo conrm ricezione del dato. Si osservi che tra i parametri delle primitive di scambio dati non e indicata la classe di servizio, che e una caratteristica della connessione e non delle singole unita dati. Quando la (L)connessione e aperta, puo essere chiusa in un momento qualunque da uno dei due interlocutori. La procedura di chiusura della (L)connessione e del tutto simile a quella dell'apertura, cambiando opportunamente i nomi delle primitive attivate. Quando una delle due (L)entita richiede la chiusura della (L)connessione, la richiesta di chiusura viene noticata all'altra (L)entita indicando nel parametro reason la ragione della chiusura (ad esempio errore interno o richiesta dell'interlocutore remoto). Le (L)PDU eventualmente non ancora arrivate a destinazione sono perse: si tratta dunque di una chiusura di tipo abortivo; la negoziazione della chiusura e eettuata infatti a livello 5 nell'architettura OSI. Le primitive di reinizializzazione (reset) della (L)connessione sono equivalenti alla chiusura e alla successiva riapertura di una connessione tra due (L)SAP. Esse sono utilizzate in seguito ad un malfunzionamento, oppure nel caso di sfasamento dei contatori del trasmettitore e del ricevitore nel protocollo a nestra. Anche il gestore della rete, per cause interne, puo resettare una (L)connessione inviando le primitive l reset.indication alle due (3)entita. Inne le primitive l connection flowcontrol permettono di regolare la velocita delle (L)SDU scambiate all'interfaccia tra una (3)entita e una (L)entita su una specica (L)connessione. 128 Entita A Livello 3 Entita B Livello 3 l connect.request XXXXX XXXXz XXXXX XXXXz 9 l connect.indication l connect.conrm Figura 7.2. Apertura di connessione In particolare, con la l connection flowcontrol.request la (3)entita controlla il ussso di informazione proveniente dalla (L)entita, mentre la l connect flowcontrol.indication permette alla (L)entita di controllare il usso proveniente dalla (3)entita. Quando il parametro amount e innito non si ha controllo di usso, mentre ponendo tale parametro a zero si blocca il traÆco relativo alla connessione. 7.3 Cenni sui servizi del sottolivello MAC e del livello sico Accenniamo brevemente alle primitive oerte dal sottolivello MAC al sottolivello LLC, per capire come salendo di livello nella pila OSI siano disponibili servizi sempre piu sosticati. A livello MAC non esistono meccanismi di trasferimento dati con connessione, recupero degli errori o di usso. Si trasferiscono solo singole unita dati. Le primitive per il trasferimento di dati sono: ma data.request (da, m sdu, s class) ma data.indication ma data.conrm (sa, da, m sdu, status, s class) (status, s class) In questo caso la .conrm ha un signicato locale; viene attivata dal sottolivello MAC del sistema chiamante in risposta alla primitiva di request per indicare l'avvenuta trasmissione dei dati, senza aspettare conferme dall'altro sistema: questo ovviamente non signica che la PDU sia arrivata all'entita destinataria o che sia arrivata correttamente. Se una (M)entita non riesce a trasmettere una PDU, notica questo fatto alla (L)entita e questa si comporta di conseguenza in base alla classe di servizio che le era stata richiesta. A livello sico le primitive sono ancora piu scarne: 129 phy data.request (symbol) phy data.indication phy data.conrm (symbol) (status) Si noti che in questo caso si opera su simboli, ovvero bit nel caso di trasmissione binaria, o gruppi di bit nel caso di trasmissione multilivello. 7.4 Formati delle unita dati Il formato di una (L)PDU e riportato nella gura 7.3; da e sa sono campi con dimensione 8 bit ciascuno, il campo controllo ha una dimensione di 8 o 16 bit (16 bit se deve contenere dei numeri di sequenza di PDU o dei numeri di riscontro), mentre il campo informazione e costituito da un numero intero di byte. sa da Figura 7.3. controllo informazione Formato delle PDU di sottolivello LLC da e sa sono i due (L)indirizzi degli (L)SAP coinvolti nel trasferimento delle PDU; il bit meno signicativo degli indirizzi specica se l'indirizzo e singolo (bit a 0) o se e di gruppo (bit a 1). Poiche l'indirizzo di tutti 0 e utilizzato per identicare l'entita LLC stessa e quello formato da tutti 1 identica le PDU destinate a tutti gli (L)indirizzi (broadcast), si possono avere no a 127 (27 1) indirizzi singoli e 127 indirizzi di gruppo diversi. Il campo di controllo permette di identicare i diversi tipi di (L)PDU. In particolare si possono individuare due tipi di operazioni: tipo 1, trasferimento senza connessione; tipo 2, trasferimento dati con apertura e chiusura della connessione; in tal caso si ha recupero di errori e controllo di usso e le unita dati sono numerate. Esistono inoltre due classi di (L)protocollo, la classe 1 e la classe 2; la classe 1 funziona solo con operazioni di tipo 1, mentre la classe 2 e in grado di funzionare con entrambi i tipi di operazioni. Il campo di controllo serve a distinguere diversi tipi di PDU; in particolare se il primo bit e posto a 0 la PDU e di tipo informazione, mentre le PDU di supervisione e non numerate sono identicate dal primo bit a 1. Tutte le PDU comprendono un bit P/F chiamato bit Poll/Final. Quando tale bit e posto a 1 indica una richiesta di risposta immediata; l'interlocutore rispondera a sua volta con una PDU in cui il bit Poll/Final e a 1. La semantica delle PDU utilizzate in LLC deriva dal protocollo HDLC (High Level Data Link Control), standardizzato dall'ISO. Da tale protocollo sono stati derivati la maggior parte dei protocolli di livello 2 utilizzati oggi. 130 7.4.1 PDU di informazione Le PDU di informazione (il cui formato del campo di controllo e rappresentato nella gura 7.4) sono utilizzate nel funzionamento di tipo 2 e permettono di realizzare il protocollo a nestra di tipo go-back-n, utilizzando i bit 28 per il numero d'ordine della PDU [N(S)] e i bit 1016 per il numero d'ordine dell'ACK [N(R)]. In una PDU di informazione quindi N(S) e il numero d'ordine della PDU riferito al trasmettitore, cioe il numero di sequenza della PDU trasmessa. Invece N(R) e il numero dell'ACK riferito al ricevitore. Questo signica che il ricevitore associato al trasmettitore che ha inviato la PDU ha ricevuto correttamente tutte le PDU no alla (N(R) 1){esima ed attende la PDU N(R){esima. Il bit 9 e il bit Poll/Final. N(S) 0 Figura 7.4. P/F N(R) Campo di controllo di una PDU di informazione Si osservi che nella discussione abbiamo supposto che esistano due protocolli a nestra unidirezionali che si sovrappongono. Dato che gli scambi di informazioni non sono quasi mai unidirezionali, si possono utilizzare le PDU per mandare oltre ai dati anche l'informazione di ACK del ricevitore, includendola nella PCI. Questa tecnica, detta ACK piggybacking consente di evitare di inviare delle (L)PDU per spedire soltanto gli ACK quando si hanno dei dati da spedire in senso opposto. Questo formato per le PDU di informazione e strettamente legato a quello utilizzato da altri simili protocolli di livello 2, quali HDLC, LAP-B in X.25 e LAP-F in Frame Relay. In realta per questi protocolli si puo avere una numerazione delle PDU su 3 bit (cioe modulo 8) o su 7 bit (cioe modulo 128). Nel secondo caso si parla di numerazione estesa. La possibilita di numerare le PDU su 3 o 7 bit e dovuta, oltre che alla possibilita di elevati ritardi di propagazione (quindi di una grande nestra di trasmissione), alla maggiore o minore aÆdabilita della rete con conseguenti ACK vaganti: nel caso standard di reti locali, in cui si hanno elevate velocita e basse probabilita di errore, puo essere utile una nestra del trasmettitore di grandi dimensioni, per cui in LLC si adotta la numerazione estesa. 7.4.2 PDU di supervisione Come mostrato nella gura 7.5, il campo di controllo delle PDU di supervisione e caratterizzato dai primi due bit posti al valore 10 e contiene solo la numerazione delle conferme N(R), oltre al bit Poll/Final. Queste PDU sono utilizzate nel caso di trasferimento dati unidirezionale per permettere al ricevitore di inviare le conferme. I bit 3 e 4 di questa PDU identicano i diversi comandi di supervisione: RR, receiver ready RNR, receiver not ready 131 REJ, reject il cui signicato ed utilizzo sono descritti nel paragrafo 7.4.4. 1 0 S Figura 7.5. 7.4.3 non usati S P/F N(R) Campo di controllo di una PDU di supervisione PDU non numerate Come mostrato nella gura 7.6, il campo di controllo delle PDU non numerate e di 8 bit ed e caratterizzato dai primi due bit posti al valore 11. I cinque bit rimanenti servono per distinguere i diversi tipi di comandi e risposte. Nel caso di comunicazione di tipo 2 si distinguono: SABME, Set Asyncronous Balance Mode Extended UA, Unnumbered Acknowledgement DISC, DISConnect DM, Disconnect Mode FRMR, FRaMe Reject La PDU SABME (si chiama extended perche si usa uno schema di numerazione modulo 128) e usata per trasportare la richiesta di apertura di una (L)connessione da una (L)entita chiamante ad una (L)entita chiamata, in modo che quest'ultima possa generare la primitiva l connect.indication verso la (3)entita chiamata. Se la (3)entita chiamata non riuta l'apertura della (L)connessione, la (L)entita chiamata risponde con la PDU UA e la (L)entita chiamante genera la primitiva l connect.conrm verso la (3)entit a chiamante. La PDU DISC permette di chiudere una connessione e la risposta e sempre data mediante una PDU UA. La PDU DM indica che la (L)entita non e collegata ad una connessione, mentre FRMR indica che la PDU ricevuta non e accettabile. Questa PDU viene spedita per ragioni diverse rispetto a REJ: viene ad esempio utilizzata quando si riceve una PDU con un campo di controllo diverso da quelli previsti. Nel caso di comunicazione di tipo 1 (servizio senza connessione) si distinguono invece le seguenti PDU: UI, Unnumbered Information XID, eXchange IDentication TEST 132 1 Figura 7.6. 1 M M P/F M M M Campo di controllo di una PDU non numerata La PDU UI si usa per trasmettere informazioni in modo non connesso, senza numerare le PDU. XID e TEST sono PDU di controllo e permettono di scambiarsi un identicatore e alcune informazioni sullo stato della macchina del protocollo di livello 2. Esiste un'estensione di formato per la PDU UI, detta LLC SNAP (SubNetwork Access Protocol). Visto che l'utilizzo dei campi di (L)indirizzo e tipicamente quello di dierenziare diversi protocolli di livello superiore, e che il numero dei possibili protocolli di livello superiore e di gran lunga superiore a quanto rappresentabile nei campi di indirizzo della PDU LLC, il formato LLC SNAP prevede di usare un valore convenzionale (AA esadecimale) nei campi di indirizzo, e di utilizzare i primi 5 byte nella parte di informazione della PDU per specicare il protocollo di livello superiore da cui l'informazione e stata generata o cui l'informazione e destinata. I primi tre di questi byte sono un identicativo dell'organizzazione che ha denito il protocollo, mentre i successivi due byte sono un identicativo del protocollo. 7.4.4 Descrizione del funzionamento di una (L)connessione di tipo 2 Supponiamo che le due (L)entita siano riuscite ad aprire una connessione secondo la procedura descritta nella gura 7.2. Ogni (L)entita ha due contatori: V(R) e V(S) associati rispettivamente al ricevitore ed al trasmettitore; i due contatori sono inizializzati a 0 all'atto dell'apertura della connessione. Il ricevitore ha una nestra di ampiezza unitaria, mentre il trasmettitore puo utilizzare una nestra di dimensione maggiore di 1. La numerazione delle PDU e fatta, come visto in precedenza, con 128 identicatori. Il ricevitore accetta solo le PDU il cui campo N(S) coincide con il valore attuale del contatore V(R). Tutte le altre unita dati sono scartate. Quando viene ricevuta correttamente la PDU il cui campo N(S) coincide con il valore attuale del contatore V(R) il valore di quest'ultimo viene incrementato di una unita. V(R) indica quindi in ogni istante il numero di sequenza della prossima PDU che il ricevitore attende. Il trasmettitore trasmette PDU numerate in sequenza incrementando il valore del contatore V(S); il campo N(S) della PDU coincide con il valore del contatore V(S) al momento della trasmissione. Il campo N(R) della PDU coincide invece con il valore del contatore V(R) al momento della trasmissione. In questo modo ogni PDU porta anche un ACK riferito all'ultima PDU ricevuta correttamente. Se il usso di dati e monodirezionale il ricevitore non puo sfruttare le PDU di tipo informazione per inviare gli ACK; utilizza quindi una delle PDU di supervisione. La PDU RR e una conferma di avvenuta ricezione delle PDU no al numero N(R) 1; il ricevitore si aspetta di ricevere una PDU con numero N(R). La PDU RNR e una conferma analoga alla RR, ma implica una richiesta 133 di sospensione di trasmissione, perche il ricevitore non e in grado di accettare altre PDU. La PDU REJECT e una conferma, con la segnalazione della ricezione di una PDU fuori sequenza: il ricevitore si aspettava di ricevere una PDU con numero N(R) e ha ricevuto una PDU fuori della propria nestra di ricezione di ampiezza unitaria. La PDU REJECT puo servire per provocare una ritrasmissione senza aspettare che scada il timeout al trasmettitore. 7.4.5 Delimitazione delle PDU Il livello sico gestisce unita dati che sono o singoli bit o gruppi di bit (simboli). Se non esiste il sottolivello MAC, presente solo nel caso di canali broadcast, il livello 2 deve delimitare le PDU in modo che il ricevitore sia in grado di riconoscere tra i bit che provengono dal livello sico l'inizio e la ne di una PDU. Ad esempio in HDLC ogni PDU e preceduta e seguita da un byte che delimita i dati detto ag, il cui contenuto e 01111110, come si vede dalla gura 7.7. Per non confondere un byte di dati con un ag e necessario garantire che nel campo dati della PDU non compaia la stringa 01111110. Per ottenere cio e suÆciente assicurarsi che non siano presenti sei bit 1 consecutivi in alcuna PDU. Se la stringa di dati da trasmettere contiene 5 o piu bit consecutivi a 1, il trasmettitore HDLC inserisce un bit a 0 dopo il quinto bit consecutivo ad 1; il ricevitore, a sua volta, quando legge 5 bit consecutivi a 1, elimina lo 0 immediatamente successivo. Questa tecnica e detta bit stuÆng. Una osservazione conclusiva: questa descrizione del protocollo di livello 2 si riferisce a standard per reti locali, ovvero per sistemi in cui il rumore non gioca un ruolo importante, nei quali il controllo di eventuali errori sui bit viene eettuato nel sottolivello MAC. Questo spiega l'assenza di campi per il controllo dell'errore sulle unita dati. Le PDU di livello 2 nel caso di architetture senza il sottolivello MAC (ad esempio in HDLC) sono analoghe a quelle descritte in precedenza, ma sono caratterizzate dall'esistenza di un campo di CRC (Cyclic Redundancy Check) per rilevare eventuali errori. La gura 7.7 mostra il formato della PDU HDLC, nella quale, a dierenza di LLC, e presente un solo campo di indirizzo. 01111110 indirizzo controllo dati crc 01111110 Figura 7.7. PDU con delimitatori 134