Corretti i commenti ai listati in una forma piu' leggibile (spero).
[gapil.git] / network.tex
index 24276902ecf41a0228a8ac646e45ab7d2cf3d1af..a75b786cf216457fce4f4915190e2b79688e556a 100644 (file)
@@ -192,7 +192,7 @@ dal 1984 il Modello di Riferimento \textit{Open Systems Interconnection}
     Livello 4&\textit{Transport}    &\textsl{Trasporto} \\ 
     Livello 3&\textit{Network}      &\textsl{Rete}\\ 
     Livello 2&\textit{DataLink}     &\textsl{Collegamento Dati} \\
-    Livello 1&\textit{Connection}   &\textsl{Connessione Fisica} \\
+    Livello 1&\textit{Physical}   &\textsl{Connessione Fisica} \\
     \hline
 \end{tabular}
 \caption{I sette livelli del protocollo ISO/OSI.}
@@ -200,14 +200,41 @@ dal 1984 il Modello di Riferimento \textit{Open Systems Interconnection}
 \end{table}
 
 Il modello ISO/OSI è stato sviluppato in corrispondenza alla definizione della
-serie di protocolli X.25 per la commutazione di pacchetto. Ma nonostante il
-lavoro dettagliato di standardizzazione il modello si è rivelato
-sostanzialmente troppo complesso e poco flessibile rispetto a quello
-precedente, il TCP/IP, su cui si basa internet, che è diventato uno standard
-de facto.  Il modello di quest'ultimo viene chiamato anche modello DoD (sigla
-che sta per \textit{Department of Defense}), dato che fu sviluppato
-dall'agenzia ARPA per il Dipartimento della Difesa Americano.
+serie di protocolli X.25 per la commutazione di pacchetto; come si vede è un
+modello abbastanza complesso\footnote{infatti per memorizzarne i vari livelli
+  è stata creata la frase \texttt{All people seem to need data processing}, in
+  cui ciascuna parola corrisponde all'iniziale di uno dei livelli.}, tanto che
+usualmente si tende a suddividerlo in due parti, secondo lo schema mostrato in
+\figref{fig:net_osi_tcpip_comp}, con un \textit{upper layer} che riguarda solo
+le applicazioni, che viene realizzato in user space, ed un \textit{lower
+  layer} in cui si mescolano la gestione fatta dal kernel e le funzionalità
+fornite dall'hardware.
+
+Il modello ISO/OSI mira ad effettuare una classificazione completamente
+generale di ogni tipo di protocollo di rete; nel frattempo però era stato
+sviluppato anche un altro modello, relativo al protocollo TCP/IP, che è quello
+su cui è basata internet, che è diventato uno standard de facto.  Questo
+modello viene talvolta chiamato anche modello \textit{DoD} (sigla che sta per
+\textit{Department of Defense}), dato che fu sviluppato dall'agenzia ARPA per
+il Dipartimento della Difesa Americano.
 
+\begin{figure}[!htb]
+  \centering
+  \includegraphics[width=13cm]{img/iso_tcp_comp}
+  \caption{Struttura a livelli dei protocolli OSI e TCP/IP, con la  
+    relative corrispondenze e la divisione fra kernel e user space.}
+  \label{fig:net_osi_tcpip_comp}
+\end{figure}
+
+La scelta fra quale dei due modelli utilizzare dipende per lo più dai gusti
+personali. Come caratteristiche generali il modello ISO/OSI è più teorico e
+generico, basato separazioni funzionali, mentre il modello TCP/IP è più vicino
+alla separazione concreta dei vari strati del sistema operativo; useremo
+pertanto quest'ultimo, anche per la sua maggiore semplicità.\footnote{questa
+  semplicità ha un costo quando si fa riferimento agli strati più bassi, che
+  sono in effetti descritti meglio dal modello ISO/OSI, in quanto gran parte
+  dei protocolli di trasmissione hardware sono appunto strutturati sui due
+  livelli di \textit{Data Link} e \textit{Connection}.}
 
 \subsection{Il modello TCP/IP (o DoD)}
 \label{sec:net_tcpip_overview}
@@ -216,10 +243,11 @@ Cos
 (riassunti in \tabref{tab:net_layers}); un confronto fra i due è riportato in
 \figref{fig:net_osi_tcpip_comp} dove viene evidenziata anche la corrispondenza
 fra i rispettivi livelli (che comunque è approssimativa) e su come essi vanno
