# Forwarding information base

Una forwarding information base (FIB), conosciuta a seconda dei casi come forwarding table o MAC table, è una struttura usata comunemente da dispositivi di rete come router e switch per determinare l'interfaccia di uscita appropriata alla quale inoltrare i pacchetti provenienti da un'interfaccia di entrata. È una tabella dinamica che associa gli indirizzi MAC alle porte, ed è ciò che permette di distinguere uno switch da un hub. Per implementare efficacemente la FIB viene tipicamente utilizzata la content addressable memory; per questo motivo, a volte viene anche chiamata CAM table.

## Applicazioni a livello data link

A livello data link, la FIB viene comunemente usata per facilitare lo switching Ethernet sulla base degli indirizzi MAC. Altre tecnologie di livello data link che utilizzano una FIB sono Frame Relay, Asynchronous Transfer Mode (ATM) e Multiprotocol Label Switching (MPLS).

### Switching

L'obiettivo di uno switch ethernet è quello di trasmettere Frame Ethernet da una porta a un'altra. La presenza di una FIB è il tratto che contraddistingue uno switch da un hub: se non avesse una FIB funzionante, uno switch Ethernet trasmetterebbe su tutte le porte contemporaneamente ogni singolo frame che riceve, in maniera simile a un hub. Nel veicolare i frame tra le porte, uno switch dovrebbe trasmettere i frame solamente alla porta in cui è collegato il dispositivo di rete destinatario, nel caso in cui si tratta di una trasmissione unicast, a meno che il frame non sia destinato a tutti i nodi connessi allo switch (in questo caso si parla di trasmissione broadcast), a più nodi specifici (multicast) o se lo switch non conosce ancora a quale porta è collegato il dispositivo destinatario (unicast flood)
Gli switch apprendono l'indirizzo MAC sorgente non appena lo sentono su una determinata porta, e associano quella porta con quell'indirizzo, memorizzando l'informazione nella FIB. Le volte successive che gli switch ricevono un frame con un indirizzo MAC di destinazione corrispondente a uno presente nella loro FIB, spediscono il pacchetto sulla porta ad esso associata.

### Frame Relay

In linea generale, per quanto riguarda Frame Relay le tabelle di forwarding sono definite staticamente, una per ciascuna interfaccia, sebbene le meccaniche esatte per la loro configurazione variano in base all'implementazione. Quando un frame con un dato data link connection identifier (DLCI) viene ricevuto su un'interfaccia, la tabella associata a quell'interfaccia fornisce l'interfaccia di uscita e il nuovo DLCI da inserire nel campo "indirizzo" del frame.

### Asynchronous Transfer Mode

Gli switch ATM hanno delle forwarding table molto simili a quelle usate da Frame Relay, che però specificano l'interfaccia di uscita attraverso il virtual path identifier (VPI) e il virtual circuit identifier (VCI). Queste tabelle possono essere definite staticamente, oppure distribuite attraverso il protocollo Private Network-to-Network Interface (PNNI). Quando viene usato PNNI, gli switch ATM ai confini della rete associano uno degli identificatori standard ATM end-to-end, come un indirizzo NSAP, al corrispondente next-hop VPI/VCI.

### Multiprotocol Label Switching

MPLS ha molte somiglianze con ATM a livello di forwarding. I label edge router ai confini di una clous MPLS associano l'identificatore end-to-end, come ad esempio un indirizzo IP, a una label link-local. A ogni salto tra router MPLS c'è una tabella di forwarding che dice al label switched router quale interfaccia di uscita dovrà ricevere il pacchetto MPLS, e quale etichetta usare nell'inviare il pacchetto attraverso quell'interfaccia.

## Applicazioni a livello in di rete

Gli indirizzi a livello di rete, come gli indirizzi IP, vengono utilizzati attraverso vari mezzi di trasmissione e possono essere trattati in maniera simile in tutti i casi.

### Forwarding

