Initial revision
[gapil.git] / network.tex
diff --git a/network.tex b/network.tex
new file mode 100644 (file)
index 0000000..9206c50
--- /dev/null
@@ -0,0 +1,221 @@
+\chapter{Introduzione alla rete}
+
+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.
+
+
+\section{I protocolli di rete}
+\label{sec:layer}
+
+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
+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.
+
+\subsection{Il modello ISO/OSI}
+\label{sec: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
+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.
+
+\begin{table}[htb]
+  \centering
+  \begin{tabular}{l c c l} 
+    \textbf{Livello} & \multicolumn{2}{c}{\textbf{Nome}} & \\
+    \hline
+    Livello 7&\textit{Application} &\textsl{Applicazione}& \\ 
+    Livello 6&\textit{Presentation} &\textsl{Presentazione}& \\ 
+    Livello 5&\textit{Session} &\textsl{Sessione}& \\ 
+    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}& \\
+    \hline
+\end{tabular}
+\caption{I sette livelli del protocollo ISO/OSI.}
+\label{tab:osilayers}
+\end{table}
+
+Il modello ISO/OSI è stato sviluppato corrispondentemente 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, 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.
+
+\subsection{Il protocollo TCP/IP}
+\label{sec: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 è
+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.
+
+\begin{table}[htb]
+  \centering
+  \begin{tabular}{l c c l} 
+    \textbf{Livello} & \multicolumn{2}{c}{\textbf{Nome}} & \textbf{Esempi} \\
+    \hline
+    Livello 1&\textit{Application} &\textsl{Applicazione}& 
+    Telnet, FTP, etc. \\ 
+    Livello 2&\textit{Transport} &\textsl{Trasporto}& TCP, UDP \\ 
+    Livello 3&\textit{Network} &\textsl{Rete}& IP, (ICMP, IGMP)  \\ 
+    Livello 4&\textit{Link} &\textsl{Connessione}& 
+    device driver \& scheda di interfaccia  \\
+    \hline
+\end{tabular}
+\caption{I quattro livelli del protocollo TPC/IP.}
+\label{tab:layers}
+\end{table}
+
+
+Come si può notare TCP/IP è più semplice del modello ISO/OSI e strutturato in
+soli quattro livelli. Il suo nome deriva dai due principali protocolli che lo
+compongono, il TCP \textit{Trasmission Control Protocol} e l'IP
+\textit{Internet Protocol}. Le funzioni dei vari livelli sono le seguenti:
+
+\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}.
+\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
+  errori. Il protocollo principale di questo livello è il TCP.
+\item \textbf{Rete} Si occupa dello smistamento dei singoli pacchetti su una
+  rete complessa e interconnessa, a questo stesso livello operano i protocolli
+  per il reperimento delle informazioni necessarie allo smistamento, per lo
+  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 IPv6).
+\item \textbf{Connessione} È responsabile per l'interfacciamento al
+  dispositivo elettronico che effettua la comunicazione fisica, gestendo
+  l'invio e la ricezione dall'hardware dei pacchetti.
+\end{description}
+
+
+La comunicazione fra due stazioni avviene pertanto secondo le modalità
+illustrate in \nfig. 
+
+Le singole applicazioni si scambieranno i dati secondo un loro formato
+specifico, implementando un protocollo di applicazione (esempi possono essere
+HTTP, POP, telnet, SMTP, etc). 
+
+Questi dati vengono inviati al livello di trasporto usando un'interfaccia
+opportuna (i \textit{socket}, che esamineremo in dettaglio in seguito), i
+quali li spezzerà in pacchetti di dimensione opportuna e li incapsulerà
+all'interno del suo protocollo di trasporto aggiungendo ad ogni pacchetto le
+informazioni necessarie alla gestione di quest'ultimo. Questo processo viene
+svolto dirattamente nel kernel ad esempio dallo stack TCP nel caso il
+protocollo di trasporto sia questo.
+
+Una volta composto il pacchetto nel formato adatto al protocollo di trasporto
+usato questo sarà passato al successivo livello, quello del collegamento che
+si occupa di inserire le opportune informazioni per poter effettuare
+l'instradamento nella rete ed il recapito alla destinazione finale. In genere
+questo è il livello di IP (Internet Protocol), a cui vengono inseriti i numeri
+IP che identificano i computer su internet.
+
+L'ultimo passo è il trasferimento del pacchetto al driver della interfaccia di
+trasmissione che si incarica di incapsularlo nel relativo protocollo di
+trasmissione fisica usato dall'hardware usato per la comunicazione (ad esempio
+ethernet per una scheda di rete).
+
+
+\subsection{Criteri generali del design di TCP/IP}
+
+
+La filosofia architetturale di TCP/IP è semplice: costruire una rete che
+possa sopportare il carico in transito, ma permettere ai singoli nodi di
+scartare pacchetti se il carico è temporaneamente eccessivo, o se risultano
+errati o non recapitabili.
+
+L'incarico di rendere il recapito pacchetti affidabile non spetta allo livello
+di collegamento, ma ai livelli superiori. Pertanto il protocollo IP è per sua
+natura inaffidabile, in quanto non è assicurata né una percentuale di
+successo né un limite sui tempi di consegna dei pacchetti.
+
+È il livello di trasporto che si deve occupare (qualora necessiti) del
+controllo del flusso dei dati e del recupero degli errori; questo è realizzato
+dal protocollo TCP. La sede principale di "intelligenza" della rete è pertanto
+al livello di trasporto o superiore.
+
+Infine le singole stazioni collegate alla rete non fungono soltanto da punti
+terminali di comunicazione, ma possono anche assumere il ruolo di router, per
+l'interscambio di pacchetti da una rete ad un'altra. Questo rende possibile la
+flessibilità della rete che è 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.
+In questo modo il pacchetto ricevuto ad un livello $n$ dalla stazione di
+destinazione è esattamente lo stesso spedito dal livello $n$ dalla sorgente.
+Questo rende facile il progettare il software facendo riferimento unicamente a
+quanto necessario ad un singolo livello, con la confidenza che questo poi sarà
+trattato uniformemente da tutti i nodi della rete.
+
+
+
+\section{Il modello client-server}
+\label{sec:cliserv}.
+
+La differenza principale fra un'applicazione di rete e un programma normale
+è che quest'ultima per definizione concerne la comunicazione fra
+``processi'' diversi (che in generale non girano neanche sulla stessa
+macchina). Questo già prefigura un cambiamento completo rispetto all'ottica
+del ``programma'' monolitico all'interno del quale vengono eseguite tutte le
+istruzioni, e presuppone un sistema operativo ``multitasking'' in grado di
+eseguire processi diversi.
+
+Il concetto fondamentale si basa la programmazione di rete sotto Linux (e
+sotto Unix in generale) è il modello \textit{client-server} in cui un
+programma di servizio, il \textit{server} riceve un connessione e risponde a
+un programma di utilizzo, il \textit{client}, provvedendo a quest'ultimo un
+definito insieme di servizi.
+
+Esempi di questo modello sono il WEB, ftp, telnet, ssh e praticamente ogni
+servizio che viene fornito tramite la rete, ma il modello è utilizzato in
+generale anche per programmi di uso locale.
+
+Normalmente si dividono i server in due categorie principali,
+\textit{concorrenti} e \textit{iterativi}, sulla base del loro comportamento.
+
+Un server iterativo risponde alla richiesta inviando i dati e resta occupato
+(non rispondendo ad ulteriori richieste) fintanto che non ha concluso la
+richiesta. Una volta completata la richiesta il server diventa di nuovo
+disponibile.
+
+Un server concorrente al momento di trattare la richiesta crea un processo
+figlio incaricato di fornire i servizi richiesti, per poi porsi in attesa di
+ulteriori richieste. In questo modo più richieste possono essere soddisfatte
+contemporaneamente, una volta che il processo figlio ha concluso il suo lavoro
+viene terminato, mentre il server originale resta sempre attivo.
+