Sono disponibili numerosi percorsi di switching per diversi router Cisco e versioni di Cisco IOS®. Qual è la soluzione migliore per la rete e come funzionano tutte? Il presente white paper è un tentativo di spiegare ciascuno dei seguenti percorsi di commutazione in modo da poter scegliere quello più adatto alla rete.
Esaminare innanzitutto il processo di inoltro stesso. Per inoltrare un pacchetto tramite un router, è necessario eseguire tre passaggi:
Determinare se la destinazione del pacchetto è raggiungibile.
Determinare l'hop successivo verso la destinazione e l'interfaccia attraverso cui è possibile raggiungere l'hop successivo.
Riscrivere l'intestazione MAC (Media Access Control) sul pacchetto in modo che raggiunga correttamente l'hop successivo.
Ognuna di queste operazioni è fondamentale per permettere al pacchetto di raggiungere la sua destinazione.
Nota: in questo documento, il percorso di switching IP è usato come esempio; praticamente tutte le informazioni qui fornite sono applicabili a percorsi di commutazione equivalenti per altri protocolli, se esistenti.
La commutazione di processo è il minimo comune denominatore nei percorsi di commutazione; è disponibile su tutte le versioni di IOS, su tutte le piattaforme e su tutti i tipi di traffico commutato. La commutazione di processo è definita da due concetti fondamentali:
La decisione di inoltro e le informazioni utilizzate per riscrivere l'intestazione MAC sul pacchetto vengono prese dalla tabella di routing (dalla base delle informazioni di routing o RIB) e dalla cache ARP (Address Resolution Protocol) o da un'altra tabella contenente le informazioni dell'intestazione MAC mappate sull'indirizzo IP di ciascun host connesso direttamente al router.
Il pacchetto viene commutato da un normale processo in esecuzione in IOS. In altre parole, la decisione di inoltro viene presa da un processo pianificato tramite l'utilità di pianificazione di IOS e in esecuzione come peer di altri processi sul router, come i protocolli di routing. I processi che normalmente vengono eseguiti sul router non vengono interrotti per elaborare lo switch di un pacchetto.
La figura seguente illustra il percorso di commutazione del processo.
Esaminate più dettagliatamente questo diagramma:
Il processore di interfaccia rileva innanzitutto la presenza di un pacchetto sul supporto di rete e lo trasferisce nella memoria di input/output del router.
Il processore di interfaccia genera un interrupt di ricezione. Durante questo interrupt, il processore centrale determina il tipo di pacchetto (supponendo che si tratti di un pacchetto IP) e lo copia nella memoria del processore se necessario (questa decisione dipende dalla piattaforma). Infine, il processore colloca il pacchetto nella coda di input del processo appropriato e l'interrupt viene rilasciato.
Alla successiva esecuzione dello scheduler, il pacchetto viene registrato nella coda di input di ip_input e viene pianificata l'esecuzione di questo processo.
Quando ip_input viene eseguito, consulta il RIB per determinare l'hop successivo e l'interfaccia di output, quindi consulta la cache ARP per determinare l'indirizzo del livello fisico corretto per l'hop successivo.
ip_input riscrive quindi l'intestazione MAC del pacchetto e inserisce il pacchetto nella coda di output dell'interfaccia in uscita corretta.
Il pacchetto viene copiato dalla coda di output dell'interfaccia in uscita alla coda di trasmissione dell'interfaccia in uscita; qualsiasi quality of service in uscita viene eseguita tra queste due code.
Il processore dell'interfaccia di output rileva il pacchetto nella coda di trasmissione e lo trasferisce nel supporto di rete.
Quasi tutte le funzionalità che influiscono sulla commutazione di pacchetto, ad esempio Network Address Translation (NAT) e Policy Routing, fanno il loro debutto nel percorso di commutazione di processo. Una volta comprovate e ottimizzate, queste funzionalità potrebbero essere visualizzate o meno nella commutazione di contesto di interrupt.
La commutazione di contesto di interrupt è il secondo metodo di commutazione principale utilizzato dai router Cisco. Le differenze principali tra la commutazione del contesto di interrupt e la commutazione del processo sono:
Il processo attualmente in esecuzione sul processore viene interrotto per cambiare il pacchetto. I pacchetti vengono attivati su richiesta, piuttosto che attivati solo quando il processo ip_input può essere pianificato.
Il processore utilizza una forma di cache route per trovare tutte le informazioni necessarie per cambiare il pacchetto.
Nella figura viene illustrata la commutazione del contesto di interrupt:
Esaminate più dettagliatamente questo diagramma:
Il processore di interfaccia rileva innanzitutto la presenza di un pacchetto sul supporto di rete e lo trasferisce nella memoria di input/output del router.
Il processore di interfaccia genera un interrupt di ricezione. Durante questo interrupt, il processore centrale determina il tipo di pacchetto (supponendo che si tratti di un pacchetto IP), quindi inizia a cambiare il pacchetto.
Il processore cerca nella cache dei percorsi per determinare se la destinazione del pacchetto è raggiungibile, quale deve essere l'interfaccia di output, qual è l'hop successivo verso questa destinazione e, infine, quale intestazione MAC deve contenere il pacchetto per raggiungere correttamente l'hop successivo. Il processore utilizza queste informazioni per riscrivere l'intestazione MAC del pacchetto.
Il pacchetto viene ora copiato sulla coda di trasmissione o di output dell'interfaccia in uscita (a seconda di diversi fattori). L'interrupt di ricezione ora torna e il processo in esecuzione sul processore prima dell'interrupt continua a funzionare.
Il processore dell'interfaccia di output rileva il pacchetto nella coda di trasmissione e lo trasferisce nel supporto di rete.
La prima domanda che mi viene in mente dopo aver letto questa descrizione è "Che cosa c'è nella cache?" A seconda del tipo di cambio di contesto di interrupt, sono disponibili tre risposte:
L'opzione di commutazione rapida memorizza le informazioni di inoltro e la stringa di riscrittura dell'intestazione MAC utilizzando una struttura binaria per una ricerca e un riferimento rapidi. Nella figura viene illustrata una struttura binaria:
In Fast Switching, le informazioni sulla raggiungibilità sono indicate dall'esistenza di un nodo nella struttura binaria alla destinazione del pacchetto. L'intestazione MAC e l'interfaccia in uscita per ciascuna destinazione vengono archiviate come parte delle informazioni del nodo all'interno della struttura. L'albero binario può in realtà avere 32 livelli (l'albero sopra è estremamente abbreviato a scopo illustrativo).
Per eseguire la ricerca in una struttura ad albero binaria, è sufficiente iniziare da sinistra (con la cifra più significativa) nel numero (binario) che si sta cercando e diramare a destra o a sinistra nella struttura ad albero in base a tale numero. Ad esempio, se si cercano le informazioni relative al numero 4 in questa struttura, si inizierà con la diramazione verso destra, perché la prima cifra binaria è 1. Si seguirà la struttura verso il basso, confrontando la cifra successiva nel numero (binario), fino a raggiungere la fine.
Fast Switching ha diverse caratteristiche che sono il risultato della struttura ad albero binaria e la memorizzazione delle informazioni di riscrittura dell'intestazione MAC come parte dei nodi della struttura ad albero.
Poiché non esiste alcuna correlazione tra la tabella di routing e il contenuto della cache veloce (ad esempio, la riscrittura dell'intestazione MAC), la creazione delle voci della cache implica tutte le elaborazioni che devono essere eseguite nel percorso di commutazione del processo. Pertanto, le voci di cache veloci vengono create come pacchetti a commutazione di contesto.
Poiché non vi è alcuna correlazione tra le intestazioni MAC (utilizzate per le riscritture) nella cache ARP e la struttura della cache veloce, quando la tabella ARP cambia, una parte della cache veloce deve essere invalidata (e ricreata attraverso il processo di commutazione dei pacchetti).
La cache veloce può creare solo voci a una profondità (lunghezza di un prefisso) per una particolare destinazione all'interno della tabella di routing.
Non è possibile puntare da una voce all'altra all'interno della cache veloce (le informazioni dell'intestazione MAC e dell'interfaccia in uscita devono trovarsi all'interno del nodo), quindi tutte le ricorsioni di routing devono essere risolte durante la creazione di una voce della cache veloce. In altre parole, le route ricorsive non possono essere risolte all'interno della cache veloce stessa.
Per evitare che le voci a commutazione rapida perdano la sincronizzazione con la tabella di routing e la cache ARP e per evitare che le voci inutilizzate nella cache veloce utilizzino indebitamente la memoria sul router, ogni minuto un ventesimo della cache veloce viene invalidata in modo casuale. Se la memoria dei router scende al di sotto di un limite molto basso, 1/5 delle voci della cache veloce viene invalidato ogni minuto.
Per quale lunghezza di prefisso le voci di compilazione a commutazione veloce possono essere create solo con una lunghezza di prefisso per ogni destinazione? Ai fini del passaggio rapido, una destinazione è un'unica destinazione raggiungibile all'interno della tabella di routing o una rete principale. Le regole per decidere la lunghezza del prefisso per la creazione di una determinata voce della cache sono:
Se si crea una voce di criterio veloce, memorizzare sempre la cache in /32.
Se si crea una voce per un circuito virtuale Multiprotocol over ATM (MPOA VC), memorizzare sempre la cache in /32.
Se la rete non è collegata tramite subnet (è una voce di rete principale):
Se la connessione è diretta, utilizzare /32;
In caso contrario, utilizzare la maschera di rete principale.
Se si tratta di una superrete, utilizzare la maschera della superrete.
Se la rete è subnet:
Se la connessione è diretta, utilizzare /32;
Se esistono più percorsi per questa subnet, utilizzare /32;
In tutti gli altri casi, utilizzare la lunghezza del prefisso più lunga in questa rete principale.
La commutazione rapida è interamente basata sulla destinazione; la condivisione del carico avviene per ciascuna destinazione. Se esistono più percorsi di costo uguali per una particolare rete di destinazione, la cache veloce ha una voce per ogni host raggiungibile all'interno della rete, ma tutto il traffico destinato a un determinato host segue un collegamento.
Lo switching Optimum memorizza le informazioni di inoltro e le informazioni di riscrittura dell'intestazione MAC in una struttura ad albero a più vie a 256 vie (mtree a 256 vie). L'utilizzo di una struttura ad albero mobile riduce il numero di passaggi da eseguire durante la ricerca di un prefisso, come illustrato nella figura seguente.
Ogni ottetto viene usato per determinare quale dei 256 rami prendere ad ogni livello dell'albero, il che significa che ci sono, al massimo, 4 ricerche coinvolte nella ricerca di qualsiasi destinazione. Per lunghezze di prefisso più brevi, possono essere richieste solo una-tre ricerche. Le informazioni dell'interfaccia di riscrittura e di output dell'intestazione MAC sono memorizzate come parte del nodo della struttura, quindi l'invalidamento e la misurazione della durata della cache si verificano ancora come nel passaggio rapido.
La commutazione ottimale determina inoltre la lunghezza del prefisso per ciascuna voce della cache allo stesso modo della commutazione veloce.
Cisco Express Forwarding utilizza anche una struttura di dati a 256 vie per archiviare le informazioni di inoltro e riscrittura dell'intestazione MAC, ma non utilizza una struttura ad albero. Cisco Express Forwarding utilizza una trie, il che significa che le informazioni effettivamente ricercate non sono nella struttura dei dati; al contrario, i dati vengono memorizzati in una struttura di dati separata, alla quale il trie fa semplicemente riferimento. In altre parole, invece di memorizzare la riscrittura dell'interfaccia in uscita e dell'intestazione MAC all'interno della struttura stessa, Cisco Express Forwarding memorizza queste informazioni in una struttura di dati separata chiamata tabella adiacente.
Questa separazione tra le informazioni sulla raggiungibilità (nella tabella Cisco Express Forwarding) e le informazioni sull'inoltro (nella tabella adiacente) offre una serie di vantaggi:
La tabella adiacente può essere creata separatamente dalla tabella Cisco Express Forwarding, consentendo a entrambi di creare senza commutare alcun pacchetto.
La riscrittura dell'intestazione MAC utilizzata per inoltrare un pacchetto non è memorizzata nelle voci della cache, quindi le modifiche in una stringa di riscrittura dell'intestazione MAC non richiedono l'annullamento della convalida delle voci della cache.
Per risolvere route ricorsive, è possibile puntare direttamente alle informazioni di inoltro anziché all'hop successivo ricorsivo.
In pratica, viene eliminata la durata della cache e la cache viene precostruita in base alle informazioni contenute nella tabella di routing e nella cache ARP. Non è necessario elaborare un pacchetto per creare una voce della cache.
La tabella adiacente può contenere voci diverse dalle stringhe di riscrittura dell'intestazione MAC e dalle informazioni sull'interfaccia in uscita. Di seguito sono riportati alcuni dei vari tipi di voci che è possibile inserire nella tabella adiacente:
cache: una stringa di riscrittura dell'intestazione MAC e un'interfaccia in uscita utilizzate per raggiungere un particolare host o router adiacente.
receive: i pacchetti destinati a questo indirizzo IP devono essere ricevuti dal router. inclusi gli indirizzi di broadcast e gli indirizzi configurati sul router stesso.
drop: i pacchetti destinati a questo indirizzo IP devono essere scartati. Può essere utilizzato per il traffico negato da un elenco degli accessi o instradato a un'interfaccia NULL.
punt—Cisco Express Forwarding non può scambiare questo pacchetto; passarlo al metodo di commutazione migliore successivo (in genere commutazione veloce) per l'elaborazione.
glean - L'hop successivo è collegato direttamente, ma non sono attualmente disponibili stringhe di riscrittura dell'intestazione MAC.
Una voce di adiacenza della griglia indica che un determinato hop successivo deve essere connesso direttamente, ma non sono disponibili informazioni di riscrittura dell'intestazione MAC. Come vengono costruiti e utilizzati? Un router che esegue Cisco Express Forwarding e collegato a una rete broadcast, come mostrato nella figura in basso, crea una serie di voci di tabella adiacenti per impostazione predefinita.
Le quattro voci della tabella adiacente generate per default sono:
10.1.1.0/24, version 17, attached, connected 0 packets, 0 bytes via Ethernet2/0, 0 dependencies valid glean adjacency 10.1.1.0/32, version 4, receive 10.1.1.1/32, version 3, receive 10.1.1.255/32, version 5, receive
Si noti che sono disponibili quattro voci: tre ricezioni e una glina. Ogni voce di ricezione rappresenta un indirizzo di trasmissione o un indirizzo configurato sul router, mentre la voce di entrata rappresenta lo spazio di indirizzi rimanente sulla rete collegata. Se si riceve un pacchetto per l'host 10.1.1.50, il router tenta di switch e lo trova risolto in questa adiacenza di guancia. Cisco Express Forwarding segnala quindi che è necessaria una voce della cache ARP per 10.1.1.50, il processo ARP invia un pacchetto ARP e la voce della tabella di adiacenza appropriata viene creata dalle nuove informazioni della cache ARP. Al termine di questo passaggio, la tabella adiacente avrà una voce per 10.1.1.50.
10.1.1.0/24, version 17, attached, connected 0 packets, 0 bytes via Ethernet2/0, 0 dependencies valid glean adjacency 10.1.1.0/32, version 4, receive 10.1.1.1/32, version 3, receive 10.1.1.50/32, version 12, cached adjacency 208.0.3.2 0 packets, 0 bytes via 208.0.3.2, Ethernet2/0, 1 dependency next hop 208.0.3.2, Ethernet2/0 valid cached adjacency 10.1.1.255/32, version 5, receive
Il pacchetto successivo che il router riceve per la versione 10.1.1.50 viene commutato attraverso questa nuova adiacenza.
Cisco Express Forwarding sfrutta anche la separazione tra la tabella Cisco Express Forwarding e la tabella adiacente per fornire una forma migliore di condivisione del carico rispetto a qualsiasi altra modalità di commutazione di contesto di interrupt. Tra la tabella di inoltro di Cisco Express e la tabella adiacente viene inserita una tabella di condivisione di carico, come illustrato nella figura seguente:
La tabella Cisco Express Forwarding fa riferimento a questa tabella di condivisione del carico, che contiene i puntatori alle varie voci della tabella adiacente per i percorsi paralleli disponibili. Gli indirizzi di origine e di destinazione vengono passati tramite un algoritmo hash per determinare la voce della tabella di condivisione di carico da utilizzare per ogni pacchetto. È possibile configurare la condivisione del carico per pacchetto, nel qual caso ogni pacchetto utilizza una voce della tabella di condivisione del carico diversa.
Ogni tabella di condivisione del carico include 16 voci, tra le quali i percorsi disponibili vengono divisi in base al contatore di condivisione del traffico nella tabella di routing. Se i contatori delle condivisioni di traffico nella tabella di routing sono tutti pari a 1 (come nel caso di più percorsi con costi uguali), ogni hop successivo possibile riceve un numero uguale di puntatori dalla tabella delle condivisioni di carico. Se il numero di percorsi disponibili non è divisibile in modo uniforme in 16 (poiché sono presenti 16 voci della tabella di condivisione del carico), alcuni percorsi avranno più voci di altri.
A partire dal software Cisco IOS versione 12.0, il numero di voci nella tabella loadshare viene ridotto in modo da garantire che ogni percorso abbia un numero proporzionato di voci nella tabella loadshare. Ad esempio, se nella tabella di routing sono presenti tre percorsi dei costi uguali, verranno utilizzate solo 15 voci della tabella di condivisione del carico.
Quando possibile, si desidera che i router cambino nel contesto dell'interrupt perché è almeno di un ordine di grandezza più veloce della commutazione a livello di processo. La commutazione di Cisco Express Forwarding è decisamente più veloce e migliore di qualsiasi altra modalità di commutazione. È consigliabile utilizzare Cisco Express Forwarding se il protocollo e il sistema operativo in esecuzione lo supportano. Ciò è particolarmente vero se si dispone di un certo numero di collegamenti paralleli attraverso i quali il traffico deve essere condiviso. Accedere alla pagina Cisco Feature Navigator (solo utenti registrati) per stabilire quale sistema operativo IOS è necessario per il supporto CEF.