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
\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
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
\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
-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
indirizzi di rete da inserire nelle tabelle di instradamento dei router.
-
-
\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& \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
+ la dimensione del carico di dati 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, 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
+ la posizione del frammento rispetto al
+ pacchetto originale.\\
+ \textit{time to live} &16& \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
+ 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}
+
Il campo TOS definisce il cosiddetto \textit{Type of Service}; questo permette
di definire il tipo di traffico contenuto nei pacchetti, e può essere
\footnotesize
\begin{tabular}{|l|c|p{8cm}|}
\hline
- \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\
+ \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\
\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& \textsl{versione}, nel caso specifico vale
+ sempre 6.\\
+ \textit{priority} & 4& \textsl{priorità}, vedi
+ sez.~\ref{sec:IPv6_prio}.\\
+ \textit{flow label} &24& \textsl{etichetta di flusso}, vedi
+ sez.~\ref{sec:IP_ipv6_flow}.\\
+ \textit{payload length}&16& \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
+ 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}.\\
\hline
\end{tabular}
\caption{Legenda per il significato dei campi dell'intestazione di IPv6}
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:
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