Finora abbiamo visto i livelli che di Applicazione, Trasporto e Rete. Cominciamo il secondo livello dello stack TCP/IP parlando dei servizi offerti dal livello di collegmaento.

Come già abbiamo detto, gli host e i router sono come nodi e gli archi che li collegano vengono chiamati collegamenti (link) e, come abbiamo detto ormai diversi articoli fà, questi possono essere:

  • Collegamenti Cablati (tipo Lan)
  • Collegamenti Wireless (senza fili).

Le unità di dati scambiate fra due host a livello di collegamento vengono chiamati Frame e i protocolli implementati a questo livello si occupano del trasporto di datagrammi lungo un singolo canale di comunicazione.

I nodi all’ interno di una rete, al di là di connessioni logiche tipo TCP o IP ecc, devono comunque ad un certo punto essere collegati fisicamente fra di loro. E anche se due host connessi tramite TCP pensano di essere connessi fisicamente, la loro connessione è logica: il segmento deve infatti passare per i nodi che sono fisicamente connessi fra di loro (il percorso è deciso da IP).

E’ possibile utilizzare:

  • L’ intera capacità del mezzo trasmissivo: Collegmento punto-punto, ovvero è dedicato solo a due dispositivi (tipo una linea telefonica).
  • Solo una parte del mezzo: Collegmaento broadcast, ovvero è condiviso fra coppie di dispositivi.

Un datagramma quindi, è possibile (e probabile) che verrà gestito da protocolli di collegamento su collegamenti differenti: tipo Ethernet nel primo link, PPP nel secondo link, e WAN nel terzo link. Inoltre, protocolli di link diversi potrebbero offrire servizi diversi, ad esempio non tutti forniscono un servizio di consegna affidabile.

I servizi offerti dal livello di collegamento sono:

  • Framing: I protocolli incapsulano i datagrammi del livello rete in un frame del livello di collegamento. Il protocollo MAC (Media Access Control) controlla l’accesso al mezzo e per identificare origine e destinatario diversi si utilizza l’ indirizzo MAC (che vedremo nel prossimo articolo).
  • Consegna Affidabile: Come a livello di trasporto, si basa su ack dei pacchetti: questo sistema viene solo implementato nel caso in cui si presenta un alto numero di errori sui bit(es: wireless) ed evitato nei collegamenti affidabili (cavo coassiale, fibra ottica, doppino intrecciato).
  • Controllo di flusso: Come a livello di trasporto, evita che il mittente inondi (e saturi) di pacchetti il destinatario.
  • Rilevazione degli errori: Gli errori possono essare causati dal’ attenuazione del segnale e da rumore elettromagnetico. Il nodo ricevente individua la presenza di errori tramite il bit di controllo dell’ errore nel frame.
  • Correzione degli errori: Il ricevente può rilevare in che punto è presente l’errore e lo corregge.

Controllo degli errori

Come abbiamo appena detto, gli errori possono essere causati per esempio da interferenze che possono cambiare le forme del segnale. Di solito, è molto più probabile che ci sia un errore di tipo burst (a raffica) rispetto a quella a singolo bit, in quanto l’ interferenza di solito riguarda più di un bit.

Per riuscire a controllare gli errori, si utilizza un bit EDC che serve a controllare e riparare D dati. Esistono diverse tecniche per generarle il controllo degli errori, la più facile da implementare è il controllo di parità: si imposta EDC ad 1 o 0 a seconda del numero di uni che ci sono, la cui somma dovrà dare un numero pari.

Sottolivelli del Link-Layer

Il livello di collegamento, viene suddiviso in:

  • DLC (Data-Link Control): si occupa di tutte le questioni comuni sia ai collegamenti punto-punto che a quelli di broadcast (Framing, Controllo di flusso e degli errori).
  • MAC (Media Access Control): Si occupa degli aspetti specifici dei canali broadcast.

I collegamenti di rete infatti, sono divisi in:

  • Collegamenti punto-a-punto: Tipo per le connessioni telefoniche, tra Ethernet e host e viene utilizzato il protocollo Point-to-Point (PPP) del DLC.
  • Collegamento broadcast: A cavo o canale condiviso, tipo Ethernet o Wireless Lan 802.11 utilizza il protocollo MAC per la gestione del canale condiviso.

Protocolli di accesso multiplo

Vediamo quindi i protocolli di accesso multiplo, che devono gestire il fatto che un canale broadcast condiviso può essere sfruttato da centinaia (o anche migliaia) di nodi.

[note_box]Quando un nodo riceve due o più frame contemporaneamente, si genera una collisione.[/note_box]

Lo scopo di questi protocolli, è quello di evitare il caos ed organizzare la comunicazione e per farlo devono utilizzare lo stesso canale (ovvero non sono out-of-band, non c’è un canale per la coordinazione della comunicazione).

Il protocollo ideale, sarebbe uno che con velocità di R bps assegna:

  • Se è un nodo solo a trasmettere, R banda,
  • Se sono N nodi a trasmettere, assegna ad ognuno R/N bps di banda.

I protocolli ad accesso multiplo, possono essere catalogati come:

  • Protocolli a suddivisione del canale: Suddivide un canale in parti più piccole e li alloca presso un nodo per utilizzo esclusivo. Non prevede collisioni. TDMA, FDMA, CDMA.
  • Protocolli ad accesso casuale: I canali non vengono divisi e si può verificare una collisione. I nodi coinvolti inviano continuamente pacchetti.ALOHA, CSMA/CD, CSMA/CA.
  • Protocolli a rotazione: Ciascun nodo ha il proprio turno per parlare (talking-turn), non vi sono collisioni ma i nodi che hanno più da trasmettere potrebbero avere turni più lunghi. Reservation, Polling, Token Passing.

Time Division Multiple Access

Facendo parte dei protocolli di suddivisione del canale, TDMA definisce dei turni per accedere al canale dividendolo in intervalli di tempo. Suddiviso in slot, ogni slot viene assegnato ad un nodo. Il fatto che il canale gli sia assegnato non vuol dire però che il nodo abbia qualcosa da trasmettere: quando viene assegnato il canale ad un nodo che non lo sfrutta, questo rimane inutilizzato.

Il tasso trasmissivo è R/N bps.

Frequency Division Multiple Access

Questo suddivide il canale in frequenze, e ad ogni stazione viene assegnata una banda di frequenza prefissata.

Anche in questo tipo di protocollo, se il canale è diviso in 10 frequenze per 10 nodi ed un solo nodo trasmette, i 9/10 della banda rimangono inutilizzati.

Protocolli ad accesso casuale

In questo tipo di protocolli, nessuna stazione ha il controllo sulle altre ed ogni volta che qualcuno deve inviare dati usa una procedura definita nel protocollo per decidere se spedire o meno.

Il fatto che sia ad accesso casuale, indica che non c’è un tempo preciso in cui un nodo può trasmettere dati e non è possibile stabilire chi sarà il prossimo a trasmettere.

Di fatto, le varie stazioni competono con le altre per accedere al mezzo trasmissivo (contesa del canale) e se due stazioni trasmettono nello stesso momento, si verifica una collisione.

Il compito del protocollo ad accesso casuale, è quello di definire come rilveare una collisione e come ritrasmettere se si verifica.

Aloha

Il primo protocollo di questo genere, è l’ Aloha. L’ Aloha puro prevede che ogni stazione può inviare un frame tutte le volte che ha dati da trasmettere ed il ricevente invia un ack per notificare la corretta ricezione del frame. Se il mittente non riceve un ack dopo un timeout, calcolato come 2xTp (tempo di propagazione, ovvero il tempo necessario per il pacchetto ad andare dalla sorgente alla destinazione moltiplicato per due per includere anche il tempo di ritorno), il frame deve essere rispedito.

Se due nodi trasmettono contemporaneamente, aspettano un tempo casuale (chiamato di back-off) prima di effettuare la ritrasmissione. Dopo un massimo numero di tentativi (Kmax), una stazione interrompe i suoi tentativi e riprova più tardi.

Il tempo di back-off viene calcolato come R*Tfr:

  • R è un numero compreso fra 0 e 2k-1
  • K è il numero di tentativi
  • Tfr è il tempo per inviare un frame
  • Kmax è 15.

Il tempo di vulnerabilità è l’ intervallo di tempo in cui il frame è a rischio di collisioni. Per come è strutturato l’ Aloha (in versione pura) la probabilità di collisione è molto alta, rendendo il protocollo terribilmente inefficiente.

