# Network Layer

Questo livello riceve segmenti dal soprastante livello di trasporto e forma pacchetti che vengono passati al sottostante data link layer.

Il compito del livello di rete è la trasmissione logica di pacchetti tra due host, che in generale non sono direttamente connessi, attraverso il percorso di rete più appropriato.

## ARP

Il protocollo `Address Resolution Protocol` (`ARP`) opera a livello di rete (layer 3) e ha il compito di associare un indirizzo IP a un indirizzo MAC. Conoscendo il MAC di destinazione, un host può infatti costruire il frame appropriato (layer 2) per inoltrare i dati sulla rete.

Ogni computer mantiene una ARP cache table, ovvero una memoria temporanea che memorizza le associazioni già note. Quando un host deve comunicare con un altro dispositivo, verifica innanzitutto se l'associazione IP-MAC è presente nella propria ARP cache; in caso contrario, viene utilizzato il protocollo ARP per determinare l'indirizzo MAC corrispondente all'IP di destinazione. L'ARP request viene inoltrata in broadcast a tutti i dispositivi raggiungibili nella LAN. Gli host che non sono associati all'IP target ignorano la richiesta, mentre il computer in possesso dell'indirizzo IP richiesto risponde inviando un ARP response in modalità unicast, indirizzata direttamente all'host che ha originato la richiesta.

In Linux, il comando per vedere la ARP cache table é `ip neighbour` o `ip n`:

```bash
ip neighbour
192.168.0.1 dev wlp4s0 lladdr 10:3c:59:c3:ec:73 REACHABLE
192.168.0.200 dev wlp4s0 lladdr 6a:f8:b0:92:ea:94 STALE
192.168.0.42 dev wlp4s0 lladdr 84:2a:fd:f2:d7:12 STALE
192.168.0.97 dev wlp4s0 lladdr 4e:a0:f9:eb:c5:63 STALE
```