Le FIB sono ottimizzate per le trovare rapidamente gli indirizzi di destinazione, e possono migliorare le prestazioni dell'instradamento se paragonate all'utilizzo diretto della routing information base. La RIB è progettata per essere aggiornata in maniera efficiente dai protocolli di routing o dagli altri metodi forniti dal control plane (es. routing statico), e contiene la lista completa delle rotte apprese dal router. Le prime implementazioni della FIB non includevano tutte le rotte presenti nella RIB, ma solo un sottoinsieme di quelle utilizzate più di frequente, e questo funzionava ragionevolmente bene nelle reti delle grandi aziende dove esisteva un significativo sottoinsieme di rotte di questo tipo. Al contrario, sui router che dovevano conoscere le rotte dell'intera Internet, si verificava un calo di prestazioni non trascurabile nell'aggiornamento alla bisogna della loro piccola FIB con altre rotte contenute nella RIB, e fu così che tutte le implementazioni iniziarono ad avere corrispondenze uno-a-uno tra la RIB e la FIB.

### Filtraggio del traffico in ingresso in contrasto al denial of service

La FIB può giocare un ruolo strategico nella best current practice del filtraggio dei pacchetti in ingresso (ingress filtering). Anche se la forma più semplice di ingress filtering è usare le access control lists per scartare i pacchetti con un indirizzo IP sorgente non valido, tale pratica diventa difficoltosa nei router connessi a un gran numero di reti adiacenti, e le ACL tradizionali non vengono usate nei percorsi di routing ad alta velocità.
Anche se il documento IETF BCP 38 sul filtraggio in ingresso non specifica un metodo per implementare il filtraggio degli indirizzi IP sorgente, per fare questo controllo diversi produttori di router hanno implementato un meccanismo che impiega il cosiddetto reverse path forwarding. Esso consiste in una ricerca della presenza della rotta di provenienza di ciascun pacchetto in arrivo con uno specifico indirizzo IP sorgente all'interno della FIB: se tale rotta non è presente, il pacchetto viene considerato parte di un attacco denial of service, con un indirizzo IP inventato, e scartato dal router.
Quando il router è multihomed, l'ingress filtering diventa più complesso. Esistono degli scenari operativi perfettamente ragionevoli nei quali un pacchetto potrebbe arrivare su un'interfaccia, ma questa potrebbe non avere una rotta di ritorno verso l'indirizzo IP sorgente. Per i router vicini al confine con Internet, il filtraggio dei pacchetti tradizionale (ACL) potrebbe essere una soluzione molto più semplice ed efficace rispetto ai metodi che vanno a cercare dentro la FIB, anche se questo approccio può essere impegnativo se si tratta di router che devono essere riconfigurati spesso. L'ingress filtering per i router multihomed non scarta i pacchetti se i loro indirizzi IP sorgente hanno una rotta di ritorno su una qualsiasi interfaccia del router. Per questo tipo di filtraggio, il router potrebbe anche mantenere una adjacency table, anch'essa ottimizzata per la ricerca veloce, che tiene traccia degli indirizzi delle interfacce che si trovano su tutti i router direttamente connessi.

### Controllo degli accessi e accounting

In alcune implementazioni si può specificare un'azione (come l'accounting o la crittografia) da intraprendere prima di inoltrare il pacchetto nel caso in cui venga trovata una corrispondenza con uno specifico indirizzo IP di destinazione o altri criteri della FIB desiderati, o in alternativa applicare una ACL per scartare il pacchetto.

## Attacchi

Le CAM table possono essere prese di mira per mettere in scena un attacco di tipo man in the middle. Un esecutore dell'attacco che ha il controllo di un dispositivo collegato a uno switch Ethernet può usare il MAC flooding per manipolare la CAM table. Se essa si riempie, il traffico in eccesso viene trattato come traffico BUM, e viene inoltrato su tutte le porte rendendolo disponibile all'esecutore.