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