# Control plane

Nell'ambito dell'instradamento, il control plane è quella parte dell'architettura di un router che si occupa di tracciare la topologia di rete, o le informazioni all'interno di una tabella di routing che definiscono cosa fare con i pacchetti in arrivo. Le funzioni del control plane, come la partecipazione ai protocolli di routing, vengono svolte nell'elemento di controllo architetturale. Nella maggioranza dei casi, la tabella di routing contiene una lista di indirizzi di destinazione e le interfacce di uscita associate con ciascuno. La logica del control plane può anche identificare alcuni pacchetti che devono essere scartati, così come il trattamento preferenziale di certi pacchetti per i quali è stata definita una Quality of Service più alta da meccanismi come i Differentiated services.
A seconda della specifica implementazione sui vari router, potrebbe esserci una forwarding information base separata che viene popolata dal control plane, ma utilizzata dal data plane ad alta velocità per osservare i pacchetti e decidere come maneggiarli.
Nel calcolo dati, il control plane è quella parte di software che configura e spegne il data plane. Al contrario, il data plane è la parte del software che elabora le richieste di dati.
La distinzione si è ritrovata utile nel campo del networking all'interno del quale si è originata, perché separa gli interessi: il data plane è ottimizzato per la velocità di esecuzione, per la regolarità e la semplicità, il control plane è ottimizzato per la personalizzabilità, la gestione delle policy, la gestione di situazioni eccezionali, e in generale per facilitare e semplificare l'elaborazione del data plane.
La separazione concettuale del data plane dal control plane è un processo che va avanti da anni. Uno dei primi esempi è Unix, dove le operazioni di base sui file sono open e close per il control plane, read e write per il data plane.

## Costruzione della tabella di routing unicast

Una delle funzioni più importanti del control plane è decidere dove vanno le rotte all'interno della tabella di routing principale. "Principale" si riferisce alla tabella che contiene le rotte unicast attive. Il routing Multicast potrebbe richiedere una tabella di routing aggiuntiva per le destinazioni multicast. Diversi protocolli di routing mantengono database interni di rotte candidate che vengono promosse quando una delle rotte presenti fallisce (non viene più considerata valida) o quando viene cambiata una policy di routing.
Può esserci più di una fonte che fornisce informazioni in merito a una rotta verso una data destinazione, ma il router deve selezionare la migliore da inserire nella propria tabella di routing. In alcuni casi, possono esserci rotte multiple di "qualità uguale", in tal caso il router può inserirle entrambe e fare load sharing tra di esse.

### Sorgenti di informazioni di routing

Esistono tre sorgenti generiche di informazioni di routing:
* Informazioni sullo stato delle interfacce direttamente connesse e delle interfacce definite via software
* Rotte statiche configurate manualmente
* Informazioni provenienti dai protocolli di routing dinamici.

#### Informazioni sulle interfacce locali

I router inoltrano traffico che entra in un'interfaccia d'ingresso ed esce da un'interfaccia di uscita, soggetto a filtraggio e ad altre regole stabilite localmente. Anche se in genere i router inoltrano il traffico da un'interfaccia fisica (per es. Ethernet) ad un'altra interfaccia fisica, è possibile definire una o più interfacce logiche su un'interfaccia fisica. Un'interfaccia Ethernet fisica, può avere diverse interfacce logiche in diverse Virtual LAN definite dagli header VLAN IEEE 802.1Q.
Quando un'interfaccia ha un indirizzo configurato in una subnet, come 192.0.2.1 che appartiene alla subnet 192.0.2.0/24, e l'interfaccia è considerata "up" dal router, nella tabella di routing sarà presente una rotta direttamente connessa alla destinazione 192.0.2.0/24. Se un protocollo di routing offre la rotta di un altro router verso la stessa subnet, la componente software che si occupa di inserire le rotte nella tabella di routing ignorerà quella rotta dinamica e continuerà a preferire quella direttamente connessa
Potrebbero anche trovarsi delle rotte esclusivamente definite via software, che verranno trattate come se fossero direttamente connesse. Per esempio, la maggior parte delle implementazioni hanno una interfaccia "null". I pacchetti che hanno questa interfaccia come next-hop saranno scartati, il che può essere un modo molto efficiente per filtrare il traffico. In genere i router sono in grado di inoltrare il traffico più velocemente di quanto riescano ad esaminarlo e compararlo ai filtri, pertanto, se il criterio per scartare il traffico è l'indirizzo di destinazione, spedire il traffico alla suddetta interfaccia è più efficace che usare filtri espliciti.

#### Rotte statiche

Le regole di configurazione di un router possono contenere rotte statiche. Una rotta statica ha come minimo un indirizzo della rete di destinazione, una lunghezza del prefisso di rete (subnet mask), e una definizione di dove spedire i pacchetti per essere instaradati. Tale definizione può riferirsi a un'interfaccia presente sul router, o un indirizzo di next-hop che in genere si trova in fondo alla subnet alla quale il router è connesso. Il next hop potrebbe anche trovarsi su una subnet direttamente connessa, e prima di determinare se quella rotta statica è utilizzabile, il router ha la necessità di fare un lookup ricorsivo dell'indirizzo di next-hop nella propria tabella di routing. Se il next-hop è raggiungibile, la rotta statica sarà utilizzabile, ma se non è raggiungibile, la rotta verrà ignorata.
È possibile, a volte, impostare un fattore di preferenza alle rotte statiche. Facendo così, una rotta statica è meno preferita rispetto a una rotta proveniente da qualunque protocollo di routing, ma si attiva solo quando il protocollo di routing dinamico non è più in grado di fornire una rotta per la destinazione indicata, permettendo di utilizzare un collegamento più lento come una linea Dial-up. Questo tipo di configurazione viene chiamata floating static route.
Anche le rotte statiche preferite a qualunque altra rotta appresa dai protocolli di routing può tornare molto utile, specialmente quando si usano certi principi di ingegneria del traffico per far confluire certi tipi di traffico su un percorso specifico, in combinazione con la IP QoS

#### Protocolli di routing dinamici

Per approfondire, consultare le voci sui singoli protocolli di routing.
Il gestore della tabella di routing, in base all'implementazione e alle regole di configurazione, può selezionare una specifica rotta tra quelle annunciate dai vari protocolli di routing.

### Installazione delle rotte unicast

Le varie implementazioni hanno fattori di preferenza differenti per le informazioni di routing. Tali fattori di preferenza, oltre ad avere nomi differenti (p.es Cisco chiama tale preferenza administrative distance), non sono uguali tra i vari produttori di router.
È corretto dire che le rotte direttamente connesse saranno sempre preferite. A parte ciò, tuttavia, ci saranno sempre delle differenze.
Gli implementatori hanno generalmente una preferenza numerica, per la selezione delle rotte. Più è bassa la preferenza, più desiderabile è la rotta. L'implementazione di Cisco IOS rende eBGP la sorgente di informazioni di routing dinamico più desiderabile, mentre per Nortel RS sono più desiderabili le rotte provenienti da OSPF intra-area.
In generale, l'ordine per la selezione delle rotte da installare nella tabella di routing è il seguente:
* Se una rotta non è presente nella tabella di routing, installala
* Se una rotta è più specifica di un'altra rotta esistente, installala in aggiunta alle rotte esistenti. Più specifica significa che ha un prefisso più lungo (Una rotta /28, con una subnet mask 255.255.255.240 è più specifica di una rotta /24 con una subnet mask di 255.255.255.0
* Se una rotta è ugualmente specifica a un'altra rotta già presente nella tabella di routing, ma proviene da una sorgente di routing più desiderabile, sostituiscila.
* Se una rotta è ugualmente specifica a un'altra rotta già presente nella tabella di routing, ma viene da una sorgente desiderabile in misura uguale:
** Scartala, se la rotta ha una metrica più alta di quella esistemte
** Sostituiscila, se la rotta ha una metrica più bassa di quella esistente
** Se le due rotte hanno metrica uguale e il router supporta il load sharing, aggiungila e rendila parte di un gruppo di load sharing. Solitamente, le implementazioni esistenti supportano un numero massimo di rotte che fanno load sharing verso la stessa destinazione. Se il numero massimo è già stato raggiunto, la nuova rotta viene scartata.

## Tabella di routing vs Forwarding information base

Ciascuna implementazione ha i propri metodi di aggiornare la Forwarding information base con le nuove rotte installate nella tabella di routing (RIB). Se la FIB è in corrispondenza uno a uno con la RIB, la nuova rotta viene installata nella FIB non appena si trova nella RIB. Se la FIB è più piccola della RIB e la FIB usa una hash table o un'altra struttura dati che non può essere aggiornata facilmente, la FIB esistente non verrà più considerata valida e sarà sostituita con una nuova calcolata dalla RIB aggiornata.

## Tabelle di routing multicast

Il routing multicast viene costruito in maniera simile al routing unicast. Ogni gruppo multicast verso il quale il router può instradare ha una voce nella tabella di routing multicast con un next-hop per il gruppo, piuttosto che per una destinazione specifica come avviene nel routing unicast.
Possono essere configurate delle rotte statiche multicast, oppure possono essere diffuse e apprese attraverso protocolli di routing dinamici multicast come PIM.