X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=netlayer.tex;h=b49cb3687a52e06c3973a7d3ec41198c3a07810a;hp=4fb7e1f5e9367813ac8fdd113ac8cdec35348798;hb=c4e84d074b7b59b920ab493e32d61d5f3ae2ff15;hpb=c49e97bdcba8e4da8578d5a048a5764a622aff1e diff --git a/netlayer.tex b/netlayer.tex index 4fb7e1f..b49cb36 100644 --- a/netlayer.tex +++ b/netlayer.tex @@ -1,15 +1,13 @@ %% netlayer.tex %% -%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2011 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", %% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the %% license is included in the section entitled "GNU Free Documentation %% License". -%% - - +%% \chapter{Il livello di rete} \label{cha:network_layer} @@ -26,7 +24,8 @@ Data la loro prevalenza il capitolo sar protocolli principali esistenti su questo livello: il protocollo IP, sigla che sta per \textit{Internet Protocol}, (ma che più propriamente si dovrebbe chiamare IPv4) ed la nuova versione di questo stesso protocollo, denominata -IPv6. +IPv6. Tratteremo comunque anche il protocollo ICMP e la sua versione +modificata per IPv6 (cioè ICMPv6). \section{Il protocollo IP} @@ -46,7 +45,6 @@ pi Il compito principale di IP è quello di trasmettere i pacchetti da un computer all'altro della rete; le caratteristiche essenziali con cui questo viene realizzato in IPv4 sono due: - \begin{itemize} \item \textit{Universal addressing} la comunicazione avviene fra due host identificati univocamente con un indirizzo a 32 bit che può appartenere ad @@ -54,7 +52,7 @@ realizzato in IPv4 sono due: \item \textit{Best effort} viene assicurato il massimo impegno nella trasmissione, ma non c'è nessuna garanzia per i livelli superiori né sulla percentuale di successo né sul tempo di consegna dei pacchetti di - dati. + dati, né sull'ordine in cui vengono consegnati. \end{itemize} Per effettuare la comunicazione e l'instradamento dei pacchetti fra le varie @@ -65,16 +63,16 @@ 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 erano stati -originariamente organizzati all'interno delle cosiddette \textit{classi}, -(rappresentate in tab.~\ref{tab:IP_ipv4class}), per consentire dispiegamenti -di reti di dimensioni diverse. +Per garantire l'unicità dell'indirizzo Internet esiste un'autorità centrale +(la IANA, \textit{Internet Assigned Number Authority}) che assegna i numeri di +rete alle organizzazioni che ne fanno richiesta; è poi compito di quest'ultime +assegnare i numeri dei singoli host all'interno della propria rete. +Per venire incontro alle richieste dei vari enti e organizzazioni che volevano +utilizzare questo protocollo di comunicazione, originariamente gli indirizzi +di rete erano stati suddivisi all'interno delle cosiddette \textit{classi}, +(rappresentate in tab.~\ref{tab:IP_ipv4class}), in modo da consentire +dispiegamenti di reti di varie dimensioni a seconda delle diverse esigenze. \begin{table}[htb] \centering @@ -148,15 +146,20 @@ di reti di dimensioni diverse. \label{tab:IP_ipv4class} \end{table} -Le classi usate per il dispiegamento delle reti su quella che comunemente -viene chiamata \textit{Internet} sono le prime tre; la classe D è destinata al -(non molto usato) \itindex{multicast} \textit{multicast} mentre la classe E è +Le classi di indirizzi usate per il dispiegamento delle reti su quella che +comunemente viene chiamata \textit{Internet} sono le prime tre; la classe D è +destinata al \itindex{multicast} \textit{multicast} mentre la classe E è riservata per usi sperimentali e non viene impiegata. Come si può notare però la suddivisione riportata in tab.~\ref{tab:IP_ipv4class} è largamente inefficiente in quanto se ad un utente necessita anche solo un indirizzo in più dei 256 disponibili con una -classe A occorre passare a una classe B, con un conseguente spreco di numeri. +classe A occorre passare a una classe B, che ne prevede 65536,\footnote{in + realtà i valori esatti sarebbero 254 e 65536, una rete con a disposizione + $N$ bit dell'indirizzo IP, ha disponibili per le singole macchine soltanto + $@^N-2$ numeri, dato che uno deve essere utilizzato come indirizzo di rete e + uno per l'indirizzo di \itindex{broadcast} \textit{broadcast}.} con un +conseguente spreco di numeri. Inoltre, in particolare per le reti di classe C, la presenza di tanti indirizzi di rete diversi comporta una crescita enorme delle tabelle di @@ -201,34 +204,133 @@ rete o suddividere una classe B e diminuendo al contempo il numero di indirizzi di rete da inserire nelle tabelle di instradamento dei router. - - \subsection{L'intestazione di IP} \label{sec:IP_header} +Come illustrato in fig.~\ref{fig:net_tcpip_data_flux} (si ricordi quanto detto +in sez.~\ref{sec:net_tcpip_overview} riguardo al funzionamento generale del +TCP/IP), per eseguire il suo compito il protocollo IP inserisce (come +praticamente ogni protocollo di rete) una opportuna intestazione in cima ai +dati che deve trasmettere, la cui schematizzazione è riportata in +fig.~\ref{fig:IP_ipv4_head}. + +\begin{figure}[htb] + \centering + \includegraphics[width=10cm]{img/ipv4_head} + \caption{L'intestazione o \textit{header} di IPv4.} + \label{fig:IP_ipv4_head} +\end{figure} + +Ciascuno dei campi illustrati in fig.~\ref{fig:IP_ipv4_head} ha un suo preciso +scopo e significato, che si è riportato brevemente in +tab.~\ref{tab:IP_ipv4field}; si noti come l'intestazione riporti sempre due +indirizzi IP, quello \textsl{sorgente}, che indica l'IP da cui è partito il +pacchetto (cioè l'indirizzo assegnato alla macchina che lo spedisce) e quello +\textsl{destinazione} che indica l'indirizzo a cui deve essere inviato il +pacchetto (cioè l'indirizzo assegnato alla macchina che lo riceverà). + +\begin{table}[!hbt] + \footnotesize + \begin{center} + \begin{tabular}{|l|c|p{10cm}|} + \hline + \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\ + \hline + \hline + \textit{version} & 4& Numero di \textsl{versione}, nel caso + specifico vale sempre 4.\\ + \textit{head length} & 4& Lunghezza dell'intestazione, + in multipli di 32 bit.\\ + \textit{type of service}&8& Il ``\textsl{tipo di servizio}'', è suddiviso + in: 3 bit di precedenza, che nelle attuali + implementazioni del protocollo non vengono + comunque utilizzati; un bit riservato che + deve essere mantenuto a 0; 4 bit che + identificano il tipo di servizio + richiesto, uno solo dei quali può essere + attivo.\\ + \textit{total length} &16& La \textsl{lunghezza totale}, indica + la dimensione del carico di dati del + pacchetto IP in byte.\\ + \textit{identification}&16& L'\textsl{identificazione}, assegnato alla + creazione, è aumentato di uno all'origine + della trasmissione di ciascun pacchetto, ma + resta lo stesso per i pacchetti + frammentati, consentendo così di + identificare quelli che derivano dallo + stesso pacchetto originario.\\ + \textit{flag} & 3& I \textsl{flag} di controllo nell'ordine: il + primo è riservato e sempre nullo, il secondo + indica se il pacchetto non può essere + frammentato, il terzo se ci sono ulteriori + frammenti.\\ + \textit{fragmentation offset}&13& L'\textsl{offset di frammento}, indica + la posizione del frammento rispetto al + pacchetto originale.\\ + \textit{time to live} &16& Il \textsl{tempo di vita}, è decrementato di + uno ogni volta che un router ritrasmette il + pacchetto, se arriva a zero il pacchetto + viene scartato.\\ + \textit{protocol} & 8& Il \textsl{protocollo}, identifica il tipo di + pacchetto che segue l'intestazione di IPv4.\\ + \textit{header checksum}&16&La \textsl{checksum di intestazione}, somma + di controllo per l'intestazione.\\ + \textit{source IP} &32& L'\textsl{indirizzo di origine}.\\ + \textit{destination IP}&32& L'\textsl{indirizzo di destinazione}.\\ + \hline + \end{tabular} + \caption{Legenda per il significato dei campi dell'intestazione di IPv4} + \label{tab:IP_ipv4field} + \end{center} +\end{table} + Il campo TOS definisce il cosiddetto \textit{Type of Service}; questo permette di definire il tipo di traffico contenuto nei pacchetti, e può essere utilizzato dai router per dare diverse priorità in base al valore assunto da -questo campo. +questo campo. Abbiamo già visto come il valore di questo campo può essere +impostato sul singolo socket con l'opzione \const{IP\_TOS} (vedi +sez.~\ref{sec:sock_ipv4_options}), esso inoltre può essere manipolato sia dal +sistema del \textit{netfilter} di Linux con il comando \texttt{iptables} che +dal sistema del routing avanzato del comando \texttt{ip route} per consentire +un controllo più dettagliato dell'instradamento dei pacchetti e l'uso di +priorità e politiche di distribuzione degli stessi. \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{|l|l|} + \begin{tabular}{|l|l|p{8cm}|} \hline - \textbf{Costante} & \textbf{Significato} \\ + \multicolumn{2}{|c|}{\textbf{Valore}}&\textbf{Significato}\\ \hline \hline - \const{IPTOS\_LOWDELAY} & minimizza i ritardi per il traffico - interattivo. \\ - \const{IPTOS\_THROUGHPUT} & ottimizza la trasmissione per il massimo - flusso di dati.\\ - \const{IPTOS\_RELIABILITY}& ottimizza per l'affidabilità della - trasmissione. \\ - \const{IPTOS\_MINCOST} & usato per dati di riempimento, dove non - interessa se c'è una bassa velocità di - trasmissione.\\ + \const{IPTOS\_LOWDELAY} &\texttt{0x10}& Minimizza i ritardi + per rendere più veloce + possibile la ritrasmissione + dei pacchetti (usato per + traffico interattivo di + controllo come SSH).\\ + \const{IPTOS\_THROUGHPUT} &\texttt{0x8} & Ottimizza la trasmissione + per rendere il più elevato + possibile il flusso netto di + dati (usato su traffico dati, + come quello di FTP).\\ + \const{IPTOS\_RELIABILITY} &\texttt{0x4} & Ottimizza la trasmissione + per ridurre al massimo le + perdite di pacchetti (usato su + traffico soggetto a rischio di + perdita di pacchetti come TFTP + o DHCP).\\ + \const{IPTOS\_MINCOST} &\texttt{0x2} & Indica i dati di riempimento, + dove non interessa se si ha + una bassa velocità di + trasmissione, da utilizzare + per i collegamenti con minor + costo (usato per i protocolli + di streaming).\\ + \textit{Normal-Service}&\texttt{0x0} & Nessuna richiesta specifica.\\ + \hline + \hline \end{tabular} \caption{Le costanti che definiscono alcuni valori standard per il campo TOS @@ -236,14 +338,40 @@ questo campo. \label{tab:IP_TOS_values} \end{table} +I possibili valori del campo TOS, insieme al relativo significato ed alle +costanti numeriche ad esso associati, sono riportati in +tab.~\ref{tab:IP_TOS_values}. Per il valore nullo, usato di default per tutti +i pacchetti, e relativo al traffico normale, non esiste nessuna costante +associata. +Il campo TTL, acromino di \textit{Time To Live}, viene utilizzato per +stabilire una sorta di tempo di vita massimo dei pacchetti sulla rete. In +realtà più che di un tempo, il campo serve a limitare il numero massimo di +salti (i cosiddetti \textit{hop}) che un pacchetto IP può compiere nel passare +da un router ad un altro nel suo attraversamento della rete verso la +destinazione. -\subsection{Le opzioni di IP} -\label{sec:IP_options} +Il protocollo IP prevede infatti che il valore di questo campo venga +decrementato di uno da ciascun router che ritrasmette il pacchetto verso la +sua destinazione, e che quando questo diventa nullo il router lo debba +scartare, inviando all'indirizzo sorgente un pacchetto ICMP di tipo +\textit{time-exceeded} con un codice \textit{ttl-zero-during-transit} se +questo avviene durante il transito sulla rete o +\textit{ttl-zero-during-reassembly} se questo avviene alla destinazione finale +(vedi sez.~\ref{sec:ICMP_protocol}). +In sostanza grazie all'uso di questo accorgimento un pacchetto non può +continuare a vagare indefinitamente sulla rete, e viene comunque scartato dopo +un certo tempo, o meglio, dopo che ha attraversato in certo numero di +router. Nel caso di Linux il valore iniziale utilizzato normalmente è 64 (vedi +sez.~\ref{sec:sock_ipv4_sysctl}). +\subsection{Le opzioni di IP} +\label{sec:IP_options} + +Da fare ... \section{Il protocollo IPv6} @@ -317,7 +445,7 @@ 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 + nodi indirizzabili molto maggiore e una auto-configurazione degli indirizzi \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che si aggiungono agli usuali \textit{unicast} e \itindex{multicast} \textit{multicast} @@ -400,27 +528,28 @@ numero dei campi da 12 a 8. \footnotesize \begin{tabular}{|l|c|p{8cm}|} \hline - \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\ + \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\ \hline \hline - \textit{version} & 4 bit & - \textsl{versione}, nel caso specifico vale sempre 6\\ - \textit{priority} & 4 bit & - \textsl{priorità}, vedi sez.~\ref{sec:prio} \\ - \textit{flow label} & 24 bit & - \textsl{etichetta di flusso}, vedi sez.~\ref{sec:IP_ipv6_flow}\\ - \textit{payload length} & 16 bit & - \textsl{lunghezza del carico}, cioè del corpo dei dati che segue - l'intestazione, in byte. \\ - \textit{next header} & 8 bit & \textsl{intestazione successiva}, - identifica il tipo di pacchetto che segue l'intestazione di IPv6, usa - gli stessi valori del campo protocollo nell'intestazione di IPv4\\ - \textit{hop limit} & 8 bit & \textsl{limite di salti}, - stesso significato del \textit{time to live} nell'intestazione di IPv4, - è decrementato di uno ogni volta che un nodo ritrasmette il - pacchetto, se arriva a zero il pacchetto viene scartato \\ - \textit{source IP} & 128 bit & \textsl{indirizzo di origine} \\ - \textit{destination IP}& 128 bit & \textsl{indirizzo di destinazione}\\ + \textit{version} & 4& La \textsl{versione}, nel caso specifico vale + sempre 6.\\ + \textit{priority} & 4& La \textsl{priorità}, vedi + sez.~\ref{sec:IPv6_prio}.\\ + \textit{flow label} &24& L'\textsl{etichetta di flusso}, vedi + sez.~\ref{sec:IP_ipv6_flow}.\\ + \textit{payload length}&16& La \textsl{lunghezza del carico}, cioè del + corpo dei dati che segue l'intestazione, in + byte. \\ + \textit{next header} & 8& L'\textsl{intestazione successiva}, + identifica il tipo di pacchetto che segue + l'intestazione di IPv6, ed usa gli stessi + valori del campo protocollo + nell'intestazione di IPv4.\\ + \textit{hop limit} & 8& Il \textsl{limite di salti}, ha lo stesso + significato del \textit{time to live} + nell'intestazione di IPv4.\\ + \textit{source IP} &128&L'\textsl{indirizzo di origine}.\\ + \textit{destination IP}&128&L'\textsl{indirizzo di destinazione}.\\ \hline \end{tabular} \caption{Legenda per il significato dei campi dell'intestazione di IPv6} @@ -468,59 +597,6 @@ differenze: di dati per i quali si può provvedere un trattamento speciale. \end{itemize} - -\begin{figure}[htb] - \centering - \includegraphics[width=10cm]{img/ipv4_head} - \caption{L'intestazione o \textit{header} di IPv4.} - \label{fig:IP_ipv4_head} -\end{figure} - -\begin{table}[htb] - \footnotesize - \begin{center} - \begin{tabular}{|l|c|p{9cm}|} - \hline - \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\ - \hline - \hline - \textit{version} & 4 & \textsl{versione}, nel caso - specifico vale sempre 4\\ - \textit{head length} & 4 &\textsl{lunghezza dell'intestazione}, - in multipli di 32 bit\\ - \textit{type of service} & 8 & \textsl{tipo di servizio}, - consiste in: 3 bit di precedenza, - correntemente ignorati; un bit non usato a 0; 4 bit che identificano - il tipo di servizio richiesto, uno solo dei quali può essere 1\\ - \textit{total length} & 16 & \textsl{lunghezza totale}, indica - la dimensione del pacchetto IP in byte\\ - \textit{identification} & 16 & \textsl{identificazione}, - assegnato alla creazione, è aumentato di uno all'origine della - trasmissione di ciascun pacchetto, ma resta lo stesso per i - pacchetti frammentati\\ - \textit{flag} & 3 & - \textsl{flag} bit di frammentazione, uno indica se un - pacchetto è frammentato, un altro se ci sono ulteriori frammenti, e - un altro se il pacchetto non può essere frammentato. \\ - \textit{fragmentation offset} & 13 & \textsl{offset di frammento}, - indica la posizione del frammento rispetto al pacchetto originale\\ - \textit{time to live} & 16 & \textsl{tempo di vita}, - ha lo stesso significato di - \textit{hop limit}, vedi tab.~\ref{tab:IP_ipv6field}\\ - \textit{protocol} & 8 & \textsl{protocollo} - identifica il tipo di pacchetto che segue - l'intestazione di IPv4\\ - \textit{header checksum} & 16 & \textsl{checksum di intestazione}, - somma di controllo per l'intestazione\\ - \textit{source IP} & 32 & \textsl{indirizzo di origine}\\ - \textit{destination IP} & 32 & \textsl{indirizzo di destinazione}\\ - \hline - \end{tabular} - \caption{Legenda per il significato dei campi dell'intestazione di IPv4} - \label{tab:IP_ipv4field} - \end{center} -\end{table} - Oltre alle differenze precedenti, relative ai singoli campi nell'intestazione, ulteriori caratteristiche che diversificano il comportamento di IPv4 da quello di IPv6 sono le seguenti: @@ -535,10 +611,11 @@ quello di IPv6 sono le seguenti: frammentazione di pacchetti troppo grandi potrà essere gestita solo ai capi della comunicazione (usando un'apposita estensione vedi sez.~\ref{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 byte). +\item IPv6 richiede il supporto per il \itindex{Maximum~Transfer~Unit} + \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 byte). \end{itemize} \subsection{Gli indirizzi di IPv6} @@ -773,9 +850,9 @@ delle scheda di rete, e si usano i restanti 16~bit per indicare la sottorete. \end{table} Qualora si dovesse avere a che fare con una necessità di un numero più -elevato di sottoreti, il precedente schema andrebbe modificato, per evitare +elevato di sotto-reti, il precedente schema andrebbe modificato, per evitare l'enorme spreco dovuto all'uso dei MAC-address, a questo scopo si possono -usare le capacità di autoconfigurazione di IPv6 per assegnare indirizzi +usare le capacità di auto-configurazione di IPv6 per assegnare indirizzi generici con ulteriori gerarchie per sfruttare efficacemente tutto lo spazio di indirizzi. @@ -821,7 +898,7 @@ 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 +una comunicazione locale immediata, o durante le fasi di auto-configurazione prima di avere un indirizzo globale. \begin{table}[htb] @@ -1165,24 +1242,24 @@ tab.~\ref{tab:IP_ipv6_nexthead}. \textbf{Valore} & \textbf{Keyword} & \textbf{Tipo di protocollo} \\ \hline \hline - 0 & & riservato\\ - & HBH & Hop by Hop \\ - 1 & ICMP & Internet Control Message (IPv4 o IPv6) \\ - 2 & ICMP & Internet Group Management (IPv4) \\ - 3 & GGP & Gateway-to-Gateway \\ - 4 & IP & IP in IP (IPv4 encapsulation) \\ - 5 & ST & Stream \\ - 6 & TCP & Trasmission Control \\ - 17 & UDP & User Datagram \\ - 43 & RH & Routing Header (IPv6) \\ - 44 & FH & Fragment Header (IPv6) \\ - 45 & IDRP & Inter Domain Routing \\ - 51 & AH & Authentication Header (IPv6) \\ - 52 & ESP & Encrypted Security Payload (IPv6) \\ - 59 & Null & No next header (IPv6) \\ - 88 & IGRP & Internet Group Routing \\ - 89 & OSPF & Open Short Path First \\ - 255& & riservato \\ + 0 & & Riservato.\\ + & HBH & Hop by Hop.\\ + 1 & ICMP & Internet Control Message (IPv4 o IPv6).\\ + 2 & IGMP & Internet Group Management (IPv4).\\ + 3 & GGP & Gateway-to-Gateway.\\ + 4 & IP & IP in IP (IPv4 encapsulation).\\ + 5 & ST & Stream.\\ + 6 & TCP & Trasmission Control.\\ + 17 & UDP & User Datagram.\\ + 43 & RH & Routing Header (IPv6).\\ + 44 & FH & Fragment Header (IPv6).\\ + 45 & IDRP & Inter Domain Routing.\\ + 51 & AH & Authentication Header (IPv6).\\ + 52 & ESP & Encrypted Security Payload (IPv6).\\ + 59 & Null & No next header (IPv6).\\ + 88 & IGRP & Internet Group Routing.\\ + 89 & OSPF & Open Short Path First.\\ + 255& & Riservato.\\ \hline \end{tabular} \caption{Tipi di protocolli e intestazioni di estensione} @@ -1238,7 +1315,7 @@ rendere utilizzabile un qualunque sottoinsieme dei bit come chiavi di hash per i router. \subsection{Priorità} -\label{sec:prio} +\label{sec:IPv6_prio} Il campo di priorità consente di indicare il livello di priorità dei pacchetti relativamente agli altri pacchetti provenienti dalla stessa @@ -1260,12 +1337,12 @@ valori di priorit \textbf{Valore} & \textbf{Tipo di traffico} \\ \hline \hline - 0 & traffico generico \\ - 1 & traffico di riempimento (es. news) \\ - 2 & trasferimento dati non interattivo (es. e-mail)\\ - 3 & riservato \\ - 4 & trasferimento dati interattivo (es. FTP, HTTP, NFS) \\ - 5 & riservato \\ + 0 & Traffico generico.\\ + 1 & Traffico di riempimento (es. news).\\ + 2 & Trasferimento dati non interattivo (es. e-mail).\\ + 3 & Riservato.\\ + 4 & Trasferimento dati interattivo (es. FTP, HTTP, NFS).\\ + 5 & Riservato.\\ \hline \end{tabular} \caption{Formato di un indirizzo \textit{site-local}.} @@ -1409,15 +1486,15 @@ fino al vettore di inizializzazione, il resto -\subsection{Autoconfigurazione} +\subsection{Auto-configurazione} \label{sec:IP_ipv6_autoconf} -Una delle caratteristiche salienti di IPv6 è quella dell'autoconfigurazione, +Una delle caratteristiche salienti di IPv6 è quella dell'auto-configurazione, il protocollo infatti fornisce la possibilità ad un nodo di scoprire automaticamente il suo indirizzo acquisendo i parametri necessari per potersi connettere a internet. -L'autoconfigurazione sfrutta gli indirizzi link-local; qualora sul nodo sia +L'auto-configurazione sfrutta gli indirizzi link-local; qualora sul nodo sia presente una scheda di rete che supporta lo standard IEEE802 (ethernet) questo garantisce la presenza di un indirizzo fisico a 48 bit unico; pertanto il nodo può assumere automaticamente senza pericoli di collisione l'indirizzo @@ -1436,13 +1513,13 @@ richiedendo assistenza). Una volta ottenuto un indirizzo locale valido diventa possibile per il nodo comunicare con la rete locale; sono pertanto previste due modalità di -autoconfigurazione, descritte nelle seguenti sezioni. In ogni caso +auto-configurazione, descritte nelle seguenti sezioni. In ogni caso l'indirizzo link-local resta valido. -\subsection{Autoconfigurazione stateless} +\subsection{Auto-configurazione stateless} \label{sec:stateless} -Questa è la forma più semplice di autoconfigurazione, possibile quando +Questa è la forma più semplice di auto-configurazione, possibile quando l'indirizzo globale può essere ricavato dall'indirizzo link-local cambiando semplicemente il prefisso a quello assegnato dal provider per ottenere un indirizzo globale. @@ -1464,10 +1541,10 @@ l'indirizzo, nel qual caso, se il prefisso unito all'indirizzo link-local non supera i 128 bit, la stazione ottiene automaticamente il suo indirizzo globale. -\subsection{Autoconfigurazione stateful} +\subsection{Auto-configurazione stateful} \label{sec:stateful} -Benché estremamente semplice l'autoconfigurazione stateless presenta alcuni +Benché estremamente semplice l'auto-configurazione stateless presenta alcuni problemi; il primo è che l'uso degli indirizzi delle schede di rete è molto inefficiente; nel caso in cui ci siano esigenze di creare una gerarchia strutturata su parecchi livelli possono non restare 48~bit per l'indirizzo @@ -1482,11 +1559,136 @@ interrogher l'indirizzo link-local e riceverà un indirizzo unicast globale. +\section{Il protocollo ICMP} +\label{sec:ICMP_protocol} + +Come già accennato nelle sezioni precedenti, l'\textit{Internet Control + Message Protocol} è un protocollo di servizio fondamentale per il +funzionamento del livello di rete. Il protocollo ICMP viene trasportato +direttamente su IP, ma proprio per questa sua caratteristica di protocollo di +servizio è da considerarsi a tutti gli effetti appartenente al livello di +rete. + +\subsection{L'intestazione di ICMP} +\label{sec:ICMP_header} + +Il protocollo ICMP è estremamente semplice, ed il suo unico scopo è quello di +inviare messaggi di controllo; in fig.~\ref{fig:ICMP_header} si è riportata la +struttura dell'intestazione di un pacchetto ICMP generico. + +\begin{figure}[htb] + \centering \includegraphics[width=12cm]{img/icmp_head} + \caption{L'intestazione del protocollo ICMP.} + \label{fig:ICMP_header} +\end{figure} + +Ciascun pacchetto ICMP è contraddistinto dal valore del primo campo, il tipo, +che indica appunto che tipo di messaggio di controllo viene veicolato dal +pacchetto in questione; i valori possibili per questo campo, insieme al +relativo significato, sono riportati in tab.~\ref{tab:ICMP_type}. + +\begin{table}[!htb] + \centering + \footnotesize + \begin{tabular}{|l|l|p{9.5cm}|} + \hline + \textbf{Valore}&\textbf{Tipo}&\textbf{Significato}\\ + \hline + \hline + \texttt{any} & -- & Seleziona tutti i possibili valori \\ + \hline + \textit{echo-reply} &0& Inviato in risposta ad un ICMP + \textit{echo-request}.\\ + \textit{destination-unreachable}&3& Segnala una destinazione + irraggiungibile, viene + inviato all'IP sorgente di un + pacchetto quando un router realizza + che questo non può essere inviato a + destinazione.\\ + \textit{source-quench} &4& Inviato in caso di congestione della + rete per indicare all'IP sorgente di + diminuire il traffico inviato.\\ + \textit{redirect} &5& Inviato per segnalare un errore di + routing, richiede che la macchina + sorgente rediriga il traffico ad un + altro router da esso specificato.\\ + \textit{echo-request} &8& Richiede l'invio in risposta di un + \textit{echo-reply}.\\ +% \textit{router-advertisement} & & \\ +% \textit{router-solicitation} & & \\ + \textit{time-exceeded} &11& Inviato quando il TTL di un pacchetto + viene azzerato.\\ + \textit{parameter-problem} &12& Inviato da un router che rileva dei + problemi con l'intestazione di un + pacchetto.\\ + \textit{timestamp-request} &13& Richiede l'invio in risposta di un + \textit{timestamp-reply}.\\ + \textit{timestamp-reply} &14& Inviato in risposta di un + \textit{timestamp-request}.\\ + \textit{info-request} &15& Richiede l'invio in risposta di un + \textit{info-reply}.\\ + \textit{info-reply} &16& Inviato in risposta di un + \textit{info-request}.\\ + \textit{address-mask-request} &17& Richiede l'invio in risposta di un + \textit{address-mask-reply}.\\ + \textit{address-mask-reply} &18& Inviato in risposta di un + \textit{address-mask-request}.\\ + \hline + \end{tabular} + \caption{I valori del \textsl{tipo} per i pacchetti ICMP.} +\label{tab:ICMP_type} +\end{table} + +Per alcuni tipi di messaggi ICMP, esiste un secondo campo, detto codice, che +specifica ulteriormente la natura del messaggio; i soli messaggi che +utilizzano un valore per questo campo sono quelli di tipo +\textit{destination-unreachable}, \textit{redirect}, \textit{time-exceeded} e +\textit{parameter-problem}. I possibili valori del codice relativi a ciascuno +di essi sono stati riportati nelle quattro sezioni in cui si è suddivisa +tab.~\ref{tab:ICMP_code}, rispettivamente nell'ordine con cui sono appena +elencati i tipi a cui essi fanno riferimento. + +\begin{table}[!htb] + \centering + \footnotesize + \begin{tabular}{|l|l|} + \hline + \textbf{Valore}&\textbf{Codice}\\ + \hline + \hline + \textit{network-unreachable} &0\\ + \textit{host-unreachable} &1\\ + \textit{protocol-unreachable} &2\\ + \textit{port-unreachable} &3 \\ + \textit{fragmentation-needed} &4\\ + \textit{source-route-failed} &5\\ + \textit{network-unknown} &6\\ + \textit{host-unknown} &7\\ + \textit{host-isolated} &8\\ + \textit{network-prohibited} &9\\ + \textit{host-prohibited} &10 \\ + \textit{TOS-network-unreachable} &11 \\ + \textit{TOS-host-unreachable} &12 \\ + \textit{communication-prohibited} &13 \\ + \textit{host-precedence-violation}&14 \\ + \textit{precedence-cutoff} &15 \\ + \hline + \textit{network-redirect} &0 \\ + \textit{host-redirect} &1 \\ + \textit{TOS-network-redirect} &2 \\ + \textit{TOS-host-redirect} &3 \\ + \hline + \textit{ttl-zero-during-transit} &0 \\ + \textit{ttl-zero-during-reassembly}&1 \\ + \hline + \textit{ip-header-bad} &0 \\ + \textit{required-option-missing} &1 \\ + \hline + \end{tabular} + \caption{Valori del campo \textsl{codice} per il protocollo ICMP.} +\label{tab:ICMP_code} +\end{table} -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "gapil" -%%% End: % LocalWords: sez Protocol IPv dall' RFC Ethernet Token FDDI Universal host of % LocalWords: addressing Best effort l'host router IANA Assigned Number tab to @@ -1497,16 +1699,27 @@ l'indirizzo link-local e ricever % LocalWords: destination identification fragment checksum TCP UDP ICMPv type % LocalWords: service head total fragmentation protocol broadcast broadcasting % LocalWords: multicasting path MTU discovery NSAP IPX based geografic local -% LocalWords: routing format prefix nell' Registry Subscriber Intra Regional +% LocalWords: routing format prefix Registry Subscriber Intra Regional SSH % LocalWords: Register INTERNIC NCC APNIC subscriber Interface MAC address Reg % LocalWords: Subnet Naz Prov Subscr FEBF bootstrap FEC FEFF DNS socket FFFF % LocalWords: sull'host loopback scop all nodes routers rip cbt name dhcp HBH % LocalWords: agents servers relays solicited extension options route Keyword % LocalWords: Authentication Encapsulation ICMP Control Message GGP Gateway ST -% LocalWords: encapsulation Stream Trasmission Datagram RH FH IDRP ESP Null +% LocalWords: encapsulation Stream Trasmission Datagram RH FH IDRP ESP Null ip % LocalWords: Encrypted Security IGRP OSPF Short First tunnelling FFFFFF hash % LocalWords: news FTP NFS authentication Parameter Index ICV Integrity Value -% LocalWords: padding Option gateway dell'MD keyed Encripted IEEE ethernet -% LocalWords: dell'autoconfigurazione L'autoconfigurazione Solicitation -% LocalWords: stateless solicitation Advertisement stateful -% LocalWords: l'autoconfigurazione +% LocalWords: padding Option gateway dell'MD keyed Encripted IEEE ethernet any +% LocalWords: Solicitation netfilter iptables TFTP streaming Normal IGMP +% LocalWords: stateless solicitation Advertisement stateful Transfer Unit echo +% LocalWords: l'autoconfigurazione reply request unreachable all'IP quench TTL +% LocalWords: redirect exceeded parameter problem timestamp info mask port ttl +% LocalWords: needed failed unknown isolated prohibited communication cutoff +% LocalWords: precedence violation during reassembly bad required option +% LocalWords: missing + + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "gapil" +%%% End: