# Frame Ethernet

Un frame Ethernet è l'unità dati trasportata al livello 2 del modello di riferimento ISO/OSI secondo lo standard IEEE 802.

## Storia

Durante il periodo di standardizzazione del formato ethernet a cura dell'IEEE, ci furono pareri discordanti sull'obbligo di definire o meno la lunghezza del frame in un campo all'interno del frame stesso. La prima versione del formato del frame ethernet conteneva questo valore nel campo lunghezza di due byte.
La versione successiva Ethernet II (anche chiamata DIX Ethernet, dove DIX è l'acronimo di DEC, Intel e Xerox, che sono i partecipanti più importanti alla sua creazione) usava questi due byte per definire l'Ethertype al posto della lunghezza. Essendo necessario interpretare per il dispositivo ricevente il tipo di frame, fu creato un nuovo standard 802.3x-1997, confluito poi nello standard attuale 802.3 che permetteva l'interpretazione di entrambi i formati ethernet.

## Composizione

Un frame ethernet II tipico ha una grandezza compresa tra 64 e 1518 byte ed è formato da:
* 6 byte per il mac address di destinazione;
* 6 byte per il mac address sorgente;
* 2 byte per l'Ethertype;
* da 46 a 1500 byte per i dati;
* 4 byte per il FCS.
Alcuni tipi speciali di frame possono avere una grandezza maggiore di 1518 byte per rispondere ad esigenze specifiche.
L'Ethertype identifica generalmente il protocollo di livello superiore incapsulato nel campo dati.
Al fine di consentire ad alcuni pacchetti di usare il frame Ethernet v2 e ad altri pacchetti di usare la versione originale del frame nello stesso segmento Ethernet, il valore del Ethertype deve essere maggiore o uguale di 1536(0x0600). Quel valore è stato scelto perché la lunghezza massima del campo dati di un frame 802.3 è di 1500 byte(0x05DC).
Se il valore del campo è maggiore o uguale a 1536, il frame sarà necessariamente di tipo Ethernet v2, con quel valore di campo pari al Protocol Type. Se, invece, è minore o uguale a 1500, dovrà essere un frame IEEE 802.2, dove il valore indica il campo Length. Valori compresi tra 1500 e 1536 sono indefiniti.
Da notare che gli indirizzi mac identificativi del tragitto hanno la posizione invertita rispetto al modo naturale di indicare prima la sorgente e poi la destinazione come per esempio nel protocollo IPv4; questo è stato fatto per permettere agli switch che usano il metodo di switching cut-through di ridurre il tempo di latenza ed iniziare a trasmettere dopo solo 6 byte ricevuti.

## Utilizzo di frame più grandi

Per risolvere problemi creatisi con l'evoluzione del networking, è stato necessario creare uno standard che trasportasse frame ethernet maggiori di 1518 byte.
Un tipico esempio è dato dal protocollo IEEE 802.1Q, nato per suddividere diverse istanze logiche di reti LAN. L'Ethertype associato è 0x8100 e non indica il protocollo di livello superiore, bensì aggiunge al frame un identificativo di istanza di LAN. Questo identificativo di 4 byte, se aggiunto ad un frame di grandezza di 1518 byte, ne aumenta la dimensione fino a 1522 byte.
Un altro esempio è dato dai Jumbo frame che possono avere dimensioni fino a 9000 byte e sono usati per ridurre il numero di pacchetti in una rete e quindi l'utilizzo di CPU nei dispositivi di rete.

## Ethertype più comuni

Un pacchetto avente Ethertype con valore pari a 0x0800 indica che il campo dati contiene un datagramma IPv4., allo stesso modo un pacchetto con protocol type di valore pari a 0x0806 contiene un frame ARP, 0x8100 indica un frame IEEE 802.1Q e 0x86DD indica un datagramma IPv6.