From d99b4995b23505a9afde30adf3a716aa7a55f0e9 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Wed, 25 Jul 2001 11:11:56 +0000 Subject: [PATCH] Rinominati app_a e app_b --- app_a.tex | 1347 ------------------------------------------------- app_b.tex | 3 - gapil.tex | 4 +- img/stack.eps | 964 ----------------------------------- img/stack.png | Bin 36653 -> 0 bytes process.tex | 2 + prochand.tex | 6 +- 7 files changed, 7 insertions(+), 2319 deletions(-) delete mode 100644 app_a.tex delete mode 100644 app_b.tex delete mode 100644 img/stack.eps delete mode 100644 img/stack.png diff --git a/app_a.tex b/app_a.tex deleted file mode 100644 index 5c85730..0000000 --- a/app_a.tex +++ /dev/null @@ -1,1347 +0,0 @@ -\chapter{Il protocollo IP} -\label{cha:ip_protocol} - -L'attuale Internent Protocol (IPv4) viene standardizzato nel 1981 -dall'RFC~719; esso nasce per disaccoppiare le applicazioni della struttura -hardware delle reti di trasmissione, e creare una interfaccia di trasmissione -dei dati indipendente dal sottostante substrato di rete, che può essere -realizzato con le tecnologie più disparate (Ethernet, Token Ring, FDDI, -etc.). - - -\section{Introduzione} -\label{sec:IP_intro} - -Il compito di IP è pertanto quello di trasmettere i pacchetti da un computer -all'altro della rete; le caratteristiche essenziali con cui questo viene -realizzato in IPv4 sono due: - -\begin{itemize} -\item \textit{Universal addressing} la comunicazione avviene fra due host - identificati univocamente con un indirizzo a 32 bit che può appartenere ad - una sola interfaccia di rete. -\item \textit{Best effort} viene assicurato il massimo impegno nella - trasmissione, ma non c'è nessuna garanzia per i livelli superiori né - sulla percentuale di successo né sul tempo di consegna dei pacchetti di - dati. -\end{itemize} - -Per effettuare la comunicazione e l'instradamento dei pacchetti fra le varie -reti di cui è composta Internet IPv4 organizza gli indirizzi in una -gerarchia a due livelli, in cui una parte dei 32 bit dell'indirizzo indica il -numero di rete, e un'altra l'host al suo interno. Il numero di rete serve -ai router per stabilire a quale rete il pacchetto deve essere inviato, il -numero di host indica la macchina di destinazione finale all'interno di detta -rete. - -Per garantire l'unicità dell'indirizzo Internet esiste un'autorità -centrale (la IANA, \textit{Internet Assigned Number Authority}) che assegna i -numeri di rete alle organizzazioni che ne fanno richiesta; è poi compito di -quest'ultime assegnare i numeri dei singoli host. - -Per venire incontro alle diverse esigenze gli indirizzi di rete sono stati -originariamente organizzati in \textit{classi}, (rappresentate in -Tab.~\ref{tab:ipv4class}), per consentire dispiegamenti di reti di dimensioni -diverse. - - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {c@{\hspace{1mm}\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}} - \omit&\omit& \multicolumn{7}{c}{7 bit}&\multicolumn{24}{c}{24 bit} \\ - \cline{2-33} - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - classe A &\centering 0& - \multicolumn{7}{@{}c@{\vrule}}{\parbox[c]{21mm}{\centering net Id}} & - \multicolumn{24}{@{}c@{\vrule}}{\parbox[c]{72mm}{\centering host Id}} \\ - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - \cline{2-33} - \multicolumn{33}{c}{ } \\ - \omit&\omit&\omit& - \multicolumn{14}{c}{14 bit}&\multicolumn{16}{c}{16 bit} \\ - \cline{2-33} - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - classe B&\centering 1&\centering 0& - \multicolumn{14}{@{}c@{\vrule}}{\parbox{42mm}{\centering net Id}} & - \multicolumn{16}{@{}c@{\vrule}}{\parbox{48mm}{\centering host Id}} \\ - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - \cline{2-33} - - \multicolumn{33}{c}{ } \\ - \omit&\omit&\omit& - \multicolumn{21}{c}{21 bit}&\multicolumn{8}{c}{8 bit} \\ - \cline{2-33} - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - classe C&\centering 1&\centering 1&\centering 0& - \multicolumn{21}{@{}c@{\vrule}}{\parbox{63mm}{\centering net Id}} & - \multicolumn{8}{@{}c@{\vrule}}{\parbox{24mm}{\centering host Id}} \\ - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - \cline{2-33} - - - \multicolumn{33}{c}{ } \\ - \omit&\omit&\omit&\omit& - \multicolumn{28}{c}{28 bit} \\ - \cline{2-33} - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - classe D&\centering 1&\centering 1&\centering 1&\centering 0& - \multicolumn{28}{@{}c@{\vrule}}{\parbox{63mm}{\centering - multicast group Id}} \\ - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - \cline{2-33} - - \multicolumn{33}{c}{ } \\ - \omit&\omit&\omit&\omit&\omit& - \multicolumn{27}{c}{27 bit} \\ - \cline{2-33} - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - classe E&\centering 1&\centering 1&\centering 1&\centering 1&\centering 0& - \multicolumn{27}{@{}c@{\vrule}}{\parbox{59mm}{\centering - reserved for future use}} \\ - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - \cline{2-33} - -\end{tabular} -\caption{Le classi di indirizzi secondo IPv4.} -\label{tab:IP_ipv4class} -\end{table} - -Le classi usate per il dispiegamento delle reti sono le prime tre; la classe D -è destinata al (non molto usato) \textit{multicast} mentre la classe E è -riservata per usi sperimentali e non viene impiegata. - -Come si può notare però la suddivisione riportata in \tabref{tab:IP_ipv4class} -è largamente inefficiente in quanto se ad un utente necessita anche solo un -indirizzo in più dei 256 disponibili con una classe A occorre passare a una -classe B, con un conseguente spreco di numeri. - -Inoltre, in particolare per le reti di classe C, la presenza di tanti -indirizzi di rete diversi comporta una crescita enorme delle tabelle di -instradamento che ciascun router dovrebbe tenere in memoria per sapere dove -inviare il pacchetto, con conseguente crescita dei tempi di processo da parte -di questi ultimi ed inefficienza nel trasporto. - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {c@{\hspace{1mm}\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule} - p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}p{3mm}@{\vrule}} - \omit& - \multicolumn{12}{c}{$n$ bit}&\multicolumn{20}{c}{$32-n$ bit} \\ - \cline{2-33} - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - CIDR & - \multicolumn{12}{@{}c@{\vrule}}{\parbox[c]{36mm}{\centering net Id}} & - \multicolumn{20}{@{}c@{\vrule}}{\parbox[c]{60mm}{\centering host Id}} \\ - \omit\hfill\vrule &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& \\ - \cline{2-33} -\end{tabular} -\caption{Uno esempio di indirizzamento CIDR.} -\label{tab:IP_ipv4cidr} -\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. - - -\section{I motivi della transizione} -\label{sec:IP_whyipv6} - -Negli ultimi anni la crescita vertiginosa del numero di macchine connesse a -internet ha iniziato a far emergere i vari limiti di IPv4; in particolare si -è iniziata a delineare la possibilità di arrivare a una carenza di -indirizzi disponibili. - -In realtà il problema non è propriamente legato al numero di indirizzi -disponibili; infatti con 32 bit si hanno $2^{32}$, cioè circa 4 miliardi, -numeri diversi possibili, che sono molti di più dei computer attualemente -esistenti. - -Il punto è che la suddivisione di questi numeri nei due livelli rete/host e -l'utilizzo delle classi di indirizzamento mostrate in precedenza, ha -comportato che, nella sua evoluzione storica, il dispiegamento delle reti e -l'allocazione degli indirizzi siano stati inefficienti; neanche l'uso del CIDR -ha permesso di eliminare le inefficienze che si erano formate, dato che il -ridispiegamento degli indirizzi comporta cambiamenti complessi a tutti i -livelli e la riassegnazione di tutti gli indirizzi dei computer di ogni -sottorete. - -Diventava perciò necessario progettare un nuovo protocollo che permettesse -di risolvere questi problemi, e garantisse flessibilità sufficiente per -poter continuare a funzionare a lungo termine; in particolare necessitava un -nuovo schema di indirizzamento che potesse rispondere alle seguenti -necessità: - -\begin{itemize} -\item un maggior numero di numeri disponibili che consentisse di non restare - più a corto di indirizzi -\item un'organizzazione gerarchica più flessibile dell'attuale -\item uno schema di assegnazione degli indirizzi in grado di minimizzare le - dimensioni delle tabelle di instradamento -\item uno spazio di indirizzi che consentisse un passaggio automatico dalle - reti locali a internet -\end{itemize} - - -\section{Principali caratteristiche di IPv6} -\label{sec:IP_ipv6over} - -Per rispondere alle esigenze descritte in \secref{sec:IP_whyipv6} IPv6 nasce -come evoluzione di IPv4, mantendone inalterate le funzioni che si sono -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 -grandi linee nei seguenti punti: -\begin{itemize} -\item l'espansione delle capacità di indirizzamento e instradamento, per - supportare una gerarchia con più livelli di indirizzamento, un numero di - nodi indirizzabili molto maggiore e una autoconfigurazione degli indirizzi -\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 - 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 -\item un supporto per le opzioni migliorato, per garantire una trasmissione - più efficiente del traffico normale, limiti meno stringenti sulle - dimensioni delle opzioni, e la flessibilità necessaria per introdurne di - nuove in futuro -\item il supporto per delle capacità di qualità di servizio (QoS) che - permetta di identificare gruppi di dati per i quali si può provvedere un - trattamento speciale (in vista dell'uso di internet per applicazioni - multimediali e/o ``real-time'') -\end{itemize} - - -\section{La testata 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}) - -\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 -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. - -\begin{table}[htb] - \begin{center} - \footnotesize - \begin{tabular}{ l c p{8cm}} - \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\ - \toprule - \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 & - \textsl{lunghezza del carico}, cioè del corpo dei dati che segue - l'intestazione, in bytes. \\ - \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{hop limit} & 8 bit & \textsl{limite di salti}, - stesso significato del \textit{time to live} nella testata 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 - \end{tabular} - \caption{Legenda per il significato dei campi dell'intestazione di IPv6} - \label{tab:IP_ipv6field} - \end{center} -\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: - -\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 - \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ù - 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 - perché la frammentazione è un'eccezione che non deve rallentare il - 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 - 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 - molti tempo di riprocessamento dato che i router non hanno più la - necessità di ricalcolare la checksum ad ogni passaggio di un pacchetto per - il cambiamento del campo \textit{hop limit}. -\item è stato eliminato il campo \textit{type of service}, che praticamente - non è mai stato utilizzato; una parte delle funzionalià ad esso delegate - sono state reimplementate (vedi il campo \textit{priority} al prossimo - punto) con altri metodi. -\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 - identificare i pacchetti appartenenti a un ``flusso'' di dati per i quali si - può provvedere un trattamento speciale. -\end{itemize} - -\begin{table}[htb] - \footnotesize - \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} - -\begin{table}[htb] - \footnotesize - \begin{center} - \begin{tabular}{l c p{9cm}} - \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\ - \toprule - \textit{version} & 4 bit & \textsl{versione}, nel caso - specifico vale sempre 4\\ - \textit{head lenght} & 4 bit & \textsl{lunghezza della testata}, - 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 - la dimensione del pacchetto IP in byte\\ - \textit{identification} & 16 bit & \textsl{identificazione}, - assegnato alla creazione, è aumentato di uno all'origine alla - trasmissione di ciascun pacchetto, ma resta lo stesso per i - pacchetti frammentati\\ - \textit{flag} & 3 bit & - \textsl{flag} bit di frammentazione, uno indica se un - pacchetto è frammentato, un'altro se ci sono ulteriori frammenti, e - un'altro se il pacchetto non può essere frammentato. \\ - \textit{fragmentation offset} & 13 bit& \textsl{offset di frammento}, - indica la posizione del frammento rispetto al pacchetto originale\\ - \textit{time to live} & 16 bit & \textsl{tempo di vita}, - ha lo stesso significato di - \textit{hop limit}, vedi Tab.~\ref{tab: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\\ - \textit{source IP} & 32 bit & \textsl{indirizzo di origine}\\ - \textit{destination IP} & 32 bit & \textsl{indirizzo di destinazione}\\ - \bottomrule - \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, -ulteriori caratteristiche che diversificano il comportamento di IPv4 da -quello di IPv6 sono le seguenti: - -\begin{itemize} -\item il broadcasting non è previsto in IPv6, le applicazioni che lo usano - dovono essere reimplementate usando il multicasting (vedi - \secref{sec:IP_multicast}), che da opzionale diventa obbligatorio. -\item è stato introdotto un nuovo tipo di indirizzi, gli \textit{anycast}. -\item i router non possono più frammentare i pacchetti lungo il cammino, la - frammentazione di pacchetti troppo grandi potrà essere gestita solo ai - capi della comunicazione (usando un'apposita estensione vedi - \secref{sec:IP_ipv6_extens}). -\item IPv6 richiede il supporto per il \textit{path MTU discovery} (cioè il - protocollo per la selezione della massima lunghezza del pacchetto); seppure - questo sia in teoria opzionale, senza di esso non sarà possibile inviare - pacchetti più larghi della dimensione minima (576 bytes). -\end{itemize} - -\section{Gli indirizzi di IPv6} -\label{sec:IP_ipv6_addr} - -Come già abbondantemente anticipato la principale novità di IPv6 è -costituita dall'ampliamento dello spazio degli indirizzi, che consente di avere -indirizzi disponibili in un numero dell'ordine di quello degli atomi che -costituiscono la terra. - -In realtà l'allocazione di questi indirizzi deve tenere conto della -necessità di costruire delle gerarchie che consentano un instradamento -rapido ed efficiente dei pacchetti, e flessibilità nel dispiegamento delle -reti, il che comporta una riduzione drastica dei numeri utilizzabili; uno -studio sull'efficienza dei vari sistemi di allocazione usati in altre -architetture (come i sistemi telefonici) è comunque giunto alla conclusione -che anche nella peggiore delle ipotesi IPv6 dovrebbe essere in grado di -fornire più di un migliaio di indirizzi per ogni metro quadro della -superficie terrestre. - - -\subsection{La notazione} -\label{sec:IP_ipv6_notation} -Con un numero di bit quadruplicato non è più possibile usare la notazione -coi numeri decimali di IPv4 per rappresentare un numero IP. Per questo gli -indirizzi di IPv6 sono in genere scritti come sequenze di otto numeri -esadecimali di 4 cifre (cioè a gruppi di 16 bit) usando i due punti come -separatore; cioè qualcosa del tipo -\texttt{5f1b:df00:ce3e:e200:0020:0800:2078:e3e3}. - - -Visto che la notazione resta comunque piuttosto pesante esistono alcune -abbreviazioni; si può evitare di scrivere gli zeri iniziali per cui si -può scrivere \texttt{1080:0:0:0:8:800:ba98:2078:e3e3}; se poi un intero è -zero si può omettere del tutto, così come un insieme di zeri (ma questo -solo una volta per non generare ambiguità) per cui il precedente indirizzo -si può scrivere anche come \texttt{1080::8:800:ba98:2078:e3e3}. - -Infine per scrivere un indirizzo IPv4 all'interno di un indirizzo IPv6 si -può usare la vecchia notazione con i punti, per esempio -\texttt{::192.84.145.138}. - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular}{|l|l|l|} - \hline - \centering \textbf{Tipo di indirizzo} - & \centering \textbf{Prefisso} & {\centering \textbf{Frazione}} \\ - \hline - \hline - riservato & \texttt{0000 0000} & 1/256 \\ - non assegnato & \texttt{0000 0001} & 1/256 \\ - \hline - riservato per NSAP & \texttt{0000 001} & 1/128\\ - riservato per IPX & \texttt{0000 010} & 1/128\\ - \hline - non assegnato & \texttt{0000 011} & 1/128 \\ - non assegnato & \texttt{0000 1} & 1/32 \\ - non assegnato & \texttt{0001} & 1/16 \\ - \hline - provider-based & \texttt{001} & 1/8\\ - \hline - non assegnato & \texttt{010} & 1/8 \\ - non assegnato & \texttt{011} & 1/8 \\ - geografic-based& \texttt{100} & 1/8 \\ - non assegnato & \texttt{101} & 1/8 \\ - non assegnato & \texttt{110} & 1/8 \\ - non assegnato & \texttt{1110} & 1/16 \\ - non assegnato & \texttt{1111 0} & 1/32 \\ - non assegnato & \texttt{1111 10} & 1/64 \\ - non assegnato & \texttt{1111 110} & 1/128 \\ - non assegnato & \texttt{1111 1100 0} & 1/512 \\ - \hline - unicast link-local & \texttt{1111 1100 10} & 1/1024 \\ - unicast site-local & \texttt{1111 1100 11} & 1/1024 \\ - \hline - \hline - multicast & \texttt{1111 1111} & 1/256 \\ - \hline - \end{tabular} - \caption{Classificazione degli indirizzi IPv6 a seconda dei bit più - significativi} - \label{tab:IP_ipv6addr} -\end{table} - - -\subsection{La architettura degli indirizzi di IPv6} -\label{sec:IP_ipv6_addr_arch} - -Come per IPv4 gli indirizzi sono identificatori per una singola (indirizzi -\textit{unicast}) o per un insieme (indirizzi \textit{multicast} e -\textit{anycast}) di interfacce di rete. - -Gli indirizzi sono sempre assegnati all'interfaccia, non al nodo che la -ospita; dato che ogni interfaccia appartiene ad un nodo quest'ultimo può -essere identificato attraverso uno qualunque degli indirizzi unicast delle sue -interfacce. A una interfaccia possono essere associati anche più indirizzi. - -IPv6 presenta tre tipi diversi di indirizzi: due di questi, gli indirizzi -\textit{unicast} e \textit{multicast} hanno le stesse caratteristiche che in -IPv4, un terzo tipo, gli indirizzi \textit{anycast} è completamente nuovo. -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 -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 -(nel senso di distanza di routing) delle interfacce del gruppo, gli indirizzi -\textit{multicast} identificano un gruppo di interfacce tale che un pacchetto -mandato a uno di questi indirizzi viene inviato a tutte le interfacce del -gruppo. - -In IPv6 non ci sono più le classi ma i bit più significativi indicano il tipo -di indirizzo; in \tabref{tab:IP_ipv6addr} sono riportati i valori di detti -bit e il tipo di indirizzo che loro corrispondente. I bit più significativi -costituiscono quello che viene chiamato il \textit{format prefix} ed è sulla -base di questo che i vari tipi di indirizzi vengono identificati. Come si -vede questa architettura di allocazione supporta l'allocazione di indirizzi -per i provider, per uso locale e per il multicast; inoltre è stato riservato -lo spazio per indirizzi NSAP, IPX e per le connessioni; gran parte dello -spazio (più del 70\%) è riservato per usi futuri. - -Si noti infine che gli indirizzi \textit{anycast} non sono riportati in -\tabref{tab:IP_ipv6addr} in quanto allocati al di fuori dello spazio di -allocazione degli indirizzi unicast. - -\subsection{Indirizzi unicast \textit{provider-based}} -\label{sec:IP_ipv6_unicast} - -Gli indirizzi \textit{provider-based} sono gli indirizzi usati per le -comunicazioni globali, questi sono definiti nell'RFC 2073 e sono gli -equivalenti degli attuali indirizzi delle classi da A a C. - -L'autorità che presiede all'allocazione di questi indirizzi è la IANA; per -evitare i problemi di crescita delle tabelle di instradamento e una procedura -efficiente di allocazione la struttura di questi indirizzi è organizzata fin -dall'inizio in maniera gerarchica; pertanto lo spazio di questi indirizzi è -stato suddiviso in una serie di campi secondo lo schema riportato in -\tabref{tab:IP_ipv6_unicast}. - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{6mm} - @{\vrule}p{16mm}@{\vrule}p{24mm} - @{\vrule}p{30mm}@{\vrule}c@{\vrule}} - \multicolumn{1}{@{}c@{}}{3}&\multicolumn{1}{c}{5 bit}& - \multicolumn{1}{c}{$n$ bit}&\multicolumn{1}{c}{$56-n$ bit}& - \multicolumn{1}{c}{64 bit} \\ - \hline - \omit\vrule\hfill\vrule&\hspace{16mm} & & &\omit\hspace{76mm}\hfill\vrule\\ - \centering 010& - \centering \textsl{Registry Id}& - \centering \textsl{Provider Id}& - \centering \textsl{Subscriber Id}& - \textsl{Intra-Subscriber} \\ - \omit\vrule\hfill\vrule& & & &\omit\hspace{6mm}\hfill\vrule\\ - \hline - \end{tabular} -\caption{Formato di un indirizzo unicast \textit{provider-based}.} -\label{tab:IP_ipv6_unicast} -\end{table} - -Al livello più alto la IANA può delegare l'allocazione a delle autorità -regionali (i Regional Register) assegnando ad esse dei blocchi di indirizzi; a -queste autorità regionali è assegnato un Registry Id che deve seguire -immediatamente il prefisso di formato. Al momento sono definite tre registri -regionali (INTERNIC, RIPE NCC e APNIC), inoltre la IANA si è riservata la -possibilità di allocare indirizzi su base regionale; pertanto sono previsti -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} - \textbf{Regione} & \textbf{Registro} & \textbf{Id} \\ - \toprule - Nord America &INTERNIC & \texttt{11000} \\ - Europa & RIPE NCC & \texttt{01000} \\ - Asia & APNIC & \texttt{00100} \\ - Multi-regionale & IANA &\texttt{10000} \\ - \bottomrule - \end{tabular} - \caption{Valori dell'identificativo dei - Regional Register allocati ad oggi.} - \label{tab:IP_ipv6_regid} - \end{center} -\end{table} - -L'organizzazione degli indirizzi prevede poi che i due livelli successivi, di -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 -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. - -L'ultimo livello è quello \textit{Intra-subscriber} che è lasciato alla -gestione dei singoli fruitori finali, gli indirizzi \textit{provider-based} -lasciano normalmente gli ultimi 64~bit a disposizione per questo livello, la -modalità più immediata è quella di usare uno schema del tipo mostrato in -\tabref{tab:IP_ipv6_uninterf} dove l'\textit{Interface Id} è dato dal -MAC-address a 48~bit dello standard ethernet, scritto in genere nell'hardware -delle scheda di rete, e si usano i restanti 16~bit per indicare la sottorete. - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{64mm}@{\vrule}p{16mm}@{\vrule}c@{\vrule}} - \multicolumn{1}{c}{64 bit}&\multicolumn{1}{c}{16 bit}& - \multicolumn{1}{c}{48 bit}\\ - \hline - \omit\vrule\hfill\vrule&\hspace{16mm}&\omit\hspace{48mm}\hfill\vrule\\ - \centering \textsl{Subscriber Prefix}& - \centering \textsl{Subnet Id}& - \textsl{Interface Id}\\ - \omit\vrule\hfill\vrule& &\omit\hspace{6mm}\hfill\vrule\\ - \hline - \end{tabular} -\caption{Formato del campo \textit{Intra-subscriber} per un indirizzo unicast - \textit{provider-based}.} -\label{tab:IP_ipv6_uninterf} -\end{table} - -Qualora si dovesse avere a che fare con una necessità di un numero più -elevato di sottoreti, il precedente schema andrebbe modificato, per evitare -l'enorme spreco dovuto all'uso dei MAC-address, a questo scopo si possono -usare le capacità di autoconfigurazione di IPv6 per assegnare indirizzi -generici con ulteriori gerarchie per sfruttare efficacemente tutto lo spazio -di indirizzi. - -Un registro regionale può introdurre un ulteriore livello nella gerarchia -degli indirizzi, allocando dei blocchi per i quali delegare l'autorità a dei -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 -mostrato in \ntab. - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{3mm} - @{\vrule}p{10mm}@{\vrule}p{12mm}@{\vrule}p{18mm} - @{\vrule}p{18mm}@{\vrule}c@{\vrule}} - \multicolumn{1}{@{}c@{}}{3}&\multicolumn{1}{c}{5 bit}& - \multicolumn{1}{c}{n bit}&\multicolumn{1}{c}{m bit}& - \multicolumn{1}{c}{56-n-m bit}&\multicolumn{1}{c}{64 bit} \\ - \hline - \omit\vrule\hfill\vrule& & & & &\omit\hspace{64mm}\hfill\vrule\\ - \centering \texttt{3}& - \centering \textsl{Reg.}& - \centering \textsl{Naz.}& - \centering \textsl{Prov.}& - \centering \textsl{Subscr.}& - \textsl{Intra-Subscriber} \\ - \omit\vrule\hfill\vrule &&&&&\\ - \hline - \end{tabular} -\caption{Formato di un indirizzo unicast \textit{provider-based} che prevede - un registro nazionale.} -\label{tab:IP_ipv6_uninaz} -\end{table} - - -\subsection{Indirizzi ad uso locale} -\label{sec:IP_ipv6_linksite} - -Gli indirizzi ad uso locale sono indirizzi unicast che sono instradabili solo -localmente (all'interno di un sito o di una sottorete), e possono avere una -unicità locale o globale. - -Questi indirizzi sono pensati per l'uso all'interno di un sito per mettere su -una comunicazione locale immediata, o durante le fasi di autoconfigurazione -prima di avere un indirizzo globale. - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{10mm}@{\vrule}p{54mm}@{\vrule}c@{\vrule}} - \multicolumn{1}{c}{10} &\multicolumn{1}{c}{54 bit} & - \multicolumn{1}{c}{64 bit} \\ - \hline - \omit\vrule\hfill\vrule & & \omit\hspace{64mm}\hfill\vrule\\ - \centering \texttt{FE80}& - \centering\texttt{0000 . . . . . 0000} & - Interface Id \\ - \omit\vrule\hfill\vrule & &\\ - \hline -\end{tabular} -\caption{Formato di un indirizzo \textit{link-local}.} -\label{tab:IP_ipv6_linklocal} -\end{table} - -Ci sono due tipi di indirizzi, \textit{link-local} e \textit{site-local}. Il -primo è usato per un singolo link; la struttura è mostrata in \curtab, questi -indirizzi iniziano sempre per \texttt{FE80} e vengono in genere usati per la -configurazione automatica dell'indirizzo al bootstrap e per la ricerca dei -vicini (vedi \ref{sec:IP_ipv6_autoconf}); un pacchetto che abbia tale -indirizzo come sorgente o destinazione non deve venire ritrasmesso dai router. - -Un indirizzo \textit{site-local} invece è usato per l'indirizzamento -all'interno di un sito che non necessita di un prefisso globale; la struttura -è mostrata in \ntab, questi indirizzi iniziano sempre per -\texttt{FEC0} e non devono venire ritrasmessi dai router all'esterno del sito -stesso; sono in sostanza gli equivalenti degli indirizzi riservati per reti -private definiti su IPv4. -Per entrambi gli indirizzi il campo \textit{Interface Id} è un -identificatore che deve essere unico nel dominio in cui viene usato, un modo -immediato per costruirlo è quello di usare il MAC-address delle schede di -rete. - -\begin{table}[!h] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{10mm}@{\vrule}p{38mm}@{\vrule}p{16mm} - @{\vrule}c@{\vrule}} - \multicolumn{1}{c}{10} &\multicolumn{1}{c}{38 bit} & - \multicolumn{1}{c}{16 bit} &\multicolumn{1}{c}{64 bit} \\ - \hline - \omit\vrule\hfill\vrule& & & \omit\hspace{64mm}\hfill\vrule\\ - \centering \texttt{FEC0}& - \centering \texttt{0000 . . . 0000}& - \centering Subnet Id & - Interface Id\\ - \omit\vrule\hfill\vrule& & &\\ - \hline -\end{tabular} -\caption{Formato di un indirizzo \textit{site-local}.} -\label{tab:IP_ipv6_sitelocal} -\end{table} - -Gli indirizzi di uso locale consentono ad una organizzazione che non è -(ancora) connessa ad Internet di operare senza richiedere un prefisso globale, -una volta che in seguito l'organizzazione venisse connessa a Internet -potrebbe continuare a usare la stessa suddivisione effettuata con gli -indirizzi \textit{site-local} utilizzando un prefisso globale e la -rinumerazione degli indirizzi delle singole macchine sarebbe automatica. - -\subsection{Indirizzi riservati} -\label{sec:IP_ipv6_reserved} - -Alcuni indirizzi sono riservati per scopi speciali, in particolare per scopi -di compatibilità. - -Un primo tipo sono gli indirizzi \textit{IPv4 mappati su IPv6} (mostrati in -\ntab), questo sono indirizzi unicast che vengono usati per consentire ad -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 -sull'host di origine). - -\begin{table}[!htb] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{80mm}@{\vrule}p{16mm}@{\vrule}c@{\vrule}} - \multicolumn{1}{c}{80 bit} &\multicolumn{1}{c}{16 bit} & - \multicolumn{1}{c}{32 bit} \\ - \hline - \omit\vrule\hfill\vrule& &\omit\hspace{32mm}\hfill\vrule\\ - \centering - \texttt{0000 . . . . . . . . . . . . 0000} & - \centering\texttt{FFFF} & - IPv4 address \\ - \omit\vrule\hfill\vrule& &\\ - \hline -\end{tabular} -\caption{Formato di un indirizzo IPV4 mappato su IPv6.} -\label{tab:IP_ipv6_map} -\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. - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{80mm}@{\vrule}p{16mm}@{\vrule}p{32mm}@{\vrule}} - \multicolumn{1}{c}{80 bit} &\multicolumn{1}{c}{16 bit} & - \multicolumn{1}{c}{32 bit} \\ - \hline - \omit\vrule\hfill\vrule& &\omit\hspace{32mm}\hfill\vrule\\ - \centering - \texttt{0000 . . . . . . . . . . . . 0000} & - \centering\texttt{0000} & - \parbox{32mm}{\centering IPv4 address} \\ - \omit\vrule\hfill\vrule& &\\ - \hline -\end{tabular} -\caption{Formato di un indirizzo IPV4 mappato su IPv6.} -\label{tab:IP_ipv6_comp} -\end{table} - -Altri indirizzi speciali sono il \textit{loopback address}, costituito da 127 -zeri ed un uno (cioè \texttt{::1}) e l'\textsl{indirizzo generico} -costituito da tutti zeri (scritto come \texttt{0::0} o ancora più -semplicemente come \texttt{:}) usato in genere quando si vuole indicare -l'accettazione di una connessione da qualunque host. - -\subsection{Multicasting} -\label{sec:IP_ipv6_multicast} - -Gli indirizzi \textit{multicast} sono usati per inviare un pacchetto a un -gruppo di interfacce; l'indirizzo identifica uno specifico gruppo di -multicast e il pacchetto viene inviato a tutte le interfacce di detto gruppo. -Un'interfaccia può appartenere ad un numero qualunque numero di gruppi di -multicast. Il formato degli indirizzi \textit{multicast} è riportato in -\ntab: - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {@{\vrule}p{12mm} - @{\vrule}p{6mm}@{\vrule}p{6mm}@{\vrule}c@{\vrule}} - \multicolumn{1}{c}{8}&\multicolumn{1}{c}{4}& - \multicolumn{1}{c}{4}&\multicolumn{1}{c}{112 bit} \\ - \hline - \omit\vrule\hfill\vrule& & & \omit\hspace{104mm}\hfill\vrule\\ - \centering\texttt{FF}& - \centering flag & - \centering scop& - Group Id\\ - \omit\vrule\hfill\vrule &&&\\ - \hline - \end{tabular} -\caption{Formato di un indirizzo \textit{multicast}.} -\label{tab:IP_ipv6_multicast} -\end{table} - -Il prefisso di formato per tutti gli indirizzi \textit{multicast} è -\texttt{FF}, ad esso seguono i due campi il cui significato è il seguente: - -\begin{itemize} -\item \textsl{flag}: un insieme di 4 bit, di cui i primi tre sono riservati e - posti a zero, l'ultimo è zero se l'indirizzo è permanente (cioè un - indirizzo noto, assegnato dalla IANA), ed è uno se invece l'indirizzo è - transitorio. -\item \textsl{scop} è un numero di quattro bit che indica il raggio di - validità dell'indirizzo, i valori assegnati per ora sono riportati in - \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 - 0 & riservato & 8 & organizzazione locale \\ - 1 & nodo locale & 9 & non assegnato \\ - 2 & collegamento locale & A & non assegnato \\ - 3 & non assegnato & B & non assegnato \\ - 4 & non assegnato & C & non assegnato \\ - 5 & sito locale & D & non assegnato \\ - 6 & non assegnato & E & globale \\ - 7 & non assegnato & F & riservato \\ - \bottomrule - \end{tabular} -\caption{Possibili valori del campo \textsl{scop} di un indirizzo multicast.} -\label{tab:IP_ipv6_multiscope} -\end{table} - -\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. - -Questi indirizzi sono allocati nello stesso spazio degli indirizzi unicast, -usando uno dei formati disponibili, e per questo, sono da essi assolutamente -indistinguibili. Quando un indirizzo unicast viene assegnato a più interfacce -(trasformandolo in un anycast) il computer su cui è l'interfaccia deve essere -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). - -Gli indirizzi anycast, quando vengono usati come parte di una sequenza di -instradamento, consentono ad esempio ad un nodo di scegliere quale fornitore -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. - -L'idea alla base degli indirizzi anycast è perciò quella di utilizzarli per -poter raggiungere il fornitore di servizio più vicino; ma restano aperte tutta -una serie di problematiche, visto che una connessione con uno di questi -indirizzi non è possibile, dato che per una variazione delle distanze di -routing non è detto che due pacchetti successivi finiscano alla stessa -interfaccia. - -La materia è pertanto ancora controversa e in via di definizione. - - -\section{Le estensioni} -\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. - -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 bytes per mantenere l'allineamento a 64~bit di tutti le testate 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 -alla destinazione finale, questa scelta ha consentito un miglioramento delle -prestazioni rispetto a IPv4 dove la presenza di un'opzione comportava l'esame -di tutte quante. - -Un secondo miglioramento è che rispetto a IPv4 le opzioni possono essere di -lunghezza arbitraria e non limitate a 40 bytes; questo, insieme al modo in cui -vengono trattate, consente di utilizzarle per scopi come l'autenticazione e la -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{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 - opzione di IPv4) cioè una lista di indirizzi IP di nodi per i quali il - pacchetto deve passare. -\item \textbf{Fragmentation} viene generato automaticamente quando un host - vuole frammentare un pacchetto, ed è riprocessato automaticamente alla - destinazione che riassembla i frammenti. -\item \textbf{Authentication} gestisce l'autenticazione e il controllo di - integrità dei pacchetti; è documentato dall'RFC 162. -\item \textbf{Encapsulation} serve a gestire la segretezza del contenuto - trasmesso; è documentato dall'RFC 1827. -\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 -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. - -\begin{table}[htb] - \begin{center} - \footnotesize - \begin{tabular}{c l l} - \textbf{Valore} & \textbf{Keyword} & \textbf{Tipo di protocollo} \\ - \hline - \hline - 0 & & riservato\\ - & HBH & Hop by Hop \\ - 1 & ICMP & Internet Control Message (IPv4 o IPv6) \\ - 2 & ICMP & Internet Group Management (IPv4) \\ - 3 & GGP & Gateway-to-Gateway \\ - 4 & IP & IP in IP (IPv4 encapsulation) \\ - 5 & ST & Stream \\ - 6 & TCP & Trasmission Control \\ - 17 & UDP & User Datagram \\ - 43 & RH & Routing Header (IPv6) \\ - 44 & FH & Fragment Header (IPv6) \\ - 45 & IDRP & Inter Domain Routing \\ - 51 & AH & Autentication 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 \\ - \end{tabular} - \caption{Tipi di protocolli e testate di estensione} - \label{tab:IP_ipv6_nexthead} - \end{center} -\end{table} - -Questo meccanismo permette la presenza di più opzioni in successione prima -del pacchetto del protocollo di trasporto; l'ordine raccomandato per le -estensioni è quello riportato nell'elenco precedente con la sola differenza -che le opzioni di destinazione sono inserite nella posizione ivi indicata solo -se, come per il tunnelling, devono essere esaminate dai router, quelle che -devono essere esaminate solo alla destinazione finale vanno in coda. - - -\section{Qualità di servizio} -\label{sec:IP_ipv6_qos} - -Una delle caratteristiche innovative di IPv6 è quella di avere introdotto un -supporto per la qualità di servizio che è importante per applicazioni come -quelle multimediali o ``real-time'' che richiedono un qualche grado di -controllo sulla stabilità della banda di trasmissione, sui ritardi o la -dispersione dei temporale del flusso dei pacchetti. - - -\subsection{Etichette di flusso} -\label{sec:IP_ipv6_flow} -L'introduzione del campo \textit{flow label} può essere usata dall'origine -della comunicazione per etichettare quei pacchetti per i quali si vuole un -trattamento speciale da parte dei router come un una garanzia di banda minima -assicurata o un tempo minimo di instradamento/trasmissione garantito. - -Questo aspetto di IPv6 è ancora sperimentale per cui i router che non -supportino queste funzioni devono porre a zero il \textit{flow label} per i -pacchetti da loro originanti e lasciare invariato il campo per quelli in -transito. - -Un flusso è una sequenza di pacchetti da una particolare origine a una -particolare destinazione per il quale l'origine desidera un trattamento -speciale da parte dei router che lo manipolano; la natura di questo -trattamento può essere comunicata ai router in vari modi (come un protocollo -di controllo o con opzioni del tipo \textit{hop-by-hop}). - -Ci possono essere più flussi attivi fra un'origine e una destinazione, come -del traffico non assegnato a nessun flusso, un flusso viene identificato -univocamente dagli indirizzi di origine e destinazione e da una etichetta di -flusso diversa da zero, il traffico normale deve avere l'etichetta di flusso -posta a zero. - -L'etichetta di flusso è assegnata dal nodo di origine, i valori devono -essere scelti in maniera (pseudo)casuale nel range fra 1 e FFFFFF in modo da -rendere utilizzabile un qualunque sottoinsieme dei bit come chiavi di hash per -i router. - -\subsection{Priorità} -\label{sec:prio} - -Il campo di priorità consente di indicare il livello di priorità dei -pacchetti relativamente agli altri pacchetti provenienti dalla stessa -sorgente. I valori sono divisi in due intervalli, i valori da 0 a 7 sono usati -per specificare la priorità del traffico per il quale la sorgente provvede -un controllo di congestione cioè per il traffico che può essere ``tirato -indietro'' in caso di congestione come quello di TCP, i valori da 8 a 15 sono -usati per i pacchetti che non hanno questa caratteristica, come i pacchetti -``real-time'' inviati a ritmo costante. - -Per il traffico con controllo di congestione sono raccomandati i seguenti -valori di priorità a seconda del tipo di applicazione: - -\begin{table}[htb] - \centering - \footnotesize - \begin{tabular} {c l} - Valore & tipo di traffico \\ - \toprule - 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 -\end{tabular} -\caption{Formato di un indirizzo \textit{site-local}.} -\label{tab:priority} -\end{table} - -Per il traffico senza controllo di congestione la priorità più bassa -dovrebbe essere usata per quei pacchetti che si preferisce siano scartati -più facilmente in caso di congestione. - - -\section{Sicurezza a livello IP} -\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. - -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) prevendo 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 un carico di sicurezza (\textit{Encrypted Security Payload}) che - assicura che solo il legittimo ricevente può leggere il pacchetto. -\end{itemize} - -Perché tutto questo funzioni le stazioni sorgente e destinazione devono -usare una stessa chiave crittografica e gli stessi algoritmi, l'insieme degli -accordi fra le due stazioni per concordare chiavi e algoritmi usati va sotto -il nome di associazione di sicurezza. - -I pacchetti autenticati e crittografati portano un indice dei parametri di -sicurezza (SPI, \textit{Security Parameter Index}) che viene negoziato prima -di ogni comunicazione ed è definito dalla stazione sorgente. Nel caso di -multicast dovà 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 -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. - -Completano la testata i dati di autenticazione che contengono un valore di -controllo di intgrità (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 -devono provvedere questa capacità. - -\renewcommand\arraystretch{1.2} -\begin{table}[htb] - \footnotesize - \begin{center} - \begin{tabular}{@{\vrule}p{24mm}@{\vrule}p{24mm} - @{\vrule}p{48mm}@{\vrule} } - \multicolumn{3}{@{}c@{}}{0\hfill 15 16\hfill 31}\\ - \hline - \centering Next Header&\centering Lenght& - \centering Reserved \tabularnewline - \hline - \multicolumn{3}{@{\vrule}c@{\vrule}} - {\centering Security Parameter Index (SPI)}\\ - \hline - \multicolumn{3}{@{\vrule}c@{\vrule}} - {\centering Sequence Number}\\ - \hline - \multicolumn{3}{@{\vrule}c@{\vrule}}{} \\ - \multicolumn{3}{@{\vrule}c@{\vrule}}{Autentication Data} \\ - \multicolumn{3}{@{\vrule}c@{\vrule}} - {\centering ... } \\ - \multicolumn{3}{@{\vrule}c@{\vrule}}{} \\ - \hline - \end{tabular} - \caption{Formato della testata 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 -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 -eccezion fatta per la \textit{Destination Option} che può comparire sia -prima che dopo. - -\begin{table}[htb] - \footnotesize - \begin{center} - \begin{tabular*}{90mm}{|c|c|c|c|c|c|} - \hline - & & & & & \\ - IP Head & - \parbox[c]{28mm}{hop by hop, dest., \\ - routing, fragment}& AH & - dest.opt & TCP & data \\ - & & & & & \\ - \hline - \end{tabular*} - \caption{Formato della testata dell'estensione di autenticazione} - \label{tab:autent_head} - \end{center} -\end{table} -\begin{center} - \begin{pspicture}(0,0)(9,0.8) - \pnode(0,0){A} - \pnode(9,0.4){B} - \ncline{<->}{A}{B}\ncput{copertura dell'autenticazione} - \end{pspicture} -\end{center} - -La modalit`\a tunnel può essere utilizzata sia per comunicazioni fra stazioni -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. - - - - - -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. - -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. - -L'estensione è indipendente dall'algoritmo particolare, e il protocollo è -ancora in fase di definizione; attualmente è stato suggerito l'uso di una -modifica dell'MD5 chiamata \textit{keyed MD5} che combina alla codifica anche -una chiave che viene inserita all'inizio e alla fine degli altri campi. - -\subsection{Riservatezza} -\label{sec:ecry} - -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. - -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 -fino al vettore di inizializzazione, il resto è crittografato. - -\renewcommand\arraystretch{1.2} -\begin{table}[htb] - \footnotesize - \begin{center} - \begin{tabular}{@{\vrule}p{24mm}@{\vrule}p{24mm}@{\vrule} - p{24mm}@{\vrule}p{24mm}@{\vrule}} - \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}}{...}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{}\\ - \hline - \multicolumn{4}{@{\vrule}c@{\vrule}}{}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{Testate di estensione}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{...}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{}\\ - \hline - \multicolumn{4}{@{\vrule}c@{\vrule}} - {\centering Security Parameter Index}\\ - \hline - \multicolumn{4}{@{\vrule}c@{\vrule}} - {\centering Vettore}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}} - {\centering di inizializzazione}\\ - \hline - \multicolumn{4}{@{\vrule}c@{\vrule}}{carico}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{crittografato}\\ - \multicolumn{4}{@{\vrule}c@{\vrule}}{...}\\ - \cline{2-4} - & \multicolumn{3}{c@{\vrule}}{}\\ - \cline{1-1} - \cline{3-4} - \multicolumn{1}{@{\vrule}c}{}& - \centering \raisebox{2mm}[0pt][0pt]{riempimento} & - \centering lunghezza pad &\centering tipo carico\tabularnewline - \hline - \end{tabular} - \caption{Schema di pacchetto crittografato} - \label{tab:criptopack} - \end{center} -\end{table} -\renewcommand\arraystretch{1} %default - - -\section{Autoconfigurazione} -\label{sec:autoconf} - diff --git a/app_b.tex b/app_b.tex deleted file mode 100644 index 48d2dd8..0000000 --- a/app_b.tex +++ /dev/null @@ -1,3 +0,0 @@ -\chapter{Il protocollo TCP} -\label{cha:tcp_protocol} - diff --git a/gapil.tex b/gapil.tex index 91f93a0..13711b0 100644 --- a/gapil.tex +++ b/gapil.tex @@ -107,8 +107,8 @@ \include{elemtcp} \include{simpltcp} \appendix -\include{app_a} -\include{app_b} +\include{ipprot} +\include{tcpprot} \include{fdl} % at the end put the bibliography diff --git a/img/stack.eps b/img/stack.eps deleted file mode 100644 index f13e4ee..0000000 --- a/img/stack.eps +++ /dev/null @@ -1,964 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: Senzanome-1 -%%Creator: Dia v0.86 -%%CreationDate: Sat May 26 04:06:48 2001 -%%For: cgabriel -%%Magnification: 1.0000 -%%Orientation: Portrait -%%BoundingBox: 0 0 1227 907 -%%Pages: 1 -%%BeginSetup -%%EndSetup -%%EndComments -[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright -/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one -/two /three /four /five /six /seven /eight /nine /colon /semicolon -/less /equal /greater /question /at /A /B /C /D /E -/F /G /H /I /J /K /L /M /N /O -/P /Q /R /S /T /U /V /W /X /Y -/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c -/d /e /f /g /h /i /j /k /l /m -/n /o /p /q /r /s /t /u /v /w -/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright -/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior -/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf -/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla -/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde -/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex -/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring -/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis -/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave -/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def -/Times-Roman-latin1 - /Times-Roman findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Times-Italic-latin1 - /Times-Italic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Times-Bold-latin1 - /Times-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Times-BoldItalic-latin1 - /Times-BoldItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-Book-latin1 - /AvantGarde-Book findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-BookOblique-latin1 - /AvantGarde-BookOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-Demi-latin1 - /AvantGarde-Demi findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-DemiOblique-latin1 - /AvantGarde-DemiOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-Light-latin1 - /Bookman-Light findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-LightItalic-latin1 - /Bookman-LightItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-Demi-latin1 - /Bookman-Demi findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-DemiItalic-latin1 - /Bookman-DemiItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-latin1 - /Courier findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-Oblique-latin1 - /Courier-Oblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-Bold-latin1 - /Courier-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-BoldOblique-latin1 - /Courier-BoldOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-latin1 - /Helvetica findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Oblique-latin1 - /Helvetica-Oblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Bold-latin1 - /Helvetica-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-BoldOblique-latin1 - /Helvetica-BoldOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-latin1 - /Helvetica-Narrow findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-Oblique-latin1 - /Helvetica-Narrow-Oblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-Bold-latin1 - /Helvetica-Narrow-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-BoldOblique-latin1 - /Helvetica-Narrow-BoldOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-Roman-latin1 - /NewCenturySchoolbook-Roman findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-Italic-latin1 - /NewCenturySchoolbook-Italic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-Bold-latin1 - /NewCenturySchoolbook-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-BoldItalic-latin1 - /NewCenturySchoolbook-BoldItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-Roman-latin1 - /Palatino-Roman findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-Italic-latin1 - /Palatino-Italic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-Bold-latin1 - /Palatino-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-BoldItalic-latin1 - /Palatino-BoldItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Symbol-latin1 - /Symbol findfont -definefont pop -/ZapfChancery-MediumItalic-latin1 - /ZapfChancery-MediumItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/ZapfDingbats-latin1 - /ZapfDingbats findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/cp {closepath} bind def -/c {curveto} bind def -/f {fill} bind def -/a {arc} bind def -/ef {eofill} bind def -/ex {exch} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth pop} bind def -/tr {translate} bind def - -/ellipsedict 8 dict def -ellipsedict /mtrx matrix put -/ellipse -{ ellipsedict begin - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def /savematrix mtrx currentmatrix def - x y tr xrad yrad sc - 0 0 1 startangle endangle arc - savematrix setmatrix - end -} def - -/mergeprocs { -dup length -3 -1 roll -dup -length -dup -5 1 roll -3 -1 roll -add -array cvx -dup -3 -1 roll -0 exch -putinterval -dup -4 2 roll -putinterval -} bind def -28.346000 -28.346000 scale -8.087680 -27.940743 translate -%%EndProlog - - -1.000000 1.000000 1.000000 srgb -n 6.000000 -2.000000 m 6.000000 1.000000 l 17.000000 1.000000 l 17.000000 -2.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 -2.000000 m 6.000000 1.000000 l 17.000000 1.000000 l 17.000000 -2.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(Variabili di ambiente) dup sw 2 div 11.500000 ex sub -0.235294 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 1.000000 m 6.000000 4.000000 l 17.000000 4.000000 l 17.000000 1.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 1.000000 m 6.000000 4.000000 l 17.000000 4.000000 l 17.000000 1.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(Stack) dup sw 2 div 11.500000 ex sub 2.764706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 4.000000 m 6.000000 7.000000 l 17.000000 7.000000 l 17.000000 4.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 4.000000 m 6.000000 7.000000 l 17.000000 7.000000 l 17.000000 4.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(Memoria non) dup sw 2 div 11.500000 ex sub 5.314706 m gs 1 -1 sc sh gr -0.000000 0.000000 0.000000 srgb -(allocata) dup sw 2 div 11.500000 ex sub 6.214706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 19.000000 m 6.000000 24.000000 l 17.000000 24.000000 l 17.000000 19.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 19.000000 m 6.000000 24.000000 l 17.000000 24.000000 l 17.000000 19.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(Altra memoria) dup sw 2 div 11.500000 ex sub 21.314706 m gs 1 -1 sc sh gr -0.000000 0.000000 0.000000 srgb -(del processo) dup sw 2 div 11.500000 ex sub 22.214706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 7.000000 m 6.000000 9.000000 l 17.000000 9.000000 l 17.000000 7.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 7.000000 m 6.000000 9.000000 l 17.000000 9.000000 l 17.000000 7.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file1.o) dup sw 2 div 11.500000 ex sub 8.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 11.000000 m 6.000000 13.000000 l 17.000000 13.000000 l 17.000000 11.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 11.000000 m 6.000000 13.000000 l 17.000000 13.000000 l 17.000000 11.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file3.o) dup sw 2 div 11.500000 ex sub 12.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 9.000000 m 6.000000 11.000000 l 17.000000 11.000000 l 17.000000 9.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 9.000000 m 6.000000 11.000000 l 17.000000 11.000000 l 17.000000 9.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file2.o) dup sw 2 div 11.500000 ex sub 10.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 13.000000 m 6.000000 15.000000 l 17.000000 15.000000 l 17.000000 13.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 13.000000 m 6.000000 15.000000 l 17.000000 15.000000 l 17.000000 13.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file4.0) dup sw 2 div 11.500000 ex sub 14.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n -2.676550 -2.280000 m -2.676550 -0.020000 l 2.950000 -0.020000 l 2.950000 -2.280000 l f -1.000000 1.000000 1.000000 srgb -n -2.676550 -1.150000 m -2.676550 -1.150000 1.130000 1.130000 180.000000 270.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 2.950000 -1.150000 m 2.950000 -1.150000 1.130000 1.130000 270.000000 360.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n -3.806550 -1.150000 m -3.806550 -1.150000 l 4.080000 -1.150000 l 4.080000 -1.150000 l f -1.000000 1.000000 1.000000 srgb -n -2.676550 -1.150000 m -2.676550 -1.150000 1.130000 1.130000 90.000000 180.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 2.950000 -1.150000 m 2.950000 -1.150000 1.130000 1.130000 0.000000 90.000000 ellipse f -0.180000 slw -[] 0 sd -[] 0 sd -0 slj -0.160507 0.287785 1.000000 srgb -n -2.676550 -2.280000 m 2.950000 -2.280000 l s -0.160507 0.287785 1.000000 srgb -n -2.676550 -0.020000 m 2.950000 -0.020000 l s -0.160507 0.287785 1.000000 srgb -n -2.676550 -1.150000 1.130000 1.130000 180.000000 270.000000 ellipse s -0.160507 0.287785 1.000000 srgb -n 2.950000 -1.150000 1.130000 1.130000 270.000000 360.000000 ellipse s -0.160507 0.287785 1.000000 srgb -n -3.806550 -1.150000 m -3.806550 -1.150000 l s -0.160507 0.287785 1.000000 srgb -n 4.080000 -1.150000 m 4.080000 -1.150000 l s -0.160507 0.287785 1.000000 srgb -n -2.676550 -1.150000 1.130000 1.130000 90.000000 180.000000 ellipse s -0.160507 0.287785 1.000000 srgb -n 2.950000 -1.150000 1.130000 1.130000 0.000000 90.000000 ellipse s -/Times-Bold-latin1 ff 0.900000 scf sf -0.292153 0.357879 1.000000 srgb -(Lo stack cresce) dup sw 2 div 0.136725 ex sub -1.335294 m gs 1 -1 sc sh gr -0.292153 0.357879 1.000000 srgb -(in questa direzione) dup sw 2 div 0.136725 ex sub -0.435294 m gs 1 -1 sc sh gr -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 7.000000 1.000000 m 6.996900 4.000000 l s -0 slj -0.000000 0.000000 0.000000 srgb -n 6.597727 3.199587 m 6.996900 4.000000 l 7.397726 3.200414 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 2.108363 -0.020000 m 6.998450 2.500000 l s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n -3.000000 10.000000 m -1.850000 10.000000 -3.400000 16.400000 -2.000000 16.000000 c s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n -2.000000 5.000000 m -3.050000 4.600000 -1.800000 10.000000 -3.000000 10.000000 c s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n 28.000000 -4.000000 m 30.100000 -4.000000 27.950000 11.050000 30.000000 11.000000 c s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n 30.000000 11.000000 m 28.300000 11.000000 29.950000 25.000000 28.000000 25.000000 c s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 22.000000 -3.050000 m 17.000000 -2.000000 l s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 22.000000 -0.050000 m 17.000000 1.000000 l s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 22.000000 5.950000 m 17.000000 7.000000 l s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 22.000000 13.950000 m 17.000000 15.000000 l s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 22.000000 17.950000 m 17.000000 19.000000 l s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 22.000000 23.000000 m 17.000000 24.000000 l s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n 18.000000 7.000000 m 20.100000 7.000000 18.000000 9.000000 20.000000 10.000000 c s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n 20.000000 10.000000 m 18.300000 10.000000 19.950000 19.000000 18.000000 19.000000 c s -/Times-Bold-latin1 ff 0.600000 scf sf -0.000000 0.000000 0.000000 srgb -(Immagine in ) dup sw 2 div 22.000000 ex sub 10.000000 m gs 1 -1 sc sh gr -0.000000 0.000000 0.000000 srgb -(memoria del) dup sw 2 div 22.000000 ex sub 10.600000 m gs 1 -1 sc sh gr -0.000000 0.000000 0.000000 srgb -( programma) dup sw 2 div 22.000000 ex sub 11.200000 m gs 1 -1 sc sh gr -0.000000 0.000000 0.000000 srgb -() dup sw 2 div 22.000000 ex sub 11.800000 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n -1.000000 5.000000 m -1.000000 7.000000 l 3.000000 7.000000 l 3.000000 5.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n -1.000000 5.000000 m -1.000000 7.000000 l 3.000000 7.000000 l 3.000000 5.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file1.o) dup sw 2 div 1.000000 ex sub 6.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n -1.000000 8.000000 m -1.000000 10.000000 l 3.000000 10.000000 l 3.000000 8.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n -1.000000 8.000000 m -1.000000 10.000000 l 3.000000 10.000000 l 3.000000 8.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file2.o) dup sw 2 div 1.000000 ex sub 9.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n -1.000000 11.000000 m -1.000000 13.000000 l 3.000000 13.000000 l 3.000000 11.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n -1.000000 11.000000 m -1.000000 13.000000 l 3.000000 13.000000 l 3.000000 11.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file3.o) dup sw 2 div 1.000000 ex sub 12.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n -1.000000 14.000000 m -1.000000 16.000000 l 3.000000 16.000000 l 3.000000 14.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n -1.000000 14.000000 m -1.000000 16.000000 l 3.000000 16.000000 l 3.000000 14.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(file4.0) dup sw 2 div 1.000000 ex sub 15.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n -1.000000 17.000000 m -1.000000 19.000000 l 4.000000 19.000000 l 4.000000 17.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n -1.000000 17.000000 m -1.000000 19.000000 l 4.000000 19.000000 l 4.000000 17.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(Librerie) dup sw 2 div 1.500000 ex sub 18.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n -1.000000 20.000000 m -1.000000 22.000000 l 4.000000 22.000000 l 4.000000 20.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n -1.000000 20.000000 m -1.000000 22.000000 l 4.000000 22.000000 l 4.000000 20.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(Librerie) dup sw 2 div 1.500000 ex sub 21.264706 m gs 1 -1 sc sh gr -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 3.000000 6.000000 m 6.000000 8.000000 l s -0 slj -0.000000 0.000000 0.000000 srgb -n 5.029275 7.653312 m 6.000000 8.000000 l 5.306625 7.237287 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 3.000000 9.000000 m 6.000000 10.000000 l s -0 slj -0.000000 0.000000 0.000000 srgb -n 4.972260 9.920943 m 6.000000 10.000000 l 5.130374 9.446601 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 3.000000 12.000000 m 6.000000 12.000000 l s -0 slj -0.000000 0.000000 0.000000 srgb -n 5.000000 12.250000 m 6.000000 12.000000 l 5.000000 11.750000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 3.000000 15.000000 m 6.000000 14.000000 l s -0 slj -0.000000 0.000000 0.000000 srgb -n 5.130374 14.553399 m 6.000000 14.000000 l 4.972260 14.079057 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 4.000000 18.000000 m 6.000000 16.000000 l s -0 slj -0.000000 0.000000 0.000000 srgb -n 5.469670 16.883883 m 6.000000 16.000000 l 5.116117 16.530330 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.000000 0.000000 0.000000 srgb -n 4.000000 21.000000 m 6.000000 18.000000 l s -0 slj -0.000000 0.000000 0.000000 srgb -n 5.653312 18.970725 m 6.000000 18.000000 l 5.237287 18.693375 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n -3.000000 19.000000 m -1.850000 19.000000 -3.400000 22.400000 -2.000000 22.000000 c s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n -2.000000 17.000000 m -3.050000 16.600000 -1.800000 19.000000 -3.000000 19.000000 c s -/Times-Bold-latin1 ff 0.800000 scf sf -0.000000 0.000000 0.000000 srgb -(Indirizzo di ) dup sw 2 div 33.000000 ex sub 11.000000 m gs 1 -1 sc sh gr -0.000000 0.000000 0.000000 srgb -(memoria) dup sw 2 div 33.000000 ex sub 11.800000 m gs 1 -1 sc sh gr -/Times-Bold-latin1 ff 0.800000 scf sf -0.000000 0.000000 0.000000 srgb -(File oggetto) dup sw 2 div -6.000000 ex sub 10.000000 m gs 1 -1 sc sh gr -/Times-Bold-latin1 ff 0.800000 scf sf -0.000000 0.000000 0.000000 srgb -(Librerie) dup sw 2 div -5.000000 ex sub 19.000000 m gs 1 -1 sc sh gr -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n 6.000000 25.000000 m 6.000000 27.000000 11.516053 23.976037 11.516053 25.976037 c s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -0.000000 0.000000 0.000000 srgb -n 17.000000 25.000000 m 17.000000 27.000000 11.516053 23.976037 11.516053 25.976037 c s -/Times-Bold-latin1 ff 0.800000 scf sf -0.000000 0.000000 0.000000 srgb -(Immagine della memoria) dup sw 2 div 11.516053 ex sub 26.976037 m gs 1 -1 sc sh gr -0.000000 0.000000 0.000000 srgb -(di un processo) dup sw 2 div 11.516053 ex sub 27.776037 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 6.000000 15.000000 m 6.000000 19.000000 l 17.000000 19.000000 l 17.000000 15.000000 l f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 6.000000 15.000000 m 6.000000 19.000000 l 17.000000 19.000000 l 17.000000 15.000000 l cp s -/Times-Bold-latin1 ff 0.900000 scf sf -0.000000 0.000000 0.000000 srgb -(Libreria) dup sw 2 div 11.500000 ex sub 17.264706 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 22.300000 -4.000000 m 22.300000 -2.100000 l 26.102720 -2.100000 l 26.102720 -4.000000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 -3.700000 m 22.300000 -3.700000 0.300000 0.300000 180.000000 270.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.102720 -3.700000 m 26.102720 -3.700000 0.300000 0.300000 270.000000 360.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 22.000000 -3.700000 m 22.000000 -2.400000 l 26.402720 -2.400000 l 26.402720 -3.700000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 -2.400000 m 22.300000 -2.400000 0.300000 0.300000 90.000000 180.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.102720 -2.400000 m 26.102720 -2.400000 0.300000 0.300000 0.000000 90.000000 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 22.300000 -4.000000 m 26.102720 -4.000000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 -2.100000 m 26.102720 -2.100000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 -3.700000 0.300000 0.300000 180.000000 270.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.102720 -3.700000 0.300000 0.300000 270.000000 360.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 22.000000 -3.700000 m 22.000000 -2.400000 l s -0.000000 0.000000 0.000000 srgb -n 26.402720 -3.700000 m 26.402720 -2.400000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 -2.400000 0.300000 0.300000 90.000000 180.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.102720 -2.400000 0.300000 0.300000 0.000000 90.000000 ellipse s -/AvantGarde-Book-latin1 ff 0.800000 scf sf -0.598485 0.068699 0.034038 srgb -(BFFFFFFF) dup sw 2 div 24.201360 ex sub -2.850000 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 22.300000 -1.000000 m 22.300000 0.900000 l 26.102720 0.900000 l 26.102720 -1.000000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 -0.700000 m 22.300000 -0.700000 0.300000 0.300000 180.000000 270.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.102720 -0.700000 m 26.102720 -0.700000 0.300000 0.300000 270.000000 360.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 22.000000 -0.700000 m 22.000000 0.600000 l 26.402720 0.600000 l 26.402720 -0.700000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 0.600000 m 22.300000 0.600000 0.300000 0.300000 90.000000 180.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.102720 0.600000 m 26.102720 0.600000 0.300000 0.300000 0.000000 90.000000 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 22.300000 -1.000000 m 26.102720 -1.000000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 0.900000 m 26.102720 0.900000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 -0.700000 0.300000 0.300000 180.000000 270.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.102720 -0.700000 0.300000 0.300000 270.000000 360.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 22.000000 -0.700000 m 22.000000 0.600000 l s -0.000000 0.000000 0.000000 srgb -n 26.402720 -0.700000 m 26.402720 0.600000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 0.600000 0.300000 0.300000 90.000000 180.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.102720 0.600000 0.300000 0.300000 0.000000 90.000000 ellipse s -/AvantGarde-Book-latin1 ff 0.800000 scf sf -0.598485 0.068699 0.034038 srgb -(BFFFFDOC) dup sw 2 div 24.201360 ex sub 0.150000 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 22.300000 5.000000 m 22.300000 6.900000 l 26.490560 6.900000 l 26.490560 5.000000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 5.300000 m 22.300000 5.300000 0.300000 0.300000 180.000000 270.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 5.300000 m 26.490560 5.300000 0.300000 0.300000 270.000000 360.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 22.000000 5.300000 m 22.000000 6.600000 l 26.790560 6.600000 l 26.790560 5.300000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 6.600000 m 22.300000 6.600000 0.300000 0.300000 90.000000 180.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 6.600000 m 26.490560 6.600000 0.300000 0.300000 0.000000 90.000000 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 22.300000 5.000000 m 26.490560 5.000000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 6.900000 m 26.490560 6.900000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 5.300000 0.300000 0.300000 180.000000 270.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 5.300000 0.300000 0.300000 270.000000 360.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 22.000000 5.300000 m 22.000000 6.600000 l s -0.000000 0.000000 0.000000 srgb -n 26.790560 5.300000 m 26.790560 6.600000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 6.600000 0.300000 0.300000 90.000000 180.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 6.600000 0.300000 0.300000 0.000000 90.000000 ellipse s -/AvantGarde-Book-latin1 ff 0.800000 scf sf -0.598485 0.068699 0.034038 srgb -(08004A138) dup sw 2 div 24.395280 ex sub 6.150000 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 22.300000 13.000000 m 22.300000 14.900000 l 26.490560 14.900000 l 26.490560 13.000000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 13.300000 m 22.300000 13.300000 0.300000 0.300000 180.000000 270.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 13.300000 m 26.490560 13.300000 0.300000 0.300000 270.000000 360.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 22.000000 13.300000 m 22.000000 14.600000 l 26.790560 14.600000 l 26.790560 13.300000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 14.600000 m 22.300000 14.600000 0.300000 0.300000 90.000000 180.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 14.600000 m 26.490560 14.600000 0.300000 0.300000 0.000000 90.000000 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 22.300000 13.000000 m 26.490560 13.000000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 14.900000 m 26.490560 14.900000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 13.300000 0.300000 0.300000 180.000000 270.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 13.300000 0.300000 0.300000 270.000000 360.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 22.000000 13.300000 m 22.000000 14.600000 l s -0.000000 0.000000 0.000000 srgb -n 26.790560 13.300000 m 26.790560 14.600000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 14.600000 0.300000 0.300000 90.000000 180.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 14.600000 0.300000 0.300000 0.000000 90.000000 ellipse s -/AvantGarde-Book-latin1 ff 0.800000 scf sf -0.598485 0.068699 0.034038 srgb -(080048990) dup sw 2 div 24.395280 ex sub 14.150000 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 22.300000 17.000000 m 22.300000 18.900000 l 26.490560 18.900000 l 26.490560 17.000000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 17.300000 m 22.300000 17.300000 0.300000 0.300000 180.000000 270.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 17.300000 m 26.490560 17.300000 0.300000 0.300000 270.000000 360.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 22.000000 17.300000 m 22.000000 18.600000 l 26.790560 18.600000 l 26.790560 17.300000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 18.600000 m 22.300000 18.600000 0.300000 0.300000 90.000000 180.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 18.600000 m 26.490560 18.600000 0.300000 0.300000 0.000000 90.000000 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 22.300000 17.000000 m 26.490560 17.000000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 18.900000 m 26.490560 18.900000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 17.300000 0.300000 0.300000 180.000000 270.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 17.300000 0.300000 0.300000 270.000000 360.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 22.000000 17.300000 m 22.000000 18.600000 l s -0.000000 0.000000 0.000000 srgb -n 26.790560 17.300000 m 26.790560 18.600000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 18.600000 0.300000 0.300000 90.000000 180.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 18.600000 0.300000 0.300000 0.000000 90.000000 ellipse s -/AvantGarde-Book-latin1 ff 0.800000 scf sf -0.598485 0.068699 0.034038 srgb -(080000000) dup sw 2 div 24.395280 ex sub 18.150000 m gs 1 -1 sc sh gr -1.000000 1.000000 1.000000 srgb -n 22.300000 22.000000 m 22.300000 24.000000 l 26.490560 24.000000 l 26.490560 22.000000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 22.300000 m 22.300000 22.300000 0.300000 0.300000 180.000000 270.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 22.300000 m 26.490560 22.300000 0.300000 0.300000 270.000000 360.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 22.000000 22.300000 m 22.000000 23.700000 l 26.790560 23.700000 l 26.790560 22.300000 l f -1.000000 1.000000 1.000000 srgb -n 22.300000 23.700000 m 22.300000 23.700000 0.300000 0.300000 90.000000 180.000000 ellipse f -1.000000 1.000000 1.000000 srgb -n 26.490560 23.700000 m 26.490560 23.700000 0.300000 0.300000 0.000000 90.000000 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 22.300000 22.000000 m 26.490560 22.000000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 24.000000 m 26.490560 24.000000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 22.300000 0.300000 0.300000 180.000000 270.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 22.300000 0.300000 0.300000 270.000000 360.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 22.000000 22.300000 m 22.000000 23.700000 l s -0.000000 0.000000 0.000000 srgb -n 26.790560 22.300000 m 26.790560 23.700000 l s -0.000000 0.000000 0.000000 srgb -n 22.300000 23.700000 0.300000 0.300000 90.000000 180.000000 ellipse s -0.000000 0.000000 0.000000 srgb -n 26.490560 23.700000 0.300000 0.300000 0.000000 90.000000 ellipse s -/AvantGarde-Book-latin1 ff 0.800000 scf sf -0.598485 0.068699 0.034038 srgb -(000000000) dup sw 2 div 24.395280 ex sub 23.200000 m gs 1 -1 sc sh gr -showpage diff --git a/img/stack.png b/img/stack.png deleted file mode 100644 index 20dc5e54fc647e7220c4608fb00c673d20ada534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36653 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