-ad inserirsi all'interno di un sistema rispetto alla divisione fra user space
-e kernel space spiegata in \secref{sec:intro_unix_struct}.\footnote{in realtà
-  è possibile accedere, attraverso una opportuna interfaccia (come vedremo in
-  \secref{sec:sock_sa_packet}), anche ai livelli inferiori.}
+ad inserirsi all'interno del sistema rispetto alla divisione fra user space e
+kernel space spiegata in \secref{sec:intro_unix_struct}.\footnote{in realtà è
+  sempre possibile accedere dallo user space, attraverso una opportuna
+  interfaccia (come vedremo in \secref{sec:sock_sa_packet}), ai livelli
+  inferiori del protocollo.}
 
 \begin{table}[htb]
   \centering
@@ -232,7 +260,7 @@ e kernel space spiegata in \secref{sec:intro_unix_struct}.\footnote{in realt
     Telnet, FTP, etc. \\ 
     Livello 3&\textit{Transport} &\textsl{Trasporto}& TCP, UDP \\ 
     Livello 2&\textit{Network} &\textsl{Rete}& IP, (ICMP, IGMP)  \\ 
-    Livello 1&\textit{Link} &\textsl{Connessione}& 
+    Livello 1&\textit{Link} &\textsl{Collegamento}& 
     device driver \& scheda di interfaccia  \\
     \hline
 \end{tabular}
@@ -262,19 +290,11 @@ copre il livello 2. Le funzioni dei vari livelli sono le seguenti:
   scambio di messaggi di controllo e per il monitoraggio della rete. Il
   protocollo su cui si basa questo livello è IP (sia nella attuale versione,
   IPv4, che nella nuova versione, IPv6).
-\item[\textbf{Connessione}] È responsabile per l'interfacciamento al
+\item[\textbf{Collegamento}] È responsabile per l'interfacciamento al
   dispositivo elettronico che effettua la comunicazione fisica, gestendo
   l'invio e la ricezione dei pacchetti da e verso l'hardware.
 \end{basedescript}
 
-\begin{figure}[!htb]
-  \centering
-  \includegraphics[width=13cm]{img/iso_tcp_comp}
-  \caption{Struttura a livelli dei protocolli OSI e TCP/IP, con la  
-    relative corrispondenze e la divisione fra kernel e user space.}
-  \label{fig:net_osi_tcpip_comp}
-\end{figure}
-
 La comunicazione fra due stazioni remote avviene secondo le modalità
 illustrate in \figref{fig:net_tcpip_data_flux}, dove si è riportato il flusso
 dei dati reali e i protocolli usati per lo scambio di informazione su ciascun
@@ -282,7 +302,7 @@ livello. Si 
 se in realtà i protocolli di trasmissione usati possono essere molti altri.
 
 \begin{figure}[!htb]
-  \centering \includegraphics[width=12cm]{img/tcp_data_flux}
+  \centering \includegraphics[width=13cm]{img/tcp_data_flux}
   \caption{Strutturazione del flusso dei dati nella comunicazione fra due
     applicazioni attraverso i protocolli della suite TCP/IP.}
   \label{fig:net_tcpip_data_flux}
@@ -304,7 +324,7 @@ la procedura si pu
 \item I dati delle applicazioni vengono inviati al livello di trasporto usando
   un'interfaccia opportuna (i \textit{socket}\index{socket}, che esamineremo
   in dettaglio in \capref{cha:socket_intro}). Qui verranno spezzati in
-  pacchetti di dimensione opportuna e incapsulati nel protocollo di trasporto,
+  pacchetti di dimensione opportuna e inseriti nel protocollo di trasporto,
   aggiungendo ad ogni pacchetto le informazioni necessarie per la sua
   gestione. Questo processo viene svolto direttamente nel kernel, ad esempio
   dallo stack TCP, nel caso il protocollo di trasporto usato sia questo.
@@ -350,7 +370,7 @@ in grado di adattarsi ai mutamenti delle interconnessioni.
 
 La caratteristica essenziale che rende tutto ciò possibile è la strutturazione
 a livelli tramite l'incapsulamento. Ogni pacchetto di dati viene incapsulato
