Un sistema finale(endnode) implementa l'intera pila protocollare dal livello fisico a quello applicativo I nodi interni alla rete implementano un numero ridotto di livelli (1,2,3 e a volte 4).
La demultiplazione è lo spacchettamento della trama di livello 2 e tirare fuori il pacchetto di livello applicativo.
C'è un problema di sicurezza, in quanto un processo avrebbe accesso a tutti i pacchetti che transitano nel sistema. Vogliamo garantire wirespeed processing, il collo di bottiglia deve essere il link fisico. Vorremmo la proprietà di composability: Il costo complessivo deve essere minore alla somma dei protocolli attraversati.
Lo standard attuale (usato ad esempio da wireshark o tcpdump) è il meccanismo Berkeley Packet Filter è un grafo di controllo di flusso (un qualsiasi grafo diretto aciclico).
Il BPF viene eseguito nel kernel in parallelo (divisione di tempo OS) e gestisce gli stessi pacchetti inviati allo stack TCP/IP layered, per ogni pacchetto ricevuto il BPF controlla se corrisponde ad alcuno dei filtri e nel caso viene copiato nel buffer corrispondente, altrimenti viene scartato.
Il buffer serve perchè il costo di portare il pacchetto a livello utente è alto, e questo aumenterebbe il tempo di esecuzione del filtro, abbassando le prestazioni. La API si chiama pcap, e tcpdump è il programma più diffuso per usarle. --- Nota: rarpd è il nonno del protocollo DHCP e non viene più usato BootP consente di copiare informazioni per il boot DHCP consente di trasferire DNS, durata del lease, ecc.. Per questo è inutile eseguire rarp in kernelspace ma basta eseguirlo in userspace, e lo stesso vale per lo sviluppo di nuovi protocolli. Il filtro viene specificato usando una sintassi BPF che viene compilata ed eseguita nella virtual machine BPF (Originariamente pseudo-machine) VM-BPF ha un suo set di istruzioni limitato e specifico.
Tcpdump stampa pacchetti in stdout, e può salvare pacchetti in file pcap Wireshark dispone di filtri aggiuntivi per riconoscere traffico a livello applicativo. I pacchetti salvati nel formato pcap vengono tagliati ai primi 64byte ad esempio per salvare solo gli header utili senza memorizzare tutto il pacchetto sprecando spazio.