X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=ipprot.tex;h=818abcbde3b7bee3410987e8f90a17b16a51a5b3;hp=11954fa90e9d3d28900d136e37e6e6b0f900facf;hb=4693c008411fc78ee1df605820a151d0adfa5c18;hpb=9aeb46d93d970f26f1939d3853e4a9e62b2eb5b9 diff --git a/ipprot.tex b/ipprot.tex index 11954fa..818abcb 100644 --- a/ipprot.tex +++ b/ipprot.tex @@ -41,8 +41,8 @@ quest'ultime assegnare i numeri dei singoli host. Per venire incontro alle diverse esigenze gli indirizzi di rete sono stati originariamente organizzati in \textit{classi}, (rappresentate in -Tab.~\ref{tab:IP_ipv4class}), per consentire dispiegamenti di reti di -dimensioni diverse. +\tabref{tab:IP_ipv4class}), per consentire dispiegamenti di reti di dimensioni +diverse. \begin{table}[htb] @@ -157,12 +157,12 @@ di questi ultimi ed inefficienza nel trasporto. \end{table} Per questo nel 1992 è stato introdotto un indirizzamento senza classi (il -CIDR) in cui il limite fra i bit destinati a indicare il numero di rete e -quello destinati a indicare l'host finale può essere piazzato in qualunque -punto (vedi Tab.~\tabref{tab:IP_ipv4cidr}), permettendo di accorpare più -classi A su un'unica rete o suddividere una classe B e diminuendo al contempo -il numero di indirizzi di rete da inserire nelle tabelle di instradamento dei -router. +CIDR, \textit{Classless Inter-Domain Routing}) in cui il limite fra i bit +destinati a indicare il numero di rete e quello destinati a indicare l'host +finale può essere piazzato in qualunque punto (vedi \tabref{tab:IP_ipv4cidr}), +permettendo di accorpare più classi A su un'unica rete o suddividere una +classe B e diminuendo al contempo il numero di indirizzi di rete da inserire +nelle tabelle di instradamento dei router. \section{I motivi della transizione} @@ -213,7 +213,7 @@ dimostrate valide, eliminando quelle inutili e aggiungendone poche altre ponendo al contempo una grande attenzione a mantenere il protocollo il più snello e veloce possibile. -I cambiamenti apportati sono comunque notevoli e si possono essere riassunti a +I cambiamenti apportati sono comunque notevoli e possono essere riassunti a grandi linee nei seguenti punti: \begin{itemize} \item l'espansione delle capacità di indirizzamento e instradamento, per @@ -221,7 +221,7 @@ grandi linee nei seguenti punti: nodi indirizzabili molto maggiore e una autoconfigurazione degli indirizzi \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che si aggiungono agli usuali \textit{unycast} e \textit{multicast} -\item la semplificazione del formato della testata, eliminando o rendendo +\item la semplificazione del formato dell'intestazione, eliminando o rendendo opzionali alcuni dei campi di IPv4, per eliminare la necessità di riprocessamento della stessa da parte dei router e contenere l'aumento di dimensione dovuto ai nuovi indirizzi @@ -236,53 +236,61 @@ grandi linee nei seguenti punti: \end{itemize} -\section{La testata di IPv6} +\section{L'intestazione di IPv6} \label{sec:IP_ipv6head} Per capire le caratteristiche di IPv6 partiamo dall'intestazione usata dal protocollo per gestire la trasmissione dei pacchetti; in -\tabref{tab:IP_ipv6head} è riportato il formato della testata di IPv6 da -confrontare con quella di IPv4 in \tabref{tab:IP_ipv4head}. La spiegazione del -significato dei vari campi delle due testate è riportato rispettivamente in -\tabref{tab:IP_ipv6field} e \tabref{tab:IP_ipv4field}) +\figref{fig:IP_ipv6head} è riportato il formato dell'intestazione di IPv6 da +confrontare con quella di IPv4 in \figref{fig:IP_ipv4_head}. La spiegazione del +significato dei vari campi delle due intestazioni è riportato rispettivamente +in \tabref{tab:IP_ipv6field} e \tabref{tab:IP_ipv4field}) + +% \begin{table}[htb] +% \footnotesize +% \begin{center} +% \begin{tabular}{@{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm} +% @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm} +% @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule} } +% \multicolumn{8}{@{}c@{}}{0\hfill 15 16\hfill 31}\\ +% \hline +% \centering version&\centering priority& +% \multicolumn{6}{@{}p{96mm}@{\vrule}}{\centering flow label} \\ +% \hline +% \multicolumn{4}{@{\vrule}p{64mm}@{\vrule}}{\centering payload length} & +% \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering next header} & +% \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering hop limit}\\ +% \hline +% \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ +% \multicolumn{8}{@{\vrule}c@{\vrule}}{ +% source} \\ +% \multicolumn{8}{@{\vrule}c@{\vrule}}{ +% IP address} \\ +% \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ +% \hline +% \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ +% \multicolumn{8}{@{\vrule}c@{\vrule}}{ +% destination} \\ +% \multicolumn{8}{@{\vrule}c@{\vrule}}{ +% IP address} \\ +% \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ +% \hline +% \end{tabular} +% \caption{L'intestazione o \textit{header} di IPv6} +% \label{tab:IP_ipv6head} +% \end{center} +% \end{table} + +\begin{figure}[htb] + \centering + \includegraphics[width=10cm]{img/ipv6_head} + \caption{L'intestazione o \textit{header} di IPv6.} + \label{fig:IP_ipv6head} +\end{figure} -\begin{table}[htb] - \footnotesize - \begin{center} - \begin{tabular}{@{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm} - @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm} - @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule} } - \multicolumn{8}{@{}c@{}}{0\hfill 15 16\hfill 31}\\ - \hline - \centering version&\centering priority& - \multicolumn{6}{@{}p{96mm}@{\vrule}}{\centering flow label} \\ - \hline - \multicolumn{4}{@{\vrule}p{64mm}@{\vrule}}{\centering payload lenght} & - \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering next header} & - \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering hop limit}\\ - \hline - \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ - \multicolumn{8}{@{\vrule}c@{\vrule}}{ - source} \\ - \multicolumn{8}{@{\vrule}c@{\vrule}}{ - IP address} \\ - \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ - \hline - \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ - \multicolumn{8}{@{\vrule}c@{\vrule}}{ - destination} \\ - \multicolumn{8}{@{\vrule}c@{\vrule}}{ - IP address} \\ - \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ - \hline - \end{tabular} - \caption{La testata o \textit{header} di IPv6} - \label{tab:IP_ipv6head} - \end{center} -\end{table} -Come si può notare la testata di IPv6 diventa di dimensione fissa, pari a 40 -byte, contro una dimensione (minima, in assenza di opzioni) di 20 byte per +Come si può notare l'intestazione di IPv6 diventa di dimensione fissa, pari a +40 byte, contro una dimensione (minima, in assenza di opzioni) di 20 byte per IPv4; un semplice raddoppio nonostante lo spazio destinato agli indirizzi sia quadruplicato, questo grazie a una notevole semplificazione che ha ridotto il numero dei campi da 12 a 8. @@ -290,28 +298,30 @@ numero dei campi da 12 a 8. \begin{table}[htb] \begin{center} \footnotesize - \begin{tabular}{ l c p{8cm}} + \begin{tabular}{|l|c|p{8cm}|} + \hline \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\ - \toprule + \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 leght} & 16 bit & + \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{testata successiva}, - identifica il tipo di pacchetto che segue la testata di IPv6, usa gli - stessi valori del campo protocollo nella testata di IPv4\\ + \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} nella testata di IPv4, + 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}\\ - \bottomrule + \hline \end{tabular} \caption{Legenda per il significato dei campi dell'intestazione di IPv6} \label{tab:IP_ipv6field} @@ -319,17 +329,18 @@ numero dei campi da 12 a 8. \end{table} Abbiamo già anticipato in \secref{sec:IP_ipv6over} uno dei criteri principali -nella progettazione di IPv6 è stato quello di ridurre al massimo il tempo di -processamento dei pacchetti da parte dei router, un confronto con la testata -di IPv4 (vedi \secref{tab:IP_ipv4head}) mostra le seguenti differenze: +nella progettazione di IPv6 è stato quello di ridurre al minimo il tempo di +processamento dei pacchetti da parte dei router, un confronto con +l'intestazione di IPv4 (vedi \figref{fig:IP_ipv4_head}) mostra le seguenti +differenze: \begin{itemize} -\item è stato eliminato il campo \textit{header lenght} in quanto le opzioni - sono state tolte dalla testata che ha così dimensione fissa; ci possono - essere più testate opzionali (\textsl{testate di estensione}, vedi +\item è stato eliminato il campo \textit{header length} in quanto le opzioni + sono state tolte dall'intestazione che ha così dimensione fissa; ci possono + essere più intestazioni opzionali (\textsl{intestazioni di estensione}, vedi \secref{sec:IP_ipv6_extens}), ciascuna delle quali avrà un suo campo di lunghezza all'interno. -\item la testata e gli indirizzi sono allineati a 64 bit, questo rende più +\item l'intestazione e gli indirizzi sono allineati a 64 bit, questo rende più veloce il processo da parte di computer con processori a 64 bit. \item i campi per gestire la frammentazione (\textit{identification}, \textit{flag} e \textit{fragment offset}) sono stati eliminati; questo @@ -337,8 +348,8 @@ di IPv4 (vedi \secref{tab:IP_ipv4head}) mostra le seguenti differenze: processo dei pacchetti nel caso normale. \item è stato eliminato il campo \textit{checksum} in quanto tutti i protocolli di livello superiore (TCP, UDP e ICMPv6) hanno un campo di - checksum che include, oltre alla loro testata e ai dati, pure i campi - \textit{payload lenght}, \textit{next header}, e gli indirizzi di origine e + checksum che include, oltre alla loro intestazione e ai dati, pure i campi + \textit{payload length}, \textit{next header}, e gli indirizzi di origine e di destinazione; una checksum esiste anche per la gran parte protocolli di livello inferiore (anche se quelli che non lo hanno, come SLIP, non possono essere usati con grande affidabilità); con questa scelta si è ridotto di @@ -352,66 +363,39 @@ di IPv4 (vedi \secref{tab:IP_ipv4head}) mostra le seguenti differenze: \item è stato introdotto un nuovo campo \textit{flow label}, che viene usato, insieme al campo \textit{priority} (che recupera i bit di precedenza del campo \textit{type of service}) per implementare la gestione di una - ``qualità di servizio'' (vedi Sez.~\ref{sec:IP_ipv6_qos}) che permette di + ``qualità di servizio'' (vedi \secref{sec:IP_ipv6_qos}) che permette di identificare i pacchetti appartenenti a un ``flusso'' di dati per i quali si può provvedere un trattamento speciale. \end{itemize} -\begin{table}[htb] - \footnotesize + +\begin{figure}[htb] \centering - \begin{tabular}{@{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm} - @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm} - @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule} } - \multicolumn{8}{@{}c@{}}{0\hfill 15 16\hfill 31}\\ - \hline - \centering version& - \centering head lenght& - \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering type of service} & - \multicolumn{4}{@{}p{64mm}@{\vrule}}{\centering total lenght} \\ - \hline - \multicolumn{4}{@{\vrule}p{64mm}@{\vrule}}{\centering identification} & - \multicolumn{4}{@{}p{64mm}@{\vrule}}{\parbox{11mm}{\centering flag} \vrule - \parbox{52mm}{\centering fragment offset}}\\ - \hline - \multicolumn{2}{@{\vrule}p{32mm}@{\vrule}}{\centering TTL}& - \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering protocol}& - \multicolumn{4}{@{}p{64mm}@{\vrule}}{\centering header checksum} \\ - \hline - \multicolumn{8}{@{\vrule}c@{\vrule}}{ - source IP address} \\ - \hline - \multicolumn{8}{@{\vrule}c@{\vrule}}{ - destination IP address} \\ - \hline - \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ - \multicolumn{8}{@{}p{128mm}@{}}{ - \centering options (if any)} \\ - \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\ - \hline - \end{tabular} - \caption{L'intestazione o \textit{header} di IPv4} -\label{tab:IP_ipv4head} -\end{table} + \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}} + \begin{tabular}{|l|c|p{9cm}|} + \hline \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\ - \toprule + \hline + \hline \textit{version} & 4 bit & \textsl{versione}, nel caso specifico vale sempre 4\\ - \textit{head lenght} & 4 bit & \textsl{lunghezza della testata}, + \textit{head length} & 4 bit &\textsl{lunghezza dell'intestazione}, in multipli di 32 bit\\ \textit{type of service} & 8 bit & \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 lenght} & 16 bit & \textsl{lunghezza totale}, indica + \textit{total length} & 16 bit & \textsl{lunghezza totale}, indica la dimensione del pacchetto IP in byte\\ \textit{identification} & 16 bit & \textsl{identificazione}, - assegnato alla creazione, è aumentato di uno all'origine alla + assegnato alla creazione, è aumentato di uno all'origine della trasmissione di ciascun pacchetto, ma resta lo stesso per i pacchetti frammentati\\ \textit{flag} & 3 bit & @@ -425,19 +409,19 @@ di IPv4 (vedi \secref{tab:IP_ipv4head}) mostra le seguenti differenze: \textit{hop limit}, vedi Tab.~\ref{tab:IP_ipv6field}\\ \textit{protocol} & 8 bit & \textsl{protocollo} identifica il tipo di pacchetto che segue - la testata di IPv4\\ - \textit{header checksum} & 16 bit & \textsl{checksum di testata}, somma - di controllo per la testata\\ + l'intestazione di IPv4\\ + \textit{header checksum} & 16 bit & \textsl{checksum di intestazione}, + somma di controllo per l'intestazione\\ \textit{source IP} & 32 bit & \textsl{indirizzo di origine}\\ \textit{destination IP} & 32 bit & \textsl{indirizzo di destinazione}\\ - \bottomrule + \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 nella testata, +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: @@ -559,7 +543,7 @@ IPv4, un terzo tipo, gli indirizzi \textit{anycast} In IPv6 non esistono più gli indirizzi \textit{broadcast}, la funzione di questi ultimi deve essere reimplementata con gli indirizzi \textit{multicast}. -Gli indirizzi \textit{unicast} identificano una singola interfaccia i +Gli indirizzi \textit{unicast} identificano una singola interfaccia: i pacchetti mandati ad un tale indirizzo verranno inviati a quella interfaccia, gli indirizzi \textit{anycast} identificano un gruppo di interfacce tale che un pacchetto mandato a uno di questi indirizzi viene inviato alla più vicina @@ -629,14 +613,16 @@ i seguenti possibili valori per il \textsl{Registry Id}; gli altri valori restano riservati per la IANA. \begin{table}[htb] \begin{center} - \begin{tabular}{l l l} + \begin{tabular}{|l|l|l|} + \hline \textbf{Regione} & \textbf{Registro} & \textbf{Id} \\ - \toprule + \hline + \hline Nord America &INTERNIC & \texttt{11000} \\ Europa & RIPE NCC & \texttt{01000} \\ Asia & APNIC & \texttt{00100} \\ Multi-regionale & IANA &\texttt{10000} \\ - \bottomrule + \hline \end{tabular} \caption{Valori dell'identificativo dei Regional Register allocati ad oggi.} @@ -649,7 +635,7 @@ suddivisione fra \textit{Provider Id}, che identifica i grandi fornitori di servizi, e \textit{Subscriber Id}, che identifica i fruitori, sia gestita dai singoli registri regionali. Questi ultimi dovranno definire come dividere lo spazio di indirizzi assegnato a questi due campi (che ammonta a un totale di -58~bit), definendo lo spazio da assegnare al \textit{Provider Id} e +56~bit), definendo lo spazio da assegnare al \textit{Provider Id} e al \textit{Subscriber Id}, ad essi spetterà inoltre anche l'allocazione dei numeri di \textit{Provider Id} ai singoli fornitori, ai quali sarà delegata l'autorità di allocare i \textit{Subscriber Id} al loro interno. @@ -693,7 +679,7 @@ degli indirizzi, allocando dei blocchi per i quali delegare l'autorit registri nazionali, quest'ultimi poi avranno il compito di gestire la attribuzione degli indirizzi per i fornitori di servizi nell'ambito del/i paese coperto dal registro nazionale con le modalità viste in precedenza. -Una tale ripartizione andrà effettuata all'interno dei soliti 58~bit come +Una tale ripartizione andrà effettuata all'interno dei soliti 56~bit come mostrato in \ntab. \begin{table}[htb] @@ -808,7 +794,7 @@ Un primo tipo sono gli indirizzi \textit{IPv4 mappati su IPv6} (mostrati in applicazioni IPv6 di comunicare con host capaci solo di IPv4; questi sono ad esempio gli indirizzi generati da un DNS quando l'host richiesto supporta solo IPv4; l'uso di un tale indirizzo in un socket IPv6 comporta la generazione di -un pacchetto IPv4 (ovviamente occorre che sia IPv4 che IPv6 siano supportate +un pacchetto IPv4 (ovviamente occorre che sia IPv4 che IPv6 siano supportati sull'host di origine). \begin{table}[!htb] @@ -831,10 +817,10 @@ sull'host di origine). \end{table} Un secondo tipo di indirizzi di compatibilità sono gli \textit{IPv4 - compatibili IPv6} (vedi \ntab) usati nella transizione da IPv4 a IPv6, -quando un host che supporta sia IPv6 che IPv4 non ha un router IPv6 deve usare -nel DNS un indirizzo di questo tipo, ogni pacchetto IPv6 inviato a un tale -indirizzo verrà automaticamente incapsulato in IPv4. + compatibili IPv6} (vedi \tabref{tab:IP_ipv6_comp}) usati nella transizione +da IPv4 a IPv6: quando un nodo che supporta sia IPv6 che IPv4 non ha un router +IPv6 deve usare nel DNS un indirizzo di questo tipo, ogni pacchetto IPv6 +inviato a un tale indirizzo verrà automaticamente incapsulato in IPv4. \begin{table}[htb] \centering @@ -904,15 +890,16 @@ Il prefisso di formato per tutti gli indirizzi \textit{multicast} \ntab. \end{itemize} -Infine l'ultimo campo identifica il gruppo di multicast, sia permanente che -transitorio, all'interno del raggio di validità del medesimo. + \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{c l c l} - \multicolumn{4}{c}{\bf Gruppi di multicast} \\ - \toprule + \begin{tabular}[c]{|c|l|c|l|} + \hline + \multicolumn{4}{|c|}{\bf Gruppi di multicast} \\ + \hline + \hline 0 & riservato & 8 & organizzazione locale \\ 1 & nodo locale & 9 & non assegnato \\ 2 & collegamento locale & A & non assegnato \\ @@ -921,19 +908,54 @@ transitorio, all'interno del raggio di validit 5 & sito locale & D & non assegnato \\ 6 & non assegnato & E & globale \\ 7 & non assegnato & F & riservato \\ - \bottomrule + \hline \end{tabular} \caption{Possibili valori del campo \textsl{scop} di un indirizzo multicast.} \label{tab:IP_ipv6_multiscope} \end{table} +Infine l'ultimo campo identifica il gruppo di multicast, sia permanente che +transitorio, all'interno del raggio di validità del medesimo. Alcuni +indirizzi multicast, riportati in \tabref{tab:multiadd} sono già riservati +per il funzionamento della rete. + +\begin{table}[!htb] + \centering + \footnotesize + \begin{tabular}[c]{l l r} + \hline + \textbf{Uso}& \textbf{Indirizzi riservati} & \textbf{Definizione}\\ + \hline + \hline + all-nodes & \texttt{FFxx:0:0:0:0:0:0:1} & RFC 1970\\ + all-routers & \texttt{FFxx:0:0:0:0:0:0:2} & RFC 1970\\ + all-rip-routers & \texttt{FFxx:0:0:0:0:0:0:9} & RFC 2080\\ + all-cbt-routers & \texttt{FFxx:0:0:0:0:0:0:10} &\\ + reserved & \texttt{FFxx:0:0:0:0:0:1:0} & IANA \\ + link-name & \texttt{FFxx:0:0:0:0:0:1:1} & \\ + all-dhcp-agents & \texttt{FFxx:0:0:0:0:0:1:2} & \\ + all-dhcp-servers & \texttt{FFxx:0:0:0:0:0:1:3} & \\ + all-dhcp-relays & \texttt{FFxx:0:0:0:0:0:1:4} & \\ + solicited-nodes & \texttt{FFxx:0:0:0:0:1:0:0} & RFC 1970\\ + \hline + \end{tabular} +\caption{Gruppi multicast predefiniti.} +\label{tab:multiadd} +\end{table} + +L'utilizzo del campo di \textit{scope} e di questi indirizzi predefiniti serve +a recuperare le funzionalità del broadcasting (ad esempio inviando un +pacchetto all'indirizzo \texttt{FF02:0:0:0:0:0:0:1} si raggiungono tutti i +nodi locali). + + \subsection{Indirizzi \textit{anycast}} \label{sec:IP_anycast} Gli indirizzi \textit{anycast} sono indirizzi che vengono assegnati ad un -gruppo di interfacce per quali un pacchetto indirizzato a questo tipo di -indirizzo viene inviato al componente del gruppo più ``vicino'' secondo la -distanza di instradamento calcolata dai router. +gruppo di interfacce: un pacchetto indirizzato a questo tipo di indirizzo +viene inviato al componente del gruppo più ``vicino'' secondo la distanza di +instradamento calcolata dai router. Questi indirizzi sono allocati nello stesso spazio degli indirizzi unicast, usando uno dei formati disponibili, e per questo, sono da essi assolutamente @@ -943,9 +965,9 @@ configurato per tener conto del fatto. Gli indirizzi anycast consentono a un nodo sorgente di inviare pacchetti a una destinazione su un gruppo di possibili interfacce selezionate. La sorgente non -deve curarsi di come scegliere l'interfaccia più vicina, compito che tocca -al sistema di instradamento, (in sostanza la sorgente non ha nessun controllo -sulla selezione). +deve curarsi di come scegliere l'interfaccia più vicina, compito che tocca al +sistema di instradamento (in sostanza la sorgente non ha nessun controllo +sulla selezione). Gli indirizzi anycast, quando vengono usati come parte di una sequenza di instradamento, consentono ad esempio ad un nodo di scegliere quale fornitore @@ -953,8 +975,9 @@ vuole usare (configurando gli indirizzi anycast per identificare i router di uno stesso provider). Questi indirizzi pertanto possono essere usati come indirizzi intermedi in una -testata di instradamento o per identificare insiemi di router connessi a una -particolare sottorete, o che forniscono l'accesso a un certo sotto dominio. +intestazione di instradamento o per identificare insiemi di router connessi a +una particolare sottorete, o che forniscono l'accesso a un certo sotto +dominio. L'idea alla base degli indirizzi anycast è perciò quella di utilizzarli per poter raggiungere il fornitore di servizio più vicino; ma restano aperte tutta @@ -970,14 +993,15 @@ La materia \label{sec:IP_ipv6_extens} Come già detto in precedenza IPv6 ha completamente cambiato il trattamento -delle opzioni; queste ultime infatti sono state tolte dalla testata del -pacchetto, e poste in apposite \textsl{testate di estensione} (o -\textit{extension header}) poste fra la testata di IPv6 e la testata del -protocollo di trasporto. +delle opzioni; queste ultime infatti sono state tolte dall'intestazione del +pacchetto, e poste in apposite \textsl{intestazioni di estensione} (o +\textit{extension header}) poste fra l'intestazione di IPv6 e l'intestazione +del protocollo di trasporto. Per aumentare la velocità di processo, sia dei dati del livello seguente che di ulteriori opzioni, ciascuna estensione deve avere una lunghezza multipla di -8 byte per mantenere l'allineamento a 64~bit di tutti le testate seguenti. +8 byte per mantenere l'allineamento a 64~bit di tutti le intestazioni +seguenti. Dato che la maggior parte di queste estensioni non sono esaminate dai router durante l'instradamento e la trasmissione dei pacchetti, ma solo all'arrivo @@ -992,10 +1016,11 @@ sicurezza, improponibili con IPv4. Le estensioni definite al momento sono le seguenti: \begin{itemize} -\item \textbf{Hop by hop} devono seguire immediatamente la testata principale; - indicano le opzioni che devono venire processate ad ogni passaggio da un - router, fra di esse è da menzionare la \textit{jumbo payload} che segnala - la presenza di un pacchetto di dati di dimensione superiore a 64Kb. +\item \textbf{Hop by hop} devono seguire immediatamente l'intestazione + principale; indicano le opzioni che devono venire processate ad ogni + passaggio da un router, fra di esse è da menzionare la \textit{jumbo + payload} che segnala la presenza di un pacchetto di dati di dimensione + superiore a 65535 byte. \item \textbf{Destination options} opzioni che devono venire esaminate al nodo di ricevimento, nessuna di esse è tuttora definita. \item \textbf{Routing} definisce una \textit{source route} (come la analoga @@ -1011,8 +1036,8 @@ Le estensioni definite al momento sono le seguenti: \end{itemize} La presenza di opzioni è rilevata dal valore del campo \textit{next header} -che indica qual'è la testata successiva a quella di IPv6; in assenza di -opzioni questa sarà la testata di un protocollo di trasporto del livello +che indica qual'è l'intestazione successiva a quella di IPv6; in assenza di +opzioni questa sarà l'intestazione di un protocollo di trasporto del livello superiore, per cui il campo assumerà lo stesso valore del campo \textit{protocol} di IPv4, altrimenti assumerà il valore dell'opzione presente; i valori possibili sono riportati in \ntab. @@ -1020,7 +1045,8 @@ presente; i valori possibili sono riportati in \ntab. \begin{table}[htb] \begin{center} \footnotesize - \begin{tabular}{c l l} + \begin{tabular}{|c|l|l|} + \hline \textbf{Valore} & \textbf{Keyword} & \textbf{Tipo di protocollo} \\ \hline \hline @@ -1036,14 +1062,15 @@ presente; i valori possibili sono riportati in \ntab. 43 & RH & Routing Header (IPv6) \\ 44 & FH & Fragment Header (IPv6) \\ 45 & IDRP & Inter Domain Routing \\ - 51 & AH & Autentication Header (IPv6) \\ + 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 testate di estensione} + \caption{Tipi di protocolli e intestazioni di estensione} \label{tab:IP_ipv6_nexthead} \end{center} \end{table} @@ -1113,18 +1140,18 @@ valori di priorit \begin{table}[htb] \centering \footnotesize - \begin{tabular} {c l} - Valore & tipo di traffico \\ - \toprule + \begin{tabular}{|c|l|} + \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 \\ - 6 & traffico interattivo (telnet, X)\\ - 7 & traffico di controllo (routing, SNMP) \\ - \bottomrule + \hline \end{tabular} \caption{Formato di un indirizzo \textit{site-local}.} \label{tab:priority} @@ -1139,23 +1166,23 @@ pi \label{sec:security} La attuale implementazione di Internet presenta numerosi problemi di -sicurezza, in particolare i dati presenti nelle testate dei vari protocolli -sono assunti essere corretti, il che da adito alla possibilità di varie -tipologie di attacco forgiando pacchetti false, inoltre tutti questi dati -passano in chiaro sulla rete e sono esposti all'osservazione di chiunque si -trovi in mezzo. +sicurezza, in particolare i dati presenti nelle intestazioni dei vari +protocolli sono assunti essere corretti, il che da adito alla possibilità di +varie tipologie di attacco forgiando pacchetti false, inoltre tutti questi +dati passano in chiaro sulla rete e sono esposti all'osservazione di chiunque +si trovi in mezzo. Con IPv4 non è possibile realizzare un meccanismo di autenticazione e riservatezza a un livello inferiore al primo (quello di applicazione), con -IPv6 è stato progettata la possibilità di intervenire al livello del -collegamento (il terzo) prevedendo due apposite estensioni che possono essere -usate per fornire livelli di sicurezza a seconda degli utenti. La codifica -generale di questa architettura è riportata nell'RFC 2401. +IPv6 è stato progettata la possibilità di intervenire al livello di rete (il +terzo) prevedendo due apposite estensioni che possono essere usate per fornire +livelli di sicurezza a seconda degli utenti. La codifica generale di questa +architettura è riportata nell'RFC 2401. Il meccanismo in sostanza si basa su due estensioni: \begin{itemize} -\item una testata di sicurezza (\textit{autentication header}) che garantisce - al destinatario l'autenticità del pacchetto +\item una intestazione di sicurezza (\textit{authentication header}) che + garantisce al destinatario l'autenticità del pacchetto \item un carico di sicurezza (\textit{Encrypted Security Payload}) che assicura che solo il legittimo ricevente può leggere il pacchetto. \end{itemize} @@ -1171,23 +1198,25 @@ di ogni comunicazione ed multicast dovrà essere lo stesso per tutte le stazioni del gruppo. \subsection{Autenticazione} -Il primo meccanismo di sicurezza è quello della testata di autenticazione -(\textit{autentication header}) che fornisce l'autenticazione e il controllo +\label{sec:auth} + +Il primo meccanismo di sicurezza è quello dell'intestazione di autenticazione +(\textit{authentication header}) che fornisce l'autenticazione e il controllo di integrità (ma senza riservatezza) dei pacchetti IP. -La testata di autenticazione ha il formato descritto in -Tab.~\ref{tab:autent_head} il campo \textit{Next Header} indica la testata -successiva, con gli stessi valori del campo omonimo nella testata principale -di IPv6, il campo \textit{Lengh} indica la lunghezza della testata di -autenticazione in numero di parole a 32 bit, il campo riservato deve essere -posto a zero, seguono poi l'indice di sicurezza, stabilito nella associazione -di sicurezza, e un numero di sequenza che la stazione sorgente deve -incrementare di pacchetto in pacchetto. +L'intestazione di autenticazione ha il formato descritto in +\tabref{tab:autent_head}: il campo \textit{Next Header} indica l'intestazione +successiva, con gli stessi valori del campo omonimo nell'intestazione +principale di IPv6, il campo \textit{Length} indica la lunghezza +dell'intestazione di autenticazione in numero di parole a 32 bit, il campo +riservato deve essere posto a zero, seguono poi l'indice di sicurezza, +stabilito nella associazione di sicurezza, e un numero di sequenza che la +stazione sorgente deve incrementare di pacchetto in pacchetto. -Completano la testata i dati di autenticazione che contengono un valore di +Completano l'intestazione i dati di autenticazione che contengono un valore di controllo di integrità (ICV, \textit{Integrity Check Value}), che deve essere di dimensione pari a un multiplo intero di 32 bit e può contenere un padding -per allineare la testata a 64 bit. Tutti gli algoritmi di autenticazione +per allineare l'intestazione a 64 bit. Tutti gli algoritmi di autenticazione devono provvedere questa capacità. \renewcommand\arraystretch{1.2} @@ -1198,7 +1227,7 @@ devono provvedere questa capacit @{\vrule}p{48mm}@{\vrule} } \multicolumn{3}{@{}c@{}}{0\hfill 15 16\hfill 31}\\ \hline - \centering Next Header&\centering Lenght& + \centering Next Header&\centering Length& \centering Reserved \tabularnewline \hline \multicolumn{3}{@{\vrule}c@{\vrule}} @@ -1208,26 +1237,25 @@ devono provvedere questa capacit {\centering Sequence Number}\\ \hline \multicolumn{3}{@{\vrule}c@{\vrule}}{} \\ - \multicolumn{3}{@{\vrule}c@{\vrule}}{Autentication Data} \\ + \multicolumn{3}{@{\vrule}c@{\vrule}}{Authentication Data} \\ \multicolumn{3}{@{\vrule}c@{\vrule}} {\centering ... } \\ \multicolumn{3}{@{\vrule}c@{\vrule}}{} \\ \hline \end{tabular} - \caption{Formato della testata dell'estensione di autenticazione} + \caption{Formato dell'intestazione dell'estensione di autenticazione} \label{tab:autent_estens} \end{center} \end{table} \renewcommand\arraystretch{1} %default - -La testata di autenticazione può essere impiegata in due modi diverse +L'intestazione di autenticazione può essere impiegata in due modi diverse modalità: modalità trasporto e modalità tunnel. La modalità trasporto è utilizzabile solo per comunicazioni fra stazioni -singole che supportino l'autenticazione. In questo caso la testata di -autenticazione è inserita dopo tutte le altre testate di estensione +singole che supportino l'autenticazione. In questo caso l'intestazione di +autenticazione è inserita dopo tutte le altre intestazioni di estensione eccezion fatta per la \textit{Destination Option} che può comparire sia prima che dopo. @@ -1244,7 +1272,7 @@ prima che dopo. & & & & & \\ \hline \end{tabular*} - \caption{Formato della testata dell'estensione di autenticazione} + \caption{Formato dell'intestazione dell'estensione di autenticazione} \label{tab:autent_head} \end{center} \end{table} @@ -1260,25 +1288,22 @@ La modalit singole che con un gateway di sicurezza; in questa modalità -La testata di autenticazione è una testata di estensione inserita dopo la -testata principale e prima del carico dei dati. La sua presenza non ha -perciò alcuna influenza sui livelli superiori dei protocolli di trasmissione -come il TCP. - +L'intestazione di autenticazione è una intestazione di estensione inserita +dopo l'intestazione principale e prima del carico dei dati. La sua presenza +non ha perciò alcuna influenza sui livelli superiori dei protocolli di +trasmissione come il TCP. - - -La procedura di autenticazione cerca di garantire l'autenticità del -pacchetto nella massima estensione possibile, ma dato che alcuni campi della -testata di IP possono variare in maniera impredicibile alla sorgente, il loro -valore non può essere protetto dall'autenticazione. +La procedura di autenticazione cerca di garantire l'autenticità del pacchetto +nella massima estensione possibile, ma dato che alcuni campi dell'intestazione +di IP possono variare in maniera impredicibile alla sorgente, il loro valore +non può essere protetto dall'autenticazione. Il calcolo dei dati di autenticazione viene effettuato alla sorgente su una -versione speciale del pacchetto in cui il numero di salti nella testata -principale è settato a zero, così come le opzioni che possono essere -modificate nella trasmissione, e la testata di routing (se usata) è posta ai -valori che deve avere all'arrivo. +versione speciale del pacchetto in cui il numero di salti nell'intestazione +principale è impostato a zero, così come le opzioni che possono essere +modificate nella trasmissione, e l'intestazione di routing (se usata) è posta +ai valori che deve avere all'arrivo. L'estensione è indipendente dall'algoritmo particolare, e il protocollo è ancora in fase di definizione; attualmente è stato suggerito l'uso di una @@ -1292,8 +1317,8 @@ una chiave che viene inserita all'inizio e alla fine degli altri campi. Per garantire una trasmissione riservata dei dati, è stata previsto la possibilità di trasmettere pacchetti con i dati criptati: il cosiddetto ESP, \textit{Encripted Security Payload}. Questo viene realizzato usando con una -apposita opzione che deve essere sempre l'ultima delle testate di estensione; -ad essa segue il carico del pacchetto che viene criptato. +apposita opzione che deve essere sempre l'ultima delle intestazioni di +estensione; ad essa segue il carico del pacchetto che viene criptato. Un pacchetto crittografato pertanto viene ad avere una struttura del tipo di quella mostrata in Tab~.\ref{tab:criptopack}, tutti i campi sono in chiaro @@ -1308,12 +1333,12 @@ fino al vettore di inizializzazione, il resto \multicolumn{4}{@{}c@{}}{0\hfill 15 16\hfill 31}\\ \hline \multicolumn{4}{@{\vrule}c@{\vrule}}{}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{Testata Principale}\\ + \multicolumn{4}{@{\vrule}c@{\vrule}}{Intestazione Principale}\\ \multicolumn{4}{@{\vrule}c@{\vrule}}{...}\\ \multicolumn{4}{@{\vrule}c@{\vrule}}{}\\ \hline \multicolumn{4}{@{\vrule}c@{\vrule}}{}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{Testate di estensione}\\ + \multicolumn{4}{@{\vrule}c@{\vrule}}{Intestazioni di estensione}\\ \multicolumn{4}{@{\vrule}c@{\vrule}}{...}\\ \multicolumn{4}{@{\vrule}c@{\vrule}}{}\\ \hline @@ -1347,6 +1372,75 @@ fino al vettore di inizializzazione, il resto \section{Autoconfigurazione} \label{sec:IP_ipv6_autoconf} +Una delle caratteristiche salienti di IPv6 è quella dell'autoconfigurazione, +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 +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 +link-local \texttt{FE80::xxxx:xxxx:xxxx} dove \texttt{xxxx:xxxx:xxxx} è +l'indirizzo hardware della scheda di rete. + +Nel caso in cui non sia presente una scheda che supporta lo standard IEEE802 +allora il nodo assumerà ugualmente un indirizzo link-local della forma +precedente, ma il valore di \texttt{xxxx:xxxx:xxxx} sarà generato +casualmente; in questo caso la probabilità di collisione è di 1 su 300 +milioni. In ogni caso per prevenire questo rischio il nodo invierà un +messaggio ICMP \textit{Solicitation} all'indirizzo scelto attendendo un certo +lasso di tempo; in caso di risposta l'indirizzo è duplicato e il +procedimento dovrà essere ripetuto con un nuovo indirizzo (o interrotto +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 +autoconfigurazione, descritte nelle seguenti sezioni. In ogni caso +l'indirizzo link-local resta valido. + +\subsection{Autoconfigurazione stateless} +\label{sec:stateless} + +Questa è la forma più semplice di autoconfigurazione, 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. + +La procedura di configurazione è la seguente: all'avvio tutti i nodi IPv6 +iniziano si devono aggregare al gruppo multicast \textit{all-nodes} +programmando la propria interfaccia per ricevere i messaggi dall'indirizzo +multicast \texttt{FF02::1} (vedi \secref{sec:IP_ipv6_multicast}); a questo +punto devono inviare un messaggio ICMP \textit{Router solicitation} a tutti i +router locali usando l'indirizzo multicast \texttt{FF02::2} usando come +sorgente il proprio indirizzo link-local. + +Il router risponderà con un messaggio ICMP \textit{Router Advertisement} che +fornisce il prefisso e la validità nel tempo del medesimo, questo tipo di +messaggio può essere trasmesso anche a intervalli regolari. Il messaggio +contiene anche l'informazione che autorizza un nodo a autocostruire +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. + +\subsection{Autoconfigurazione stateful} +\label{sec:stateful} + +Benché estremamente semplice l'autoconfigurazione 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 +della singola stazione; il secondo problema è di sicurezza, dato che basta +introdurre in una rete una stazione autoconfigurante per ottenere un accesso +legale. + +Per questi motivi è previsto anche un protocollo stateful basato su un +server che offra una versione IPv6 del DHCP; un apposito gruppo di multicast +\texttt{FF02::1:0} è stato riservato per questi server; in questo caso il +nodo interrogherà il server su questo indirizzo di multicast con l'indirizzo +link-local e riceverà un indirizzo unicast globale. + + %%% Local Variables: %%% mode: latex