+\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}