Un modo per rimediare, è dividere il canale in slot temporali a cui i nodi si sincronizzano: vediamo quindi lo Slotted Aloah

Slotted Aloah

Il canale viene diviso in slot temporali, sufficientemente grandi a spedire un singolo pacchetto. Quando un nodo ha un pacchetto da spedire, attenderà l’inizio dello slot successivo prima di cominciare a trasmetterlo.

  • Se non si verifica collisione: il nodo può trasmettere un nuovo pacchetto nello slot successivo.
  • Se si verifica collisione: il nodo ritrasmette con probabilità p il suo pacchetto durante gli slot successivi.

In questa versione dell’ Aloah, i due pro sono che un nodo può trasmettere continuamente pacchetti alla massima velocità e che il tempo di vulnerabilità si riduce a un solo slot. I contro invece, è che se uno slot presenta collisioni è sprecato e un’altra frazione degli slot rimane vuota, quindi inattiva rendendo a circa 37% il numero di pacchetti che riescono ad essere spediti con successo (l’ Aloah puro è circa 18% quindi un discreto miglioramento).

CSMA: Accesso multiplo a rilevazione della portante

Il Carrier Sense Multiple Access è un protocollo basato sul listen before talk (o sense before transmit), ovvero si mette in ascolto per vedere se qualcun’altro stà trasmettendo, e in caso negativo trasmette l’ intero pacchetto. Se il canale stà già trasmettendo, il nodo attenderà un’altro intervallo di tempo.

Il tempo di propagazione fa sì che anche se un nodo non lo rileva, un pacchetto è nel mezzo trasmissivo e trovando il mezzo libero il nodo trasmette generando una collisione.

Se il nodo trova il mezzo occupato può:

  • Non persistente: Se il canale è libero, trasmette. Se no attende un tempo random prima di riascoltare se il canale è libero (carrier sense a intervalli). Se c’è una collisione calcola il backoff.
  • 1- persistente : Se il canale è libero, trasmette. Se no continua ad ascoltare (carrier sense continuo) e se c’è collisione calcola iol backoff.
  • p-persistente: Se è libero trasmette con probabilità p e aspetta l’ inizio del prossimo slot con probabilità 1-p. Se il canale è occupato, attende il backoff prima di riprovare a vedere se si è liberato. Se c’è collisione calcola il backoff.

CSMA/CD

il CSMA con Collision Detection permette di rilevare le collisioni rimamendo in ascolto del canale anche durante la trasmissione.Questo permette di rilvare la collisione in poco tempo e annulla la trasmissione non appena si accorge che c’è un’altra trasmissione in corso.

La CD è facile da implementare nelle reti cablate, e difficile in quelle senza fili.

Perchè il CD funzioni, il mittente deve trasmessettere almeno da 2Tp:

Una rete che utilizza CSMA/CD con un rate di 10Mbps ha il tempo di propagazione di 25,6 us. Qual’è la dimensione minima del frame?  Il tempo di trasmissione minima del frame è Tfr = 2xTp = 51.2 us.

Ciò significa, che nel peggiore dei casi una stazione deve trasmettere da 51,2 us prima di accorgersi della collissione. Quindi la dimensione minima del frame è 10Mbps x 51,2 us = 512 bit o 64 byte, che è proprio la dimensione minima del frame nell’ Ethernet Standard che vedremo nella prossima lezione.

Il CSMA/CD si rivela molto più efficiente dei precedenti Aloah, per il 1-persistente il throughtput arriva al 50% (metodo utilizzato dall’ Ethernet tradizionale a 10Mbps).

Protocolli a rotazione

I protocolli mac a suddivisione del canale sono efficienti solo nel caso di carichi elevati. Quelli casuali sono nel caso di carichi non elevati (sai quante collisioni sennò?). I protocolli a rotazione cercano di essere una via di mezzo.

Nel polling, un nodo principale sonda a turno tutti gli altri eliminando le collisioni, gli slot vuoti, ma introducendo il ritardo di polling e l’ inattività dell’ intero canale nel caso in cui il nodo principale sia guasto o irraggiungibile.

Nel token-passing invece, un messaggio di controllo circola fra i nodi seguendo un ordine prefissato. Il messaggio di controllo è chiamato token e realizza un sistema molto efficiente ma debole perchè se un nodo si guasta può rendere inutilizzabile l’intero canale.