%% netlayer.tex
%%
-%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2009 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".
-%%
-
-
+%%
\chapter{Il livello di rete}
\label{cha:network_layer}
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}
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
+ 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
\textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\
\hline
\hline
- \textit{version} & 4& numero di \textsl{versione}, nel caso
+ \textit{version} & 4& Numero di \textsl{versione}, nel caso
specifico vale sempre 4.\\
- \textit{head length} & 4& lunghezza dell'intestazione,
+ \textit{head length} & 4& Lunghezza dell'intestazione,
in multipli di 32 bit.\\
- \textit{type of service}&8& \textsl{tipo di servizio}, è suddiviso in:
- 3 bit di precedenza, che nelle attuali
+ \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& \textsl{lunghezza totale}, indica
+ \textit{total length} &16& La \textsl{lunghezza totale}, indica
la dimensione del carico di dati del
pacchetto IP in byte.\\
- \textit{identification}&16& \textsl{identificazione}, assegnato alla
+ \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& \textsl{flag}, sono 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& \textsl{offset di frammento}, indica
+ \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& \textsl{tempo di vita}, è decrementato di
+ \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& \textsl{protocollo}, identifica il tipo di
+ \textit{protocol} & 8& Il \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}.\\
+ \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}
\begin{table}[!htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|l|}
+ \begin{tabular}[c]{|l|p{6 cm}|}
\hline
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{IPTOS\_LOWDELAY} & minimizza i ritardi per il traffico
+ \const{IPTOS\_LOWDELAY} & Minimizza i ritardi per il traffico
interattivo. \\
- \const{IPTOS\_THROUGHPUT} & ottimizza la trasmissione per il massimo
+ \const{IPTOS\_THROUGHPUT} & Ottimizza la trasmissione per il massimo
flusso di dati.\\
- \const{IPTOS\_RELIABILITY}& ottimizza per l'affidabilità della
+ \const{IPTOS\_RELIABILITY}& Ottimizza per l'affidabilità della
trasmissione. \\
- \const{IPTOS\_MINCOST} & usato per dati di riempimento, dove non
+ \const{IPTOS\_MINCOST} & Usato per dati di riempimento, dove non
interessa se c'è una bassa velocità di
trasmissione.\\
\hline
\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}
\textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\
\hline
\hline
- \textit{version} & 4& \textsl{versione}, nel caso specifico vale
+ \textit{version} & 4& La \textsl{versione}, nel caso specifico vale
sempre 6.\\
- \textit{priority} & 4& \textsl{priorità}, vedi
+ \textit{priority} & 4& La \textsl{priorità}, vedi
sez.~\ref{sec:IPv6_prio}.\\
- \textit{flow label} &24& \textsl{etichetta di flusso}, vedi
+ \textit{flow label} &24& L'\textsl{etichetta di flusso}, vedi
sez.~\ref{sec:IP_ipv6_flow}.\\
- \textit{payload length}&16& \textsl{lunghezza del carico}, cioè del
+ \textit{payload length}&16& La \textsl{lunghezza del carico}, cioè del
corpo dei dati che segue l'intestazione, in
byte. \\
- \textit{next header} & 8& \textsl{intestazione successiva}, identifica
- il tipo di pacchetto che segue
- l'intestazione di IPv6, usa gli stessi
+ \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& \textsl{limite di salti}, stesso significato
- del \textit{time to live} nell'intestazione
- di IPv4.\\
- \textit{source IP} &128&\textsl{indirizzo di origine}.\\
- \textit{destination IP}&128&\textsl{indirizzo di destinazione}.\\
+ \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}
\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
-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.
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]
\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 & 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.\\
\hline
\end{tabular}
\caption{Tipi di protocolli e intestazioni di estensione}
\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}.}
-\subsection{Autoconfigurazione}
+\subsection{Auto-configurazione}
\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.
-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
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.
-\subsection{Autoconfigurazione stateless}
+\subsection{Auto-configurazione 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.
supera i 128 bit, la stazione ottiene automaticamente il suo indirizzo
globale.
-\subsection{Autoconfigurazione stateful}
+\subsection{Auto-configurazione 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
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}
+
+
+
+
+\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
+ \texttt{echo-reply} &0& Inviato in risposta ad un ICMP
+ \textit{echo-request}.\\
+ \texttt{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.\\
+ \texttt{source-quench} &4& Inviato in caso di congestione della
+ rete per indicare all'IP sorgente di
+ diminuire il traffico inviato.\\
+ \texttt{redirect} &5& Inviato per segnalare un errore di
+ routing, richiede che la macchina
+ sorgente rediriga il traffico ad un
+ altro router da esso specificato.\\
+ \texttt{echo-request} &8& Richiede l'invio in risposta di un
+ \texttt{echo-reply}.\\
+% \texttt{router-advertisement} & & \\
+% \texttt{router-solicitation} & & \\
+ \texttt{time-exceeded} &11& Inviato quando il TTL di un pacchetto
+ viene azzerato.\\
+ \texttt{parameter-problem} &12& Inviato da un router che rileva dei
+ problemi con l'intestazione di un
+ pacchetto.\\
+ \texttt{timestamp-request} &13& Richiede l'invio in risposta di un
+ \texttt{timestamp-reply}.\\
+ \texttt{timestamp-reply} &14& Inviato in risposta di un
+ \texttt{timestamp-request}.\\
+ \texttt{info-request} &15& Richiede l'invio in risposta di un
+ \texttt{info-reply}.\\
+ \texttt{info-reply} &16& Inviato in risposta di un
+ \texttt{info-request}.\\
+ \texttt{address-mask-request} &17& Richiede l'invio in risposta di un
+ \texttt{address-mask-reply}.\\
+ \texttt{address-mask-reply} &18& Inviato in risposta di un
+ \texttt{address-mask-request}.\\
+ \hline
+ \end{tabular}
+ \caption{I valori del \textsl{tipo} per i pacchetti ICMP.}
+\label{tab:ICMP_type}
+\end{table}
+
+
+
+\begin{table}[!htb]
+ \centering
+ \footnotesize
+ \begin{tabular}{|l|l|}
+ \hline
+ \textbf{Valore}&\textbf{Codice}\\
+ \hline
+ \hline
+ \texttt{network-unreachable} &0\\
+ \texttt{host-unreachable} &1\\
+ \texttt{protocol-unreachable} &2\\
+ \texttt{port-unreachable} &3 \\
+ \texttt{fragmentation-needed} &4\\
+ \texttt{source-route-failed} &5\\
+ \texttt{network-unknown} &6\\
+ \texttt{host-unknown} &7\\
+ \texttt{host-isolated} &8\\
+ \texttt{network-prohibited} &9\\
+ \texttt{host-prohibited} &10 \\
+ \texttt{TOS-network-unreachable} &11 \\
+ \texttt{TOS-host-unreachable} &12 \\
+ \texttt{communication-prohibited} &13 \\
+ \texttt{host-precedence-violation}&14 \\
+ \texttt{precedence-cutoff} &15 \\
+ \hline
+ \texttt{network-redirect} &0 \\
+ \texttt{host-redirect} &1 \\
+ \texttt{TOS-network-redirect} &2 \\
+ \texttt{TOS-host-redirect} &3 \\
+ \hline
+ \texttt{ttl-zero-during-transit} &0 \\
+ \texttt{ttl-zero-during-reassembly}&1 \\
+ \hline
+ \texttt{ip-header-bad} &0 \\
+ \texttt{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: 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
% 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: 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
+% 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: