X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=netlayer.tex;h=e74c1aa3d36858c00098fb7162de04b939538a46;hp=9ecb451e74261c71077e0b94683ba939959dc24e;hb=94694d98edcc5cb0954f17408efccdc1aeba2c5f;hpb=0196c376e39fc18f8cd5e7fef47b61264f943faf diff --git a/netlayer.tex b/netlayer.tex index 9ecb451..e74c1aa 100644 --- a/netlayer.tex +++ b/netlayer.tex @@ -1,6 +1,6 @@ %% netlayer.tex %% -%% Copyright (C) 2000-2008 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2010 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", @@ -288,25 +288,49 @@ pacchetto (cio 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|p{6 cm}|} + \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 @@ -314,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} @@ -1195,7 +1245,7 @@ tab.~\ref{tab:IP_ipv6_nexthead}. 0 & & Riservato.\\ & HBH & Hop by Hop.\\ 1 & ICMP & Internet Control Message (IPv4 o IPv6).\\ - 2 & ICMP & Internet Group Management (IPv4).\\ + 2 & IGMP & Internet Group Management (IPv4).\\ 3 & GGP & Gateway-to-Gateway.\\ 4 & IP & IP in IP (IPv4 encapsulation).\\ 5 & ST & Stream.\\ @@ -1519,7 +1569,6 @@ 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} @@ -1533,8 +1582,10 @@ struttura dell'intestazione di un pacchetto ICMP generico. \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 @@ -1546,49 +1597,56 @@ struttura dell'intestazione di un pacchetto ICMP generico. \hline \texttt{any} & -- & Seleziona tutti i possibili valori \\ \hline - \texttt{echo-reply} &0& Inviato in risposta ad un ICMP + \textit{echo-reply} &0& Inviato in risposta ad un ICMP \textit{echo-request}.\\ - \texttt{destination-unreachable}&3& Segnala una destinazione + \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.\\ - \texttt{source-quench} &4& Inviato in caso di congestione della + \textit{source-quench} &4& Inviato in caso di congestione della rete per indicare all'IP sorgente di diminuire il traffico inviato.\\ - \texttt{redirect} &5& Inviato per segnalare un errore di + \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.\\ - \texttt{echo-request} &8& Richiede l'invio in risposta di un - \texttt{echo-reply}.\\ -% \texttt{router-advertisement} & & \\ -% \texttt{router-solicitation} & & \\ - \texttt{time-exceeded} &11& Inviato quando il TTL di un pacchetto + \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.\\ - \texttt{parameter-problem} &12& Inviato da un router che rileva dei + \textit{parameter-problem} &12& Inviato da un router che rileva dei problemi con l'intestazione di un pacchetto.\\ - \texttt{timestamp-request} &13& Richiede l'invio in risposta di un - \texttt{timestamp-reply}.\\ - \texttt{timestamp-reply} &14& Inviato in risposta di un - \texttt{timestamp-request}.\\ - \texttt{info-request} &15& Richiede l'invio in risposta di un - \texttt{info-reply}.\\ - \texttt{info-reply} &16& Inviato in risposta di un - \texttt{info-request}.\\ - \texttt{address-mask-request} &17& Richiede l'invio in risposta di un - \texttt{address-mask-reply}.\\ - \texttt{address-mask-reply} &18& Inviato in risposta di un - \texttt{address-mask-request}.\\ + \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 @@ -1598,33 +1656,33 @@ struttura dell'intestazione di un pacchetto ICMP generico. \textbf{Valore}&\textbf{Codice}\\ \hline \hline - \texttt{network-unreachable} &0\\ - \texttt{host-unreachable} &1\\ - \texttt{protocol-unreachable} &2\\ - \texttt{port-unreachable} &3 \\ - \texttt{fragmentation-needed} &4\\ - \texttt{source-route-failed} &5\\ - \texttt{network-unknown} &6\\ - \texttt{host-unknown} &7\\ - \texttt{host-isolated} &8\\ - \texttt{network-prohibited} &9\\ - \texttt{host-prohibited} &10 \\ - \texttt{TOS-network-unreachable} &11 \\ - \texttt{TOS-host-unreachable} &12 \\ - \texttt{communication-prohibited} &13 \\ - \texttt{host-precedence-violation}&14 \\ - \texttt{precedence-cutoff} &15 \\ + \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 - \texttt{network-redirect} &0 \\ - \texttt{host-redirect} &1 \\ - \texttt{TOS-network-redirect} &2 \\ - \texttt{TOS-host-redirect} &3 \\ + \textit{network-redirect} &0 \\ + \textit{host-redirect} &1 \\ + \textit{TOS-network-redirect} &2 \\ + \textit{TOS-host-redirect} &3 \\ \hline - \texttt{ttl-zero-during-transit} &0 \\ - \texttt{ttl-zero-during-reassembly}&1 \\ + \textit{ttl-zero-during-transit} &0 \\ + \textit{ttl-zero-during-reassembly}&1 \\ \hline - \texttt{ip-header-bad} &0 \\ - \texttt{required-option-missing} &1 \\ + \textit{ip-header-bad} &0 \\ + \textit{required-option-missing} &1 \\ \hline \end{tabular} \caption{Valori del campo \textsl{codice} per il protocollo ICMP.} @@ -1641,7 +1699,7 @@ struttura dell'intestazione di un pacchetto ICMP generico. % 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 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 @@ -1651,7 +1709,7 @@ struttura dell'intestazione di un pacchetto ICMP generico. % 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 any -% LocalWords: Solicitation +% 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