Un pacchetto di dati sul filo e il frame come carico utile consistono di dati binari. Ethernet trasmette i dati con l’ottetto più significativo (byte) per primo; all’interno di ogni ottetto, tuttavia, il bit meno significativo viene trasmesso per primo.
La struttura interna di un frame Ethernet è specificata in IEEE 802.3. La tabella qui sotto mostra il pacchetto Ethernet completo e il frame all’interno, come trasmesso, per la dimensione del carico utile fino all’MTU di 1500 ottetti. Alcune implementazioni di Gigabit Ethernet e altre varianti più veloci di Ethernet supportano frame più grandi, conosciuti come jumbo frame.
Layer | Preamble | Start frame delimiter | MAC destination | MAC source | 802.1Q tag (opzionale) | Ethertype (Ethernet II) o lunghezza (IEEE 802.3) | Payload | Sequenza di controllo del frame (32-bit CRC) | Gap Interpacket | |
---|---|---|---|---|---|---|---|---|---|---|
7 ottetti | 1 ottetto | 6 ottetti | 6 ottetti | (4 ottetti) | 2 ottetti | 46-1500 ottetti | 4 ottetti | 12 ottetti | ||
Layer 2 Ethernet frame | ← 64-1522 ottetti → | |||||||||
Pacchetto Ethernet livello 1 & IPG | ← 72-1530 ottetti → | ← 12 ottetti → |
Il tag opzionale 802.1Q consuma spazio aggiuntivo nel frame. Le dimensioni dei campi per questa opzione sono mostrate tra parentesi nella tabella qui sopra. IEEE 802.1ad (Q-in-Q) permette più tag in ogni frame. Questa opzione non è illustrata qui.
Pacchetto Ethernet – strato fisicoModifica
Preambolo e delimitatore di inizio frameModifica
Un pacchetto Ethernet inizia con un preambolo di sette ottetti e un delimitatore di inizio frame (SFD) di un ottetto.
Il preambolo consiste in uno schema di 56 bit (sette byte) di bit 1 e 0 alternati, che permette ai dispositivi sulla rete di sincronizzare facilmente i loro clock di ricezione, fornendo una sincronizzazione a livello di bit. È seguito dall’SFD per fornire una sincronizzazione a livello di byte e per marcare un nuovo frame in arrivo. Per le varianti Ethernet che trasmettono bit seriali invece di simboli più grandi, lo schema di bit (non codificato) sul filo per il preambolo insieme alla porzione SFD del frame è 10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011;:sezioni 4.2.5 e 3.2.2 I bit sono trasmessi in ordine, da sinistra a destra.:sections 4.2.5
L’SFD è il valore di otto bit (un byte) che segna la fine del preambolo, che è il primo campo di un pacchetto Ethernet, e indica l’inizio del frame Ethernet. L’SFD è progettato per rompere lo schema di bit del preambolo e segnalare l’inizio del frame vero e proprio.:sezione 4.2.5 L’SFD è immediatamente seguito dall’indirizzo MAC di destinazione, che è il primo campo in un frame Ethernet. L’SFD è la sequenza binaria 10101011 (0xD5, decimale 213 nell’ordinamento dei primi bit di Ethernet LSB).:sections 3.2.2, 3.3 and 4.2.6
Il circuito transceiver di livello fisico (PHY in breve) è necessario per collegare il MAC Ethernet al mezzo fisico. La connessione tra un PHY e il MAC è indipendente dal mezzo fisico e usa un bus della famiglia di interfacce indipendenti dai media (MII, GMII, RGMII, SGMII, XGMII). I chip transceiver Fast Ethernet utilizzano il bus MII, che è un bus largo quattro bit (un nibble), quindi il preambolo è rappresentato come 14 istanze di 0xA, e l’SFD è 0xA 0xB (come nibble). I chip transceiver Gigabit Ethernet usano il bus GMII, che è un’interfaccia larga otto bit, quindi la sequenza di preambolo seguita dall’SFD sarebbe 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0xD5 (come byte).
Frame – data link layerEdit
HeaderEdit
L’intestazione presenta gli indirizzi MAC di destinazione e sorgente (ognuno di sei ottetti), il campo EtherType e, opzionalmente, un tag IEEE 802.1Q o IEEE 802.1ad.
Il campo EtherType è lungo due ottetti e può essere usato per due scopi diversi. Valori di 1500 e inferiori significano che è usato per indicare la dimensione del carico utile in ottetti, mentre valori di 1536 e superiori indicano che è usato come EtherType, per indicare quale protocollo è incapsulato nel carico utile del frame. Quando è usato come EtherType, la lunghezza del frame è determinata dalla posizione dell’interpacket gap e dalla sequenza di controllo del frame (FCS) valida.
Il tag IEEE 802.1Q o il tag IEEE 802.1ad, se presente, è un campo di quattro ottetti che indica l’appartenenza alla Virtual LAN (VLAN) e la priorità IEEE 802.1p. I primi due ottetti del tag sono chiamati Tag Protocol IDentifier (TPID) e raddoppiano il campo EtherType indicando che il frame è 802.1Q o 802.1ad tagged. 802.1Q usa un TPID di 0x8100. 802.1ad usa un TPID di 0x88a8.
PayloadEdit
Il payload minimo è 42 ottetti quando è presente un tag 802.1Q e 46 ottetti quando è assente. Quando il carico utile effettivo è inferiore, i byte di padding sono aggiunti di conseguenza. Il carico utile massimo è di 1500 ottetti. I jumbo frames non standard permettono un carico utile massimo più grande.
Sequenza di controllo del frameModifica
La sequenza di controllo del frame (FCS) è un controllo di ridondanza ciclica (CRC) di quattro ottetti che permette il rilevamento di dati corrotti all’interno dell’intero frame ricevuto dal lato del ricevitore. Secondo lo standard, il valore FCS è calcolato in funzione dei campi protetti del frame MAC: indirizzo sorgente e destinazione, campo lunghezza/tipo, dati client MAC e padding (cioè tutti i campi tranne l’FCS).
Per lo standard, questo calcolo è fatto usando l’algoritmo left shifting CRC32 BZIP2 (poly = 0x4C11DB7, CRC iniziale = 0xFFFFFFFFFF, CRC è post complementato, verifica valore = 0x38FB2284). Lo standard afferma che i dati sono trasmessi per primo il bit meno significativo (bit 0), mentre l’FCS è trasmesso per primo il bit più significativo (bit 31).:sezione 3.2.9 Un’alternativa è calcolare un CRC usando il right shifting CRC32 (poly = 0xEDB88320, CRC iniziale = 0xFFFFFFFFFF, CRC è post complementato, valore di verifica = 0x2144DF1C), che risulterà in un CRC che è un bit inverso dell’FCS, e trasmettere sia i dati che il bit meno significativo CRC per primo, ottenendo trasmissioni identiche.
Lo standard afferma che il ricevitore dovrebbe calcolare un nuovo FCS quando i dati vengono ricevuti e poi confrontare l’FCS ricevuto con l’FCS che il ricevitore ha calcolato. Un’alternativa è calcolare un CRC sia sui dati ricevuti che sull’FCS, che risulterà in un valore fisso non nullo di “verifica”. (Il risultato non è zero perché il CRC è post complementato durante la generazione del CRC). Dato che i dati vengono ricevuti con il bit meno significativo per primo, e per evitare di dover bufferizzare gli ottetti di dati, il ricevitore usa tipicamente il CRC32 con spostamento a destra. Questo rende il valore di “verifica” (a volte chiamato “controllo magico”) 0x2144DF1C.
Tuttavia, l’implementazione hardware di un CRC con spostamento logicamente a destra può usare un Linear Feedback Shift Register con spostamento a sinistra come base per il calcolo del CRC, invertendo i bit e ottenendo un valore di verifica di 0x38FB2284. Poiché la complementazione del CRC può essere eseguita dopo il calcolo e durante la trasmissione, ciò che rimane nel registro hardware è un risultato non completato, quindi il residuo per un’implementazione right shifting sarebbe il complemento di 0x2144DF1C = 0xDEBB20E3, e per un’implementazione left shifting, il complemento di 0x38FB2284 = 0xC704DD7B.
Fine del frame – strato fisicoModifica
La fine di un frame è solitamente indicata dal simbolo di fine del flusso di dati al livello fisico o dalla perdita del segnale portante; un esempio è 10BASE-T, dove la stazione ricevente rileva la fine di un frame trasmesso dalla perdita della portante. Gli strati fisici successivi usano un simbolo o una sequenza esplicita di fine dei dati o di fine del flusso per evitare ambiguità, specialmente quando la portante è continuamente inviata tra i frame; un esempio è Gigabit Ethernet con il suo schema di codifica 8b/10b che usa simboli speciali che sono trasmessi prima e dopo la trasmissione di un frame.
Interpacket gap – strato fisicoModifica
Interpacket gap (IPG) è il tempo inattivo tra i pacchetti. Dopo che un pacchetto è stato inviato, i trasmettitori sono tenuti a trasmettere un minimo di 96 bit (12 ottetti) di stato di linea inattiva prima di trasmettere il pacchetto successivo.