Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Understanding LINUX Network Internals
Recensito da Fabio Busatto il 09-05-2007 ore 10:06
Copertina ISBN: 0596002556
Autori: Christian Benvenuti
Editore: O'Reilly
Lingua: inglese
Anno: 2005
Pagine: 1062
Allegati: Nessuno
Seminario Intel
Ecco qui un altro bel libro di Christian Benvenuti, che ci permetterà di avere qualcosa da leggere per parecchio tempo! Il testo è in inglese e parla del sistema open source del Pinguino, e ancora una volta è la casa editrice O'Reilly a pubblicare un'opera che, con più di mille pagine, ci permette di trovare risposta a molte domande, probabilmente anche a quelle che non ci siamo mai posto.

L'argomento principale è la gestione del networking all'interno del kernel di Linux, identificandone i punti chiave e i sottosistemi di cui è composto. L'edizione di cui parliamo, è la prima, ma promette già molto bene, e soprattutto copre anche le nuove versioni del kernel appartenenti alla serie 2.6, che rivoluziona in maniera sensibile molti degli aspetti classici del codice di rete.

Come ogni buon libro O'Reilly che si rispetti, vengono trattate in maniera esaustiva e completa tutte le interazioni che avvengono all'interno del kernel, e quindi vengono alternate fasi di descrizione teorica del funzionamento di una rete a stralci di codice, presi direttamente dai sorgenti di Linux. Vista l'importanza notevole che il codice di networking all'interno del kernel Linux ha acquisito nel tempo, questo libro è stato pensato per trattare in maniera completa argomenti che fino ad ora comparivano solo in maniera marginale all'interno degli altri due voluminosi libri dello stesso filone, ovvero “Understanding The Linux Kernel” e “Linux Device Drivers”.

Quando si parla di networking, almeno in questo libro, non ci si limita ad un particolare livello della ben nota pila ISO/OSI, ma si passa dalla gestione e riconoscimento di un device hardware al momento dell'inizializzazione del driver, fino ad arrivare alla gestione dell'invio e della ricezione dei dati al livello di rete. Non aspettatevi, però, una descrizione dei livelli di trasporto o applicativi, per questo vi toccherà mettervi di buon impegno e aprire il file relativo, come spesso consiglia l'autore quale metodo di apprendimento più efficace.

Il libro si compone, prima che in capitoli, in parti: ogni parte presenta un sottosistema del codice di rete, dividendo gli argomenti in base all'aspetto del quale si occupano. La parte I è un'introduzione al libro ed agli argomenti trattati, in modo da far avvicinare il lettore alla struttura del kernel Linux, mentre nella parte II si approfondisce la struttura del kernel, scendendo nel dettaglio delle funzioni e dei meccanismi propri dell'argomento oggetto del libro, spiegando quali sono le operazioni che vengono compiute ogni qualvolta un nuovo dispositivo di rete deve essere rilevato e configurato dal sistema.

Con la parte III si arriva a parlare dell'invio e della ricezione dei pacchetti tramite l'interazione con le schede di rete, sviluppando anche tutti gli argomenti correlati alla parte puramente dedicata al codice, che decide come questi pacchetti vengono trattati, individuando i meccanismi che sono necessari per poter svolgere le operazioni in maniera corretta e facendole convivere con il resto lavoro che il kernel deve compiere in un sistema reale.

La parte IV è dedicata esclusivamente al bridging: argomento molto importante e complesso, è stato favorito rispetto a tutti gli altri dispositivi virtuali, probabilmente per la sua recente forte affermazione in campi molto interessanti ed in espansione come quelli dei dispositivi embedded.

Le ultime tre parti trattano invece temi classici del networking, approfondendo come le reti siano implementate nel kernel Linux e di quali siano le possibilità, che vengono offerte all'utente in fatto di configurabilità e personalizzazione: parliamo della parte V del testo, relativa alla gestione del protocollo IPv4, della parte VI – dedicata all’ARP e a tutte le relazioni di buon vicinato relative alle reti locali - ed infine la parte VII, che si occupa di tutto ciò che concerne il routing, scendendo nei particolari che illustrano le caratteristiche avanzate di Linux e che lo identificano come un ottimo pretendente nel caso si debba optare per una soluzione open source a problematiche anche complesse di rete. A questo proposito, ritengo che il testo regali ottimi suggerimenti per capire dove finiscono i pacchetti quando non riusciamo più a trovarli.

La relativa brevità dei singoli capitoli contenuti in ognuna di queste parti riesce a presentare in maniera più chiara gli argomenti, e a snellire la lettura per chi, giustamente, la troverà un po' complessa: insomma, se uno non ce la fa più, può sempre arrivare facilmente alla fine del capitolo e riprendere in un altro momente, senza il rischio di tirare avanti altre due ore.

Una delle cose che sicuramente si fa più apprezzare nelle scelte che l'autore ha fatto per decidere quali argomenti trattare nel testo - e nonostante le oltre mille pagine, ci sono argomenti notevoli, che sono solamente trattati superficialmente se non addirittura saltati in maniera totale - è l'inserimento di aspetti che non riguardano il semplice networking di una macchina utilizzata in posizione periferica nella rete, ma anche di tutti i motivi che promuovo Linux uno dei sistemi più adatti a compiere il lavoro di un router di fascia alta, e che gli permettono di competere con colossi come Cisco, almeno come funzionalità presenti, giacché far girare Linux su un i386 non può essere lo stesso che utilizzare un router Cisco con hardware appositamente studiato ed ottimizzato per quel compito, ma bisogna pur tuttavia, considerare anche il prezzo.

Ad ogni modo, come già anticipato, per la legge del contrappasso, a fronte di una grande qualità degli argomenti trattati, troviamo anche degli argomenti totalmente esclusi dal testo. Per evitare sgradite sorprese ai lettori, che decidono di fare questo investimento per poi scoprire nella prefazione all'opera che la loro tanto cercata funzione non viene neppure sfiorata, anticipo che manca la trattazione di IPv6, IPSec, IP Multicast, livello di trasporto (TCP, UDP, ecc.), traffic control (shaping), netfilter, file system di rete, device virtuali (tranne il bridge), protocolli di livello 3 diversi da IP e ARP, virtual server, SNMP e il frame diverter.

Per i più smanettoni, questo libro fornirà le risposte a tutte le domande che vi siete sempre fatti sui device di rete, spiegandovi in tutti i dettagli come viene fatta la scelta del routing per un determinato pacchetto, come vengono gestite le interfacce virtuali create da sottosistemi come il bridging, oltre a tutte quelle cose che io personalmente non riesco a far entrare tra le mie preferite - pur comprendendone l'importanza - come gli interrupt e i lock. E se vi sentite particolarmente stimolati, state attenti perchè questa lettura vi fornisce anche dettagli su tutti i passi necessari per creare una vostra personale implementazione degli aspetti che vi interessano, anche se in maniera non esaustiva, ma pur sempre uno scheletro su quali siano i passi da seguire e quali strumenti mette a vostra disposizione il kernel per facilitarvi il lavoro.

Lo sapevate, ad esempio, che tutte le componenti del kernel, che siano coinvolte in alcuni eventi di sistema, possono sfruttare la presenza delle notification chains? Queste catene non sono altro che delle liste, alle quali i vari sottosistemi si registrano nel momento in cui ritengono di essere interessati ad un particolare evento, come l'attivazione di una interfaccia di rete: nel momento in cui il codice, che gestisce l'attivazione, riscontra l'evento, si fa carico di andare a vedere chi si era precedentemente registrato e di segnalarlo, in modo da consentire al sistema di agire di conseguenza. Tra le numerose notification chains presenti nel kernel quelle interessanti per il networking sono principalmente due: la inetaddr_chain, che segnala quando viene impostato un indirizzo locale ad una delle interfacce di rete presenti (esiste anche l'equivalente inet6addr_chain per gli indirizzi IPv6), e la netdev_chain, utilizzata invece dal kernel per l'inserimento e la rimozione delle interfacce, sia fisiche che virtuali.

Insomma, se avete letto “TCP/IP Illustrated” e vi siete chiesti come sia una moderna implementazione di uno stack di rete, non avete che da prendere al volo questa occasione, e – aggiungerei - disdire gli altri impegni per i prossimi due mesi.
proTrattandosi di un buon libro, gli aspetti positivi sono tanti, ma ciò che merita evidenza è l’elenco, alla fine di ogni capitolo, dei file del procfs, che è possibile usare per configurare le caratteristiche espresse all'interno del capitolo, le funzioni presentate e la lista di file e directory appartenenti ai sorgenti del kernel, che contengono il codice associato.
controPurtroppo è totalmente assente dal libro tutta la parte relativa al firewalling, ovvero detto in parole povere non c'è modo di vedere come netfilter prenda parte al grande gioco del networking, sebbene siano indicati i riferimenti quando questo interagisce con il resto del codice di rete.
Precedente: Dagli automi cellulari ad oggi (7/7)
Successiva: I fiocchi di neve di IBM sorpassano la legge di Moore
Intervento di L S a.k.a. luca_suriano del 10-05-2007 ore 21:32
Plebeo
Plebeo
(14 interventi)
Iscritto il 04-08-2003
Il testo e' in Inglese.
Copyright Programmazione.it™ 1999-2014. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.213 secondi.