-nel formato del livello successivo, fino al livello della connessione fisica.
+nel formato del livello successivo, fino al livello del collegamento fisico.
 In questo modo il pacchetto ricevuto ad un livello \textit{n} dalla stazione
 di destinazione è esattamente lo stesso spedito dal livello \textit{n} dalla
 sorgente.  Questo rende facile il progettare il software facendo riferimento
@@ -393,8 +413,8 @@ per il ruolo centrale che svolge nella maggior parte delle applicazioni.
 
 Benché si parli di TCP/IP questa famiglia di protocolli è composta anche da
 molti membri. In \figref{fig:net_tcpip_overview} si è riportato uno schema che
-mostra un panorama sui vari protocolli della famiglia, e delle loro relazioni
-reciproche e con alcune dalle principali applicazioni che li usano.
+mostra un panorama sui principali protocolli della famiglia, e delle loro
+relazioni reciproche e con alcune dalle principali applicazioni che li usano.
 
 \begin{figure}[!htbp]
   \centering
@@ -498,7 +518,8 @@ trasporto.
 
 Quando si parla di IP ci si riferisce in genere alla versione attualmente in
 uso che è la versione 4 (e viene pertanto chiamato IPv4). Questa versione
-venne standardizzata nel 1981 dall'RFC~719.
+venne standardizzata nel 1981
+dall'\href{http://www.ietf.org/rfc/rfc0719.txt}{RFC~719}.
 
 Internet Protocol nasce per disaccoppiare le applicazioni della struttura
 hardware delle reti di trasmissione, e creare una interfaccia di trasmissione
@@ -548,22 +569,23 @@ grandi linee nei seguenti punti:
 \end{itemize}
 
 Maggiori dettagli riguardo a caratteristiche, notazioni e funzionamento del
-protocollo IP sono forniti nell'appendice \capref{cha:ip_protocol}.
+protocollo IP sono forniti nell'appendice \secref{sec:ip_protocol}.
 
  
 \subsection{User Datagram Protocol (UDP)}
 \label{sec:net_udp}
 
 UDP è un protocollo di trasporto molto semplice, la sua descrizione completa è
-contenuta dell'RFC~768, ma in sostanza esso è una semplice interfaccia a IP
-dal livello di trasporto. Quando un'applicazione usa UDP essa scrive un
-pacchetto di dati (il cosiddetto \textit{datagram} che da il nome al
-protocollo) su un socket\index{socket}, al pacchetto viene aggiunto un header
-molto semplice (per una descrizione più accurata vedi \secref{sec:xxx_udp}), e
-poi viene passato al livello superiore (IPv4 o IPv6 che sia) che lo spedisce
-verso la destinazione.  Dato che né IPv4 né IPv6 garantiscono l'affidabilità
-niente assicura che il pacchetto arrivi a destinazione, né che più pacchetti
-arrivino nello stesso ordine in cui sono stati spediti.
+contenuta dell'\href{http://www.ietf.org/rfc/rfc0768.txt}{RFC~768}, ma in
+sostanza esso è una semplice interfaccia a IP dal livello di trasporto. Quando
+un'applicazione usa UDP essa scrive un pacchetto di dati (il cosiddetto
+\textit{datagram} che da il nome al protocollo) su un socket\index{socket}, al
+pacchetto viene aggiunto un header molto semplice (per una descrizione più
+accurata vedi \secref{sec:xxx_udp}), e poi viene passato al livello superiore
+(IPv4 o IPv6 che sia) che lo spedisce verso la destinazione.  Dato che né IPv4
+né IPv6 garantiscono l'affidabilità niente assicura che il pacchetto arrivi a
+destinazione, né che più pacchetti arrivino nello stesso ordine in cui sono
+stati spediti.
 
 Pertanto il problema principale che si affronta quando si usa UDP è la
 mancanza di affidabilità, se si vuole essere sicuri che i pacchetti arrivino a
@@ -588,20 +610,21 @@ in cui un client pu
 destinati a server diversi, o un server ricevere su un socket\index{socket}
 pacchetti provenienti da client diversi.  Il modo più semplice di immaginarsi
 il funzionamento di UDP è quello della radio, in cui si può
-``\textsl{trasmettere a}'' e ``\textsl{ricevere da}'' più stazioni usando la
-stessa frequenza.
+\textsl{trasmettere} e \textsl{ricevere} da più stazioni usando la stessa
+frequenza.
 
 Nonostante gli evidenti svantaggi comportati dall'inaffidabilità UDP ha il
