# Progetto di reti locali/Ridondanza e bilanciamento del carico a livello 3 nelle LAN

Progetto di reti locali
Copertina Tutti i moduli · Sviluppo
    CopertinaProgetto di reti locali/Copertina
* Nozioni di base sulle LAN
** Introduzione alle Local Area NetworkProgetto di reti locali/Introduzione alle Local Area Network
** EthernetProgetto di reti locali/Ethernet
** Repeater e bridgeProgetto di reti locali/Repeater e bridge
** Evoluzioni di EthernetProgetto di reti locali/Evoluzioni di Ethernet
** Funzionalità avanzate sulle reti EthernetProgetto di reti locali/Funzionalità avanzate sulle reti Ethernet
* Albero ricoprente
** Spanning Tree ProtocolProgetto di reti locali/Spanning Tree Protocol
** Rapid Spanning Tree ProtocolProgetto di reti locali/Rapid Spanning Tree Protocol
* Standard aggiuntivi per le LAN
** Qualità del servizio nelle LAN IEEE 802Progetto di reti locali/Qualità del servizio nelle LAN IEEE 802
** Link aggregation – IEEE 802.3adProgetto di reti locali/Link aggregation – IEEE 802.3ad
** IGMP snoopingProgetto di reti locali/IGMP snooping
* Configurazione e progettazione avanzate delle LAN
** Virtual LANProgetto di reti locali/Virtual LAN
** Ridondanza e bilanciamento del carico a livello 3 nelle LANProgetto di reti locali/Ridondanza e bilanciamento del carico a livello 3 nelle LAN
** Il livello rete nelle LANProgetto di reti locali/Il livello rete nelle LAN
* Argomenti aggiuntivi
** Introduzione alle Storage Area NetworkProgetto di reti locali/Introduzione alle Storage Area Network
Modifica il sommario
Ai confini della LAN aziendale con il livello rete, il router che fornisce la connettività con l'esterno (tipicamente Internet) costituisce, per gli host che lo hanno come loro default gateway, un singolo punto di guasto, a meno che il router non sia ridondato opportunamente.
La semplice duplicazione del router non è sufficiente: gli host non sono in grado di passare automaticamente all'altro router in caso di guasto del loro default gateway, perché essi non sono capaci ad apprendere la topologia di rete tramite i protocolli di instradamento del livello rete.
Sono stati pertanto definiti alcuni protocolli per la gestione automatica di router ridondanti:
* HSRP: protocollo proprietario di Cisco specifico per la ridondanza del default gateway e con parziale supporto al bilanciamento del carico: #HSRP;
* VRRP: protocollo standard molto simile a HSRP ma libero da brevetti;
* GLBP: protocollo proprietario di Cisco che migliora il bilanciamento del carico rispetto a HSRP: #GLBP#GLBP.

## HSRP

L'HSRP garantisce automaticamente che ogni host mantenga la connettività con l'esterno della LAN attraverso il proprio default gateway anche in caso di guasto di uno dei router ridondanti.

### Configurazione della rete

