This commit was manufactured by cvs2svn to create branch 'start'.
[gapil.git] / network.tex
1 \chapter{Introduzione alla rete}
2
3 In questo capitolo sarà fatta un'introduzione ai contetti generali che
4 servono come prerequisiti per capire ed
5 esamineremo a grandi linee i protocolli di rete e come questi sono organizzati
6 e interagiscono.
7
8
9 \section{I protocolli di rete}
10 \label{sec:layer}
11
12 Parlando di reti di computer si parla in genere di un insieme molto vasto ed
13 eterogeneo di mezzi di comunicazione che vanno dal cavo telefonico, alla
14 fibra ottica, alle comunicazioni via satellite; per rendere possibile la
15 comunicazione attraverso un così variegato insieme di mezzi sono stati
16 adottati una serie di protocolli, il più famoso dei quali, quello alla base
17 del funzionamento di internet, é il cosiddetto TCP/IP.
18
19 \subsection{Il modello ISO/OSI}
20 \label{sec:iso_osi}
21
22 Una caratteristica comune dei protocolli di rete è il loro essere strutturati
23 in livelli sovrapposti; in questo modo un livello superiore esegue richieste
24 al livello sottostante e da questo riceve responsi, mentre livelli uguali su
25 macchine diverse conversano tramite lo stesso protocollo. Questo modello di
26 funzionamento è stato stato standardizzato dalla International Standards
27 Organization (ISO) che ha preparato fin dal 1984 il Modello di Riferimento
28 Open Systems Interconnection (OSI), strutturato in a sette livelli, secondo la
29 tabella in \ntab.
30
31 \begin{table}[htb]
32   \centering
33   \begin{tabular}{l c c l} 
34     \textbf{Livello} & \multicolumn{2}{c}{\textbf{Nome}} & \\
35     \hline
36     Livello 7&\textit{Application} &\textsl{Applicazione}& \\ 
37     Livello 6&\textit{Presentation} &\textsl{Presentazione}& \\ 
38     Livello 5&\textit{Session} &\textsl{Sessione}& \\ 
39     Livello 4&\textit{Transport} &\textsl{Trasporto}& \\ 
40     Livello 3&\textit{Network} &\textsl{Rete}&   \\ 
41     Livello 2&\textit{DataLink} &\textsl{Collegamento Dati}& \\
42     Livello 1&\textit{Connection} &\textsl{Connessione Fisica}& \\
43     \hline
44 \end{tabular}
45 \caption{I sette livelli del protocollo ISO/OSI.}
46 \label{tab:osilayers}
47 \end{table}
48
49 Il modello ISO/OSI è stato sviluppato corrispondentemente alla definizione
50 della serie di protocolli X.25 per la commutazione di pacchetto. Ma nonostante
51 il lavoro dettagliato di standardizzazione il modello si è rivelato
52 sostanzialmente troppo complesso e poco flessibile rispetto a quello,
53 precedente, su cui si basa TCP/IP che è diventato uno standard de facto;
54 quest'ultimo viene comunemente chiamato modello DoD (Department of Defense),
55 dato che fu sviluppato dall'agenzia ARPA per il Dipartimento della Difesa
56 Americano.
57
58 \subsection{Il protocollo TCP/IP}
59 \label{sec:tcpip_overview}
60
61 Così come ISO/OSI anche TCP/IP è stato strutturato in livelli (riassunti in
62 \ntab); un confronto fra i due è riportato in \nfig dove viene evidenziata
63 anche la corrispondenza fra i rispettivi livelli (che comunque è
64 approssimativa) e come essi vanno ad inserirsi all'interno del sistema
65 operativo, riguardo alla divisione fra user space e kernel space spiegata in
66 \ref{sec:unix_struct}.
67
68 % L'attuale Internent Protocol (IPv4) viene standardizzato nel 1981
69 % dall'RFC~719; esso nasce per disaccoppiare le applicazioni della struttura
70 % hardware delle reti di trasmissione, e creare una interfaccia di trasmissione
71 % dei dati indipendente dal sottostante substrato di rete, che può essere
72 % realizzato con le tecnologie più disparate (Ethernet, Token Ring, FDDI,
73 % etc.).
74
75 % In realtà IP realizza solo una parte di tutto questo, e fa parte di un
76 % sistema che va sotto il nome di TCP/IP che è, 
77 % uno di
78 % questi, quello responsabile del trasporto dei pacchetti fra le varie reti che
79 % compongono Internet, è appunto IP.
80
81 \begin{table}[htb]
82   \centering
83   \begin{tabular}{l c c l} 
84     \textbf{Livello} & \multicolumn{2}{c}{\textbf{Nome}} & \textbf{Esempi} \\
85     \hline
86     Livello 1&\textit{Application} &\textsl{Applicazione}& 
87     Telnet, FTP, etc. \\ 
88     Livello 2&\textit{Transport} &\textsl{Trasporto}& TCP, UDP \\ 
89     Livello 3&\textit{Network} &\textsl{Rete}& IP, (ICMP, IGMP)  \\ 
90     Livello 4&\textit{Link} &\textsl{Connessione}& 
91     device driver \& scheda di interfaccia  \\
92     \hline
93 \end{tabular}
94 \caption{I quattro livelli del protocollo TPC/IP.}
95 \label{tab:layers}
96 \end{table}
97
98
99 Come si può notare TCP/IP è più semplice del modello ISO/OSI e strutturato in
100 soli quattro livelli. Il suo nome deriva dai due principali protocolli che lo
101 compongono, il TCP \textit{Trasmission Control Protocol} e l'IP
102 \textit{Internet Protocol}. Le funzioni dei vari livelli sono le seguenti:
103
104 \begin{description}
105 \item \textbf{Applicazione} É relativo ai programmi di interfaccia utente, in
106   genere questi vengono realizzati secondo il modello Client-Server (vedi
107   \ref{sec:cliserv}.
108 \item \textbf{Trasporto} Fornisce la comunicazione tra le due stazioni
109   terminali su cui girano gli applicativi, regola il flusso delle
110   informazioni, e può fornire un trasporto affidabile, cioè con recupero
111   errori. Il protocollo principale di questo livello è il TCP.
112 \item \textbf{Rete} Si occupa dello smistamento dei singoli pacchetti su una
113   rete complessa e interconnessa, a questo stesso livello operano i protocolli
114   per il reperimento delle informazioni necessarie allo smistamento, per lo
115   scambio di messaggi di controllo e per il monitoraggio della rete. Il
116   protocollo su cui si basa questo livello è IP (sia nella attuale versione,
117   IPv4 che nella nuova IPv6).
118 \item \textbf{Connessione} È responsabile per l'interfacciamento al
119   dispositivo elettronico che effettua la comunicazione fisica, gestendo
120   l'invio e la ricezione dall'hardware dei pacchetti.
121 \end{description}
122
123
124 La comunicazione fra due stazioni avviene pertanto secondo le modalità
125 illustrate in \nfig. 
126
127 Le singole applicazioni si scambieranno i dati secondo un loro formato
128 specifico, implementando un protocollo di applicazione (esempi possono essere
129 HTTP, POP, telnet, SMTP, etc). 
130
131 Questi dati vengono inviati al livello di trasporto usando un'interfaccia
132 opportuna (i \textit{socket}, che esamineremo in dettaglio in seguito), i
133 quali li spezzerà in pacchetti di dimensione opportuna e li incapsulerà
134 all'interno del suo protocollo di trasporto aggiungendo ad ogni pacchetto le
135 informazioni necessarie alla gestione di quest'ultimo. Questo processo viene
136 svolto dirattamente nel kernel ad esempio dallo stack TCP nel caso il
137 protocollo di trasporto sia questo.
138
139 Una volta composto il pacchetto nel formato adatto al protocollo di trasporto
140 usato questo sarà passato al successivo livello, quello del collegamento che
141 si occupa di inserire le opportune informazioni per poter effettuare
142 l'instradamento nella rete ed il recapito alla destinazione finale. In genere
143 questo è il livello di IP (Internet Protocol), a cui vengono inseriti i numeri
144 IP che identificano i computer su internet.
145
146 L'ultimo passo è il trasferimento del pacchetto al driver della interfaccia di
147 trasmissione che si incarica di incapsularlo nel relativo protocollo di
148 trasmissione fisica usato dall'hardware usato per la comunicazione (ad esempio
149 ethernet per una scheda di rete).
150
151
152 \subsection{Criteri generali del design di TCP/IP}
153
154
155 La filosofia architetturale di TCP/IP è semplice: costruire una rete che
156 possa sopportare il carico in transito, ma permettere ai singoli nodi di
157 scartare pacchetti se il carico è temporaneamente eccessivo, o se risultano
158 errati o non recapitabili.
159
160 L'incarico di rendere il recapito pacchetti affidabile non spetta allo livello
161 di collegamento, ma ai livelli superiori. Pertanto il protocollo IP è per sua
162 natura inaffidabile, in quanto non è assicurata né una percentuale di
163 successo né un limite sui tempi di consegna dei pacchetti.
164
165 È il livello di trasporto che si deve occupare (qualora necessiti) del
166 controllo del flusso dei dati e del recupero degli errori; questo è realizzato
167 dal protocollo TCP. La sede principale di "intelligenza" della rete è pertanto
168 al livello di trasporto o superiore.
169
170 Infine le singole stazioni collegate alla rete non fungono soltanto da punti
171 terminali di comunicazione, ma possono anche assumere il ruolo di router, per
172 l'interscambio di pacchetti da una rete ad un'altra. Questo rende possibile la
173 flessibilità della rete che è in grado di adattarsi ai mutamenti delle
174 interconnessioni.
175
176 La caratteristica essenziale che rende tutto ciò possibile è la strutturazione
177 a livelli tramite l'incapsulamento. Ogni pacchetto di dati viene incapsulato
178 nel formato del livello successivo, fino al livello della connessione fisica.
179 In questo modo il pacchetto ricevuto ad un livello $n$ dalla stazione di
180 destinazione è esattamente lo stesso spedito dal livello $n$ dalla sorgente.
181 Questo rende facile il progettare il software facendo riferimento unicamente a
182 quanto necessario ad un singolo livello, con la confidenza che questo poi sarà
183 trattato uniformemente da tutti i nodi della rete.
184
185
186
187 \section{Il modello client-server}
188 \label{sec:cliserv}.
189
190 La differenza principale fra un'applicazione di rete e un programma normale
191 è che quest'ultima per definizione concerne la comunicazione fra
192 ``processi'' diversi (che in generale non girano neanche sulla stessa
193 macchina). Questo già prefigura un cambiamento completo rispetto all'ottica
194 del ``programma'' monolitico all'interno del quale vengono eseguite tutte le
195 istruzioni, e presuppone un sistema operativo ``multitasking'' in grado di
196 eseguire processi diversi.
197
198 Il concetto fondamentale si basa la programmazione di rete sotto Linux (e
199 sotto Unix in generale) è il modello \textit{client-server} in cui un
200 programma di servizio, il \textit{server} riceve un connessione e risponde a
201 un programma di utilizzo, il \textit{client}, provvedendo a quest'ultimo un
202 definito insieme di servizi.
203
204 Esempi di questo modello sono il WEB, ftp, telnet, ssh e praticamente ogni
205 servizio che viene fornito tramite la rete, ma il modello è utilizzato in
206 generale anche per programmi di uso locale.
207
208 Normalmente si dividono i server in due categorie principali,
209 \textit{concorrenti} e \textit{iterativi}, sulla base del loro comportamento.
210
211 Un server iterativo risponde alla richiesta inviando i dati e resta occupato
212 (non rispondendo ad ulteriori richieste) fintanto che non ha concluso la
213 richiesta. Una volta completata la richiesta il server diventa di nuovo
214 disponibile.
215
216 Un server concorrente al momento di trattare la richiesta crea un processo
217 figlio incaricato di fornire i servizi richiesti, per poi porsi in attesa di
218 ulteriori richieste. In questo modo più richieste possono essere soddisfatte
219 contemporaneamente, una volta che il processo figlio ha concluso il suo lavoro
220 viene terminato, mentre il server originale resta sempre attivo.
221