-grande pregio della velocità che in certi casi è essenziale; inoltre si presta
-bene per le applicazioni in cui la connessione non è necessaria e
-costituirebbe solo un peso in termini di prestazioni mentre una perdita di
+grande pregio della velocità, che in certi casi è essenziale; inoltre si
+presta bene per le applicazioni in cui la connessione non è necessaria, e
+costituirebbe solo un peso in termini di prestazioni, mentre una perdita di
 pacchetti può essere tollerata, ad esempio le applicazioni di streaming e
 quelle che usano il multicasting.
 
 \subsection{Transport Control Protocol (TCP)}
 \label{sec:net_tcp}
 
-Il TCP è un protocollo molto complesso, definito nell'RFC~739 e completamente
+Il TCP è un protocollo molto complesso, definito
+nell'\href{http://www.ietf.org/rfc/rfc0739.txt}{RFC~739} e completamente
 diverso da UDP; alla base della sua progettazione infatti non stanno
 semplicità e velocità, ma la ricerca della massima affidabilità possibile
 nella trasmissione dei dati.
@@ -610,8 +633,7 @@ La prima differenza con UDP 
 fra un client e un server, attraverso la quale essi possono comunicare; per
 questo il paragone più appropriato per questo protocollo è quello del
 collegamento telefonico, in quanto prima viene stabilita una connessione fra
-due i due capi della comunicazione su cui poi viene quest'ultima viene
-effettuata.
+due i due capi della comunicazione su cui poi effettuare quest'ultima.
 
 Caratteristica fondamentale di TCP è l'affidabilità; quando i dati vengono
 inviati attraverso una connessione ne viene richiesto un ``\textsl{ricevuto}''
@@ -661,7 +683,7 @@ del controllo di flusso e della gestione della sequenzialit
 effettuato per entrambe le direzioni di comunicazione.
 
 %% Una descrizione più accurata del protocollo è fornita in appendice
-%% \capref{cha:tcp_protocol}.
+%% \secref{sec:tcp_protocol}.
 
 \subsection{Limiti e dimensioni riguardanti la trasmissione dei dati}
 \label{sec:net_lim_dim}
@@ -695,7 +717,7 @@ dimensioni eccedono la MTU viene eseguita la cosiddetta
 \textit{frammentazione}, i pacchetti cioè vengono suddivisi\footnote{questo
   accade sia per IPv4 che per IPv6, anche se i pacchetti frammentati sono
   gestiti con modalità diverse, IPv4 usa un flag nell'header, IPv6 una
-  opportuna opzione, si veda \secref{cha:ip_protocol}.}) in blocchi più
+  opportuna opzione, si veda \secref{sec:ipv6_protocol}.}) in blocchi più
 piccoli che possono essere trasmessi attraverso l'interfaccia.
 
 \begin{table}[!htb]
@@ -746,15 +768,17 @@ comporta inefficienza, normalmente viene utilizzato un procedimento, detto
 \textit{path MTU discovery} che permette di determinare il \textit{path MTU}
 fra due stazioni; per la realizzazione del procedimento si usa il flag DF di
 IPv4 e il comportamento normale di IPv6 inviando delle opportune serie di
-pacchetti (per i dettagli vedere l'RFC~1191 per IPv4 e l'RFC~1981 per IPv6)
-fintanto che non si hanno più errori.
+pacchetti (per i dettagli vedere
+l'\href{http://www.ietf.org/rfc/rfc1191.txt}{RFC~1191} per IPv4 e
+l'\href{http://www.ietf.org/rfc/rfc1981.txt}{RFC~1981} per IPv6) fintanto che
+non si hanno più errori.
 
 Il TCP usa sempre questo meccanismo, che per le implementazioni di IPv4 è
 opzionale, mentre diventa obbligatorio per IPv6.  Per IPv6 infatti, non
 potendo i router frammentare i pacchetti, è necessario, per poter comunicare,
 conoscere da subito il \textit{path MTU}.
 
-Infine TCP definisce una \textit{maximum segment size} MSS che annuncia
+Infine TCP definisce una MSS \textit{Maximum Segment Size} che annuncia
 all'altro capo della connessione la dimensione massima dimensione del segmento
 di dati che può essere ricevuto, così da evitare la frammentazione. Di norma
 viene impostato alla dimensione della MTU dell'interfaccia meno la lunghezza