Alle interfacce appartenenti alla LAN aziendale di tutti i router ridondanti viene assegnato uno stesso indirizzo IP virtuale e uno stesso indirizzo MAC virtuale, in aggiunta ai loro indirizzi IP e MAC reali. I router possono essere:
* active: è il router che ha il diritto di servire la LAN, cioè di rispondere all'indirizzo IP virtuale e all'indirizzo MAC virtuale;
* stand-by: è il router che ha il diritto di sostituire il router active in caso di guasto di quest'ultimo;
* listen: sono gli altri router né active né stand-by; uno di essi diventa il router stand-by in caso di guasto del router active.
L'indirizzo IP virtuale va impostato esplicitamente dall'amministratore di rete durante la configurazione di HSRP, mentre l'indirizzo MAC virtuale ha il prefisso well-known di Cisco "00:00:0C:07:AC":
Formato dell'indirizzo MAC virtuale HSRP. :
| 24 | 40 | 48 |
| OUI (00:00:0C) | stringa HSRP (07:AC) | ID di gruppo |
dove i campi sono:
* campo Organizationally Unique Identifier (OUI) (3 byte): la stringa di bit "00:00:0C" è l'OUI assegnato a Cisco affinché gli indirizzi MAC delle schede di rete vendute da Cisco siano globalmente univoci;
* campo stringa HSRP (2 byte): la stringa di bit "07:AC" identifica un indirizzo MAC virtuale HSRP, e non può comparire in alcun indirizzo MAC fisico → l'indirizzo MAC virtuale è garantito essere univoco all'interno della LAN: non è possibile che un host abbia un indirizzo MAC uguale all'indirizzo MAC virtuale HSRP;
* campo ID di gruppo (1 byte): identifica il gruppo a cui fa riferimento l'istanza di HSRP corrente: #Gruppi HSRP.
A tutti gli host viene impostato l'indirizzo IP virtuale come indirizzo di default gateway, cioè come indirizzo IP a cui gli host invieranno i pacchetti IP diretti al di fuori della LAN.

### Instradamento asimmetrico del traffico

L'obiettivo dell'HSRP è "ingannare" l'host facendo credere ad esso di stare comunicando con l'esterno attraverso un singolo router caratterizzato da un indirizzo IP pari all'indirizzo di default gateway e da un indirizzo MAC pari all'indirizzo MAC ottenuto tramite il protocollo ARP, mentre in realtà l'HSRP in caso di guasto sposta il router active su un altro router senza che l'host se ne accorga:
* ARP Request: quando un host si connette alla rete, invia una ARP Request all'indirizzo IP impostato come default gateway, che è l'indirizzo IP virtuale;
* ARP Reply: il router active invia in risposta una ARP Reply con il proprio indirizzo MAC virtuale;
* traffico in uscita: l'host invia ogni pacchetto successivo all'indirizzo MAC virtuale, e solo il router active lo elabora, mentre i router stand-by e listen lo scartano. Poi, il router active inoltra il pacchetto secondo i protocolli di instradamento esterni (OSPF, BGP, ecc.) che sono indipendenti dall'HSRP → il pacchetto potrebbe anche attraversare i router stand-by e listen se i protocolli di instradamento ritengono che questo sia il percorso migliore;
* traffico in entrata: ogni pacchetto proveniente dall'esterno e diretto all'host può entrare nella LAN da uno qualsiasi dei router ridondanti secondo i protocolli di instradamento esterni indipendenti dall'HSRP, e l'host lo riceverà con l'indirizzo MAC reale del router come indirizzo MAC sorgente. I protocolli di instradamento esterni sono anche in grado di rilevare i guasti dei router, compreso il default gateway, per il traffico in entrata → la protezione è ottenuta anche se la LAN è priva dell'HSRP.

#### Server dual-homed

L'HSRP può essere utilizzato per ottenere la ridondanza di una macchina singola per migliorare la tolleranza ai guasti: un server può essere dotato di due interfacce di rete, una primaria e una secondaria, a cui l'HSRP assegna un indirizzo IP virtuale e un indirizzo MAC virtuale → il server continuerà a essere raggiungibile allo stesso indirizzo IP anche in caso di guasto del link che collega l'interfaccia primaria alla rete.

### Pacchetti di Hello

