Ultime modifiche
[gapil.git] / netlayer.tex
1 %% ipprot.tex
2 %%
3 %% Copyright (C) 2000-2002 Simone Piccardi.  Permission is granted to
4 %% copy, distribute and/or modify this document under the terms of the GNU Free
5 %% Documentation License, Version 1.1 or any later version published by the
6 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
7 %% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
8 %% license is included in the section entitled "GNU Free Documentation
9 %% License".
10 %%
11
12
13
14 \chapter{Il livello di rete}
15 \label{cha:network_layer}
16
17 In questa appendice prenderemo in esame i vari protocolli disponibili a
18 livello di rete.\footnote{per la spiegazione della suddivisione in livelli dei
19   protocolli di rete, si faccia riferimento a quanto illustrato in
20   \secref{sec:net_protocols}.} Per ciascuno di essi forniremo una descrizione
21 generica delle principlai caratteristiche, del formato di dati usato e quanto
22 possa essere necessario per capirne meglio il funzionamento dal punto di vista
23 della programmazione.
24
25 Data la loro prevelenza il capitolo sarà sostanzialmente incentrato sui due
26 protocolli principali esistenti su questo livello: l'\textit{Internet
27   Protocol} IP (che più propriamente si dovrebbe chiamare IPv4) ed la sua
28 nuova versione denominata IPv6.
29
30
31 \section{Il protocollo IP}
32 \label{sec:ip_protocol}
33
34 L'attuale \textit{Internet Protocol} (IPv4) viene standardizzato nel 1981
35 dall'\href{http://www.ietf.org/rfc/rfc0719.txt}{RFC~719}; esso nasce per
36 disaccoppiare le applicazioni della struttura hardware delle reti di
37 trasmissione, e creare una interfaccia di trasmissione dei dati indipendente
38 dal sottostante substrato di rete, che può essere realizzato con le tecnologie
39 più disparate (Ethernet, Token Ring, FDDI, etc.).
40
41
42 \subsection{Introduzione}
43 \label{sec:IP_intro}
44
45 Il compito di IP è pertanto quello di trasmettere i pacchetti da un computer
46 all'altro della rete; le caratteristiche essenziali con cui questo viene
47 realizzato in IPv4 sono due:
48
49 \begin{itemize}
50 \item \textit{Universal addressing} la comunicazione avviene fra due host
51   identificati univocamente con un indirizzo a 32 bit che può appartenere ad
52   una sola interfaccia di rete.
53 \item \textit{Best effort} viene assicurato il massimo impegno nella
54   trasmissione, ma non c'è nessuna garanzia per i livelli superiori né
55   sulla percentuale di successo né sul tempo di consegna dei pacchetti di
56   dati.
57 \end{itemize}
58
59 Per effettuare la comunicazione e l'instradamento dei pacchetti fra le varie
60 reti di cui è composta Internet IPv4 organizza gli indirizzi in una
61 gerarchia a due livelli, in cui una parte dei 32 bit dell'indirizzo indica il
62 numero di rete, e un'altra l'host al suo interno.  Il numero di rete serve
63 ai router per stabilire a quale rete il pacchetto deve essere inviato, il
64 numero di host indica la macchina di destinazione finale all'interno di detta
65 rete.
66
67 Per garantire l'unicità dell'indirizzo Internet esiste un'autorità
68 centrale (la IANA, \textit{Internet Assigned Number Authority}) che assegna i
69 numeri di rete alle organizzazioni che ne fanno richiesta; è poi compito di
70 quest'ultime assegnare i numeri dei singoli host.  
71
72 Per venire incontro alle diverse esigenze gli indirizzi di rete sono stati
73 originariamente organizzati in \textit{classi}, (rappresentate in
74 \tabref{tab:IP_ipv4class}), per consentire dispiegamenti di reti di dimensioni
75 diverse.
76
77
78 \begin{table}[htb]
79   \centering
80   \footnotesize
81   \begin{tabular} {c@{\hspace{1mm}\vrule}
82       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
83       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
84       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
85       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
86       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
87       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
88       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
89       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}}
90     \omit&\omit& \multicolumn{7}{c}{7 bit}&\multicolumn{24}{c}{24 bit} \\
91     \cline{2-33}
92     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
93     classe A &\centering 0&
94     \multicolumn{7}{@{}c@{\vrule}}{\parbox[c]{21mm}{\centering net Id}} &
95     \multicolumn{24}{@{}c@{\vrule}}{\parbox[c]{72mm}{\centering host Id}} \\
96     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
97     \cline{2-33}
98     \multicolumn{33}{c}{ } \\
99     \omit&\omit&\omit& 
100     \multicolumn{14}{c}{14 bit}&\multicolumn{16}{c}{16 bit} \\
101     \cline{2-33}
102     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
103     classe B&\centering 1&\centering 0& 
104     \multicolumn{14}{@{}c@{\vrule}}{\parbox{42mm}{\centering net Id}} &
105     \multicolumn{16}{@{}c@{\vrule}}{\parbox{48mm}{\centering host Id}} \\
106     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
107     \cline{2-33}
108    
109     \multicolumn{33}{c}{ } \\
110     \omit&\omit&\omit& 
111     \multicolumn{21}{c}{21 bit}&\multicolumn{8}{c}{8 bit} \\
112     \cline{2-33}
113     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
114     classe C&\centering 1&\centering 1&\centering 0&
115     \multicolumn{21}{@{}c@{\vrule}}{\parbox{63mm}{\centering net Id}} &
116     \multicolumn{8}{@{}c@{\vrule}}{\parbox{24mm}{\centering host Id}} \\
117     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
118     \cline{2-33}
119
120
121     \multicolumn{33}{c}{ } \\
122     \omit&\omit&\omit&\omit& 
123     \multicolumn{28}{c}{28 bit} \\
124     \cline{2-33}
125     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
126     classe D&\centering 1&\centering 1&\centering 1&\centering 0&
127     \multicolumn{28}{@{}c@{\vrule}}{\parbox{63mm}{\centering 
128         multicast group Id}} \\
129     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
130     \cline{2-33}
131
132     \multicolumn{33}{c}{ } \\
133     \omit&\omit&\omit&\omit&\omit&
134     \multicolumn{27}{c}{27 bit} \\
135     \cline{2-33}
136     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
137     classe E&\centering 1&\centering 1&\centering 1&\centering 1&\centering 0&
138     \multicolumn{27}{@{}c@{\vrule}}{\parbox{59mm}{\centering 
139         reserved for future use}} \\
140     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
141     \cline{2-33}
142
143 \end{tabular}
144 \caption{Le classi di indirizzi secondo IPv4.}
145 \label{tab:IP_ipv4class}
146 \end{table}
147
148 Le classi usate per il dispiegamento delle reti sono le prime tre; la classe D
149 è destinata al (non molto usato) \textit{multicast} mentre la classe E è
150 riservata per usi sperimentali e non viene impiegata.
151
152 Come si può notare però la suddivisione riportata in \tabref{tab:IP_ipv4class}
153 è largamente inefficiente in quanto se ad un utente necessita anche solo un
154 indirizzo in più dei 256 disponibili con una classe A occorre passare a una
155 classe B, con un conseguente spreco di numeri.
156
157 Inoltre, in particolare per le reti di classe C, la presenza di tanti
158 indirizzi di rete diversi comporta una crescita enorme delle tabelle di
159 instradamento che ciascun router dovrebbe tenere in memoria per sapere dove
160 inviare il pacchetto, con conseguente crescita dei tempi di processo da parte
161 di questi ultimi ed inefficienza nel trasporto.
162
163 \begin{table}[htb]
164   \centering
165   \footnotesize
166   \begin{tabular} {c@{\hspace{1mm}\vrule}
167       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
168       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
169       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
170       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
171       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
172       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
173       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}
174       p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}}
175     \omit&
176     \multicolumn{12}{c}{$n$ bit}&\multicolumn{20}{c}{$32-n$ bit} \\
177     \cline{2-33}
178     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
179     CIDR &
180     \multicolumn{12}{@{}c@{\vrule}}{\parbox[c]{36mm}{\centering net Id}} &
181     \multicolumn{20}{@{}c@{\vrule}}{\parbox[c]{60mm}{\centering host Id}} \\
182     \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\
183     \cline{2-33}
184 \end{tabular}
185 \caption{Uno esempio di indirizzamento CIDR.}
186 \label{tab:IP_ipv4cidr}
187 \end{table}
188
189 Per questo nel 1992 è stato introdotto un indirizzamento senza classi (il
190 CIDR, \textit{Classless Inter-Domain Routing}) in cui il limite fra i bit
191 destinati a indicare il numero di rete e quello destinati a indicare l'host
192 finale può essere piazzato in qualunque punto (vedi \tabref{tab:IP_ipv4cidr}),
193 permettendo di accorpare più classi A su un'unica rete o suddividere una
194 classe B e diminuendo al contempo il numero di indirizzi di rete da inserire
195 nelle tabelle di instradamento dei router.
196
197
198
199
200 \section{Il protocollo IPv6}
201 \label{sec:ipv6_protocol}
202
203 Negli anni '90 con la crescita del numero di macchine connesse su Internet si
204 arrivò a temere l'esaurimento dello spazio degli indirizzi disponibili, specie
205 in vista di una prospettiva (per ora rivelatasi prematura) in cui ogni
206 apparecchio elettronico sarebbe stato inserito all'interno della rete. 
207
208 Per questo motivo si iniziò a progettare una nuova versione del protocollo 
209
210 L'attuale Internet Protocol (IPv4) viene standardizzato nel 1981
211 dall'\href{http://www.ietf.org/rfc/rfc0719.txt}{RFC~719}; esso nasce per
212 disaccoppiare le applicazioni della struttura hardware delle reti di
213 trasmissione, e creare una interfaccia di trasmissione dei dati indipendente
214 dal sottostante substrato di rete, che può essere realizzato con le tecnologie
215 più disparate (Ethernet, Token Ring, FDDI, etc.).
216
217
218 \subsection{I motivi della transizione}
219 \label{sec:IP_whyipv6}
220
221 Negli ultimi anni la crescita vertiginosa del numero di macchine connesse a
222 internet ha iniziato a far emergere i vari limiti di IPv4; in particolare si
223 è iniziata a delineare la possibilità di arrivare a una carenza di
224 indirizzi disponibili.
225
226 In realtà il problema non è propriamente legato al numero di indirizzi
227 disponibili; infatti con 32 bit si hanno $2^{32}$, cioè circa 4 miliardi,
228 numeri diversi possibili, che sono molti di più dei computer attualmente
229 esistenti.
230
231 Il punto è che la suddivisione di questi numeri nei due livelli rete/host e
232 l'utilizzo delle classi di indirizzamento mostrate in precedenza, ha
233 comportato che, nella sua evoluzione storica, il dispiegamento delle reti e
234 l'allocazione degli indirizzi siano stati inefficienti; neanche l'uso del CIDR
235 ha permesso di eliminare le inefficienze che si erano formate, dato che il
236 ridispiegamento degli indirizzi comporta cambiamenti complessi a tutti i
237 livelli e la riassegnazione di tutti gli indirizzi dei computer di ogni
238 sottorete.
239
240 Diventava perciò necessario progettare un nuovo protocollo che permettesse
241 di risolvere questi problemi, e garantisse flessibilità sufficiente per
242 poter continuare a funzionare a lungo termine; in particolare necessitava un
243 nuovo schema di indirizzamento che potesse rispondere alle seguenti
244 necessità:
245
246 \begin{itemize}
247 \item un maggior numero di numeri disponibili che consentisse di non restare
248   più a corto di indirizzi
249 \item un'organizzazione gerarchica più flessibile dell'attuale 
250 \item uno schema di assegnazione degli indirizzi in grado di minimizzare le
251   dimensioni delle tabelle di instradamento
252 \item uno spazio di indirizzi che consentisse un passaggio automatico dalle
253   reti locali a internet
254 \end{itemize}
255
256
257 \subsection{Principali caratteristiche di IPv6}
258 \label{sec:IP_ipv6over}
259
260 Per rispondere alle esigenze descritte in \secref{sec:IP_whyipv6} IPv6 nasce
261 come evoluzione di IPv4, mantendone inalterate le funzioni che si sono
262 dimostrate valide, eliminando quelle inutili e aggiungendone poche altre
263 ponendo al contempo una grande attenzione a mantenere il protocollo il più
264 snello e veloce possibile.
265
266 I cambiamenti apportati sono comunque notevoli e possono essere riassunti a
267 grandi linee nei seguenti punti:
268 \begin{itemize}
269 \item l'espansione delle capacità di indirizzamento e instradamento, per
270   supportare una gerarchia con più livelli di indirizzamento, un numero di
271   nodi indirizzabili molto maggiore e una autoconfigurazione degli indirizzi
272 \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che
273   si aggiungono agli usuali \textit{unycast} e \textit{multicast}
274 \item la semplificazione del formato dell'intestazione, eliminando o rendendo
275   opzionali alcuni dei campi di IPv4, per eliminare la necessità di
276   riprocessamento della stessa da parte dei router e contenere l'aumento di
277   dimensione dovuto ai nuovi indirizzi
278 \item un supporto per le opzioni migliorato, per garantire una trasmissione
279   più efficiente del traffico normale, limiti meno stringenti sulle
280   dimensioni delle opzioni, e la flessibilità necessaria per introdurne di
281   nuove in futuro
282 \item il supporto per delle capacità di qualità di servizio (QoS) che
283   permetta di identificare gruppi di dati per i quali si può provvedere un
284   trattamento speciale (in vista dell'uso di internet per applicazioni
285   multimediali e/o ``real-time'')
286 \end{itemize}
287
288
289 \subsection{L'intestazione di IPv6}
290 \label{sec:IP_ipv6head}
291
292 Per capire le caratteristiche di IPv6 partiamo dall'intestazione usata dal
293 protocollo per gestire la trasmissione dei pacchetti; in
294 \figref{fig:IP_ipv6head} è riportato il formato dell'intestazione di IPv6 da
295 confrontare con quella di IPv4 in \figref{fig:IP_ipv4_head}. La spiegazione del
296 significato dei vari campi delle due intestazioni è riportato rispettivamente
297 in \tabref{tab:IP_ipv6field} e \tabref{tab:IP_ipv4field})
298
299 % \begin{table}[htb]
300 %   \footnotesize
301 %   \begin{center}
302 %     \begin{tabular}{@{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm}
303 %         @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule}p{16mm}
304 %         @{\vrule}p{16mm}@{\vrule}p{16mm}@{\vrule} }
305 %     \multicolumn{8}{@{}c@{}}{0\hfill 15 16\hfill 31}\\
306 %     \hline
307 %     \centering version&\centering priority& 
308 %     \multicolumn{6}{@{}p{96mm}@{\vrule}}{\centering flow label} \\
309 %     \hline
310 %     \multicolumn{4}{@{\vrule}p{64mm}@{\vrule}}{\centering payload length} & 
311 %     \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering next header} & 
312 %     \multicolumn{2}{@{}p{32mm}@{\vrule}}{\centering hop limit}\\
313 %     \hline
314 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\
315 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{
316 %       source} \\
317 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{
318 %       IP address} \\
319 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\
320 %     \hline
321 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\
322 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{
323 %       destination} \\
324 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{
325 %      IP address} \\
326 %     \multicolumn{8}{@{\vrule}c@{\vrule}}{} \\
327 %     \hline
328 %     \end{tabular}
329 %     \caption{L'intestazione o \textit{header} di IPv6}
330 %     \label{tab:IP_ipv6head}
331 %   \end{center}
332 % \end{table}
333
334 \begin{figure}[htb]
335   \centering
336   \includegraphics[width=10cm]{img/ipv6_head}
337   \caption{L'intestazione o \textit{header} di IPv6.}
338   \label{fig:IP_ipv6head}
339 \end{figure}
340
341
342 Come si può notare l'intestazione di IPv6 diventa di dimensione fissa, pari a
343 40 byte, contro una dimensione (minima, in assenza di opzioni) di 20 byte per
344 IPv4; un semplice raddoppio nonostante lo spazio destinato agli indirizzi sia
345 quadruplicato, questo grazie a una notevole semplificazione che ha ridotto il
346 numero dei campi da 12 a 8.
347
348 \begin{table}[htb]
349   \begin{center}
350   \footnotesize
351     \begin{tabular}{|l|c|p{8cm}|}
352       \hline
353       \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\
354       \hline
355       \hline
356       \textit{version}       &  4 bit & 
357       \textsl{versione}, nel caso specifico vale sempre 6\\
358       \textit{priority}      &  4 bit & 
359       \textsl{priorità}, vedi Sez.~\ref{sec:prio} \\
360       \textit{flow label}    & 24 bit & 
361       \textsl{etichetta di flusso}, vedi Sez.~\ref{sec:IP_ipv6_flow}\\
362       \textit{payload length} & 16 bit & 
363       \textsl{lunghezza del carico}, cioè del corpo dei dati che segue 
364       l'intestazione, in byte. \\
365       \textit{next header}   &  8 bit & \textsl{intestazione successiva}, 
366       identifica il tipo di pacchetto che segue l'intestazione di IPv6, usa 
367       gli stessi valori del campo protocollo nell'intestazione di IPv4\\
368       \textit{hop limit}     &  8 bit & \textsl{limite di salti},
369       stesso significato del \textit{time to live} nell'intestazione di IPv4, 
370       è decrementato di uno ogni volta che un nodo ritrasmette il
371       pacchetto, se arriva a zero il pacchetto viene scartato \\
372       \textit{source IP}     & 128 bit & \textsl{indirizzo di origine} \\
373       \textit{destination IP}& 128 bit & \textsl{indirizzo di destinazione}\\
374       \hline
375     \end{tabular}
376     \caption{Legenda per il significato dei campi dell'intestazione di IPv6}
377     \label{tab:IP_ipv6field}
378   \end{center}
379 \end{table}
380
381 Abbiamo già anticipato in \secref{sec:IP_ipv6over} uno dei criteri principali
382 nella progettazione di IPv6 è stato quello di ridurre al minimo il tempo di
383 processamento dei pacchetti da parte dei router, un confronto con
384 l'intestazione di IPv4 (vedi \figref{fig:IP_ipv4_head}) mostra le seguenti
385 differenze:
386
387 \begin{itemize}
388 \item è stato eliminato il campo \textit{header length} in quanto le opzioni
389   sono state tolte dall'intestazione che ha così dimensione fissa; ci possono
390   essere più intestazioni opzionali (\textsl{intestazioni di estensione}, vedi
391   \secref{sec:IP_ipv6_extens}), ciascuna delle quali avrà un suo campo di
392   lunghezza all'interno.
393 \item l'intestazione e gli indirizzi sono allineati a 64 bit, questo rende più
394   veloce il processo da parte di computer con processori a 64 bit.
395 \item i campi per gestire la frammentazione (\textit{identification},
396   \textit{flag} e \textit{fragment offset}) sono stati eliminati; questo
397   perché la  frammentazione è un'eccezione che non deve rallentare il
398   processo dei pacchetti nel caso normale.
399 \item è stato eliminato il campo \textit{checksum} in quanto tutti i
400   protocolli di livello superiore (TCP, UDP e ICMPv6) hanno un campo di
401   checksum che include, oltre alla loro intestazione e ai dati, pure i campi
402   \textit{payload length}, \textit{next header}, e gli indirizzi di origine e
403   di destinazione; una checksum esiste anche per la gran parte protocolli di
404   livello inferiore (anche se quelli che non lo hanno, come SLIP, non possono
405   essere usati con grande affidabilità); con questa scelta si è ridotto di
406   molti tempo di riprocessamento dato che i router non hanno più la
407   necessità di ricalcolare la checksum ad ogni passaggio di un pacchetto per
408   il cambiamento del campo \textit{hop limit}.
409 \item è stato eliminato il campo \textit{type of service}, che praticamente
410   non è mai stato utilizzato; una parte delle funzionalità ad esso delegate
411   sono state reimplementate (vedi il campo \textit{priority} al prossimo
412   punto) con altri metodi.
413 \item è stato introdotto un nuovo campo \textit{flow label}, che viene usato,
414   insieme al campo \textit{priority} (che recupera i bit di precedenza del
415   campo \textit{type of service}) per implementare la gestione di una
416   ``\textsl{qualità di servizio}'' (vedi \secref{sec:IP_ipv6_qos}) che
417   permette di identificare i pacchetti appartenenti a un ``\textsl{flusso}''
418   di dati per i quali si può provvedere un trattamento speciale.
419 \end{itemize}
420
421
422 \begin{figure}[htb]
423   \centering
424   \includegraphics[width=10cm]{img/ipv4_head}
425   \caption{L'intestazione o \textit{header} di IPv4.}
426   \label{fig:IP_ipv4_head}
427 \end{figure}
428
429 \begin{table}[htb]
430   \footnotesize
431   \begin{center}
432     \begin{tabular}{|l|c|p{9cm}|}
433       \hline
434       \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\
435       \hline
436       \hline
437       \textit{version}          &  4  & \textsl{versione}, nel caso 
438       specifico vale sempre 4\\
439       \textit{head length}      &  4  &\textsl{lunghezza dell'intestazione},
440       in multipli di 32 bit\\
441       \textit{type of service}  &  8  & \textsl{tipo di servizio}, 
442       consiste in: 3 bit di precedenza, 
443       correntemente ignorati; un bit non usato a 0;  4 bit che identificano
444       il tipo di servizio richiesto, uno solo dei quali può essere 1\\
445       \textit{total length}     & 16  & \textsl{lunghezza totale}, indica 
446       la dimensione del pacchetto IP in byte\\
447       \textit{identification}   & 16  & \textsl{identificazione}, 
448       assegnato alla creazione, è aumentato di uno all'origine della 
449       trasmissione di ciascun pacchetto, ma resta lo stesso per i 
450       pacchetti frammentati\\
451       \textit{flag}             &  3  & 
452       \textsl{flag} bit di frammentazione, uno indica se un
453       pacchetto è frammentato, un'altro se ci sono ulteriori frammenti, e 
454       un'altro se il pacchetto non può essere frammentato. \\
455       \textit{fragmentation offset} & 13  & \textsl{offset di frammento},
456       indica la posizione del frammento rispetto al pacchetto originale\\
457       \textit{time to live}    & 16 & \textsl{tempo di vita},
458       ha lo stesso significato di
459       \textit{hop limit}, vedi Tab.~\ref{tab:IP_ipv6field}\\
460       \textit{protocol}        &  8  & \textsl{protocollo} 
461       identifica il tipo di pacchetto che segue
462       l'intestazione di IPv4\\
463       \textit{header checksum} & 16  & \textsl{checksum di intestazione}, 
464       somma di controllo per l'intestazione\\
465       \textit{source IP}       & 32  & \textsl{indirizzo di origine}\\
466       \textit{destination IP}  & 32  & \textsl{indirizzo di destinazione}\\
467       \hline
468     \end{tabular}
469     \caption{Legenda per il significato dei campi dell'intestazione di IPv4}
470     \label{tab:IP_ipv4field}
471   \end{center}
472 \end{table}
473
474 Oltre alle differenze precedenti, relative ai singoli campi nell'intestazione,
475 ulteriori caratteristiche che diversificano il comportamento di IPv4 da
476 quello di IPv6 sono le seguenti:
477
478 \begin{itemize}
479 \item il broadcasting non è previsto in IPv6, le applicazioni che lo usano
480   dovono essere reimplementate usando il multicasting (vedi
481   \secref{sec:IP_ipv6_multicast}), che da opzionale diventa obbligatorio.
482 \item è stato introdotto un nuovo tipo di indirizzi, gli \textit{anycast}.
483 \item i router non possono più frammentare i pacchetti lungo il cammino, la
484   frammentazione di pacchetti troppo grandi potrà essere gestita solo ai
485   capi della comunicazione (usando un'apposita estensione vedi
486   \secref{sec:IP_ipv6_extens}).
487 \item IPv6 richiede il supporto per il \textit{path MTU discovery} (cioè il
488   protocollo per la selezione della massima lunghezza del pacchetto); seppure
489   questo sia in teoria opzionale, senza di esso non sarà possibile inviare
490   pacchetti più larghi della dimensione minima (576 byte).
491 \end{itemize}
492
493 \subsection{Gli indirizzi di IPv6}
494 \label{sec:IP_ipv6_addr}
495
496 Come già abbondantemente anticipato la principale novità di IPv6 è
497 costituita dall'ampliamento dello spazio degli indirizzi, che consente di avere
498 indirizzi disponibili in un numero dell'ordine di quello degli atomi che
499 costituiscono la terra. 
500
501 In realtà l'allocazione di questi indirizzi deve tenere conto della
502 necessità di costruire delle gerarchie che consentano un instradamento
503 rapido ed efficiente dei pacchetti, e flessibilità nel dispiegamento delle
504 reti, il che comporta una riduzione drastica dei numeri utilizzabili; uno
505 studio sull'efficienza dei vari sistemi di allocazione usati in altre
506 architetture (come i sistemi telefonici) è comunque giunto alla conclusione
507 che anche nella peggiore delle ipotesi IPv6 dovrebbe essere in grado di
508 fornire più di un migliaio di indirizzi per ogni metro quadro della
509 superficie terrestre.
510
511
512 \subsection{La notazione}
513 \label{sec:IP_ipv6_notation}
514 Con un numero di bit quadruplicato non è più possibile usare la notazione
515 coi numeri decimali di IPv4 per rappresentare un numero IP. Per questo gli
516 indirizzi di IPv6 sono in genere scritti come sequenze di otto numeri
517 esadecimali di 4 cifre (cioè a gruppi di 16 bit) usando i due punti come
518 separatore; cioè qualcosa del tipo
519 \texttt{5f1b:df00:ce3e:e200:0020:0800:2078:e3e3}.
520
521
522 Visto che la notazione resta comunque piuttosto pesante esistono alcune
523 abbreviazioni; si può evitare di scrivere gli zeri iniziali per cui si
524 può scrivere \texttt{1080:0:0:0:8:800:ba98:2078:e3e3}; se poi un intero è
525 zero si può omettere del tutto, così come un insieme di zeri (ma questo
526 solo una volta per non generare ambiguità) per cui il precedente indirizzo
527 si può scrivere anche come \texttt{1080::8:800:ba98:2078:e3e3}.
528
529 Infine per scrivere un indirizzo IPv4 all'interno di un indirizzo IPv6 si
530 può usare la vecchia notazione con i punti, per esempio
531 \texttt{::192.84.145.138}.
532
533 \begin{table}[htb]
534   \centering 
535   \footnotesize
536   \begin{tabular}{|l|l|l|}
537     \hline
538     \centering \textbf{Tipo di indirizzo}
539     & \centering \textbf{Prefisso} & {\centering \textbf{Frazione}} \\
540     \hline
541     \hline
542     riservato & \texttt{0000 0000} & 1/256 \\
543     non assegnato  & \texttt{0000 0001} & 1/256 \\
544     \hline
545     riservato per NSAP & \texttt{0000 001} & 1/128\\
546     riservato per IPX & \texttt{0000 010} & 1/128\\
547     \hline
548     non assegnato  & \texttt{0000 011} & 1/128 \\
549     non assegnato  & \texttt{0000 1} & 1/32 \\
550     non assegnato  & \texttt{0001} & 1/16 \\
551     \hline
552     provider-based & \texttt{001} & 1/8\\
553     \hline
554     non assegnato  & \texttt{010} & 1/8 \\
555     non assegnato  & \texttt{011} & 1/8 \\
556     geografic-based& \texttt{100} & 1/8 \\
557     non assegnato  & \texttt{101} & 1/8 \\
558     non assegnato  & \texttt{110} & 1/8 \\
559     non assegnato  & \texttt{1110} & 1/16 \\
560     non assegnato  & \texttt{1111 0} & 1/32 \\
561     non assegnato  & \texttt{1111 10} & 1/64 \\
562     non assegnato  & \texttt{1111 110} & 1/128 \\
563     non assegnato  & \texttt{1111 1100 0} & 1/512 \\
564     \hline
565     unicast link-local & \texttt{1111 1100 10} & 1/1024 \\
566     unicast site-local & \texttt{1111 1100 11} & 1/1024 \\
567     \hline
568     \hline
569     multicast & \texttt{1111 1111} & 1/256 \\
570     \hline
571   \end{tabular}
572   \caption{Classificazione degli indirizzi IPv6 a seconda dei bit più 
573     significativi}
574   \label{tab:IP_ipv6addr}
575 \end{table}
576
577
578 \subsection{La architettura degli indirizzi di IPv6}
579 \label{sec:IP_ipv6_addr_arch}
580
581 Come per IPv4 gli indirizzi sono identificatori per una singola (indirizzi
582 \textit{unicast}) o per un insieme (indirizzi \textit{multicast} e
583 \textit{anycast}) di interfacce di rete.  
584
585 Gli indirizzi sono sempre assegnati all'interfaccia, non al nodo che la
586 ospita; dato che ogni interfaccia appartiene ad un nodo quest'ultimo può
587 essere identificato attraverso uno qualunque degli indirizzi unicast delle sue
588 interfacce. A una interfaccia possono essere associati anche più indirizzi.
589
590 IPv6 presenta tre tipi diversi di indirizzi: due di questi, gli indirizzi
591 \textit{unicast} e \textit{multicast} hanno le stesse caratteristiche che in
592 IPv4, un terzo tipo, gli indirizzi \textit{anycast} è completamente nuovo.
593 In IPv6 non esistono più gli indirizzi \textit{broadcast}, la funzione di
594 questi ultimi deve essere reimplementata con gli indirizzi \textit{multicast}.
595
596 Gli indirizzi \textit{unicast} identificano una singola interfaccia: i
597 pacchetti mandati ad un tale indirizzo verranno inviati a quella interfaccia,
598 gli indirizzi \textit{anycast} identificano un gruppo di interfacce tale che
599 un pacchetto mandato a uno di questi indirizzi viene inviato alla più vicina
600 (nel senso di distanza di routing) delle interfacce del gruppo, gli indirizzi
601 \textit{multicast} identificano un gruppo di interfacce tale che un pacchetto
602 mandato a uno di questi indirizzi viene inviato a tutte le interfacce del
603 gruppo.
604
605 In IPv6 non ci sono più le classi ma i bit più significativi indicano il tipo
606 di indirizzo; in \tabref{tab:IP_ipv6addr} sono riportati i valori di detti
607 bit e il tipo di indirizzo che loro corrispondente.  I bit più significativi
608 costituiscono quello che viene chiamato il \textit{format prefix} ed è sulla
609 base di questo che i vari tipi di indirizzi vengono identificati.  Come si
610 vede questa architettura di allocazione supporta l'allocazione di indirizzi
611 per i provider, per uso locale e per il multicast; inoltre è stato riservato
612 lo spazio per indirizzi NSAP, IPX e per le connessioni; gran parte dello
613 spazio (più del 70\%) è riservato per usi futuri.
614
615 Si noti infine che gli indirizzi \textit{anycast} non sono riportati in
616 \tabref{tab:IP_ipv6addr} in quanto allocati al di fuori dello spazio di
617 allocazione degli indirizzi unicast.
618
619 \subsection{Indirizzi unicast \textit{provider-based}}
620 \label{sec:IP_ipv6_unicast}
621
622 Gli indirizzi \textit{provider-based} sono gli indirizzi usati per le
623 comunicazioni globali, questi sono definiti
624 nell'\href{http://www.ietf.org/rfc/rfc2073.txt}{RFC~2073} e sono gli
625 equivalenti degli attuali indirizzi delle classi da A a C.
626
627 L'autorità che presiede all'allocazione di questi indirizzi è la IANA; per
628 evitare i problemi di crescita delle tabelle di instradamento e una procedura
629 efficiente di allocazione la struttura di questi indirizzi è organizzata fin
630 dall'inizio in maniera gerarchica; pertanto lo spazio di questi indirizzi è
631 stato suddiviso in una serie di campi secondo lo schema riportato in
632 \tabref{tab:IP_ipv6_unicast}.
633
634 \begin{table}[htb]
635   \centering
636   \footnotesize
637   \begin{tabular} {@{\vrule}p{6mm}
638       @{\vrule}p{16mm}@{\vrule}p{24mm}
639       @{\vrule}p{30mm}@{\vrule}c@{\vrule}}
640     \multicolumn{1}{@{}c@{}}{3}&\multicolumn{1}{c}{5 bit}&
641     \multicolumn{1}{c}{$n$ bit}&\multicolumn{1}{c}{$56-n$ bit}&
642     \multicolumn{1}{c}{64 bit} \\
643     \hline
644     \omit\vrule\hfill\vrule&\hspace{16mm} & & &\omit\hspace{76mm}\hfill\vrule\\
645     \centering 010&
646     \centering \textsl{Registry Id}&
647     \centering \textsl{Provider Id}& 
648     \centering \textsl{Subscriber Id}& 
649     \textsl{Intra-Subscriber} \\
650     \omit\vrule\hfill\vrule& & & &\omit\hspace{6mm}\hfill\vrule\\ 
651     \hline
652   \end{tabular}
653 \caption{Formato di un indirizzo unicast \textit{provider-based}.}
654 \label{tab:IP_ipv6_unicast}
655 \end{table}
656
657 Al livello più alto la IANA può delegare l'allocazione a delle autorità
658 regionali (i Regional Register) assegnando ad esse dei blocchi di indirizzi; a
659 queste autorità regionali è assegnato un Registry Id che deve seguire
660 immediatamente il prefisso di formato. Al momento sono definite tre registri
661 regionali (INTERNIC, RIPE NCC e APNIC), inoltre la IANA si è riservata la
662 possibilità di allocare indirizzi su base regionale; pertanto sono previsti
663 i seguenti possibili valori per il \textsl{Registry Id};
664 gli altri valori restano riservati per la IANA.
665 \begin{table}[htb]
666   \centering 
667   \footnotesize
668     \begin{tabular}{|l|l|l|}
669       \hline
670       \textbf{Regione} & \textbf{Registro} & \textbf{Id} \\
671       \hline
672       \hline
673       Nord America &INTERNIC & \texttt{11000} \\
674       Europa & RIPE NCC & \texttt{01000} \\
675       Asia & APNIC & \texttt{00100} \\
676       Multi-regionale & IANA &\texttt{10000} \\
677       \hline
678     \end{tabular}
679     \caption{Valori dell'identificativo dei 
680       Regional Register allocati ad oggi.}
681     \label{tab:IP_ipv6_regid}
682 \end{table}
683
684 L'organizzazione degli indirizzi prevede poi che i due livelli successivi, di
685 suddivisione fra \textit{Provider Id}, che identifica i grandi fornitori di
686 servizi, e \textit{Subscriber Id}, che identifica i fruitori, sia gestita dai
687 singoli registri regionali. Questi ultimi dovranno definire come dividere lo
688 spazio di indirizzi assegnato a questi due campi (che ammonta a un totale di
689 56~bit), definendo lo spazio da assegnare al \textit{Provider Id} e
690 al \textit{Subscriber Id}, ad essi spetterà inoltre anche l'allocazione dei
691 numeri di \textit{Provider Id} ai singoli fornitori, ai quali sarà delegata
692 l'autorità di allocare i \textit{Subscriber Id} al loro interno.
693
694 L'ultimo livello è quello \textit{Intra-subscriber} che è lasciato alla
695 gestione dei singoli fruitori finali, gli indirizzi \textit{provider-based}
696 lasciano normalmente gli ultimi 64~bit a disposizione per questo livello, la
697 modalità più immediata è quella di usare uno schema del tipo mostrato in
698 \tabref{tab:IP_ipv6_uninterf} dove l'\textit{Interface Id} è dato dal
699 MAC-address a 48~bit dello standard Ethernet, scritto in genere nell'hardware
700 delle scheda di rete, e si usano i restanti 16~bit per indicare la sottorete.
701
702 \begin{table}[htb]
703   \centering
704   \footnotesize
705   \begin{tabular} {@{\vrule}p{64mm}@{\vrule}p{16mm}@{\vrule}c@{\vrule}}
706     \multicolumn{1}{c}{64 bit}&\multicolumn{1}{c}{16 bit}&
707     \multicolumn{1}{c}{48 bit}\\
708     \hline
709     \omit\vrule\hfill\vrule&\hspace{16mm}&\omit\hspace{48mm}\hfill\vrule\\ 
710     \centering \textsl{Subscriber Prefix}& 
711     \centering \textsl{Subnet Id}&
712     \textsl{Interface Id}\\
713     \omit\vrule\hfill\vrule& &\omit\hspace{6mm}\hfill\vrule\\ 
714     \hline
715   \end{tabular}
716 \caption{Formato del campo \textit{Intra-subscriber} per un indirizzo unicast
717   \textit{provider-based}.}
718 \label{tab:IP_ipv6_uninterf}
719 \end{table}
720
721 Qualora si dovesse avere a che fare con una necessità di un numero più
722 elevato di sottoreti, il precedente schema andrebbe modificato, per evitare
723 l'enorme spreco dovuto all'uso dei MAC-address, a questo scopo si possono
724 usare le capacità di autoconfigurazione di IPv6 per assegnare indirizzi
725 generici con ulteriori gerarchie per sfruttare efficacemente tutto lo spazio
726 di indirizzi.
727
728 Un registro regionale può introdurre un ulteriore livello nella gerarchia
729 degli indirizzi, allocando dei blocchi per i quali delegare l'autorità a dei
730 registri nazionali, quest'ultimi poi avranno il compito di gestire la
731 attribuzione degli indirizzi per i fornitori di servizi nell'ambito del/i
732 paese coperto dal registro nazionale con le modalità viste in precedenza.
733 Una tale ripartizione andrà effettuata all'interno dei soliti 56~bit come
734 mostrato in \tabref{tab:IP_ipv6_uninaz}.
735
736 \begin{table}[htb]
737   \centering
738   \footnotesize
739   \begin{tabular} {@{\vrule}p{3mm}
740       @{\vrule}p{10mm}@{\vrule}p{12mm}@{\vrule}p{18mm}
741       @{\vrule}p{18mm}@{\vrule}c@{\vrule}}
742     \multicolumn{1}{@{}c@{}}{3}&\multicolumn{1}{c}{5 bit}&
743     \multicolumn{1}{c}{n bit}&\multicolumn{1}{c}{m bit}&
744     \multicolumn{1}{c}{56-n-m bit}&\multicolumn{1}{c}{64 bit} \\
745     \hline
746     \omit\vrule\hfill\vrule& & & & &\omit\hspace{64mm}\hfill\vrule\\
747     \centering \texttt{3}&
748     \centering \textsl{Reg.}&
749     \centering \textsl{Naz.}&
750     \centering \textsl{Prov.}& 
751     \centering \textsl{Subscr.}& 
752     \textsl{Intra-Subscriber} \\
753     \omit\vrule\hfill\vrule &&&&&\\ 
754     \hline
755   \end{tabular}
756 \caption{Formato di un indirizzo unicast \textit{provider-based} che prevede
757       un registro nazionale.}
758 \label{tab:IP_ipv6_uninaz}
759 \end{table}
760
761
762 \subsection{Indirizzi ad uso locale}
763 \label{sec:IP_ipv6_linksite}
764
765 Gli indirizzi ad uso locale sono indirizzi unicast che sono instradabili solo
766 localmente (all'interno di un sito o di una sottorete), e possono avere una
767 unicità locale o globale.
768
769 Questi indirizzi sono pensati per l'uso all'interno di un sito per mettere su
770 una comunicazione locale immediata, o durante le fasi di autoconfigurazione
771 prima di avere un indirizzo globale.
772
773 \begin{table}[htb]
774   \centering
775   \footnotesize
776   \begin{tabular} {@{\vrule}p{10mm}@{\vrule}p{54mm}@{\vrule}c@{\vrule}}
777     \multicolumn{1}{c}{10} &\multicolumn{1}{c}{54 bit} & 
778     \multicolumn{1}{c}{64 bit} \\
779     \hline
780     \omit\vrule\hfill\vrule & & \omit\hspace{64mm}\hfill\vrule\\
781     \centering \texttt{FE80}& 
782     \centering\texttt{0000 .   .   .   .   . 0000} &
783     Interface Id \\
784     \omit\vrule\hfill\vrule & &\\
785     \hline
786 \end{tabular}
787 \caption{Formato di un indirizzo \textit{link-local}.}
788 \label{tab:IP_ipv6_linklocal}
789 \end{table}
790
791 Ci sono due tipi di indirizzi, \textit{link-local} e \textit{site-local}. Il
792 primo è usato per un singolo link; la struttura è mostrata in
793 \tabref{tab:IP_ipv6_linklocal}, questi indirizzi iniziano sempre per
794 \texttt{FE80} e vengono in genere usati per la configurazione automatica
795 dell'indirizzo al bootstrap e per la ricerca dei vicini (vedi
796 \ref{sec:IP_ipv6_autoconf}); un pacchetto che abbia tale indirizzo come
797 sorgente o destinazione non deve venire ritrasmesso dai router.
798
799 Un indirizzo \textit{site-local} invece è usato per l'indirizzamento
800 all'interno di un sito che non necessita di un prefisso globale; la struttura
801 è mostrata in \tabref{tab:IP_ipv6_sitelocal}, questi indirizzi iniziano sempre
802 per \texttt{FEC0} e non devono venire ritrasmessi dai router all'esterno del
803 sito stesso; sono in sostanza gli equivalenti degli indirizzi riservati per
804 reti private definiti su IPv4.  Per entrambi gli indirizzi il campo
805 \textit{Interface Id} è un identificatore che deve essere unico nel dominio in
806 cui viene usato, un modo immediato per costruirlo è quello di usare il
807 MAC-address delle schede di rete.
808  
809 \begin{table}[!h]
810   \centering
811   \footnotesize
812   \begin{tabular} {@{\vrule}p{10mm}@{\vrule}p{38mm}@{\vrule}p{16mm}
813       @{\vrule}c@{\vrule}}
814     \multicolumn{1}{c}{10} &\multicolumn{1}{c}{38 bit} & 
815     \multicolumn{1}{c}{16 bit} &\multicolumn{1}{c}{64 bit} \\
816     \hline
817     \omit\vrule\hfill\vrule& & & \omit\hspace{64mm}\hfill\vrule\\
818     \centering \texttt{FEC0}& 
819     \centering \texttt{0000 .   .   . 0000}& 
820     \centering Subnet Id &
821     Interface Id\\
822     \omit\vrule\hfill\vrule& & &\\
823     \hline
824 \end{tabular}
825 \caption{Formato di un indirizzo \textit{site-local}.}
826 \label{tab:IP_ipv6_sitelocal}
827 \end{table}
828
829 Gli indirizzi di uso locale consentono ad una organizzazione che non è
830 (ancora) connessa ad Internet di operare senza richiedere un prefisso globale,
831 una volta che in seguito l'organizzazione venisse connessa a Internet
832 potrebbe continuare a usare la stessa suddivisione effettuata con gli
833 indirizzi \textit{site-local} utilizzando un prefisso globale e la
834 rinumerazione degli indirizzi delle singole macchine sarebbe automatica.
835
836 \subsection{Indirizzi riservati}
837 \label{sec:IP_ipv6_reserved}
838
839 Alcuni indirizzi sono riservati per scopi speciali, in particolare per scopi
840 di compatibilità.
841
842 Un primo tipo sono gli indirizzi \textit{IPv4 mappati su IPv6} (mostrati in
843 \tabref{tab:IP_ipv6_map}), questo sono indirizzi unicast che vengono usati per
844 consentire ad applicazioni IPv6 di comunicare con host capaci solo di IPv4;
845 questi sono ad esempio gli indirizzi generati da un DNS quando l'host
846 richiesto supporta solo IPv4; l'uso di un tale indirizzo in un socket IPv6
847 comporta la generazione di un pacchetto IPv4 (ovviamente occorre che sia IPv4
848 che IPv6 siano supportati sull'host di origine).
849
850 \begin{table}[!htb]
851   \centering
852   \footnotesize
853   \begin{tabular} {@{\vrule}p{80mm}@{\vrule}p{16mm}@{\vrule}c@{\vrule}}
854     \multicolumn{1}{c}{80 bit} &\multicolumn{1}{c}{16 bit} & 
855     \multicolumn{1}{c}{32 bit} \\
856     \hline
857     \omit\vrule\hfill\vrule& &\omit\hspace{32mm}\hfill\vrule\\ 
858     \centering
859     \texttt{0000 .   .   .   .   .   .   .   .   .   .   .   . 0000} & 
860     \centering\texttt{FFFF} &
861     IPv4 address \\
862     \omit\vrule\hfill\vrule& &\\ 
863     \hline
864 \end{tabular}
865 \caption{Formato di un indirizzo IPV4 mappato su IPv6.}
866 \label{tab:IP_ipv6_map}
867 \end{table}
868
869 Un secondo tipo di indirizzi di compatibilità sono gli \textsl{IPv4
870   compatibili IPv6} (vedi \tabref{tab:IP_ipv6_comp}) usati nella transizione
871 da IPv4 a IPv6: quando un nodo che supporta sia IPv6 che IPv4 non ha un router
872 IPv6 deve usare nel DNS un indirizzo di questo tipo, ogni pacchetto IPv6
873 inviato a un tale indirizzo verrà automaticamente incapsulato in IPv4.
874
875 \begin{table}[htb]
876   \centering
877   \footnotesize
878   \begin{tabular} {@{\vrule}p{80mm}@{\vrule}p{16mm}@{\vrule}p{32mm}@{\vrule}}
879     \multicolumn{1}{c}{80 bit} &\multicolumn{1}{c}{16 bit} & 
880     \multicolumn{1}{c}{32 bit} \\
881     \hline
882     \omit\vrule\hfill\vrule& &\omit\hspace{32mm}\hfill\vrule\\ 
883     \centering
884     \texttt{0000 .   .   .   .   .   .   .   .   .   .   .   . 0000} & 
885     \centering\texttt{0000} &
886     \parbox{32mm}{\centering IPv4 address} \\
887     \omit\vrule\hfill\vrule& &\\ 
888     \hline
889 \end{tabular}
890 \caption{Formato di un indirizzo IPV4 mappato su IPv6.}
891 \label{tab:IP_ipv6_comp}
892 \end{table}
893
894 Altri indirizzi speciali sono il \textit{loopback address}, costituito da 127
895 zeri ed un uno (cioè \texttt{::1}) e l'\textsl{indirizzo generico}
896 costituito da tutti zeri (scritto come \texttt{0::0} o ancora più
897 semplicemente come \texttt{:}) usato in genere quando si vuole indicare
898 l'accettazione di una connessione da qualunque host.
899
900 \subsection{Multicasting}
901 \label{sec:IP_ipv6_multicast}
902
903 Gli indirizzi \textit{multicast} sono usati per inviare un pacchetto a un
904 gruppo di interfacce; l'indirizzo identifica uno specifico gruppo di multicast
905 e il pacchetto viene inviato a tutte le interfacce di detto gruppo.
906 Un'interfaccia può appartenere ad un numero qualunque numero di gruppi di
907 multicast. Il formato degli indirizzi \textit{multicast} è riportato in
908 \tabref{tab:IP_ipv6_multicast}:
909
910 \begin{table}[htb]
911   \centering
912   \footnotesize
913   \begin{tabular} {@{\vrule}p{12mm}
914       @{\vrule}p{6mm}@{\vrule}p{6mm}@{\vrule}c@{\vrule}}
915     \multicolumn{1}{c}{8}&\multicolumn{1}{c}{4}&
916     \multicolumn{1}{c}{4}&\multicolumn{1}{c}{112 bit} \\
917     \hline
918     \omit\vrule\hfill\vrule& & & \omit\hspace{104mm}\hfill\vrule\\
919     \centering\texttt{FF}& 
920     \centering flag &
921     \centering scop& 
922     Group Id\\
923     \omit\vrule\hfill\vrule &&&\\ 
924     \hline
925   \end{tabular}
926 \caption{Formato di un indirizzo \textit{multicast}.}
927 \label{tab:IP_ipv6_multicast}
928 \end{table}
929
930 Il prefisso di formato per tutti gli indirizzi \textit{multicast} è
931 \texttt{FF}, ad esso seguono i due campi il cui significato è il seguente:
932
933 \begin{itemize}
934 \item \textsl{flag}: un insieme di 4 bit, di cui i primi tre sono riservati e
935   posti a zero, l'ultimo è zero se l'indirizzo è permanente (cioè un
936   indirizzo noto, assegnato dalla IANA), ed è uno se invece l'indirizzo è
937   transitorio.
938 \item \textsl{scop} è un numero di quattro bit che indica il raggio di
939   validità dell'indirizzo, i valori assegnati per ora sono riportati in
940   \tabref{tab:IP_ipv6_multiscope}.
941 \end{itemize}
942
943
944
945 \begin{table}[!htb]
946   \centering 
947   \footnotesize
948   \begin{tabular}[c]{|c|l|c|l|}
949     \hline
950     \multicolumn{4}{|c|}{\bf Gruppi di multicast} \\
951     \hline
952     \hline
953     0 & riservato & 8 & organizzazione locale \\
954     1 & nodo locale & 9 & non assegnato \\
955     2 & collegamento locale & A & non assegnato \\
956     3 & non assegnato & B & non assegnato \\
957     4 & non assegnato & C & non assegnato \\ 
958     5 & sito locale & D & non assegnato \\
959     6 & non assegnato & E & globale \\
960     7 & non assegnato & F & riservato \\
961     \hline
962   \end{tabular}
963 \caption{Possibili valori del campo \textsl{scop} di un indirizzo multicast.}
964 \label{tab:IP_ipv6_multiscope}
965 \end{table}
966
967 Infine l'ultimo campo identifica il gruppo di multicast, sia permanente che
968 transitorio, all'interno del raggio di validità del medesimo. Alcuni
969 indirizzi multicast, riportati in \tabref{tab:multiadd} sono già riservati
970 per il funzionamento della rete.
971
972 \begin{table}[!htb]
973   \centering 
974   \footnotesize
975   \begin{tabular}[c]{|l|l|l|}
976     \hline
977     \textbf{Uso}& \textbf{Indirizzi riservati} & \textbf{Definizione}\\
978     \hline 
979     \hline 
980     all-nodes       & \texttt{FFxx:0:0:0:0:0:0:1}  & 
981                       \href{http://www.ietf.org/rfc/rfc1970.txt}{RFC~1970} \\
982     all-routers     & \texttt{FFxx:0:0:0:0:0:0:2}  & 
983                       \href{http://www.ietf.org/rfc/rfc1970.txt}{RFC~1970} \\
984     all-rip-routers & \texttt{FFxx:0:0:0:0:0:0:9}  & 
985                       \href{http://www.ietf.org/rfc/rfc2080.txt}{RFC~2080} \\
986     all-cbt-routers & \texttt{FFxx:0:0:0:0:0:0:10} & \\
987     reserved        & \texttt{FFxx:0:0:0:0:0:1:0}  & IANA \\
988     link-name       & \texttt{FFxx:0:0:0:0:0:1:1}  &  \\
989     all-dhcp-agents & \texttt{FFxx:0:0:0:0:0:1:2}  & \\
990     all-dhcp-servers& \texttt{FFxx:0:0:0:0:0:1:3}  & \\
991     all-dhcp-relays & \texttt{FFxx:0:0:0:0:0:1:4}  & \\
992     solicited-nodes & \texttt{FFxx:0:0:0:0:1:0:0}  & 
993                       \href{http://www.ietf.org/rfc/rfc1970.txt}{RFC~1970} \\
994     \hline
995   \end{tabular}
996 \caption{Gruppi multicast predefiniti.}
997 \label{tab:multiadd}
998 \end{table}
999
1000 L'utilizzo del campo di \textit{scope} e di questi indirizzi predefiniti serve
1001 a recuperare le funzionalità del broadcasting (ad esempio inviando un
1002 pacchetto all'indirizzo \texttt{FF02:0:0:0:0:0:0:1} si raggiungono tutti i
1003 nodi locali).
1004
1005
1006 \subsection{Indirizzi \textit{anycast}}
1007 \label{sec:IP_anycast}
1008
1009 Gli indirizzi \textit{anycast} sono indirizzi che vengono assegnati ad un
1010 gruppo di interfacce: un pacchetto indirizzato a questo tipo di indirizzo
1011 viene inviato al componente del gruppo più ``\textsl{vicino}'' secondo la
1012 distanza di instradamento calcolata dai router.
1013
1014 Questi indirizzi sono allocati nello stesso spazio degli indirizzi unicast,
1015 usando uno dei formati disponibili, e per questo, sono da essi assolutamente
1016 indistinguibili. Quando un indirizzo unicast viene assegnato a più interfacce
1017 (trasformandolo in un anycast) il computer su cui è l'interfaccia deve essere
1018 configurato per tener conto del fatto.
1019
1020 Gli indirizzi anycast consentono a un nodo sorgente di inviare pacchetti a una
1021 destinazione su un gruppo di possibili interfacce selezionate. La sorgente non
1022 deve curarsi di come scegliere l'interfaccia più vicina, compito che tocca al
1023 sistema di instradamento (in sostanza la sorgente non ha nessun controllo
1024 sulla selezione).
1025
1026 Gli indirizzi anycast, quando vengono usati come parte di una sequenza di
1027 instradamento, consentono ad esempio ad un nodo di scegliere quale fornitore
1028 vuole usare (configurando gli indirizzi anycast per identificare i router di
1029 uno stesso provider).
1030
1031 Questi indirizzi pertanto possono essere usati come indirizzi intermedi in una
1032 intestazione di instradamento o per identificare insiemi di router connessi a
1033 una particolare sottorete, o che forniscono l'accesso a un certo sotto
1034 dominio.
1035
1036 L'idea alla base degli indirizzi anycast è perciò quella di utilizzarli per
1037 poter raggiungere il fornitore di servizio più vicino; ma restano aperte tutta
1038 una serie di problematiche, visto che una connessione con uno di questi
1039 indirizzi non è possibile, dato che per una variazione delle distanze di
1040 routing non è detto che due pacchetti successivi finiscano alla stessa
1041 interfaccia.
1042
1043 La materia è pertanto ancora controversa e in via di definizione.
1044
1045
1046 \subsection{Le estensioni}
1047 \label{sec:IP_ipv6_extens}
1048
1049 Come già detto in precedenza IPv6 ha completamente cambiato il trattamento
1050 delle opzioni; queste ultime infatti sono state tolte dall'intestazione del
1051 pacchetto, e poste in apposite \textsl{intestazioni di estensione} (o
1052 \textit{extension header}) poste fra l'intestazione di IPv6 e l'intestazione
1053 del protocollo di trasporto.
1054
1055 Per aumentare la velocità di processo, sia dei dati del livello seguente che
1056 di ulteriori opzioni, ciascuna estensione deve avere una lunghezza multipla di
1057 8 byte per mantenere l'allineamento a 64~bit di tutti le intestazioni
1058 seguenti.
1059
1060 Dato che la maggior parte di queste estensioni non sono esaminate dai router
1061 durante l'instradamento e la trasmissione dei pacchetti, ma solo all'arrivo
1062 alla destinazione finale, questa scelta ha consentito un miglioramento delle
1063 prestazioni rispetto a IPv4 dove la presenza di un'opzione comportava l'esame
1064 di tutte quante.
1065
1066 Un secondo miglioramento è che rispetto a IPv4 le opzioni possono essere di
1067 lunghezza arbitraria e non limitate a 40 byte; questo, insieme al modo in cui
1068 vengono trattate, consente di utilizzarle per scopi come l'autenticazione e la
1069 sicurezza, improponibili con IPv4.
1070
1071 Le estensioni definite al momento sono le seguenti:
1072 \begin{itemize}
1073 \item \textbf{Hop by hop} devono seguire immediatamente l'intestazione
1074   principale; indicano le opzioni che devono venire processate ad ogni
1075   passaggio da un router, fra di esse è da menzionare la \textit{jumbo
1076     payload} che segnala la presenza di un pacchetto di dati di dimensione
1077   superiore a 65535 byte.
1078 \item \textbf{Destination options} opzioni che devono venire esaminate al nodo
1079   di ricevimento, nessuna di esse è tuttora definita.
1080 \item \textbf{Routing} definisce una \textit{source route} (come la analoga
1081   opzione di IPv4) cioè una lista di indirizzi IP di nodi per i quali il
1082   pacchetto deve passare. 
1083 \item \textbf{Fragmentation} viene generato automaticamente quando un host
1084   vuole frammentare un pacchetto, ed è riprocessato automaticamente alla
1085   destinazione che riassembla i frammenti.
1086 \item \textbf{Authentication} gestisce l'autenticazione e il controllo di
1087   integrità dei pacchetti; è documentato
1088   dall'\href{http://www.ietf.org/rfc/rfc1826.txt}{RFC~1826}.
1089 \item \textbf{Encapsulation} serve a gestire la segretezza del contenuto
1090   trasmesso; è documentato
1091   dall'\href{http://www.ietf.org/rfc/rfc1827.txt}{RFC~1827}.
1092 \end{itemize}
1093
1094 La presenza di opzioni è rilevata dal valore del campo \textit{next header}
1095 che indica qual'è l'intestazione successiva a quella di IPv6; in assenza di
1096 opzioni questa sarà l'intestazione di un protocollo di trasporto del livello
1097 superiore, per cui il campo assumerà lo stesso valore del campo
1098 \textit{protocol} di IPv4, altrimenti assumerà il valore dell'opzione
1099 presente; i valori possibili sono riportati in \tabref{tab:IP_ipv6_nexthead}.
1100
1101 \begin{table}[htb]
1102   \begin{center}
1103     \footnotesize
1104     \begin{tabular}{|c|l|l|}
1105       \hline
1106       \textbf{Valore} & \textbf{Keyword} & \textbf{Tipo di protocollo} \\
1107       \hline
1108       \hline
1109       0  &      & riservato\\
1110          & HBH  & Hop by Hop \\
1111       1  & ICMP & Internet Control Message (IPv4 o IPv6) \\
1112       2  & ICMP & Internet Group Management (IPv4) \\
1113       3  & GGP  & Gateway-to-Gateway \\
1114       4  & IP   & IP in IP (IPv4 encapsulation) \\
1115       5  & ST   & Stream \\
1116       6  & TCP  & Trasmission Control \\
1117       17 & UDP  & User Datagram \\
1118       43 & RH   & Routing Header (IPv6) \\
1119       44 & FH   & Fragment Header (IPv6) \\
1120       45 & IDRP & Inter Domain Routing \\
1121       51 & AH   & Authentication Header (IPv6) \\
1122       52 & ESP  & Encrypted Security Payload (IPv6) \\
1123       59 & Null & No next header (IPv6) \\
1124       88 & IGRP & Internet Group Routing \\
1125       89 & OSPF & Open Short Path First \\
1126       255&      & riservato \\
1127     \hline
1128     \end{tabular}
1129     \caption{Tipi di protocolli e intestazioni di estensione}
1130     \label{tab:IP_ipv6_nexthead}
1131   \end{center}
1132 \end{table}
1133
1134 Questo meccanismo permette la presenza di più opzioni in successione prima
1135 del pacchetto del protocollo di trasporto; l'ordine raccomandato per le
1136 estensioni è quello riportato nell'elenco precedente con la sola differenza
1137 che le opzioni di destinazione sono inserite nella posizione ivi indicata solo
1138 se, come per il tunnelling, devono essere esaminate dai router, quelle che
1139 devono essere esaminate solo alla destinazione finale vanno in coda.
1140
1141
1142 \subsection{Qualità di servizio}
1143 \label{sec:IP_ipv6_qos}
1144
1145 Una delle caratteristiche innovative di IPv6 è quella di avere introdotto un
1146 supporto per la qualità di servizio che è importante per applicazioni come
1147 quelle multimediali o ``real-time'' che richiedono un qualche grado di
1148 controllo sulla stabilità della banda di trasmissione, sui ritardi o la
1149 dispersione dei temporale del flusso dei pacchetti.
1150
1151
1152 \subsection{Etichette di flusso}
1153 \label{sec:IP_ipv6_flow}
1154 L'introduzione del campo \textit{flow label} può essere usata dall'origine
1155 della comunicazione per etichettare quei pacchetti per i quali si vuole un
1156 trattamento speciale da parte dei router come un una garanzia di banda minima
1157 assicurata o un tempo minimo di instradamento/trasmissione garantito.
1158
1159 Questo aspetto di IPv6 è ancora sperimentale per cui i router che non
1160 supportino queste funzioni devono porre a zero il \textit{flow label} per i
1161 pacchetti da loro originanti e lasciare invariato il campo per quelli in
1162 transito.
1163
1164 Un flusso è una sequenza di pacchetti da una particolare origine a una
1165 particolare destinazione per il quale l'origine desidera un trattamento
1166 speciale da parte dei router che lo manipolano; la natura di questo
1167 trattamento può essere comunicata ai router in vari modi (come un protocollo
1168 di controllo o con opzioni del tipo \textit{hop-by-hop}). 
1169
1170 Ci possono essere più flussi attivi fra un'origine e una destinazione, come
1171 del traffico non assegnato a nessun flusso, un flusso viene identificato
1172 univocamente dagli indirizzi di origine e destinazione e da una etichetta di
1173 flusso diversa da zero, il traffico normale deve avere l'etichetta di flusso
1174 posta a zero.
1175
1176 L'etichetta di flusso è assegnata dal nodo di origine, i valori devono
1177 essere scelti in maniera (pseudo)casuale nel range fra 1 e FFFFFF in modo da
1178 rendere utilizzabile un qualunque sottoinsieme dei bit come chiavi di hash per
1179 i router.
1180
1181 \subsection{Priorità}
1182 \label{sec:prio}
1183
1184 Il campo di priorità consente di indicare il livello di priorità dei
1185 pacchetti relativamente agli altri pacchetti provenienti dalla stessa
1186 sorgente. I valori sono divisi in due intervalli, i valori da 0 a 7 sono usati
1187 per specificare la priorità del traffico per il quale la sorgente provvede
1188 un controllo di congestione cioè per il traffico che può essere ``tirato
1189 indietro'' in caso di congestione come quello di TCP, i valori da 8 a 15 sono
1190 usati per i pacchetti che non hanno questa caratteristica, come i pacchetti
1191 ``real-time'' inviati a ritmo costante.
1192
1193 Per il traffico con controllo di congestione sono raccomandati i seguenti
1194 valori di priorità a seconda del tipo di applicazione:
1195
1196 \begin{table}[htb]
1197   \centering
1198   \footnotesize
1199   \begin{tabular}{|c|l|}
1200     \hline
1201     \textbf{Valore} & \textbf{Tipo di traffico} \\
1202     \hline
1203     \hline
1204     0 & traffico generico \\
1205     1 & traffico di riempimento (es. news) \\
1206     2 & trasferimento dati non interattivo (es. e-mail)\\
1207     3 & riservato \\
1208     4 & trasferimento dati interattivo (es. FTP, HTTP, NFS) \\
1209     5 & riservato \\
1210     \hline
1211 \end{tabular}
1212 \caption{Formato di un indirizzo \textit{site-local}.}
1213 \label{tab:priority}
1214 \end{table}
1215
1216 Per il traffico senza controllo di congestione la priorità più bassa
1217 dovrebbe essere usata per quei pacchetti che si preferisce siano scartati
1218 più facilmente in caso di congestione.
1219
1220
1221 \subsection{Sicurezza a livello IP}
1222 \label{sec:security}
1223
1224 La attuale implementazione di Internet presenta numerosi problemi di
1225 sicurezza, in particolare i dati presenti nelle intestazioni dei vari
1226 protocolli sono assunti essere corretti, il che da adito alla possibilità di
1227 varie tipologie di attacco forgiando pacchetti false, inoltre tutti questi
1228 dati passano in chiaro sulla rete e sono esposti all'osservazione di chiunque
1229 si trovi in mezzo.
1230
1231 Con IPv4 non è possibile realizzare un meccanismo di autenticazione e
1232 riservatezza a un livello inferiore al primo (quello di applicazione), con
1233 IPv6 è stato progettata la possibilità di intervenire al livello di rete (il
1234 terzo) prevedendo due apposite estensioni che possono essere usate per fornire
1235 livelli di sicurezza a seconda degli utenti. La codifica generale di questa
1236 architettura è riportata
1237 nell'\href{http://www.ietf.org/rfc/rfc2401.txt}{RFC~2401}.
1238
1239 Il meccanismo in sostanza si basa su due estensioni:
1240 \begin{itemize}
1241 \item una intestazione di sicurezza (\textit{authentication header}) che
1242   garantisce al destinatario l'autenticità del pacchetto
1243 \item un carico di sicurezza (\textit{Encrypted Security Payload}) che
1244   assicura che solo il legittimo ricevente può leggere il pacchetto.
1245 \end{itemize}
1246
1247 Perché tutto questo funzioni le stazioni sorgente e destinazione devono
1248 usare una stessa chiave crittografica e gli stessi algoritmi, l'insieme degli
1249 accordi fra le due stazioni per concordare chiavi e algoritmi usati va sotto
1250 il nome di associazione di sicurezza.
1251
1252 I pacchetti autenticati e crittografati portano un indice dei parametri di
1253 sicurezza (SPI, \textit{Security Parameter Index}) che viene negoziato prima
1254 di ogni comunicazione ed è definito dalla stazione sorgente. Nel caso di
1255 multicast dovrà essere lo stesso per tutte le stazioni del gruppo.
1256
1257 \subsection{Autenticazione}
1258 \label{sec:auth} 
1259
1260 Il primo meccanismo di sicurezza è quello dell'intestazione di autenticazione
1261 (\textit{authentication header}) che fornisce l'autenticazione e il controllo
1262 di integrità (ma senza riservatezza) dei pacchetti IP.
1263
1264 L'intestazione di autenticazione ha il formato descritto in
1265 \figref{fig:autent_estens}: il campo \textit{Next Header} indica
1266 l'intestazione successiva, con gli stessi valori del campo omonimo
1267 nell'intestazione principale di IPv6, il campo \textit{Length} indica la
1268 lunghezza dell'intestazione di autenticazione in numero di parole a 32 bit, il
1269 campo riservato deve essere posto a zero, seguono poi l'indice di sicurezza,
1270 stabilito nella associazione di sicurezza, e un numero di sequenza che la
1271 stazione sorgente deve incrementare di pacchetto in pacchetto.
1272
1273 Completano l'intestazione i dati di autenticazione che contengono un valore di
1274 controllo di integrità (ICV, \textit{Integrity Check Value}), che deve essere
1275 di dimensione pari a un multiplo intero di 32 bit e può contenere un padding
1276 per allineare l'intestazione a 64 bit. Tutti gli algoritmi di autenticazione
1277 devono provvedere questa capacità.
1278
1279 \begin{figure}[!htb]
1280   \centering
1281   \includegraphics[width=10cm]{img/ah_option}
1282     \caption{Formato dell'intestazione dell'estensione di autenticazione.}
1283     \label{fig:autent_estens}
1284 \end{figure}
1285
1286 L'intestazione di autenticazione può essere impiegata in due modi diverse
1287 modalità: modalità trasporto e modalità tunnel.
1288
1289 La modalità trasporto è utilizzabile solo per comunicazioni fra stazioni
1290 singole che supportino l'autenticazione. In questo caso l'intestazione di
1291 autenticazione è inserita dopo tutte le altre intestazioni di estensione
1292 eccezion fatta per la \textit{Destination Option} che può comparire sia
1293 prima che dopo. 
1294
1295 \begin{figure}[!htb]
1296   \centering
1297   \includegraphics[width=10cm]{img/IP_AH_packet}
1298   \caption{Formato di un pacchetto IPv6 che usa l'opzione di autenticazione.}
1299   \label{fig:AH_autent_head}
1300 \end{figure}
1301
1302 La modalità tunnel può essere utilizzata sia per comunicazioni fra stazioni
1303 singole che con un gateway di sicurezza; in questa modalità ...
1304
1305
1306 L'intestazione di autenticazione è una intestazione di estensione inserita
1307 dopo l'intestazione principale e prima del carico dei dati. La sua presenza
1308 non ha perciò alcuna influenza sui livelli superiori dei protocolli di
1309 trasmissione come il TCP.
1310
1311
1312 La procedura di autenticazione cerca di garantire l'autenticità del pacchetto
1313 nella massima estensione possibile, ma dato che alcuni campi dell'intestazione
1314 di IP possono variare in maniera impredicibile alla sorgente, il loro valore
1315 non può essere protetto dall'autenticazione.
1316
1317 Il calcolo dei dati di autenticazione viene effettuato alla sorgente su una
1318 versione speciale del pacchetto in cui il numero di salti nell'intestazione
1319 principale è impostato a zero, così come le opzioni che possono essere
1320 modificate nella trasmissione, e l'intestazione di routing (se usata) è posta
1321 ai valori che deve avere all'arrivo.
1322
1323 L'estensione è indipendente dall'algoritmo particolare, e il protocollo è
1324 ancora in fase di definizione; attualmente è stato suggerito l'uso di una
1325 modifica dell'MD5 chiamata \textit{keyed MD5} che combina alla codifica anche
1326 una chiave che viene inserita all'inizio e alla fine degli altri campi.
1327
1328
1329 \subsection{Riservatezza}
1330 \label{sec:ecry}
1331
1332 Per garantire una trasmissione riservata dei dati, è stata previsto la
1333 possibilità di trasmettere pacchetti con i dati criptati: il cosiddetto ESP,
1334 \textit{Encripted Security Payload}. Questo viene realizzato usando con una
1335 apposita opzione che deve essere sempre l'ultima delle intestazioni di
1336 estensione; ad essa segue il carico del pacchetto che viene criptato.
1337
1338 Un pacchetto crittografato pertanto viene ad avere una struttura del tipo di
1339 quella mostrata in \figref{fig:ESP_criptopack}, tutti i campi sono in chiaro
1340 fino al vettore di inizializzazione, il resto è crittografato.
1341
1342
1343
1344 \begin{figure}[!htb]
1345   \centering
1346   \includegraphics[width=10cm]{img/esp_option}
1347   \caption{Schema di pacchetto crittografato.}
1348   \label{tab:ESP_criptopack}
1349 \end{figure}
1350
1351
1352
1353 \subsection{Autoconfigurazione}
1354 \label{sec:IP_ipv6_autoconf}
1355
1356 Una delle caratteristiche salienti di IPv6 è quella dell'autoconfigurazione,
1357 il protocollo infatti fornisce la possibilità ad un nodo di scoprire
1358 automaticamente il suo indirizzo acquisendo i parametri necessari per potersi
1359 connettere a internet.
1360
1361 L'autoconfigurazione sfrutta gli indirizzi link-local; qualora sul nodo sia
1362 presente una scheda di rete che supporta lo standard IEEE802 (ethernet) questo
1363 garantisce la presenza di un indirizzo fisico a 48 bit unico; pertanto il nodo
1364 può assumere automaticamente senza pericoli di collisione l'indirizzo
1365 link-local \texttt{FE80::xxxx:xxxx:xxxx} dove \texttt{xxxx:xxxx:xxxx} è
1366 l'indirizzo hardware della scheda di rete. 
1367
1368 Nel caso in cui non sia presente una scheda che supporta lo standard IEEE802
1369 allora il nodo assumerà ugualmente un indirizzo link-local della forma
1370 precedente, ma il valore di \texttt{xxxx:xxxx:xxxx} sarà generato
1371 casualmente; in questo caso la probabilità di collisione è di 1 su 300
1372 milioni. In ogni caso per prevenire questo rischio il nodo invierà un
1373 messaggio ICMP \textit{Solicitation} all'indirizzo scelto attendendo un certo
1374 lasso di tempo; in caso di risposta l'indirizzo è duplicato e il
1375 procedimento dovrà essere ripetuto con un nuovo indirizzo (o interrotto
1376 richiedendo assistenza).
1377
1378 Una volta ottenuto un indirizzo locale valido diventa possibile per il nodo
1379 comunicare con la rete locale; sono pertanto previste due modalità di
1380 autoconfigurazione, descritte nelle seguenti sezioni. In ogni caso
1381 l'indirizzo link-local resta valido.
1382
1383 \subsection{Autoconfigurazione stateless}
1384 \label{sec:stateless}
1385
1386 Questa è la forma più semplice di autoconfigurazione, possibile quando
1387 l'indirizzo globale può essere ricavato dall'indirizzo link-local cambiando
1388 semplicemente il prefisso a quello assegnato dal provider per ottenere un
1389 indirizzo globale.
1390
1391 La procedura di configurazione è la seguente: all'avvio tutti i nodi IPv6
1392 iniziano si devono aggregare al gruppo multicast \textit{all-nodes}
1393 programmando la propria interfaccia per ricevere i messaggi dall'indirizzo
1394 multicast \texttt{FF02::1} (vedi \secref{sec:IP_ipv6_multicast}); a questo
1395 punto devono inviare un messaggio ICMP \textit{Router solicitation} a tutti i
1396 router locali usando l'indirizzo multicast \texttt{FF02::2} usando come
1397 sorgente il proprio indirizzo link-local.
1398
1399 Il router risponderà con un messaggio ICMP \textit{Router Advertisement} che
1400 fornisce il prefisso e la validità nel tempo del medesimo, questo tipo di
1401 messaggio può essere trasmesso anche a intervalli regolari. Il messaggio
1402 contiene anche l'informazione che autorizza un nodo a autocostruire
1403 l'indirizzo, nel qual caso, se il prefisso unito all'indirizzo link-local non
1404 supera i 128 bit, la stazione ottiene automaticamente il suo indirizzo
1405 globale.
1406
1407 \subsection{Autoconfigurazione stateful}
1408 \label{sec:stateful}
1409
1410 Benché estremamente semplice l'autoconfigurazione stateless presenta alcuni
1411 problemi; il primo è che l'uso degli indirizzi delle schede di rete è
1412 molto inefficiente; nel caso in cui ci siano esigenze di creare una gerarchia
1413 strutturata su parecchi livelli possono non restare 48~bit per l'indirizzo
1414 della singola stazione; il secondo problema è di sicurezza, dato che basta
1415 introdurre in una rete una stazione autoconfigurante per ottenere un accesso
1416 legale.
1417
1418 Per questi motivi è previsto anche un protocollo stateful basato su un
1419 server che offra una versione IPv6 del DHCP; un apposito gruppo di multicast
1420 \texttt{FF02::1:0} è stato riservato per questi server; in questo caso il
1421 nodo interrogherà il server su questo indirizzo di multicast con l'indirizzo
1422 link-local e riceverà un indirizzo unicast globale.
1423
1424
1425
1426 %%% Local Variables: 
1427 %%% mode: latex
1428 %%% TeX-master: "gapil"
1429 %%% End: