Iniziato a scrivere su UDP
[gapil.git] / network.tex
index 9206c50451d0c0653c9907516c8cf30c602c0c20..20c49142339b965ba9283990c561ff3a0fa574eb 100644 (file)
@@ -1,32 +1,37 @@
 \chapter{Introduzione alla rete}
 \chapter{Introduzione alla rete}
+\label{cha:network}
 
 
-In questo capitolo sarà fatta un'introduzione ai contetti generali che
-servono come prerequisiti per capire ed
-esamineremo a grandi linee i protocolli di rete e come questi sono organizzati
-e interagiscono.
+In questo capitolo sarà fatta un'introduzione ai contetti generali che servono
+come prerequisiti per capire la programmazione di rete ed esamineremo a grandi
+linee i protocolli di rete e come questi sono organizzati e interagiscono.
+
+In particolare, avendo assunto l'ottica di un'introduzione mirata alla
+programmazione di rete, ci concentreremo sul protocollo più diffuso che è
+quello che sta alla base di internet, ed in particolare sulle parti più
+importanti ai fini della programmazione.  
 
 
 \section{I protocolli di rete}
 
 
 \section{I protocolli di rete}
-\label{sec:layer}
+\label{sec:net_protocols}
 
 Parlando di reti di computer si parla in genere di un insieme molto vasto ed
 
 Parlando di reti di computer si parla in genere di un insieme molto vasto ed
-eterogeneo di mezzi di comunicazione che vanno dal cavo telefonico, alla
-fibra ottica, alle comunicazioni via satellite; per rendere possibile la
+eterogeneo di mezzi di comunicazione che vanno dal cavo telefonico, alla fibra
+ottica, alle comunicazioni via satellite; per rendere possibile la
 comunicazione attraverso un così variegato insieme di mezzi sono stati
 adottati una serie di protocolli, il più famoso dei quali, quello alla base
 comunicazione attraverso un così variegato insieme di mezzi sono stati
 adottati una serie di protocolli, il più famoso dei quali, quello alla base
-del funzionamento di internet, é il cosiddetto TCP/IP.
+del funzionamento di internet, è il cosiddetto TCP/IP.
 
 \subsection{Il modello ISO/OSI}
 
 \subsection{Il modello ISO/OSI}
-\label{sec:iso_osi}
+\label{sec:net_iso_osi}
 
 Una caratteristica comune dei protocolli di rete è il loro essere strutturati
 in livelli sovrapposti; in questo modo un livello superiore esegue richieste
 al livello sottostante e da questo riceve responsi, mentre livelli uguali su
 macchine diverse conversano tramite lo stesso protocollo. Questo modello di
 
 Una caratteristica comune dei protocolli di rete è il loro essere strutturati
 in livelli sovrapposti; in questo modo un livello superiore esegue richieste
 al livello sottostante e da questo riceve responsi, mentre livelli uguali su
 macchine diverse conversano tramite lo stesso protocollo. Questo modello di
-funzionamento è stato stato standardizzato dalla International Standards
-Organization (ISO) che ha preparato fin dal 1984 il Modello di Riferimento
-Open Systems Interconnection (OSI), strutturato in a sette livelli, secondo la
-tabella in \ntab.
+funzionamento è stato stato standardizzato dalla \textit{International
+  Standards Organization} (ISO) che ha preparato fin dal 1984 il Modello di
+Riferimento \textit{Open Systems Interconnection} (OSI), strutturato in sette
+livelli, secondo la tabella in \ntab.
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -43,7 +48,7 @@ tabella in \ntab.
     \hline
 \end{tabular}
 \caption{I sette livelli del protocollo ISO/OSI.}
     \hline
 \end{tabular}
 \caption{I sette livelli del protocollo ISO/OSI.}
-\label{tab:osilayers}
+\label{tab:net_osilayers}
 \end{table}
 
 Il modello ISO/OSI è stato sviluppato corrispondentemente alla definizione
 \end{table}
 
 Il modello ISO/OSI è stato sviluppato corrispondentemente alla definizione
@@ -51,32 +56,19 @@ 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, su cui si basa TCP/IP che è diventato uno standard de facto;
 il lavoro dettagliato di standardizzazione il modello si è rivelato
 sostanzialmente troppo complesso e poco flessibile rispetto a quello,
 precedente, su cui si basa TCP/IP che è diventato uno standard de facto;
-quest'ultimo viene comunemente chiamato modello DoD (Department of Defense),
-dato che fu sviluppato dall'agenzia ARPA per il Dipartimento della Difesa
-Americano.
+quest'ultimo viene comunemente chiamato modello DoD (\textit{Department of
+  Defense}), dato che fu sviluppato dall'agenzia ARPA per il Dipartimento
+della Difesa Americano.
 
 
-\subsection{Il protocollo TCP/IP}
-\label{sec:tcpip_overview}
+\subsection{Il modello DoD (TCP/IP)}
+\label{sec:net_tcpip_overview}
 
 Così come ISO/OSI anche TCP/IP è stato strutturato in livelli (riassunti in
 \ntab); un confronto fra i due è riportato in \nfig dove viene evidenziata
 anche la corrispondenza fra i rispettivi livelli (che comunque è
 
 Così come ISO/OSI anche TCP/IP è stato strutturato in livelli (riassunti in
 \ntab); un confronto fra i due è riportato in \nfig dove viene evidenziata
 anche la corrispondenza fra i rispettivi livelli (che comunque è
-approssimativa) e come essi vanno ad inserirsi all'interno del sistema
-operativo, riguardo alla divisione fra user space e kernel space spiegata in
-\ref{sec:unix_struct}.
-
-% 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.).
-
-% In realtà IP realizza solo una parte di tutto questo, e fa parte di un
-% sistema che va sotto il nome di TCP/IP che è, 
-% uno di
-% questi, quello responsabile del trasporto dei pacchetti fra le varie reti che
-% compongono Internet, è appunto IP.
+approssimativa) e su come essi vanno ad inserirsi all'interno del sistema
+operativo rispetto alla divisione fra user space e kernel space spiegata in
+\ref{sec:intro_unix_struct}.
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -92,7 +84,7 @@ operativo, riguardo alla divisione fra user space e kernel space spiegata in
     \hline
 \end{tabular}
 \caption{I quattro livelli del protocollo TPC/IP.}
     \hline
 \end{tabular}
 \caption{I quattro livelli del protocollo TPC/IP.}
-\label{tab:layers}
+\label{tab:net_layers}
 \end{table}
 
 
 \end{table}
 
 
@@ -104,7 +96,7 @@ compongono, il TCP \textit{Trasmission Control Protocol} e l'IP
 \begin{description}
 \item \textbf{Applicazione} É relativo ai programmi di interfaccia utente, in
   genere questi vengono realizzati secondo il modello Client-Server (vedi
 \begin{description}
 \item \textbf{Applicazione} É relativo ai programmi di interfaccia utente, in
   genere questi vengono realizzati secondo il modello Client-Server (vedi
-  \ref{sec:cliserv}.
+  \ref{sec:net_cliserv}.
 \item \textbf{Trasporto} Fornisce la comunicazione tra le due stazioni
   terminali su cui girano gli applicativi, regola il flusso delle
   informazioni, e può fornire un trasporto affidabile, cioè con recupero
 \item \textbf{Trasporto} Fornisce la comunicazione tra le due stazioni
   terminali su cui girano gli applicativi, regola il flusso delle
   informazioni, e può fornire un trasporto affidabile, cioè con recupero
@@ -150,7 +142,7 @@ ethernet per una scheda di rete).
 
 
 \subsection{Criteri generali del design di TCP/IP}
 
 
 \subsection{Criteri generali del design di TCP/IP}
-
+\label{sec:net_tcpip_design}
 
 La filosofia architetturale di TCP/IP è semplice: costruire una rete che
 possa sopportare il carico in transito, ma permettere ai singoli nodi di
 
 La filosofia architetturale di TCP/IP è semplice: costruire una rete che
 possa sopportare il carico in transito, ma permettere ai singoli nodi di
@@ -183,9 +175,165 @@ quanto necessario ad un singolo livello, con la confidenza che questo poi sar
 trattato uniformemente da tutti i nodi della rete.
 
 
 trattato uniformemente da tutti i nodi della rete.
 
 
+\section{Il protocollo TCP/IP}
+\label{sec:net_tpcip}
+
+Come già affermato il protocollo TCP/IP è un insieme di protocolli diversi,
+che operano su 4 livelli diversi. Per gli interessi della programmazione di
+rete però sono importanti principalmente i due livelli centrali, e soprattutto
+quello di trasporto, su cui è innestata l'interfaccia fra kernel space e user
+space. 
+
+Il livello 4 infatti è normalmente gestito dal kernel, e si accede ad esso
+solo quando si vogliono fare applicazioni di sistema per il controllo della
+rete (locale) a basso livello, un uso quindi molto specialistico. Il livello 1
+invece dipende dalle singole applicazioni ed è di nuovo troppo specifico per
+essere affrontato qui.
+
+\subsection{Il quadro generale}
+
+Benché si parli di TCP/IP questa famiglia di protocolli è composta anche da
+altri membri. In \nfig si è riportato una figura di quadro che mostra un
+panorama sull'intera famiglia, e di come i vari protocolli vengano usati dalle
+applicazioni.
+
+La figura è da fare  ...
+
+I vari protocolli mostrati in figura sono i seguenti:
+
+\begin{list}{}{}
+\item \textsl{IPv4} \textit{Internet Protocol version 4}. È quello che
+  comunemente si chiama IP. Ha origine negli anni '80 e da allora è la base su
+  cui è cotriuta internet. Usa indirizzi a 32 bit e provvede la trasmissione
+  dei pacchetti TCP, UDP, ICMP e IGMP.
+\item \textsl{IPv6} \textit{Internet Protocol version 6}. È stato progettato a
+  metà degli anni '90 per rimpiazzare IPv4. Ha indirizzi a 128 bit e effettua
+  lo stesso servizio di trasporto di IPv4 per i pacchetti TCP, UDP e ICPMv6.
+\item \textsl{TCP} \textit{Trasmission Control Protocol}. È un protocollo
+  orientato alla connessione che provvede un trasporto affidabile e
+  bidirezionale di un flusso di dati. I socket TCP sono esempi di
+  \textit{stream socket}. Il protocollo ha cura di tutti gli aspetti del
+  trasporto, come l'acknoweledgment, i timout, la ritrasmissione, etc. È usato
+  dalla maggior parte delle applicazioni. Può essere usato sia con IPv4 che
+  con IPv6.
+\item \textsl{UDP} \textit{User Datagram Protocol}. È un protocollo senza
+  connessione a pacchetti. I socket UDP sono esempi di \textit{datagram
+    socket}. Contrariamente al TCP in protocollo non è affidabile e non c'è
+  garanzia che i pacchetti raggiungano la loro destinazione, né sull'eventuale
+  ordine di arrivo. Può essere usato sia con IPv4 che con IPv6.
+\item \textsl{ICMP} \textit{Internet Control Message Protocol}. Gestisce gli
+  errori e trasporta l'informazione di controllo fra stazioni remote e
+  instradatori (\textit{router} e \textit{host}). I messaggi sono normalmente
+  generati dal software del kernel che gestisce la comunicazione TCP/IP, anche
+  se può venire usato direttamente da alcuni programmi come \texttt{ping}. A
+  volte ci si riferisce ad esso come ICPMv4 per distinguerlo da ICMPv6.
+\item \textsl{ICMP} \textit{Internet Group Management Protocol}. É un
+  protocollo usato per il \textit{multicasting} (vedi
+  \ref{sec:xxx_multicast}), che è opzionale in IPv4.
+\item \textsl{ARP} \textit{Address Resolution Protocol}. È il protocollo che
+  mappa un indirizzo IP in un indirizzo hardware (come un indirizzo
+  internet). È usato in reti di tipo broadcast come ethernet, token ring o
+  FDDI ma non serve in connessioni punto-punto.
+\item \textsl{RARP} \textit{Reverse Address Resolution Protocol}. È il
+  protocollo che mappa un indirizzo hardware in un indirizzo IP. Viene usato a
+  volte per durante il boot per assegnare un indirizzo IP ad una macchina.
+\item \textsl{ICMPv6} \textit{Internet Control Message Protocol, version 6}.
+  Combina per IPv6 le funzionalità di ICMPv4, IGMP e ARP.
+\item \textsl{NETLINK} \textit{Netlink}.
+  Provvede l'interfaccia di accesso alla comunicazione a basso livello.
+\end{list}
+
+Gran parte delle applicazioni comunicano usando TCP o UDP, ed alcune si
+rifanno ad IP (ed i suoi correlati ICMP e IGMP); benché sia TCP che UDP siano
+basati su IP e sia possibile intervenire a questo livello con i \textit{raw
+  socket} questa tecnica è molto meno diffusa e a parte applicazioni
+particolari si preferisce sempre usare i servizi messi a disposizione dai due
+protocolli precedenti.  Per questo motivo a parte alcuni brevi accenni su IP
+in questa sezione ci concentreremo sul livello di trasporto.
+
+\subsection{Internet Protocol (IP)}
+\label{sec:net_ip}
+
+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.
+
+Internet protocol 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.).
+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}
+
+Negli anni '90 la crescita vertiginosa del numero di macchine connesse a
+internet ha iniziato a far emergere i vari limiti di IPv4, per risolverne i
+problemi si è perciò definita una nuova versione del protocollo, che (saltando
+un numero) è diventata la versione 6. IPv6 nasce quindi 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}
+
+Per maggiori dettagli riguardo al protocollo si può consultare
+\ref{sec:appA_ip}.
+
+\subsection{UDP: User Datagram Protocol)}
+\label{sec:net_udp}
+
+UDP è un protocollo di trasporto molto semplice, la sua descizione completa è
+contenuta dell'RFC768, 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, al pacchetto viene aggiunto un header molto semplice
+(\ref{sec:appA_udp}, e poi viene passato al livello superiore (IPv4 o IPv^
+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 
+
+
+\subsection{TCP: Transport Control Protocol)}
+\label{sec:net_tcp}
+
+
 
 \section{Il modello client-server}
 
 \section{Il modello client-server}
-\label{sec:cliserv}.
+\label{sec:net_cliserv}.
 
 La differenza principale fra un'applicazione di rete e un programma normale
 è che quest'ultima per definizione concerne la comunicazione fra
 
 La differenza principale fra un'applicazione di rete e un programma normale
 è che quest'ultima per definizione concerne la comunicazione fra