Come abbiamo visto parlando del livello di rete, il protocollo principale e’ l’ Internet Protocol (IP per gli amici). Ad ogni sistema terminale connesso alla Internet e’ assegnato un IP unico che ci permette di individuare la posizione dell’ ES all’ interno della rete.
Quando due macchine vogliono comunicare, utilizziamo le Socket: una socket e’ formata da indirizzo IP di origine, porta di origine, IP di destinazione e porta di destinazione. Gli indirizzi IP, indicano solo le estremita’ della rete senza pero’ definire i collegamenti nella quale dovra’ passare il datagramma.
Quando un datagramma scende da livello di rete a quello di collegamento, viene incapsulato in un frame che contiene una intestazione con gli indirizzi di collegamento della sorgente e della destinazione del frame.
L’ indirizzo del Frame e’ chiamato indirizzo [highlight1]MAC[/highlight1] (aka Lan, o fisico o Ethernet) ed e’ un indirizzo lungo 48 bit diviso in 6 gruppi di byte rappresentati solitamente in esadecimale ( a differenza di IP, che viene rappresentato comunemente in decimale).
Ogni adattatore di rete ha un indirizzo MAC univoco. Se per esempio il nostro pc ha una porta ethernet e una antenna wireless, avranno entrambe un indirizzo MAC differente.
A questo punto vi chiederete (io almeno me lo sono chiesto) come fanno i produttori a fare in modo che non ci siano due MAC uguali?
La[fancy_link link=”http://www.ieee.org/index.html” target=”blank”]IEEE[/fancy_link] sovraintende la gestione degli indrizzi MAC. Quando un’ azienda vuole produrre adattatori di rete, compra un blocco di indirizzi MAC.
L’ univocita’ del MAC, consente un’ ottima portabilita’: cambiando LAN infatti, l’ indirizzo restera’ invariato a differenza dell’ indirizzo IP che varia a seconda della (sotto)rete a cui il nodo e’ collegato.
Per comunicare quindi, a due dispositivi occore conoscere il reciproco indirizzo MAC. Come fare per riuscire a trovarlo?
Address Resolution Protocol
Ogni nodo IP (gli host, i router) ha una tabella ARP che contiene la corrispondenza tra indirizzo IP e MAC. Una tupla del tipo>
Dove TimeToLive indica quando bisognerebbe eliminare una data voce nella tabella, tipicamente vale 20 minuti.
[note_box]ARP funziona cosi’: A conosce l’ indirizzo IP di B, che e’ connesso alla sua stessa sottorete ovviamente, e vuole conoscere il suo indirizzo fisico. Per conoscerlo, invia una richiesta ARP in broadcast, quindi a tutti i componenti della rete sostanzialmente chiedendo “Chi ha questo indirizzo IP? Rispondete ad IndirizzoA”. A rispondere, se e’ presente ed attivo, sara’ proprio B mentre tutti gli altri dispositivi ignoreranno la richiesta. Nella risposta, B specifica il suo MAC e lo invia in modalita’ unicast ad A.[/note_box]
Una cosa particolare di ARP e’ il fatto che e’ plug-and-play: non deve essere preconfigurato dall’ amministratore di sistema in quanto la tabella ARP viene costruita dinamicamente ed automaticamente.
I pacchetti ARP vengono incapsulati direttamente in un frame a livello di collegamento
Ethernet
Correva l’ anno 1985 quando la IEEE Computer Society avvio il Progetto 802. Nato con l’obbiettivo di definire gli standard per le funzioni del livello fisico e du collegamento dei protocolli LAN: e fu cosi’ che nacque lo standard IEEE 802.
Gli standard delle LAN prodotti dal IEEE 802 sono:[fancy_list style=”arrow_list”]
- 802.1: Specifiche generali del progetto
- 802.2: Logical Link Control
- 802.3: CSMA/CD
- 802.4: Token Bus
- 802.5: Token Ring
- 802.6: DQDB (per le MAN)
- 802.11: Per le WLan.
[/fancy_list]In tutto questo, la Ethernet detiene una posizione dominante nel mercato delle LAN cablate in quanto oltre ad essere economica, riesce a trovarsi sempre al passo coi tempi col tasso trasmissivo con rate che vanno da 10 Mbps a 10 Gbps.
Vediamo quindi com’e’ fatto un pacchetto di Ethernet Standard (10Mbps):
- Intestazione del livelo fisico (8 byte): 7 byte hanno i bit impostati a 10101010utilizzati per sincronizzare ed attivare le NIC riceventi. 1 byte impostato a 1010101011, gli ultimi due bit (11) servono ad indicare che inizia l’ header MAC.
- Indirizzi (6 byte): Quando una NIC (Network Interface Card) riceve un pacchetto contentente l’ indirizzo di destinazione o con l’ indirizzo broadcast trasferisce il contenuto del campo dati del pacchetto al livello di rete mentre i pacchetti con altri pacchetti MAC vengono ignorati (in quanto non diretti a quel sistema terminale).
- Tipo (2 byte): Consente a Ethernet di supportare vari protocolli di rete (multiplexing dei protocolli).
- Dati (46 a 1500 byte): Contiene datagrammi IP se il datagramma e’ inferiore alla dimensione minima (46 byte) il campo riempito con degli zeri fino a raggiungere quel valore.
- Controllo RC(4 byte): Consente al NIC ricevente di rilevare la presenza di un errore nei bit del pacchetto.
Ethernet e’ senza connessione: non e’ prevista nessuna forma di handshake prima dell’ invio di un pacchetto. Inoltre, non e’ affidabile: la NIC ricevente non invia ack di nessun tipo (anche se non passa il controllo CRC).
Se viene implementato TCP a livello di trasporto, e’ possibile rendersi conto di eventuali lacune o incompletezza di dati.
Con l’ intestazione di 18byte e il frame di 46 byte, la dimensione minima di un frame Ethernet e’ 64 byte (dimensione necessaria per eseguire CSMA/CD come abbiamo visto l’altra volta).
Con l’ intestazione di 18 byte e il frame di 1500byte di dati, la dimensione massima di un frame Ethernet e’ di 1518 byte.
Tutte le stazioni che fanno parte di una Ethernet sono dotate di una NIC, e ad ogni Network Interface Card viene associato un indirizzo di rete e un indirizzo di collegamento. Gli indirizzi vengono trasmessi da sinistra verso destra byte dopo byte ma per ogni byte il bit meno significativo viene inviato per primo e quello piu’ significativo per ultimo.
Fasi Operative del protocollo CSMA/CD
[fancy_numbers]
- Framing: La NIC riceve un datagramma di rete dal nodo cui e’ collegato e prepara un pacchetto Ethernet.
- CS e trasmissione: il canale e’ libero? Trasmette il pacchetto. E’ occupato? Resta in attesa finche’ il canale non si libera.
- Collision Detection (CD): Durante la trasmissione resta in ascolto di eventuali segnali da parte di altre NIC. Se non ne rileva, considera il pacchetto spedito.
- Jamming: Ha rilevato collisioni? Interrompe la trasmissione e invia un pacchetto di disturbo (jam, lungo 48 bit) a tutte le altre NIC per avvisarle della collisione.
- Backoff Esponenziale: Quando riscontra la k-esima collissione consecutiva, stabilisce il valore n tra {0,1….2^(m)-1} dove m e’ il minimo fra k e 10. La NIC aspetta un tempo pari a N volte 512 bit e ritorna al passo 2.
[/fancy_numbers]
L’ efficienza dell’ Ethernet e’ ottime, e tende al 100%.
Negli anni 90, apparvero sul mercato altri tipi di LAN con rate superiore a 10 Mbps (FDDI).
Ethernet Standard si e’ evoluta in Fast Ethernet (a ben 100Mbps) mantenendo compatibilita’ con la precedente versione: il sottolivello MAC e’ infatti rimasto invariato (dimensione e formato del frame compresi).
Se ti ricordi pero’ il discorso su CSMA/CD, abbiamo detto che il suo funzionamento dipende dalla velocita’ di trasmissione, dalla dimensione minima dalla lunghezza massima della rete.
Per mantenere la dimensione minima del frame 512 bit, bisognerebbe modificare la lunghezza massima della rete: Se la trasmissione e’ 10 volte piu’ veloce, e il frame ancora 512 bit, allora le collisioni devono essere rilevate 10 volte piu’ velocemente quindi la rete deve essere 10 volte piu’ corta.
Quindi possiamo scegliere:[fancy_list style=”triangle_arrow”]
- Abbandonare la topologia a stella usando un hub passivo con topologia a stella con dimensione massima della rete a 250 metri (e non 2500 come nella versione originale)
- Si usa uno switch di collegamento dotato di buffer per memorizzare i frame e connessione full duplex per ciascun host.
[/fancy_list]Vediamo la soluzione due: essendo il mezzo trasmissivo privato per ciascun host, non c’e’ piu’ bisogno di CSMA/CD visto che gli host non sono piu’ in competizione.
Lo switch riceve un frame da un host, lo salva nel buffer, verifica l’ indirizzo di destinazione e invia il frame attraverso l’ interfaccia corrispondente.
Il singolo mezzo condiviso e’ stato modificato in molti mezzi punto-punto!
Oltre a Fast Ethernet, esiste anche Gigabit Ethernet: una versione successiva di Etherneto con velocita’ 1000Mbps.
Anche questa usa la topologia a stella con switch, dove ovviamente non ci sono collissioni e la massima lunghezza del cavo dipende dall’attenuazione del segnale.
Per ovviare anche alla attenuazione del segnale, usiamo gli Hub: un Hub e’ un ripetitore multiporta ed e’ un dispositivo che opera sui singoli bit:
- Opera a livello fisico
- All’ arrivo di un bit, l’hub lo riproduce incrementandone l’ energia e lo ritrasmette su tutte le sue interfaccie.
Non implementa la rilevazione della portante ne’ CSMA/CD. Ripete il bit entrante su tutte le interfacce uscenti anche se su qualcuna di queste c’e’ un segnale. Trasmette in broadcast e quindi ogni NIC puo’ sondare il canale per verificare se e’ libero e rilevare una collisione mentre trasmette (CSMA/CD).
Switch
Lo switch e’ un fighissimo dispositivo del livello di collegamento: piu’ intelligente di un hub, svolge un ruolo attivo nella rete.
- Opera a livello di collegamento.
- Filtra e inoltra i pacchetti Ethernet,
- Esamina l’ indirizzo di destinazione e lo invia all’ interfaccia corrispondente alla sua destinazione in maniera del tutto trasparente: gli host sono inconsapevoli della presenza di switch.
Gli host sono collegati con gli switch, questi bufferizzano i pacchetti inviati dagli host evitando cosi le collisioni.
Ogni host e’ collegato allo switch usando Ethernet, e piu host possono trasmettere simultaneamente senza che ci siano collisioni: cosa che non puo’ fare invece un Hub.
Inizialmente gli switch venivano configurati staticamente: ora c’e’ un meccanismo dinamico di auto-apprendimento e quindi non solo non hanno bisogno di essere configurati, ma hanno una tabella dinamica che associa automaticamente indirizzi MAC alle interfaccie e li salva nella tabella di commutazione (Switch-table).
Lo switch apprende quali nodi sono connessi a lui sulle varie interfaccie: quando riceve un pacchetto, lo switch impara l’ indirizzo del mittente e registra la tupla (mittente;interfaccia; ttl) nella sua switch-table.
Inoltre, gli switch possono essere interconnessi fra di loro: anche in quel caso, i vari switch autoapprendono la posizione di ogni indirizzo sulle varie interfaccie.
Dopo questa descrizione sugli switch, vi sarete resi conto che assomigliano molto ai router:
- Entrambi sono dispositivi store-and-forward, i Router sono dispositivi a livello di rete mentre gli switch del livello di collegamento.
- I router mantengono le tabelle d’ inoltro e implementano algoritmi d’instradamento,
Gli switch mantengono tabelle di commutazione, implementano il filtraggio e algoritmi di autoapprendimento.
Proprieta’ degli switch:
- Gli switch sono dispositivi plug-and-play: non richiedono intervento di utente o amministratore di rete.
- Elimina le collisioni bufferizzando il frame,
- Interconnettono link eterogenei, ovvero collegamenti che funzionano a diverse velocita’ possono comunicare fra di loro.
- Aumentano la sicurezz della rete e migliorano il network management: Bloccano i packet sniffer e forniscono informazioni su uso di banda, collisioni, tipi di traffico,etc.
Lan Virtuali
Volendo è possibile utilizzare degli switch speciali che creano delle Lan virtuali da una Lan reale. Ovvero: avendo un solo switch a cui si collegano 10 host, è possibile fare in modo che i primi 3 pensino di essere collegati fra di loro e di trovarsi su una Lan loro, e gli altri 7 pensano di trovarsi su un’altra Lan (nonostante comunque lo switch a cui sono collegati è unico).
E’ possibile collegare due VLAN utilizzando un router connesso su due porte comuni a tutte le VLAN.
Se abbiamo due Switch ( e quindi due Lan) possiamo creare una VLAN con degli host di ambo le LAN impostando una porta su entrambi gli switch che esegue il VLAN Trunking. Le porte trunk appartengono a entrambe le VLAN e riceve i frame indirizzati a entrambi le VLAN.
Reti punto-punto: protocollo Point-To-Point
Per i collegamenti dedicati fra due diapositivi, si utilizza il protocollo Point-To-Point (PPP) al posto del protocollo MAC. Sviluppato dall’ IETF è un mezzo pensato per trasmettere dati per più di una rete sullo stesso collegamento seriale in un modo standard e indipendente dal produttore.
Il PPP può trasportare diversi tipi di traffico fra cui IP, Novell IPX, Apple Talk ecc; ed è formato da Un mittente, Un destinatario ed Un collegamento.
Non c’è quindi il protocollo di accesso al mezzo (MAC) e non occorre indirizzamento MAC esplicito. Il collegamento potrebbe essere una linea telefonica seriale commutata o un collegamento a fibra ottica.
Alcune proprietà di PPP:
- Framing dei pacchetti: Il mittente incapsula un pacchetto a livello di rete all’ interno del pacchetto PPP a livello di link.
- Trasparenza: Il protocollo PPP non deve porre alcuna restrizione ai dati che appaiono nel pacchetto a livello di rete.
- Rilevazione degli errori, ma non la correzione
- Disponibilità nella connessione: Il protocollo deve rilevare la presenza di eventuali guasti a livello di link e segnalare l’ errore al livello di rete
- Negoziazione degli indirizzi di rete: PPP deve fornire un meccanismo ai livelli di rete comunicanti per ottenere o configurare gli indirizzi di rete.
Alcune proprietà assenti nel PPP:
- Correzione degli errori,
- Controllo di flusso,
- Sequenza: I pacchetti non arrivano al ricevente per forza mantenendo lo stesso ordine
- Collegamento multipunto (es:polling).
Come già abbiamo visto, tutte queste proprietà possono (e devono essere) implementate dai livelli superiori.
Formato dei pacchetti PPP
- Flag: Ogni pacchetto inizia e termina con un byte con valore 01111110
- Indirizzo: Unico valore (11111111)
- Controllo: Unico valore, ulteriori valori potrebbero essere stabiliti in futuro
- Protocollo: Indica al PPP ricevente il protocollo del livello superiore a cui appartengono i dati incapsulati.
- Informazioni: Incapsula il pacchetto trasmesso dal protocollo del livello superiore (come IP) nel collegamento PPP.
- Checksum: Utilizzato per rilevare gli errori nei bit contenuti in un pacchetto, utilizza un codice a ridondanza ciclica HDLC a due o quattro byte.
Per sapere quando finisce il frame, viene aggiunto un byte di controllo (<01111101>) prima di ogni byte di dati <01111110> e <0111101>. In pratica è come un byte di escape (tipo \n o \’). Questa pratica è chiamata Byte Stuffing.
A differenza di Ethernet, il PPP esegue un handshaking: i peer devono configurare il collegamento impostando la massima dimensione del pacchetto ed in caso l’autenticazione.
Pingback: [Linux] Cambiare l’ indirizzo MAC di una interfaccia di rete | InformaticaLab Blog