Aggiornamento data copyright
[gapil.git] / netlayer.tex
index 39eafed66e236b0ee4234fe4ef1874961dcf0331..b49cb3687a52e06c3973a7d3ec41198c3a07810a 100644 (file)
@@ -1,15 +1,13 @@
 %% netlayer.tex
 %%
 %% netlayer.tex
 %%
-%% Copyright (C) 2000-2006 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2011 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
 %% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
 %% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
-%%
-
-
+%% 
 
 \chapter{Il livello di rete}
 \label{cha:network_layer}
 
 \chapter{Il livello di rete}
 \label{cha:network_layer}
@@ -26,7 +24,8 @@ Data la loro prevalenza il capitolo sar
 protocolli principali esistenti su questo livello: il protocollo IP, sigla che
 sta per \textit{Internet Protocol}, (ma che più propriamente si dovrebbe
 chiamare IPv4) ed la nuova versione di questo stesso protocollo, denominata
 protocolli principali esistenti su questo livello: il protocollo IP, sigla che
 sta per \textit{Internet Protocol}, (ma che più propriamente si dovrebbe
 chiamare IPv4) ed la nuova versione di questo stesso protocollo, denominata
-IPv6.
+IPv6. Tratteremo comunque anche il protocollo ICMP e la sua versione
+modificata per IPv6 (cioè ICMPv6).
 
 
 \section{Il protocollo IP}
 
 
 \section{Il protocollo IP}
@@ -46,7 +45,6 @@ pi
 Il compito principale di IP è quello di trasmettere i pacchetti da un computer
 all'altro della rete; le caratteristiche essenziali con cui questo viene
 realizzato in IPv4 sono due:
 Il compito principale di IP è quello di trasmettere i pacchetti da un computer
 all'altro della rete; le caratteristiche essenziali con cui questo viene
 realizzato in IPv4 sono due:
-
 \begin{itemize}
 \item \textit{Universal addressing} la comunicazione avviene fra due host
   identificati univocamente con un indirizzo a 32 bit che può appartenere ad
 \begin{itemize}
 \item \textit{Universal addressing} la comunicazione avviene fra due host
   identificati univocamente con un indirizzo a 32 bit che può appartenere ad
@@ -54,7 +52,7 @@ realizzato in IPv4 sono due:
 \item \textit{Best effort} viene assicurato il massimo impegno nella
   trasmissione, ma non c'è nessuna garanzia per i livelli superiori né
   sulla percentuale di successo né sul tempo di consegna dei pacchetti di
 \item \textit{Best effort} viene assicurato il massimo impegno nella
   trasmissione, ma non c'è nessuna garanzia per i livelli superiori né
   sulla percentuale di successo né sul tempo di consegna dei pacchetti di
-  dati.
+  dati, né sull'ordine in cui vengono consegnati.
 \end{itemize}
 
 Per effettuare la comunicazione e l'instradamento dei pacchetti fra le varie
 \end{itemize}
 
 Per effettuare la comunicazione e l'instradamento dei pacchetti fra le varie
@@ -65,16 +63,16 @@ ai router per stabilire a quale rete il pacchetto deve essere inviato, il
 numero di host indica la macchina di destinazione finale all'interno di detta
 rete.
 
 numero di host indica la macchina di destinazione finale all'interno di detta
 rete.
 
-Per garantire l'unicità dell'indirizzo Internet esiste un'autorità
-centrale (la IANA, \textit{Internet Assigned Number Authority}) che assegna i
-numeri di rete alle organizzazioni che ne fanno richiesta; è poi compito di
-quest'ultime assegnare i numeri dei singoli host.  
-
-Per venire incontro alle diverse esigenze gli indirizzi di rete erano stati
-originariamente organizzati all'interno delle cosiddette \textit{classi},
-(rappresentate in tab.~\ref{tab:IP_ipv4class}), per consentire dispiegamenti
-di reti di dimensioni diverse.
+Per garantire l'unicità dell'indirizzo Internet esiste un'autorità centrale
+(la IANA, \textit{Internet Assigned Number Authority}) che assegna i numeri di
+rete alle organizzazioni che ne fanno richiesta; è poi compito di quest'ultime
+assegnare i numeri dei singoli host all'interno della propria rete.
 
 
+Per venire incontro alle richieste dei vari enti e organizzazioni che volevano
+utilizzare questo protocollo di comunicazione, originariamente gli indirizzi
+di rete erano stati suddivisi all'interno delle cosiddette \textit{classi},
+(rappresentate in tab.~\ref{tab:IP_ipv4class}), in modo da consentire
+dispiegamenti di reti di varie dimensioni a seconda delle diverse esigenze.
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -148,15 +146,20 @@ di reti di dimensioni diverse.
 \label{tab:IP_ipv4class}
 \end{table}
 
 \label{tab:IP_ipv4class}
 \end{table}
 
-Le classi usate per il dispiegamento delle reti su quella che comunemente
-viene chiamata \textit{Internet} sono le prime tre; la classe D è destinata al
-(non molto usato) \itindex{multicast} \textit{multicast} mentre la classe E è
+Le classi di indirizzi usate per il dispiegamento delle reti su quella che
+comunemente viene chiamata \textit{Internet} sono le prime tre; la classe D è
+destinata al \itindex{multicast} \textit{multicast} mentre la classe E è
 riservata per usi sperimentali e non viene impiegata.
 
 Come si può notare però la suddivisione riportata in
 tab.~\ref{tab:IP_ipv4class} è largamente inefficiente in quanto se ad un
 utente necessita anche solo un indirizzo in più dei 256 disponibili con una
 riservata per usi sperimentali e non viene impiegata.
 
 Come si può notare però la suddivisione riportata in
 tab.~\ref{tab:IP_ipv4class} è largamente inefficiente in quanto se ad un
 utente necessita anche solo un indirizzo in più dei 256 disponibili con una
-classe A occorre passare a una classe B, con un conseguente spreco di numeri.
+classe A occorre passare a una classe B, che ne prevede 65536,\footnote{in
+  realtà i valori esatti sarebbero 254 e 65536, una rete con a disposizione
+  $N$ bit dell'indirizzo IP, ha disponibili per le singole macchine soltanto
+  $@^N-2$ numeri, dato che uno deve essere utilizzato come indirizzo di rete e
+  uno per l'indirizzo di \itindex{broadcast} \textit{broadcast}.} con un
+conseguente spreco di numeri.
 
 Inoltre, in particolare per le reti di classe C, la presenza di tanti
 indirizzi di rete diversi comporta una crescita enorme delle tabelle di
 
 Inoltre, in particolare per le reti di classe C, la presenza di tanti
 indirizzi di rete diversi comporta una crescita enorme delle tabelle di
@@ -201,34 +204,133 @@ rete o suddividere una classe B e diminuendo al contempo il numero di
 indirizzi di rete da inserire nelle tabelle di instradamento dei router.
 
 
 indirizzi di rete da inserire nelle tabelle di instradamento dei router.
 
 
-
-
 \subsection{L'intestazione di IP}
 \label{sec:IP_header}
 
 \subsection{L'intestazione di IP}
 \label{sec:IP_header}
 
+Come illustrato in fig.~\ref{fig:net_tcpip_data_flux} (si ricordi quanto detto
+in sez.~\ref{sec:net_tcpip_overview} riguardo al funzionamento generale del
+TCP/IP), per eseguire il suo compito il protocollo IP inserisce (come
+praticamente ogni protocollo di rete) una opportuna intestazione in cima ai
+dati che deve trasmettere, la cui schematizzazione è riportata in
+fig.~\ref{fig:IP_ipv4_head}.
+
+\begin{figure}[htb]
+  \centering
+  \includegraphics[width=10cm]{img/ipv4_head}
+  \caption{L'intestazione o \textit{header} di IPv4.}
+  \label{fig:IP_ipv4_head}
+\end{figure}
+
+Ciascuno dei campi illustrati in fig.~\ref{fig:IP_ipv4_head} ha un suo preciso
+scopo e significato, che si è riportato brevemente in
+tab.~\ref{tab:IP_ipv4field}; si noti come l'intestazione riporti sempre due
+indirizzi IP, quello \textsl{sorgente}, che indica l'IP da cui è partito il
+pacchetto (cioè l'indirizzo assegnato alla macchina che lo spedisce) e quello
+\textsl{destinazione} che indica l'indirizzo a cui deve essere inviato il
+pacchetto (cioè l'indirizzo assegnato alla macchina che lo riceverà).
+
+\begin{table}[!hbt]
+  \footnotesize
+  \begin{center}
+    \begin{tabular}{|l|c|p{10cm}|}
+      \hline
+      \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\
+      \hline
+      \hline
+      \textit{version}       & 4& Numero di \textsl{versione}, nel caso 
+                                  specifico vale sempre 4.\\
+      \textit{head length}   & 4& Lunghezza dell'intestazione,
+                                  in multipli di 32 bit.\\
+      \textit{type of service}&8& Il ``\textsl{tipo di servizio}'', è suddiviso
+                                  in: 3 bit di precedenza, che nelle attuali
+                                  implementazioni del protocollo non vengono
+                                  comunque utilizzati; un bit riservato che
+                                  deve essere mantenuto a 0; 4 bit che
+                                  identificano il tipo di servizio
+                                  richiesto, uno solo dei quali può essere
+                                  attivo.\\ 
+      \textit{total length}  &16& La \textsl{lunghezza totale}, indica 
+                                  la dimensione del carico di dati del
+                                  pacchetto IP in byte.\\ 
+      \textit{identification}&16& L'\textsl{identificazione}, assegnato alla
+                                  creazione, è aumentato di uno all'origine
+                                  della trasmissione di ciascun pacchetto, ma
+                                  resta lo stesso per i pacchetti
+                                  frammentati, consentendo così di
+                                  identificare quelli che derivano dallo
+                                  stesso pacchetto originario.\\
+      \textit{flag}          & 3& I \textsl{flag} di controllo nell'ordine: il 
+                                  primo è riservato e sempre nullo, il secondo
+                                  indica se il pacchetto non può essere 
+                                  frammentato, il terzo se ci sono ulteriori
+                                  frammenti.\\  
+      \textit{fragmentation offset}&13& L'\textsl{offset di frammento}, indica
+                                  la posizione del frammento rispetto al
+                                  pacchetto originale.\\
+      \textit{time to live}  &16& Il \textsl{tempo di vita}, è decrementato di
+                                  uno ogni volta che un router ritrasmette il
+                                  pacchetto, se arriva a zero il pacchetto
+                                  viene scartato.\\ 
+      \textit{protocol}      & 8& Il \textsl{protocollo}, identifica il tipo di
+                                  pacchetto che segue l'intestazione di IPv4.\\
+      \textit{header checksum}&16&La \textsl{checksum di intestazione}, somma 
+                                  di controllo per l'intestazione.\\ 
+      \textit{source IP}     &32& L'\textsl{indirizzo di origine}.\\
+      \textit{destination IP}&32& L'\textsl{indirizzo di destinazione}.\\
+      \hline
+    \end{tabular}
+    \caption{Legenda per il significato dei campi dell'intestazione di IPv4}
+    \label{tab:IP_ipv4field}
+  \end{center}
+\end{table}
+
 
 Il campo TOS definisce il cosiddetto \textit{Type of Service}; questo permette
 di definire il tipo di traffico contenuto nei pacchetti, e può essere
 utilizzato dai router per dare diverse priorità in base al valore assunto da
 
 Il campo TOS definisce il cosiddetto \textit{Type of Service}; questo permette
 di definire il tipo di traffico contenuto nei pacchetti, e può essere
 utilizzato dai router per dare diverse priorità in base al valore assunto da
-questo campo. 
+questo campo. Abbiamo già visto come il valore di questo campo può essere
+impostato sul singolo socket con l'opzione \const{IP\_TOS} (vedi
+sez.~\ref{sec:sock_ipv4_options}), esso inoltre può essere manipolato sia dal
+sistema del \textit{netfilter} di Linux con il comando \texttt{iptables} che
+dal sistema del routing avanzato del comando \texttt{ip route} per consentire
+un controllo più dettagliato dell'instradamento dei pacchetti e l'uso di
+priorità e politiche di distribuzione degli stessi.
 
 \begin{table}[!htb]
   \centering
   \footnotesize
 
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|l|}
+  \begin{tabular}{|l|l|p{8cm}|}
     \hline
     \hline
-    \textbf{Costante} & \textbf{Significato} \\
+    \multicolumn{2}{|c|}{\textbf{Valore}}&\textbf{Significato}\\
     \hline
     \hline
     \hline
     \hline
-    \const{IPTOS\_LOWDELAY}   & minimizza i ritardi per il traffico
-                                interattivo. \\
-    \const{IPTOS\_THROUGHPUT} & ottimizza la trasmissione per il massimo
-                                flusso di dati.\\
-    \const{IPTOS\_RELIABILITY}& ottimizza per l'affidabilità della
-                                trasmissione. \\
-    \const{IPTOS\_MINCOST}    & usato per dati di riempimento, dove non
-                                interessa se c'è una bassa velocità di
-                                trasmissione.\\
+    \const{IPTOS\_LOWDELAY}     &\texttt{0x10}& Minimizza i ritardi
+                                                per rendere più veloce
+                                                possibile la ritrasmissione
+                                                dei pacchetti (usato per
+                                                traffico interattivo di
+                                                controllo come SSH).\\
+    \const{IPTOS\_THROUGHPUT}   &\texttt{0x8} & Ottimizza la trasmissione
+                                                per rendere il più elevato
+                                                possibile il flusso netto di
+                                                dati (usato su traffico dati,
+                                                come quello di FTP).\\ 
+    \const{IPTOS\_RELIABILITY}  &\texttt{0x4} & Ottimizza la trasmissione
+                                                per ridurre al massimo le
+                                                perdite di pacchetti (usato su
+                                                traffico soggetto a rischio di
+                                                perdita di pacchetti come TFTP
+                                                o DHCP).\\
+   \const{IPTOS\_MINCOST}       &\texttt{0x2} & Indica i dati di riempimento,
+                                                dove non interessa se si ha
+                                                una bassa velocità di
+                                                trasmissione, da utilizzare
+                                                per i collegamenti con minor
+                                                costo (usato per i protocolli
+                                                di streaming).\\ 
+    \textit{Normal-Service}&\texttt{0x0}      & Nessuna richiesta specifica.\\
+    \hline
+
     \hline
   \end{tabular}
   \caption{Le costanti che definiscono alcuni valori standard per il campo TOS
     \hline
   \end{tabular}
   \caption{Le costanti che definiscono alcuni valori standard per il campo TOS
@@ -236,14 +338,40 @@ questo campo.
   \label{tab:IP_TOS_values}
 \end{table}
 
   \label{tab:IP_TOS_values}
 \end{table}
 
+I possibili valori del campo TOS, insieme al relativo significato ed alle
+costanti numeriche ad esso associati, sono riportati in
+tab.~\ref{tab:IP_TOS_values}. Per il valore nullo, usato di default per tutti
+i pacchetti, e relativo al traffico normale, non esiste nessuna costante
+associata. 
 
 
+Il campo TTL, acromino di \textit{Time To Live}, viene utilizzato per
+stabilire una sorta di tempo di vita massimo dei pacchetti sulla rete. In
+realtà più che di un tempo, il campo serve a limitare il numero massimo di
+salti (i cosiddetti \textit{hop}) che un pacchetto IP può compiere nel passare
+da un router ad un altro nel suo attraversamento della rete verso la
+destinazione.
 
 
-\subsection{Le opzioni di IP}
-\label{sec:IP_options}
+Il protocollo IP prevede infatti che il valore di questo campo venga
+decrementato di uno da ciascun router che ritrasmette il pacchetto verso la
+sua destinazione, e che quando questo diventa nullo il router lo debba
+scartare, inviando all'indirizzo sorgente un pacchetto ICMP di tipo
+\textit{time-exceeded} con un codice \textit{ttl-zero-during-transit} se
+questo avviene durante il transito sulla rete o
+\textit{ttl-zero-during-reassembly} se questo avviene alla destinazione finale
+(vedi sez.~\ref{sec:ICMP_protocol}).
 
 
+In sostanza grazie all'uso di questo accorgimento un pacchetto non può
+continuare a vagare indefinitamente sulla rete, e viene comunque scartato dopo
+un certo tempo, o meglio, dopo che ha attraversato in certo numero di
+router. Nel caso di Linux il valore iniziale utilizzato normalmente è 64 (vedi
+sez.~\ref{sec:sock_ipv4_sysctl}).
 
 
 
 
 
 
+\subsection{Le opzioni di IP}
+\label{sec:IP_options}
+
+Da fare ...
 
 
 \section{Il protocollo IPv6}
 
 
 \section{Il protocollo IPv6}
@@ -317,7 +445,7 @@ grandi linee nei seguenti punti:
 \begin{itemize}
 \item l'espansione delle capacità di indirizzamento e instradamento, per
   supportare una gerarchia con più livelli di indirizzamento, un numero di
 \begin{itemize}
 \item l'espansione delle capacità di indirizzamento e instradamento, per
   supportare una gerarchia con più livelli di indirizzamento, un numero di
-  nodi indirizzabili molto maggiore e una autoconfigurazione degli indirizzi
+  nodi indirizzabili molto maggiore e una auto-configurazione degli indirizzi
 \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che
   si aggiungono agli usuali \textit{unicast} e \itindex{multicast}
   \textit{multicast}
 \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che
   si aggiungono agli usuali \textit{unicast} e \itindex{multicast}
   \textit{multicast}
@@ -400,27 +528,28 @@ numero dei campi da 12 a 8.
   \footnotesize
     \begin{tabular}{|l|c|p{8cm}|}
       \hline
   \footnotesize
     \begin{tabular}{|l|c|p{8cm}|}
       \hline
-      \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\
+      \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\
       \hline
       \hline
       \hline
       \hline
-      \textit{version}       &  4 bit & 
-      \textsl{versione}, nel caso specifico vale sempre 6\\
-      \textit{priority}      &  4 bit & 
-      \textsl{priorità}, vedi sez.~\ref{sec:prio} \\
-      \textit{flow label}    & 24 bit & 
-      \textsl{etichetta di flusso}, vedi sez.~\ref{sec:IP_ipv6_flow}\\
-      \textit{payload length} & 16 bit & 
-      \textsl{lunghezza del carico}, cioè del corpo dei dati che segue 
-      l'intestazione, in byte. \\
-      \textit{next header}   &  8 bit & \textsl{intestazione successiva}, 
-      identifica il tipo di pacchetto che segue l'intestazione di IPv6, usa 
-      gli stessi valori del campo protocollo nell'intestazione di IPv4\\
-      \textit{hop limit}     &  8 bit & \textsl{limite di salti},
-      stesso significato del \textit{time to live} nell'intestazione di IPv4, 
-      è decrementato di uno ogni volta che un nodo ritrasmette il
-      pacchetto, se arriva a zero il pacchetto viene scartato \\
-      \textit{source IP}     & 128 bit & \textsl{indirizzo di origine} \\
-      \textit{destination IP}& 128 bit & \textsl{indirizzo di destinazione}\\
+      \textit{version}       & 4& La \textsl{versione}, nel caso specifico vale
+                                  sempre 6.\\ 
+      \textit{priority}      & 4& La \textsl{priorità}, vedi
+                                  sez.~\ref{sec:IPv6_prio}.\\
+      \textit{flow label}    &24& L'\textsl{etichetta di flusso}, vedi
+                                  sez.~\ref{sec:IP_ipv6_flow}.\\ 
+      \textit{payload length}&16& La \textsl{lunghezza del carico}, cioè del
+                                  corpo dei dati che segue l'intestazione, in
+                                  byte. \\ 
+      \textit{next header}   & 8& L'\textsl{intestazione successiva}, 
+                                  identifica il tipo di pacchetto che segue
+                                  l'intestazione di IPv6, ed usa gli stessi
+                                  valori del campo protocollo
+                                  nell'intestazione di IPv4.\\ 
+      \textit{hop limit}     & 8& Il \textsl{limite di salti}, ha lo stesso 
+                                  significato del \textit{time to live} 
+                                  nell'intestazione di IPv4.\\ 
+      \textit{source IP}     &128&L'\textsl{indirizzo di origine}.\\
+      \textit{destination IP}&128&L'\textsl{indirizzo di destinazione}.\\
       \hline
     \end{tabular}
     \caption{Legenda per il significato dei campi dell'intestazione di IPv6}
       \hline
     \end{tabular}
     \caption{Legenda per il significato dei campi dell'intestazione di IPv6}
@@ -468,59 +597,6 @@ differenze:
   di dati per i quali si può provvedere un trattamento speciale.
 \end{itemize}
 
   di dati per i quali si può provvedere un trattamento speciale.
 \end{itemize}
 
-
-\begin{figure}[htb]
-  \centering
-  \includegraphics[width=10cm]{img/ipv4_head}
-  \caption{L'intestazione o \textit{header} di IPv4.}
-  \label{fig:IP_ipv4_head}
-\end{figure}
-
-\begin{table}[htb]
-  \footnotesize
-  \begin{center}
-    \begin{tabular}{|l|c|p{9cm}|}
-      \hline
-      \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\
-      \hline
-      \hline
-      \textit{version}          &  4  & \textsl{versione}, nel caso 
-      specifico vale sempre 4\\
-      \textit{head length}      &  4  &\textsl{lunghezza dell'intestazione},
-      in multipli di 32 bit\\
-      \textit{type of service}  &  8  & \textsl{tipo di servizio}, 
-      consiste in: 3 bit di precedenza, 
-      correntemente ignorati; un bit non usato a 0;  4 bit che identificano
-      il tipo di servizio richiesto, uno solo dei quali può essere 1\\
-      \textit{total length}     & 16  & \textsl{lunghezza totale}, indica 
-      la dimensione del pacchetto IP in byte\\
-      \textit{identification}   & 16  & \textsl{identificazione}, 
-      assegnato alla creazione, è aumentato di uno all'origine della 
-      trasmissione di ciascun pacchetto, ma resta lo stesso per i 
-      pacchetti frammentati\\
-      \textit{flag}             &  3  & 
-      \textsl{flag} bit di frammentazione, uno indica se un
-      pacchetto è frammentato, un altro se ci sono ulteriori frammenti, e 
-      un altro se il pacchetto non può essere frammentato. \\
-      \textit{fragmentation offset} & 13  & \textsl{offset di frammento},
-      indica la posizione del frammento rispetto al pacchetto originale\\
-      \textit{time to live}    & 16 & \textsl{tempo di vita},
-      ha lo stesso significato di
-      \textit{hop limit}, vedi tab.~\ref{tab:IP_ipv6field}\\
-      \textit{protocol}        &  8  & \textsl{protocollo} 
-      identifica il tipo di pacchetto che segue
-      l'intestazione di IPv4\\
-      \textit{header checksum} & 16  & \textsl{checksum di intestazione}, 
-      somma di controllo per l'intestazione\\
-      \textit{source IP}       & 32  & \textsl{indirizzo di origine}\\
-      \textit{destination IP}  & 32  & \textsl{indirizzo di destinazione}\\
-      \hline
-    \end{tabular}
-    \caption{Legenda per il significato dei campi dell'intestazione di IPv4}
-    \label{tab:IP_ipv4field}
-  \end{center}
-\end{table}
-
 Oltre alle differenze precedenti, relative ai singoli campi nell'intestazione,
 ulteriori caratteristiche che diversificano il comportamento di IPv4 da
 quello di IPv6 sono le seguenti:
 Oltre alle differenze precedenti, relative ai singoli campi nell'intestazione,
 ulteriori caratteristiche che diversificano il comportamento di IPv4 da
 quello di IPv6 sono le seguenti:
@@ -774,9 +850,9 @@ delle scheda di rete, e si usano i restanti 16~bit per indicare la sottorete.
 \end{table}
 
 Qualora si dovesse avere a che fare con una necessità di un numero più
 \end{table}
 
 Qualora si dovesse avere a che fare con una necessità di un numero più
-elevato di sottoreti, il precedente schema andrebbe modificato, per evitare
+elevato di sotto-reti, il precedente schema andrebbe modificato, per evitare
 l'enorme spreco dovuto all'uso dei MAC-address, a questo scopo si possono
 l'enorme spreco dovuto all'uso dei MAC-address, a questo scopo si possono
-usare le capacità di autoconfigurazione di IPv6 per assegnare indirizzi
+usare le capacità di auto-configurazione di IPv6 per assegnare indirizzi
 generici con ulteriori gerarchie per sfruttare efficacemente tutto lo spazio
 di indirizzi.
 
 generici con ulteriori gerarchie per sfruttare efficacemente tutto lo spazio
 di indirizzi.
 
@@ -822,7 +898,7 @@ localmente (all'interno di un sito o di una sottorete), e possono avere una
 unicità locale o globale.
 
 Questi indirizzi sono pensati per l'uso all'interno di un sito per mettere su
 unicità locale o globale.
 
 Questi indirizzi sono pensati per l'uso all'interno di un sito per mettere su
-una comunicazione locale immediata, o durante le fasi di autoconfigurazione
+una comunicazione locale immediata, o durante le fasi di auto-configurazione
 prima di avere un indirizzo globale.
 
 \begin{table}[htb]
 prima di avere un indirizzo globale.
 
 \begin{table}[htb]
@@ -1166,24 +1242,24 @@ tab.~\ref{tab:IP_ipv6_nexthead}.
       \textbf{Valore} & \textbf{Keyword} & \textbf{Tipo di protocollo} \\
       \hline
       \hline
       \textbf{Valore} & \textbf{Keyword} & \textbf{Tipo di protocollo} \\
       \hline
       \hline
-      0  &      & riservato\\
-         & HBH  & Hop by Hop \\
-      1  & ICMP & Internet Control Message (IPv4 o IPv6) \\
-      2  & ICMP & Internet Group Management (IPv4) \\
-      3  & GGP  & Gateway-to-Gateway \\
-      4  & IP   & IP in IP (IPv4 encapsulation) \\
-      5  & ST   & Stream \\
-      6  & TCP  & Trasmission Control \\
-      17 & UDP  & User Datagram \\
-      43 & RH   & Routing Header (IPv6) \\
-      44 & FH   & Fragment Header (IPv6) \\
-      45 & IDRP & Inter Domain Routing \\
-      51 & AH   & Authentication Header (IPv6) \\
-      52 & ESP  & Encrypted Security Payload (IPv6) \\
-      59 & Null & No next header (IPv6) \\
-      88 & IGRP & Internet Group Routing \\
-      89 & OSPF & Open Short Path First \\
-      255&      & riservato \\
+      0  &      & Riservato.\\
+         & HBH  & Hop by Hop.\\
+      1  & ICMP & Internet Control Message (IPv4 o IPv6).\\
+      2  & IGMP & Internet Group Management (IPv4).\\
+      3  & GGP  & Gateway-to-Gateway.\\
+      4  & IP   & IP in IP (IPv4 encapsulation).\\
+      5  & ST   & Stream.\\
+      6  & TCP  & Trasmission Control.\\
+      17 & UDP  & User Datagram.\\
+      43 & RH   & Routing Header (IPv6).\\
+      44 & FH   & Fragment Header (IPv6).\\
+      45 & IDRP & Inter Domain Routing.\\
+      51 & AH   & Authentication Header (IPv6).\\
+      52 & ESP  & Encrypted Security Payload (IPv6).\\
+      59 & Null & No next header (IPv6).\\
+      88 & IGRP & Internet Group Routing.\\
+      89 & OSPF & Open Short Path First.\\
+      255&      & Riservato.\\
     \hline
     \end{tabular}
     \caption{Tipi di protocolli e intestazioni di estensione}
     \hline
     \end{tabular}
     \caption{Tipi di protocolli e intestazioni di estensione}
@@ -1239,7 +1315,7 @@ rendere utilizzabile un qualunque sottoinsieme dei bit come chiavi di hash per
 i router.
 
 \subsection{Priorità}
 i router.
 
 \subsection{Priorità}
-\label{sec:prio}
+\label{sec:IPv6_prio}
 
 Il campo di priorità consente di indicare il livello di priorità dei
 pacchetti relativamente agli altri pacchetti provenienti dalla stessa
 
 Il campo di priorità consente di indicare il livello di priorità dei
 pacchetti relativamente agli altri pacchetti provenienti dalla stessa
@@ -1261,12 +1337,12 @@ valori di priorit
     \textbf{Valore} & \textbf{Tipo di traffico} \\
     \hline
     \hline
     \textbf{Valore} & \textbf{Tipo di traffico} \\
     \hline
     \hline
-    0 & traffico generico \\
-    1 & traffico di riempimento (es. news) \\
-    2 & trasferimento dati non interattivo (es. e-mail)\\
-    3 & riservato \\
-    4 & trasferimento dati interattivo (es. FTP, HTTP, NFS) \\
-    5 & riservato \\
+    0 & Traffico generico.\\
+    1 & Traffico di riempimento (es. news).\\
+    2 & Trasferimento dati non interattivo (es. e-mail).\\
+    3 & Riservato.\\
+    4 & Trasferimento dati interattivo (es. FTP, HTTP, NFS).\\
+    5 & Riservato.\\
     \hline
 \end{tabular}
 \caption{Formato di un indirizzo \textit{site-local}.}
     \hline
 \end{tabular}
 \caption{Formato di un indirizzo \textit{site-local}.}
@@ -1410,15 +1486,15 @@ fino al vettore di inizializzazione, il resto 
 
 
 
 
 
 
-\subsection{Autoconfigurazione}
+\subsection{Auto-configurazione}
 \label{sec:IP_ipv6_autoconf}
 
 \label{sec:IP_ipv6_autoconf}
 
-Una delle caratteristiche salienti di IPv6 è quella dell'autoconfigurazione,
+Una delle caratteristiche salienti di IPv6 è quella dell'auto-configurazione,
 il protocollo infatti fornisce la possibilità ad un nodo di scoprire
 automaticamente il suo indirizzo acquisendo i parametri necessari per potersi
 connettere a internet.
 
 il protocollo infatti fornisce la possibilità ad un nodo di scoprire
 automaticamente il suo indirizzo acquisendo i parametri necessari per potersi
 connettere a internet.
 
-L'autoconfigurazione sfrutta gli indirizzi link-local; qualora sul nodo sia
+L'auto-configurazione sfrutta gli indirizzi link-local; qualora sul nodo sia
 presente una scheda di rete che supporta lo standard IEEE802 (ethernet) questo
 garantisce la presenza di un indirizzo fisico a 48 bit unico; pertanto il nodo
 può assumere automaticamente senza pericoli di collisione l'indirizzo
 presente una scheda di rete che supporta lo standard IEEE802 (ethernet) questo
 garantisce la presenza di un indirizzo fisico a 48 bit unico; pertanto il nodo
 può assumere automaticamente senza pericoli di collisione l'indirizzo
@@ -1437,13 +1513,13 @@ richiedendo assistenza).
 
 Una volta ottenuto un indirizzo locale valido diventa possibile per il nodo
 comunicare con la rete locale; sono pertanto previste due modalità di
 
 Una volta ottenuto un indirizzo locale valido diventa possibile per il nodo
 comunicare con la rete locale; sono pertanto previste due modalità di
-autoconfigurazione, descritte nelle seguenti sezioni. In ogni caso
+auto-configurazione, descritte nelle seguenti sezioni. In ogni caso
 l'indirizzo link-local resta valido.
 
 l'indirizzo link-local resta valido.
 
-\subsection{Autoconfigurazione stateless}
+\subsection{Auto-configurazione stateless}
 \label{sec:stateless}
 
 \label{sec:stateless}
 
-Questa è la forma più semplice di autoconfigurazione, possibile quando
+Questa è la forma più semplice di auto-configurazione, possibile quando
 l'indirizzo globale può essere ricavato dall'indirizzo link-local cambiando
 semplicemente il prefisso a quello assegnato dal provider per ottenere un
 indirizzo globale.
 l'indirizzo globale può essere ricavato dall'indirizzo link-local cambiando
 semplicemente il prefisso a quello assegnato dal provider per ottenere un
 indirizzo globale.
@@ -1465,10 +1541,10 @@ l'indirizzo, nel qual caso, se il prefisso unito all'indirizzo link-local non
 supera i 128 bit, la stazione ottiene automaticamente il suo indirizzo
 globale.
 
 supera i 128 bit, la stazione ottiene automaticamente il suo indirizzo
 globale.
 
-\subsection{Autoconfigurazione stateful}
+\subsection{Auto-configurazione stateful}
 \label{sec:stateful}
 
 \label{sec:stateful}
 
-Benché estremamente semplice l'autoconfigurazione stateless presenta alcuni
+Benché estremamente semplice l'auto-configurazione stateless presenta alcuni
 problemi; il primo è che l'uso degli indirizzi delle schede di rete è
 molto inefficiente; nel caso in cui ci siano esigenze di creare una gerarchia
 strutturata su parecchi livelli possono non restare 48~bit per l'indirizzo
 problemi; il primo è che l'uso degli indirizzi delle schede di rete è
 molto inefficiente; nel caso in cui ci siano esigenze di creare una gerarchia
 strutturata su parecchi livelli possono non restare 48~bit per l'indirizzo
@@ -1483,11 +1559,136 @@ interrogher
 l'indirizzo link-local e riceverà un indirizzo unicast globale.
 
 
 l'indirizzo link-local e riceverà un indirizzo unicast globale.
 
 
+\section{Il protocollo ICMP}
+\label{sec:ICMP_protocol}
+
+Come già accennato nelle sezioni precedenti, l'\textit{Internet Control
+  Message Protocol} è un protocollo di servizio fondamentale per il
+funzionamento del livello di rete. Il protocollo ICMP viene trasportato
+direttamente su IP, ma proprio per questa sua caratteristica di protocollo di
+servizio è da considerarsi a tutti gli effetti appartenente al livello di
+rete.
+
+\subsection{L'intestazione di ICMP}
+\label{sec:ICMP_header}
+
+Il protocollo ICMP è estremamente semplice, ed il suo unico scopo è quello di
+inviare messaggi di controllo; in fig.~\ref{fig:ICMP_header} si è riportata la
+struttura dell'intestazione di un pacchetto ICMP generico. 
+
+\begin{figure}[htb]
+  \centering \includegraphics[width=12cm]{img/icmp_head}
+  \caption{L'intestazione del protocollo ICMP.}
+  \label{fig:ICMP_header}
+\end{figure}
+
+Ciascun pacchetto ICMP è contraddistinto dal valore del primo campo, il tipo,
+che indica appunto che tipo di messaggio di controllo viene veicolato dal
+pacchetto in questione; i valori possibili per questo campo, insieme al
+relativo significato, sono riportati in tab.~\ref{tab:ICMP_type}.
+
+\begin{table}[!htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|l|p{9.5cm}|}
+    \hline
+    \textbf{Valore}&\textbf{Tipo}&\textbf{Significato}\\
+    \hline
+    \hline
+    \texttt{any} & -- & Seleziona tutti i possibili valori \\
+    \hline
+    \textit{echo-reply}             &0& Inviato in risposta ad un ICMP
+                                        \textit{echo-request}.\\ 
+    \textit{destination-unreachable}&3& Segnala una destinazione 
+                                        irraggiungibile, viene
+                                        inviato all'IP sorgente di un
+                                        pacchetto quando un router realizza
+                                        che questo non può essere inviato a
+                                        destinazione.\\
+    \textit{source-quench}          &4& Inviato in caso di congestione della
+                                        rete per indicare all'IP sorgente di
+                                        diminuire il traffico inviato.\\
+    \textit{redirect}               &5& Inviato per segnalare un errore di
+                                        routing, richiede che la macchina
+                                        sorgente rediriga il traffico ad un
+                                        altro router da esso specificato.\\
+    \textit{echo-request}           &8& Richiede l'invio in risposta di un
+                                        \textit{echo-reply}.\\
+%    \textit{router-advertisement}   & & \\
+%    \textit{router-solicitation}    & & \\
+    \textit{time-exceeded}          &11& Inviato quando il TTL di un pacchetto
+                                         viene azzerato.\\
+    \textit{parameter-problem}      &12& Inviato da un router che rileva dei
+                                         problemi con l'intestazione di un
+                                         pacchetto.\\
+    \textit{timestamp-request}      &13& Richiede l'invio in risposta di un
+                                         \textit{timestamp-reply}.\\
+    \textit{timestamp-reply}        &14& Inviato in risposta di un
+                                         \textit{timestamp-request}.\\
+    \textit{info-request}           &15& Richiede l'invio in risposta di un
+                                         \textit{info-reply}.\\
+    \textit{info-reply}             &16& Inviato in risposta di un
+                                         \textit{info-request}.\\
+    \textit{address-mask-request}   &17& Richiede l'invio in risposta di un
+                                         \textit{address-mask-reply}.\\
+    \textit{address-mask-reply}     &18& Inviato in risposta di un
+                                         \textit{address-mask-request}.\\
+    \hline
+  \end{tabular}
+  \caption{I valori del \textsl{tipo} per i pacchetti ICMP.}
+\label{tab:ICMP_type}
+\end{table}
+
+Per alcuni tipi di messaggi ICMP, esiste un secondo campo, detto codice, che
+specifica ulteriormente la natura del messaggio; i soli messaggi che
+utilizzano un valore per questo campo sono quelli di tipo
+\textit{destination-unreachable}, \textit{redirect}, \textit{time-exceeded} e
+\textit{parameter-problem}. I possibili valori del codice relativi a ciascuno
+di essi sono stati riportati nelle quattro sezioni in cui si è suddivisa
+tab.~\ref{tab:ICMP_code}, rispettivamente nell'ordine con cui sono appena
+elencati i tipi a cui essi fanno riferimento. 
+
+\begin{table}[!htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|l|}
+    \hline
+    \textbf{Valore}&\textbf{Codice}\\
+    \hline
+    \hline
+    \textit{network-unreachable}      &0\\
+    \textit{host-unreachable}         &1\\
+    \textit{protocol-unreachable}     &2\\
+    \textit{port-unreachable}         &3 \\
+    \textit{fragmentation-needed}     &4\\
+    \textit{source-route-failed}      &5\\
+    \textit{network-unknown}          &6\\
+    \textit{host-unknown}             &7\\
+    \textit{host-isolated}            &8\\
+    \textit{network-prohibited}       &9\\
+    \textit{host-prohibited}          &10 \\
+    \textit{TOS-network-unreachable}  &11 \\
+    \textit{TOS-host-unreachable}     &12 \\
+    \textit{communication-prohibited} &13 \\
+    \textit{host-precedence-violation}&14 \\
+    \textit{precedence-cutoff}        &15 \\
+    \hline
+    \textit{network-redirect}         &0  \\
+    \textit{host-redirect}            &1  \\
+    \textit{TOS-network-redirect}     &2  \\
+    \textit{TOS-host-redirect}        &3  \\
+    \hline
+    \textit{ttl-zero-during-transit}  &0 \\
+    \textit{ttl-zero-during-reassembly}&1 \\
+    \hline
+    \textit{ip-header-bad}            &0 \\
+    \textit{required-option-missing}  &1 \\
+    \hline
+  \end{tabular}
+  \caption{Valori del campo \textsl{codice} per il protocollo ICMP.}
+\label{tab:ICMP_code}
+\end{table}
 
 
-%%% Local Variables: 
-%%% mode: latex
-%%% TeX-master: "gapil"
-%%% End: 
 
 % LocalWords:  sez Protocol IPv dall' RFC Ethernet Token FDDI Universal host of
 % LocalWords:  addressing Best effort l'host router IANA Assigned Number tab to
 
 % LocalWords:  sez Protocol IPv dall' RFC Ethernet Token FDDI Universal host of
 % LocalWords:  addressing Best effort l'host router IANA Assigned Number tab to
@@ -1498,16 +1699,27 @@ l'indirizzo link-local e ricever
 % LocalWords:  destination identification fragment checksum TCP UDP ICMPv type
 % LocalWords:  service head total fragmentation protocol broadcast broadcasting
 % LocalWords:  multicasting path MTU discovery NSAP IPX based geografic local
 % LocalWords:  destination identification fragment checksum TCP UDP ICMPv type
 % LocalWords:  service head total fragmentation protocol broadcast broadcasting
 % LocalWords:  multicasting path MTU discovery NSAP IPX based geografic local
-% LocalWords:  routing format prefix nell' Registry Subscriber Intra Regional
+% LocalWords:  routing format prefix Registry Subscriber Intra Regional SSH
 % LocalWords:  Register INTERNIC NCC APNIC subscriber Interface MAC address Reg
 % LocalWords:  Subnet Naz Prov Subscr FEBF bootstrap FEC FEFF DNS socket FFFF
 % LocalWords:  sull'host loopback scop all nodes routers rip cbt name dhcp HBH
 % LocalWords:  agents servers relays solicited extension options route Keyword
 % LocalWords:  Authentication Encapsulation ICMP Control Message GGP Gateway ST
 % LocalWords:  Register INTERNIC NCC APNIC subscriber Interface MAC address Reg
 % LocalWords:  Subnet Naz Prov Subscr FEBF bootstrap FEC FEFF DNS socket FFFF
 % LocalWords:  sull'host loopback scop all nodes routers rip cbt name dhcp HBH
 % LocalWords:  agents servers relays solicited extension options route Keyword
 % LocalWords:  Authentication Encapsulation ICMP Control Message GGP Gateway ST
-% LocalWords:  encapsulation Stream Trasmission Datagram RH FH IDRP ESP Null
+% LocalWords:  encapsulation Stream Trasmission Datagram RH FH IDRP ESP Null ip
 % LocalWords:  Encrypted Security IGRP OSPF Short First tunnelling FFFFFF hash
 % LocalWords:  news FTP NFS authentication Parameter Index ICV Integrity Value
 % LocalWords:  Encrypted Security IGRP OSPF Short First tunnelling FFFFFF hash
 % LocalWords:  news FTP NFS authentication Parameter Index ICV Integrity Value
-% LocalWords:  padding Option gateway dell'MD keyed Encripted IEEE ethernet
-% LocalWords:  dell'autoconfigurazione L'autoconfigurazione Solicitation
-% LocalWords:  stateless solicitation Advertisement stateful
-% LocalWords:  l'autoconfigurazione
+% LocalWords:  padding Option gateway dell'MD keyed Encripted IEEE ethernet any
+% LocalWords:  Solicitation netfilter iptables TFTP streaming Normal IGMP
+% LocalWords:  stateless solicitation Advertisement stateful Transfer Unit echo
+% LocalWords:  l'autoconfigurazione reply request unreachable all'IP quench TTL
+% LocalWords:  redirect exceeded parameter problem timestamp info mask port ttl
+% LocalWords:  needed failed unknown isolated prohibited communication cutoff
+% LocalWords:  precedence violation during reassembly bad required option
+% LocalWords:  missing
+
+
+
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: