La figura sopra mostra la struttura di un router.
A sinistra abbiamo le porte di input, mentre a destra abbiamo le porte di output. In alto abbiamo il processore di instradamento e al centro la struttura di commutazione.
Un router è implementato via hardware. Il tempo di risposta del piano dei dati di un router opera nell'ordine dei nanosecondi. Mentre il piano di controllo soprattutto nel caso di SDN opera nell'ordine dei millisecondi/secondi.
Vediamo una analogia che ci aiuta a comprendere bene i compiti dei componenti del router.
Immaginiamo che una vettura debba recarsi ad un certa destinazione e che conosca solo la destinazione finale, e non il percorso. Giunto ad un rotonda, ad un casello, mostra all’operatore la sua destinazione, l’operatore gli consiglia l’uscita adatta alla sua destinazione (inoltro basato su destinazione). Bisogna sapere che l’inoltro può anche essere stabilito in base anche ad altri fattori: provenienza della vettura, marca, targa, stato di produzione, ecc. (Questo sarebbe l'inoltro generalizzato).
Strada di entrata al casello: porte di ingresso
Rotonda: struttura di commutazione
Strada di uscita dalla rotonda: porte di uscita
L’addetto: processore di instradamento.
La figura sopra fornisce una visione dettagliata delle funzionalità delle porte di ingresso. Come abbiamo già detto, la funzione di terminazione (elettrica) delle linea e l'elaborazione a livello di collegamento implementano rispettivamente il livello fisico e di collegamento associati ad un singolo collegamento di ingresso ai router. L'elaborazione effettuata alla porta di ingresso è centrale per la funzionalità del router: è qui che, utilizzando le informazioni della tabella di inoltro, viene determinata la porta di uscita a cui dirigere un pacchetto attraverso la struttura di commutazione. La tabella di inoltro viene elaborata e aggiornata dal processore di instradamento o ricevuta da un controller SDN remoto. Una sua copia conforme è di solito memorizzata su ciascuna porta di ingresso. La tabella di inoltro è copiata sulla line card (modulo rosso nella porta) dal processore di instradamento attraverso un bus separato (vedi immagine precedente, vi è una freccia che va dal processore di instradamento alle line card).
Consideriamo il caso più semplice in cui l’inoltro è basato sull’indirizzo di destinazione. Supponiamo che tutti gli indirizzi di destinazione siano a 32 bit. Una implementazione elementare della tabella di inoltro presenterebbe una riga per ogni possibile indirizzo di destinazione, ma dato che esiste un vasto range di indirizzi, questa idea non viene presa in considerazione. Supponiamo che il router che stiamo considerando abbia 4 uscite, una tabella di inoltro sarebbe simile alla seguente:
Ad ogni porta di uscita è associato un range di indirizzi.
Nell'ultima porta, la 3, vengono inoltrati tutti i pacchetti con indirizzo di destinazione che non corrispondono con i range stabiliti per le altre porte (0, 1, 2).
Potremmo avere anche qualcosa del genere:
La figura chiede di stabilire l'interfaccia per due indirizzi:
Una volta determinata la porta di uscita di un pacchetto, esso viene inviato alla struttura di commutazione. Un pacchetto può essere fermato prima di entrare nella struttura di commutazione, se essa è utilizzata da altre porte di ingresso. Esso verrà accodato sulla porta di input e schedulato sulla struttura di commutazione più tardi. A questo punto vengono fatte anche tante altre operazioni come il controllo del tempo di vita, del checksum, ecc.
Chiudiamo la discussione sull'elaborazione alle porte di ingresso notando che l'azione di cercare la corrispondenza tra l'indirizzo IP di destinazione (match) e poi inviare il pacchetto verso la porta di uscita specificata attraverso la struttura di commutazione (action), fa parte di un'astrazione più generale match-action che viene eseguita in molti dispositivi di rete non solo i router.
La commutazione può avvenire in diversi modi:
Quella che vediamo sopra è un matrice di commutazione derivata da una rete di interconnessione.
Abbiamo un bus per ogni porta. Le porte di ingresso (A, B, C) immettono i pacchetti nel bus e una porta di uscita (X, Y, Z) prende il pacchetto. Se
Ogni bus verticale, interseca tutti gli altri bus orizzontali.
Se A vuole raggiungere Y, il controller chiude l'incrocio AY, la porta A invia il pacchetto sul suo bus e solo il bus Y lo riceverà. Gli altri bus possono inoltrare pacchetti non diretti a Y, dunque i bus X e Z possono ricevere da B o C.
La velocità con cui i pacchetti vengono trasferiti dalle porte di input a quelle di output può essere migliorata utilizzando diverse (N) strutture di commutazione in parallelo. La porta di ingresso suddivide il pacchetto in K pezzi (chunk) più piccoli, e li invia (spray) attraverso K di queste N strutture di commutazione in parallelo alla porta di uscita selezionata, che li riassemble nel pacchetto originale.
L'elaborazione alle porte di uscita prende un pacchetto dalla memoria delle porte di uscita e li trasmette sul collegamento in uscita.
Quella di seguito è una porta di uscita.
É ovvio che si possono formare code di accodamento sia sulle porte in ingresso, sia in quelle in uscita. Gli accodamenti dipendono dal traffico di rete, dalle velocità relative della struttura di commutazione e dalla linea. Quando le code crescono, la memoria del router può esaurirsi e può avvenire una perdita di pacchetti, che si verifica effettivamente in questo contesto.
Supponiamo che le velocità di linea di input e output abbiano tutte lo stesso tasso di trasmissione
Ma cosa avviene se la struttura di commutazione
In questo caso si verifica accodamento alle porte di ingresso.
Per illustrare le conseguenze di questo evento, consideriamo una struttura di commutazione facente uso di una rete di interconnessione e supponiamo che:
Immaginiamo ancora che
Si osservi la figura in basso, in cui è esemplificato l'accodamento alle porte di uscita.
All'istante
Quando vi sono più pacchetti accodati sulle porte di uscita uno schedulatore di pacchetti (packet scheduler) deve stabilire in quale ordine trasmetterli.
Non ci addentreremo nella discussione di tali algoritmi di scheduling, dato che per il lettore dovrebbe già essere stati ampiamente trattati nel corso di sistemi operativi.