I pacchetti di Hello sono dei messaggi generati dai router ridondanti per:
* eleggere il router active: nella fase di negoziazione, i router si scambiano dei pacchetti di Hello proponendosi come router active → il router active è quello con la priorità più alta (configurabile dall'amministratore di rete), o in caso di parità quello con l'indirizzo IP più alto;
* rilevare i guasti del router active: il router active invia periodicamente pacchetti di Hello come messaggi di "keep-alive" → in caso di guasto del router active, il router stand-by non riceve più il messaggio di "keep-alive" ed elegge se stesso come router active;
* aggiornare i filtering database: quando il router active cambia, il nuovo router active inizia a inviare dei messaggi di Hello segnalando ai bridge all'interno della LAN aziendale la nuova posizione dell'indirizzo MAC virtuale → tutti i bridge aggiorneranno i loro filtering database conformemente. Quando un router diventa active, invia anche una ARP Reply gratuita in broadcast (le ARP Reply normali sono unicast) con l'indirizzo MAC virtuale come indirizzo MAC sorgente.
Nel pacchetto di Hello l'intestazione HSRP è incapsulata nel formato seguente:
Formato del pacchetto di Hello HSRP generato dal router active. :
| 14 byte | 20 byte | 8 byte | 20 byte |
| intestazione MAC | intestazione IP | intestazione UDP | intestazione HSRP |
| src: indirizzo MAC virtuale | src: indirizzo IP reale | src: porta 1985 | intestazione HSRP |
| dst: 01:00:5E:00:00:02 | dst: 224.0.0.2 | dst: porta 1985 | intestazione HSRP |
| | TTL: 1 | | intestazione HSRP |
Formato del pacchetto di Hello HSRP generato dal router stand-by. :
| 14 byte | 20 byte | 8 byte | 20 byte |
| intestazione MAC | intestazione IP | intestazione UDP | intestazione HSRP |
| src: indirizzo MAC reale | src: indirizzo IP reale | src: porta 1985 | intestazione HSRP |
| dst: 01:00:5E:00:00:02 | dst: 224.0.0.2 | dst: porta 1985 | intestazione HSRP |
| | TTL: 1 | | intestazione HSRP |

#### Osservazioni

* indirizzo MAC sorgente: è l'indirizzo MAC virtuale per il router active, è l'indirizzo MAC reale per il router stand-by;
* indirizzo IP di destinazione: "224.0.0.2" è l'indirizzo IP del gruppo multicast "all routers"; è uno degli indirizzi multicast non filtrati da IGMP snooping e quindi mandati sempre in flooding dai bridge: Progetto di reti locali/C3C3. IGMP snooping;
* indirizzo MAC di destinazione: "01:00:5E:00:00:02" è l'indirizzo MAC multicast derivato dall'indirizzo IP multicast;
* Time To Live (TTL): è pari a 1 in modo che i pacchetti vengano scartati subito dai router a cui giungono, perché essi possono essere propagati solo per la LAN;
* l'intestazione HSRP del pacchetto di Hello è incapsulata in UDP e non in TCP perché la perdita di un pacchetto di Hello non richiede la sua ritrasmissione;
* i router listen non generano pacchetti di Hello, a meno che non rilevano che il router stand-by è diventato router active e devono candidarsi affinché uno di essi diventi il nuovo router stand-by.

#### Formato dell'intestazione HSRP

L'intestazione HSRP ha il formato seguente:
Formato dell'intestazione HSRP (20 byte). :
| 8 | 16 | 24 | 32 |
| Version | Op Code | State | Hello Time |
| Hold Time | Priority | Group | Reserved |
| Authentication ||||
| Data ||||
| Virtual IP Address ||||
dove i campi più significativi sono:
* campo Op Code (1 byte): descrive il tipo di messaggio contenuto nel pacchetto di Hello:
** 0 = Hello: il router è in esecuzione ed è capace di diventare il router active o stand-by;
** 1 = Coup: il router vuole diventare il router active;
** 2 = Resign: il router non vuole più essere il router active;
* campo State (1 byte): descrive lo stato corrente del router mittente del messaggio:
** 8 = Standby: il pacchetto HSRP è stato inviato dal router stand-by;
** 16 = Active: il pacchetto HSRP è stato inviato dal router active;
* campo Hello Time (1 byte): è il tempo tra i messaggi di Hello inviati dai router (predefinito: 3 s);
* campo Hold Time (1 byte): è il tempo di validità del messaggio di Hello corrente, scaduto il quale il router stand-by si propone come router active (predefinito: 10 s);
* campo Priority (1 byte): è la priorità del router usata per il processo di elezione del router active/stand-by (predefinita: 100);
* campo Group (1 byte): identifica il gruppo a cui fa riferimento l'istanza di HSRP corrente: #Gruppi HSRP;
* campo Authentication Data (8 byte): contiene una password da 8 caratteri in chiaro (predefinita: "cisco");
* campo Virtual IP Address (4 byte): è l'indirizzo IP virtuale utilizzato dal gruppo, cioè l'indirizzo IP utilizzato come indirizzo di default gateway dagli host della LAN aziendale.
Con i valori predefiniti per i parametri di Hello Time e di Hold Time, il tempo di convergenza è pari a circa 10 secondi.

### Gruppi HSRP

I gruppi HSRP permettono di distinguere più reti IP logiche nella stessa LAN fisica: a ogni rete IP corrisponde un gruppo HSRP, con una coppia indirizzo MAC virtuale e indirizzo IP virtuale. Gli host di una rete IP hanno uno degli indirizzi IP virtuali impostato come indirizzo di default gateway, gli host di un'altra rete IP hanno un altro indirizzo IP virtuale impostato come indirizzo di default gateway, e così via.
Ogni router ridondante conosce più coppie indirizzo MAC virtuale e indirizzo IP virtuale, una per ogni gruppo → ogni router (tranne i router listen) genera un pacchetto di Hello per ogni gruppo, e risponde a uno degli indirizzi MAC virtuali alla ricezione di traffico da host di una rete IP, a un altro alla ricezione di traffico da host di un'altra rete IP, e così via.
Gli ultimi 8 bit dell'indirizzo MAC virtuale identificano il gruppo a cui l'indirizzo fa riferimento → l'HSRP è in grado di gestire fino a 256 gruppi diversi in una stessa LAN.

#### In presenza di VLAN

Definire più gruppi HSRP è obbligatorio in presenza di VLAN: ogni VLAN è infatti una LAN separata con il proprio default gateway → a ogni VLAN è assegnato un gruppo HSRP. Ogni router a braccio singolo ridondante ha più interfacce virtuali, una per ogni VLAN → i gruppi HSRP sono configurati sulla stessa interfaccia fisica ma ciascuno su interfacce logiche differenti.

#### Multi-group HSRP (mHSRP)

Tramite un'opportuna configurazione delle priorità, è possibile distribuire il traffico delle reti IP sui router ridondanti (condivisione del carico):
* rete con più gruppi HSRP: il traffico della rete IP 1 passa per il router R2, mentre il traffico della rete IP 2 passa per il router R1;
* rete con più gruppi HSRP in presenza di VLAN: il traffico della VLAN 1 passa per il router R2, mentre il traffico della VLAN 2 passa per il router R1.

##### Vantaggi

* il mHSRP è molto conveniente quando il traffico in entrata nella LAN è \ul{simmetrico}: un router a braccio singolo per l'interconnessione di VLAN può essere ridondato in modo che un router sostiene il traffico in entrata da una prima VLAN e in uscita in una seconda VLAN, mentre l'altro router sostiene il traffico in entrata dalla seconda VLAN e in uscita nella prima VLAN;
* migliore utilizzo delle risorse: in una rete con un singolo gruppo HSRP la larghezza di banda del router stand-by è del tutto inutilizzata → il mHSRP permette di utilizzare la larghezza di banda di entrambi i router.

##### Svantaggi

* il mHSRP non è così conveniente quando il traffico in entrata nella LAN è asimmetrico: la condivisione del carico infatti riguarda solo il traffico in uscita (il traffico in entrata è indipendente dall'HSRP), e il traffico in uscita (upload) generalmente è inferiore rispetto al traffico in entrata (download);
* la condivisione del carico non implica necessariamente il bilanciamento del traffico: il traffico proveniente da una LAN potrebbe essere molto maggiore del traffico proveniente da un'altra LAN;
* difficoltà di configurazione: gli host in ogni rete IP devono avere un indirizzo di default gateway diverso rispetto agli host delle altre reti IP, ma il server DHCP solitamente restituisce un singolo indirizzo di default gateway per tutti gli host.

### Funzione di track

L'HSRP offre protezione dai guasti del link che collega il router default gateway alla LAN e dai guasti del router default gateway stesso, ma non dai guasti del link che collega il router default gateway a Internet: un guasto sul link WAN infatti obbliga i pacchetti a essere inviati al router active che a sua volta li invia tutti al router stand-by, invece di andare subito al router stand-by → ciò non comporta una reale perdita di connettività Internet, ma comporta un overhead aggiuntivo nel processo di inoltro dei pacchetti.
La funzione di track consente di rilevare i guasti sui link WAN e di scatenare il router stand-by a prendere il posto del router active tramite una diminuzione automatica della priorità del router active (predefinito: −10).
La funzione di track funziona solo se è attiva la capacità di prelazione: se la diminuzione della priorità del router active è tale da portarla al di sotto della priorità del router stand-by, quest'ultimo può "sottrarre" lo stato di active al router active inviando un messaggio di Hello di tipo Coup.
Tuttavia, il rilevamento dei guasti avviene esclusivamente a livello fisico: la funzione di track non è in grado di rilevare un guasto avvenuto su un link più lontano al di là di un bridge.

### Problemi
#### Resilienza del livello data-link

L'HSRP non protegge da tutti i guasti della rete di livello data-link. Per esempio, il guasto nella figura a lato partiziona la rete aziendale in due parti, e siccome avviene tra due bridge non può essere rilevato dai router a livello fisico. Il router stand-by non riceve più i messaggi di Hello dal router active e si auto-promuove active → il traffico in uscita non viene influenzato per nulla dal verificarsi del guasto: ognuno dei due router serve il traffico in uscita di una delle due porzioni di rete.
Il guasto ha invece impatto sul traffico in entrata, in quanto alcune trame non possono raggiungere gli host di destinazione. I protocolli di instradamento di livello rete infatti operano esclusivamente tra router e router: si limitano a rilevare che il percorso tra i due router è stato spezzato da qualche parte, ma non sono in grado di rilevare le interruzioni di percorso tra un router e un host, perché il loro compito è inoltrare il pacchetto in modo che raggiunga uno qualsiasi dei router di frontiera, a cui poi spetta la consegna diretta della trama alla destinazione finale. Visti dall'esterno, entrambi i router appaiono avere la connettività alla stessa rete IP, perciò i protocolli di instradamento di livello rete assumeranno che tutti gli host appartenenti a quella rete IP siano raggiungibili da entrambe le interfacce e ne sceglieranno una in base al criterio del percorso più breve:
* se viene scelto il router che serve la porzione di rete a cui appartiene la destinazione, la trama è consegnata a destinazione senza problemi;
* se viene scelto il router che serve l'altra porzione di rete, il router effettua una ARP Request a cui nessun host risponderà e perciò la destinazione apparirà inesistente sulla rete.
È quindi importante ridondare tutti i link interni alla rete di livello data-link, mettendo più link in parallelo gestiti dal protocollo di spanning tree o configurati in link aggregation.

#### Flooding

In alcune topologie di rete, l'instradamento asimmetrico del traffico può far sì che in alcuni periodi di tempo aumenti in maniera considerevole il traffico in entrata dall'esterno mandato in flooding, mentre in altri il traffico in entrata venga inoltrato correttamente dai bridge. Ciò è dovuto al fatto che le ARP cache dei router generalmente durano più a lungo dei filtering database dei bridge.
Per esempio, nella figura a lato i mapping nella ARP cache sul router ingress R2 scadono dopo 5 minuti, mentre le entry nel filtering database del bridge B2 scadono dopo soli 2 minuti:
* il pacchetto unicast in uscita aggiorna solo il filtering database del bridge B1, perché non passa attraverso il bridge B2;
* il pacchetto in entrata scatena l'invio da parte del router R2 di una ARP Request all'host H1 (in broadcast);
* la ARP Reply che l'host H1 invia in risposta aggiorna sia la ARP cache del router R2 sia il filtering database del bridge B2;
* per i primi 2 minuti, i pacchetti in entrata diretti all'host H1 vengono inoltrati senza problemi;
* dopo 2 minuti dalla ARP Reply, scade la entry relativa all'host H1 nel filtering database del bridge B2;
* per i successivi 3 minuti, il router R2, che ha ancora un mapping valido per l'host H1 nella sua ARP cache, invia i pacchetti in entrata verso il bridge B2, il quale li manda tutti in flooding perché non riceve alcuna trama avente l'host H1 come sorgente;
* dopo 5 minuti dalla ARP Reply, scade anche il mapping nella ARP cache del router R2;
* la successiva ARP Reply sollecitata dal router R2 finalmente aggiorna anche il filtering database del bridge R2.

##### Soluzioni possibili

Non è facile identificare questo problema nella rete perché si manifesta in maniera intermittente; una volta identificato il problema, è possibile:
* forzare le stazioni a inviare trame in broadcast gratuite più spesso, con una frequenza minore dell'ageing time delle entry nei filtering database dei bridge;
* aumentare il valore di ageing time sui bridge lungo il percorso ingress ad almeno il tempo di durata delle ARP cache dei router.

#### Link unidirezionali

L'HSRP non prevede la gestione di guasti su link unidirezionali: per esempio, nella figura a lato avviene un guasto verso il router stand-by, il quale non riceve più i messaggi di Hello dal router active e si auto-elegge active, iniziando a inviare pacchetti di Hello con l'indirizzo MAC virtuale come indirizzo sorgente → il bridge riceve alternativamente pacchetti di Hello da entrambi i router active aventi lo stesso indirizzo MAC come indirizzo sorgente, e la entry relativa a quell'indirizzo MAC continuerà a oscillare periodicamente → se un host invia una trama al default gateway mentre la entry nel filtering database del bridge è associata all'ex-router stand-by, la trama, non potendo passare per il link unidirezionale guasto, andrà persa.

## GLBP

Il Gateway Load Balancing Protocol (GLBP) aggiunge alla ridondanza del default gateway la possibilità di distribuire automaticamente il traffico in uscita su tutti i router ridondanti.
Il GLBP elegge un Active Virtual Gateway (AVG) per ogni gruppo; gli altri membri del gruppo, chiamati Actual Virtual Forwarder (AVF), fungono da backup in caso di guasto dell'AVG. L'AVG eletto assegna quindi un indirizzo MAC virtuale a ogni membro del gruppo GLBP, compreso se stesso; ogni AVF si assume la responsabilità di inoltrare i pacchetti inviati al suo indirizzo MAC virtuale.
In caso di guasto di un AVF, l'AVG notifica uno degli AVF rimasti attivi affidando ad esso il compito di rispondere anche al traffico diretto verso l'indirizzo MAC virtuale dell'AVF guasto.
L'AVG risponde alle ARP Request inviate dagli host con indirizzi MAC che puntano a router diversi, in base a uno dei seguenti algoritmi di bilanciamento del carico:
* nessuno: l'AVG è l'unico forwarder (come nell'HSRP);
* weighted: a ogni router è assegnato un peso, che determina la percentuale di ARP Request risposte con l'indirizzo MAC virtuale di quel router, e quindi la percentuale di host che useranno quel router come forwarder → utile quando i link di uscita hanno differenti capacità;
* round robin: gli indirizzi MAC virtuali sono selezionati sequenzialmente in una coda circolare;
* host dependent: garantisce che un host rimanga associato sempre allo stesso forwarder, cioè se l'host effettua due ARP Request riceverà due ARP Reply con lo stesso indirizzo MAC virtuale → ciò evita problemi con i meccanismi di traduzione degli indirizzi dei NAT.

## Note

* ↑ Si ricorda che la ARP Request è una trama di livello data-link con indirizzo MAC di destinazione broadcast e con l'indirizzo IP nel payload.