# IEEE 802.1D

IEEE 802.1D è uno standard definito dall'ente internazionale IEEE nell'ambito del gruppo 802.1, il cui obiettivo è evitare i loop di switching e i conseguenti broadcast storm nelle reti Ethernet. Costituisce la base dello Spanning Tree Protocol.
L'ultima versione, intitolata Media Access Control (MAC) Bridges e conosciuta anche come 802.1D-2004 è stata approvata il 9 febbraio 2004 e pubblicata il 9 giugno dello stesso anno, sostituendo le precedenti edizioni della stessa normativa (802.1D-1990 e 802.1D-1998).
Rispetto all'edizione precedente, la normativa del 2004 incorpora due normative accessorie definite dal gruppo di lavoro 802.1: la normativa 802.1t, contenente sostanzialmente emendamenti e correzioni alla normativa del 1998, e la normativa 802.1w che definisce algoritmo e protocollo del cosiddetto Rapid Spanning Tree. Contestualmente, la normativa rimuove, rispetto all'edizione precedente, la definizione dell'algoritmo e del protocollo Spanning Tree di base, ritenuto de facto obsoleto dal punto di vista implementativo. Nel 2014 il IEEE approvato IEEE 802.1aq, (Shortest Path Bridging) per sostituire 802.1D, 802.1s, e 802.1w.T

## Caratteristiche

La normativa indirizza la definizione del comportamento e dei meccanismi di base dei cosiddetti MAC Bridge, ossia dei dispositivi che sono in grado di mettere in comunicazione tra di loro le stazioni terminali di due (o più) reti locali (LAN) o metropolitane (MAN) separate in modo tale che la comunicazione risultante risulti equivalente a quella di un'unica LAN composta dalla somma delle LAN originarie. Di fatto, vengono definiti tutti i meccanismi chiave per le comunicazioni Ethernet alla base delle reti LAN e MAN:
* le definizioni di LAN basata su Bridge, di priorità di traffico (incorporando nell'edizione 802.1D-1998 la normativa 802.1p) e di gruppo
* i principi di funzionamento di un MAC bridge: architettura; processo di distribuzione, autoapprendimento e filtraggio del traffico
* i protocolli ed algoritmi ausiliari: Rapid Spanning Tree e Generic Attribute Registration Protocol (GARP)
* le regole di attribuzione degli indirizzi e per il riconoscimento delle trame di protocollo dalle trame di traffico.

## Modello architetturale

La normativa definisce il bridge come un dispositivo di collegamento tra due o più LAN o MAN, composto dalle seguenti entità funzionali:
* Una funzione di distribuzione (relay entity) che collega le porte di accesso
* Almeno due porte di accesso per il traffico appartenenti ciascuna a una LAN/MAN differente
* Funzioni ausiliarie di livello superiore (higher-layer entities) tra le quali rientrano per esempio i protocolli di Spanning Tree
Ogni porta riceve pacchetti dalla LAN/MAN a cui è direttamente collegata e li trasferisce alla relay entity che applica le regole per la distribuzione dei pacchetti tra le diverse LAN/MAN a cui fanno capo le porte, includendo l'autoapprendimento e il filtraggio dei pacchetti, e trasferisce il pacchetto verso la porta in uscita relativa alla LAN/MAN di destinazione.
Le funzioni di livello superiore determinano la topologia attiva della rete, ossia le porte e i relativi collegamenti abilitati a trasmettere e ricevere traffico, calcolata in modo da evitare la presenza di anelli di distribuzione chiusi (loop) e ricalcolata per determinare percorsi alternativi in caso di guasto o non disponibilità di una collegamento, di una porta o di un nodo di rete.

### La relay entity

La relay entity implementa tre elementi chiave:
* Il processo di distribuzione (forwarding) dei pacchetti, selezionando le porte sulla base del loro stato di lavoro e delle informazioni presenti nel database di filtraggio.
* Il processo di autoapprendimento, che consente, dall'analisi dell'indirizzo della sorgente del pacchetto, di aggiornare il database di filtraggio tenendo conto dello stato delle porte
* Il database di filtraggio, che contiene le informazioni relative alle regole di distribuzione dei pacchetti e interagisce con i processi di distribuzione e autoapprendimento fornendo l'informazione di quali porte sono abilitate a trasmettere/ricevere un determinato pacchetto.
Il processo di autoapprendimento si basa su questo meccanismo:
* quando una porta riceve un pacchetto, lo trasferisce alla relay entity
* la relay entity interroga il database di filtraggio per determinare se la sorgente del pacchetto (individuata dall'indirizzo presente nell'header della trama Ethernet) è abilitata, e se non lo è il pacchetto viene scartato
* se la sorgente è abilitata, il database di filtraggio analizza l'indirizzo di destinazione del pacchetto (presente anch'esso nell'header della trama Ethernet) per determinare se è già noto su quale porta di uscita deve essere trasmesso
* se la porta di uscita è già nota e il suo stato è forwarding, il pacchetto viene trasmesso direttamente su di essa
* se la porta di uscita non è nota, la relay entity distribuisce una copia del pacchetto su tutte le porte ad essa collegate (flooding), ad esclusione della porta dalla quale ha ricevuto il pacchetto. Quando su una di queste porte viene ricevuto un pacchetto di risposta (identificabile mediante l'analisi dell'indirizzo di destinazione), l'informazione viene passata al database di filtraggio, che memorizza così su quale porta inviare il pacchetto successivo caratterizzato dagli stessi indirizzi di sorgente e destinazione. Questa operazione termina il processo di autoapprendimento per quella specifica coppia di indirizzi sorgente-destinazione.

### Le porte

A ciascuna porta è assegnato uno stato, che indica sostanzialmente se la porta è abilitata o meno a distribuire pacchetti e a contribuire all'autoapprendimento basato sull'indirizzo sorgente. Lo stato della porta può essere assegnato in modo statico oppure in modo dinamico da parte dell'algoritmo di Spanning Tree.
Per ogni porta sono possibili tre stati:
* Forwarding: la porta è abilitata a trasmettere pacchetti e a partecipare all'autoapprendimento
* Discarding: la porta è spenta oppure non è stata abilitata né a scambiare pacchetti né a partecipare all'autoapprendimento
* Learning: la porta è abilitata a partecipare all'autoapprendimento ma non a trasmettere pacchetti.