Prosegue la risistemazione degli indici. Trattata CLONE_FS.
[gapil.git] / network.tex
1 %% network.tex
2 %%
3 %% Copyright (C) 2000-2015 Simone Piccardi.  Permission is granted to
4 %% copy, distribute and/or modify this document under the terms of the GNU Free
5 %% Documentation License, Version 1.1 or any later version published by the
6 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
7 %% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
8 %% license is included in the section entitled "GNU Free Documentation
9 %% License".
10 %%
11
12 \chapter{Introduzione alla programmazione di rete}
13 \label{cha:network}
14
15 In questo capitolo sarà fatta un'introduzione ai concetti generali che servono
16 come prerequisiti per capire la programmazione di rete, non tratteremo quindi
17 aspetti specifici ma faremo una breve introduzione al modello più comune usato
18 nella programmazione di rete, per poi passare ad un esame a grandi linee dei
19 protocolli di rete e di come questi sono organizzati e interagiscono. 
20
21 In particolare, avendo assunto l'ottica di un'introduzione mirata alla
22 programmazione, ci concentreremo sul gruppo di protocolli più diffuso, il
23 TCP/IP, che è quello che sta alla base di Internet, avendo cura di
24 sottolineare i concetti più importanti da conoscere per la scrittura dei
25 programmi.
26
27
28
29 \section{Modelli di programmazione}
30 \label{sec:net_prog_model}
31
32
33 La differenza principale fra un'applicazione di rete e un programma normale è
34 che quest'ultima per definizione concerne la comunicazione fra processi
35 diversi, che in generale non girano neanche sulla stessa macchina. Questo già
36 prefigura un cambiamento completo rispetto all'ottica del programma monolitico
37 all'interno del quale vengono eseguite tutte le istruzioni, e chiaramente
38 presuppone un sistema operativo multitasking in grado di eseguire più processi
39 contemporaneamente.
40
41 In questa prima sezione esamineremo brevemente i principali modelli di
42 programmazione in uso. Ne daremo una descrizione assolutamente generica e
43 superficiale, che ne illustri le caratteristiche principali, non essendo fra
44 gli scopi del testo approfondire questi argomenti.
45
46 \subsection{Il modello \textit{client-server}}
47 \label{sec:net_cliserv}
48
49 L'architettura fondamentale su cui si basa gran parte della programmazione di
50 rete sotto Linux (e sotto Unix in generale) è il modello
51 \textit{client-server} caratterizzato dalla presenza di due categorie di
52 soggetti, i programmi di servizio, chiamati \textit{server}, che ricevono le
53 richieste e forniscono le risposte, ed i programmi di utilizzo, detti
54 \textit{client}.
55
56 In generale un server può (di norma deve) essere in grado di rispondere a più
57 di un client, per cui è possibile che molti programmi possano interagire
58 contemporaneamente, quello che contraddistingue il modello però è che
59 l'architettura dell'interazione è sempre nei termini di molti verso uno, il
60 server, che viene ad assumere un ruolo privilegiato.
61
62 Seguono questo modello tutti i servizi fondamentali di Internet, come le
63 pagine web, la posta elettronica, ftp, telnet, ssh e praticamente ogni
64 servizio che viene fornito tramite la rete, anche se, come abbiamo visto, il
65 modello è utilizzato in generale anche per programmi che non fanno
66 necessariamente uso della rete, come gli esempi che abbiamo usato in
67 cap.~\ref{cha:IPC} a proposito della comunicazione fra processi nello stesso
68 sistema.
69
70 Normalmente si dividono i server in due categorie principali, e vengono detti
71 \textsl{concorrenti} o \textsl{iterativi}, sulla base del loro comportamento.
72 Un \textsl{server iterativo} risponde alla richiesta inviando i dati e resta
73 occupato e non rispondendo ad ulteriori richieste fintanto che non ha fornito
74 una risposta alla richiesta. Una volta completata la risposta il server
75 diventa di nuovo disponibile.
76
77 Un \textsl{server concorrente} al momento di trattare la richiesta crea un
78 processo figlio (o un \textit{thread}) incaricato di fornire i servizi
79 richiesti, per porsi immediatamente in attesa di ulteriori richieste. In
80 questo modo, con sistemi multitasking, più richieste possono essere
81 soddisfatte contemporaneamente. Una volta che il processo figlio ha concluso
82 il suo lavoro esso di norma viene terminato, mentre il server originale resta
83 sempre attivo.
84
85
86 \subsection{Il modello \textit{peer-to-peer}}
87 \label{sec:net_peertopeer}
88
89 Come abbiamo visto il tratto saliente dell'architettura \textit{client-server}
90 è quello della preminenza del server rispetto ai client, le architetture
91 \textit{peer-to-peer} si basano su un approccio completamente opposto che è
92 quello di non avere nessun programma che svolga un ruolo preminente.
93
94 Questo vuol dire che in generale ciascun programma viene ad agire come un nodo
95 in una rete potenzialmente paritetica; ciascun programma si trova pertanto a
96 ricevere ed inviare richieste ed a ricevere ed inviare risposte, e non c'è più
97 la separazione netta dei compiti che si ritrova nelle architetture
98 \textit{client-server}.
99
100 Le architetture \textit{peer-to-peer} sono salite alla ribalta con
101 l'esplosione del fenomeno Napster, ma gli stessi protocolli di routing sono un
102 buon esempio di architetture \textit{peer-to-peer}, in cui ciascun nodo,
103 tramite il demone che gestisce il routing, richiede ed invia informazioni ad
104 altri nodi.
105
106 In realtà in molti casi di architetture classificate come
107 \textit{peer-to-peer} non è detto che la struttura sia totalmente paritetica e
108 ci sono parecchi esempi in cui alcuni servizi vengono centralizzati o
109 distribuiti gerarchicamente, come avveniva per lo stesso Napster, in cui le
110 ricerche erano effettuate su un server centrale.
111
112
113
114 \subsection{Il modello \textit{three-tier}}
115 \label{sec:net_three_tier}
116
117 Benché qui sia trattato a parte, il modello \textit{three-tier} in realtà è
118 una estensione del modello \textit{client-server}. Con il crescere della
119 quantità dei servizi forniti in rete (in particolare su Internet) ed al numero
120 di accessi richiesto. Si è così assistito anche ad una notevole crescita di
121 complessità, in cui diversi servizi venivano ad essere integrati fra di loro.
122
123 In particolare sempre più spesso si assiste ad una integrazione di servizi di
124 database con servizi di web, in cui le pagine vengono costruite dinamicamente
125 sulla base dei dati contenuti nel database. In tutti questi casi il problema
126 fondamentale di una architettura \textit{client-server} è che la richiesta di
127 un servizio da parte di un gran numero di client si scontra con il collo di
128 bottiglia dell'accesso diretto ad un unico server, con gravi problemi di
129 scalabilità.
130
131 Rispondere a queste esigenze di scalabilità il modello più semplice (chiamato
132 talvolta \textit{two-tier}) da adottare è stata quello di distribuire il
133 carico delle richieste su più server identici, mantenendo quindi
134 sostanzialmente inalterata l'architettura \textit{client-server} originale.
135
136 Nel far questo ci si scontra però con gravi problemi di manutenibilità dei
137 servizi, in particolare per quanto riguarda la sincronizzazione dei dati, e di
138 inefficienza dell'uso delle risorse. Il problema è particolarmente grave ad
139 esempio per i database che non possono essere replicati e sincronizzati
140 facilmente, e che sono molto onerosi, la loro replicazione è costosa e
141 complessa.
142
143 È a partire da queste problematiche che nasce il modello \textit{three-tier},
144 che si struttura, come dice il nome, su tre livelli. Il primo livello, quello
145 dei client che eseguono le richieste e gestiscono l'interfaccia con l'utente,
146 resta sostanzialmente lo stesso del modello \textit{client-server}, ma la
147 parte server viene suddivisa in due livelli, introducendo un
148 \textit{middle-tier}, su cui deve appoggiarsi tutta la logica di analisi delle
149 richieste dei client per ottimizzare l'accesso al terzo livello, che è quello
150 che si limita a fornire i dati dinamici che verranno usati dalla logica
151 implementata nel \textit{middle-tier} per eseguire le operazioni richieste dai
152 client.
153
154 In questo modo si può disaccoppiare la logica dai dati, replicando la prima,
155 che è molto meno soggetta a cambiamenti ed evoluzione, e non soffre di
156 problemi di sincronizzazione, e centralizzando opportunamente i secondi. In
157 questo modo si può distribuire il carico ed accedere in maniera efficiente i
158 dati.
159
160
161 \section{I protocolli di rete}
162 \label{sec:net_protocols}
163
164 Parlando di reti di computer si parla in genere di un insieme molto vasto ed
165 eterogeneo di mezzi di comunicazione che vanno dal cavo telefonico, alla fibra
166 ottica, alle comunicazioni via satellite o via radio; per rendere possibile la
167 comunicazione attraverso un così variegato insieme di mezzi sono stati
168 adottati molti protocolli, il più famoso dei quali, quello alla base del
169 funzionamento di Internet, è il gruppo di protocolli comunemente chiamato
170 TCP/IP.
171
172 \subsection{Il modello ISO/OSI}
173 \label{sec:net_iso_osi}
174
175 Una caratteristica comune dei protocolli di rete è il loro essere strutturati
176 in livelli sovrapposti; in questo modo ogni protocollo di un certo livello
177 realizza le sue funzionalità basandosi su un protocollo del livello
178 sottostante.  Questo modello di funzionamento è stato standardizzato dalla
179 \textit{International Standards Organization} (ISO) che ha preparato fin dal
180 1984 il Modello di Riferimento \textit{Open Systems Interconnection} (OSI),
181 strutturato in sette livelli, secondo quanto riportato in
182 tab.~\ref{tab:net_osilayers}.
183
184 \begin{table}[htb]
185   \centering
186   \begin{tabular}{|l|c|c|} 
187     \hline
188     \textbf{Livello} & \multicolumn{2}{|c|}{\textbf{Nome}} \\
189     \hline
190     \hline
191     Livello 7&\textit{Application}  &\textsl{Applicazione}\\ 
192     Livello 6&\textit{Presentation} &\textsl{Presentazione} \\ 
193     Livello 5&\textit{Session}      &\textsl{Sessione} \\ 
194     Livello 4&\textit{Transport}    &\textsl{Trasporto} \\ 
195     Livello 3&\textit{Network}      &\textsl{Rete}\\ 
196     Livello 2&\textit{DataLink}     &\textsl{Collegamento Dati} \\
197     Livello 1&\textit{Physical}   &\textsl{Connessione Fisica} \\
198     \hline
199 \end{tabular}
200 \caption{I sette livelli del protocollo ISO/OSI.}
201 \label{tab:net_osilayers}
202 \end{table}
203
204 Il modello ISO/OSI è stato sviluppato in corrispondenza alla definizione della
205 serie di protocolli X.25 per la commutazione di pacchetto; come si vede è un
206 modello abbastanza complesso\footnote{infatti per memorizzarne i vari livelli
207   è stata creata la frase \textit{All people seem to need data processing}, in
208   cui ciascuna parola corrisponde all'iniziale di uno dei livelli.}, tanto che
209 usualmente si tende a suddividerlo in due parti, secondo lo schema mostrato in
210 fig.~\ref{fig:net_osi_tcpip_comp}, con un \textit{upper layer} che riguarda
211 solo le applicazioni, che viene realizzato in \textit{user space}, ed un
212 \textit{lower layer} in cui si mescolano la gestione fatta dal kernel e le
213 funzionalità fornite dall'hardware.
214
215 Il modello ISO/OSI mira ad effettuare una classificazione completamente
216 generale di ogni tipo di protocollo di rete; nel frattempo però era stato
217 sviluppato anche un altro modello, relativo al protocollo TCP/IP, che è quello
218 su cui è basata Internet, che è diventato uno standard de facto.  Questo
219 modello viene talvolta chiamato anche modello \textit{DoD} (sigla che sta per
220 \textit{Department of Defense}), dato che fu sviluppato dall'agenzia ARPA per
221 il Dipartimento della Difesa Americano.
222
223 \begin{figure}[!htb]
224   \centering
225   \includegraphics[width=12cm]{img/iso_tcp_comp}
226   \caption{Struttura a livelli dei protocolli OSI e TCP/IP, con la relative
227     corrispondenze e la divisione fra \textit{kernel space} e \textit{user
228       space}.}
229   \label{fig:net_osi_tcpip_comp}
230 \end{figure}
231
232 La scelta fra quale dei due modelli utilizzare dipende per lo più dai gusti
233 personali. Come caratteristiche generali il modello ISO/OSI è più teorico e
234 generico, basato separazioni funzionali, mentre il modello TCP/IP è più vicino
235 alla separazione concreta dei vari strati del sistema operativo; useremo
236 pertanto quest'ultimo, anche per la sua maggiore semplicità. Questa semplicità
237 ha un costo quando si fa riferimento agli strati più bassi, che sono in
238 effetti descritti meglio dal modello ISO/OSI, in quanto gran parte dei
239 protocolli di trasmissione hardware sono appunto strutturati sui due livelli
240 di \textit{Data Link} e \textit{Connection}.
241
242
243 \subsection{Il modello TCP/IP (o DoD)}
244 \label{sec:net_tcpip_overview}
245
246 Così come ISO/OSI anche il modello del TCP/IP è stato strutturato in livelli
247 (riassunti in tab.~\ref{tab:net_layers}); un confronto fra i due è riportato
248 in fig.~\ref{fig:net_osi_tcpip_comp} dove viene evidenziata anche la
249 corrispondenza fra i rispettivi livelli (che comunque è approssimativa) e su
250 come essi vanno ad inserirsi all'interno del sistema rispetto alla divisione
251 fra \textit{user space} e \textit{kernel space} spiegata in
252 sez.~\ref{sec:intro_unix_struct}.\footnote{in realtà è sempre possibile
253   accedere dallo \textit{user space}, attraverso una opportuna interfaccia
254   (come vedremo in sez.~\ref{sec:sock_sa_packet}), ai livelli inferiori del
255   protocollo.}
256
257 \begin{table}[htb]
258   \centering
259   \begin{tabular}{|l|c|c|l|} 
260     \hline
261     \textbf{Livello} & \multicolumn{2}{|c|}{\textbf{Nome}} & \textbf{Esempi} \\
262     \hline
263     \hline
264     Livello 4 & \textit{Application} & \textsl{Applicazione}& 
265                                        Telnet, FTP, ecc. \\ 
266     Livello 3 & \textit{Transport}   & \textsl{Trasporto} & TCP, UDP\\ 
267     Livello 2 & \textit{Network}     & \textsl{Rete}      & IP, (ICMP, IGMP)\\ 
268     Livello 1 & \textit{Link}        & \textsl{Collegamento}& 
269                                        Device driver \& scheda di interfaccia\\
270     \hline
271 \end{tabular}
272 \caption{I quattro livelli del protocollo TCP/IP.}
273 \label{tab:net_layers}
274 \end{table}
275
276 Come si può notare come il modello TCP/IP è più semplice del modello ISO/OSI
277 ed è strutturato in soli quattro livelli. Il suo nome deriva dai due
278 principali protocolli che lo compongono, il TCP (\textit{Trasmission Control
279   Protocol}) che copre il livello 3 e l'IP (\textit{Internet Protocol}) che
280 copre il livello 2. Le funzioni dei vari livelli sono le seguenti:
281
282 \begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
283 \item[\textbf{Applicazione}] É relativo ai programmi di interfaccia con la
284   rete, in genere questi vengono realizzati secondo il modello client-server
285   (vedi sez.~\ref{sec:net_cliserv}), realizzando una comunicazione secondo un
286   protocollo che è specifico di ciascuna applicazione.
287 \item[\textbf{Trasporto}] Fornisce la comunicazione tra le due stazioni
288   terminali su cui girano gli applicativi, regola il flusso delle
289   informazioni, può fornire un trasporto affidabile, cioè con recupero degli
290   errori o inaffidabile. I protocolli principali di questo livello sono il TCP
291   e l'UDP.
292 \item[\textbf{Rete}] Si occupa dello smistamento dei singoli pacchetti su una
293   rete complessa e interconnessa, a questo stesso livello operano i protocolli
294   per il reperimento delle informazioni necessarie allo smistamento, per lo
295   scambio di messaggi di controllo e per il monitoraggio della rete. Il
296   protocollo su cui si basa questo livello è IP (sia nella attuale versione,
297   IPv4, che nella nuova versione, IPv6).
298 \item[\textbf{Collegamento}] È responsabile per l'interfacciamento al
299   dispositivo elettronico che effettua la comunicazione fisica, gestendo
300   l'invio e la ricezione dei pacchetti da e verso l'hardware.
301 \end{basedescript}
302
303 La comunicazione fra due stazioni remote avviene secondo le modalità
304 illustrate in fig.~\ref{fig:net_tcpip_data_flux}, dove si è riportato il flusso
305 dei dati reali e i protocolli usati per lo scambio di informazione su ciascun
306 livello. Si è genericamente indicato \textit{ethernet} per il livello 1, anche
307 se in realtà i protocolli di trasmissione usati possono essere molti altri.
308
309 \begin{figure}[!htb]
310   \centering \includegraphics[width=13cm]{img/tcp_data_flux}
311   \caption{Strutturazione del flusso dei dati nella comunicazione fra due
312     applicazioni attraverso i protocolli della suite TCP/IP.}
313   \label{fig:net_tcpip_data_flux}
314 \end{figure}
315
316 Per chiarire meglio la struttura della comunicazione attraverso i vari
317 protocolli mostrata in fig.~\ref{fig:net_tcpip_data_flux}, conviene prendere in
318 esame i singoli passaggi fatti per passare da un livello al sottostante,
319 la procedura si può riassumere nei seguenti passi:
320 \begin{itemize}
321 \item Le singole applicazioni comunicano scambiandosi i dati ciascuna secondo
322   un suo specifico formato. Per applicazioni generiche, come la posta o le
323   pagine web, viene di solito definito ed implementato quello che viene
324   chiamato un protocollo di applicazione (esempi possono essere HTTP, POP,
325   SMTP, ecc.), ciascuno dei quali è descritto in un opportuno standard (di
326   solito attraverso un RFC\footnote{l'acronimo RFC sta per \textit{Request For
327       Comment} ed è la procedura attraverso la quale vengono proposti gli
328     standard per Internet.}).
329 \item I dati delle applicazioni vengono inviati al livello di trasporto usando
330   un'interfaccia opportuna (i \textit{socket}, che esamineremo in dettaglio in
331   cap.~\ref{cha:socket_intro}). Qui verranno spezzati in pacchetti di
332   dimensione opportuna e inseriti nel protocollo di trasporto, aggiungendo ad
333   ogni pacchetto le informazioni necessarie per la sua gestione. Questo
334   processo viene svolto direttamente nel kernel, ad esempio dallo stack TCP,
335   nel caso il protocollo di trasporto usato sia questo.
336 \item Una volta composto il pacchetto nel formato adatto al protocollo di
337   trasporto usato questo sarà passato al successivo livello, quello di rete,
338   che si occupa di inserire le opportune informazioni per poter effettuare
339   l'instradamento nella rete ed il recapito alla destinazione finale. In
340   genere questo è il livello di IP (Internet Protocol), a cui vengono inseriti
341   i numeri IP che identificano i computer su Internet.
342 \item L'ultimo passo è il trasferimento del pacchetto al driver della
343   interfaccia di trasmissione, che si incarica di incapsularlo nel relativo
344   protocollo di trasmissione. Questo può avvenire sia in maniera diretta, come
345   nel caso di ethernet, in cui i pacchetti vengono inviati sulla linea
346   attraverso le schede di rete, che in maniera indiretta con protocolli come
347   PPP o SLIP, che vengono usati come interfaccia per far passare i dati su
348   altri dispositivi di comunicazione (come la seriale o la parallela).
349 \end{itemize}
350
351
352 \subsection{Criteri generali dell'architettura del TCP/IP}
353 \label{sec:net_tcpip_design}
354
355 La filosofia architetturale del TCP/IP è semplice: costruire una rete che
356 possa sopportare il carico in transito, ma permettere ai singoli nodi di
357 scartare pacchetti se il carico è temporaneamente eccessivo, o se risultano
358 errati o non recapitabili.
359
360 L'incarico di rendere il recapito pacchetti affidabile non spetta al livello
361 di rete, ma ai livelli superiori. Pertanto il protocollo IP è per sua natura
362 inaffidabile, in quanto non è assicurata né una percentuale di successo né un
363 limite sui tempi di consegna dei pacchetti.
364
365 È il livello di trasporto che si deve occupare (qualora necessiti) del
366 controllo del flusso dei dati e del recupero degli errori; questo è realizzato
367 dal protocollo TCP. La sede principale di "\textit{intelligenza}" della rete è
368 pertanto al livello di trasporto o ai livelli superiori.
369
370 Infine le singole stazioni collegate alla rete non fungono soltanto da punti
371 terminali di comunicazione, ma possono anche assumere il ruolo di
372 \textit{router} (\textsl{instradatori}), per l'interscambio di pacchetti da
373 una rete ad un'altra. Questo rende possibile la flessibilità della rete che è
374 in grado di adattarsi ai mutamenti delle interconnessioni.
375
376 La caratteristica essenziale che rende tutto ciò possibile è la strutturazione
377 a livelli tramite l'incapsulamento. Ogni pacchetto di dati viene incapsulato
378 nel formato del livello successivo, fino al livello del collegamento fisico.
379 In questo modo il pacchetto ricevuto ad un livello \textit{n} dalla stazione
380 di destinazione è esattamente lo stesso spedito dal livello \textit{n} dalla
381 sorgente.  Questo rende facile il progettare il software facendo riferimento
382 unicamente a quanto necessario ad un singolo livello, con la confidenza che
383 questo poi sarà trattato uniformemente da tutti i nodi della rete.
384
385
386 \section{La struttura del TCP/IP}
387 \label{sec:net_tpcip}
388
389 Come accennato in sez.~\ref{sec:net_protocols} il TCP/IP è un insieme di
390 protocolli diversi, che operano su 4 livelli diversi. Per gli interessi della
391 programmazione di rete però sono importanti principalmente i due livelli
392 centrali, e soprattutto quello di trasporto.
393
394 La principale interfaccia usata nella programmazione di rete, quella dei
395 socket (vedi sez.~\ref{cha:socket_intro}), è infatti un'interfaccia nei
396 confronti di quest'ultimo.  Questo avviene perché al di sopra del livello di
397 trasporto i programmi hanno a che fare solo con dettagli specifici delle
398 applicazioni, mentre al di sotto vengono curati tutti i dettagli relativi alla
399 comunicazione. È pertanto naturale definire una interfaccia di programmazione
400 su questo confine, tanto più che è proprio lì (come evidenziato in
401 fig.~\ref{fig:net_osi_tcpip_comp}) che nei sistemi Unix (e non solo) viene
402 inserita la divisione fra \textit{kernel space} e \textit{user space}.
403
404 In realtà in un sistema Unix è possibile accedere anche agli altri livelli (e
405 non solo a quello di trasporto) con opportune interfacce di programmazione
406 (vedi sez.~\ref{sec:sock_sa_packet}), ma queste vengono usate solo quando si
407 debbano fare applicazioni di sistema per il controllo della rete a basso
408 livello, di uso quindi molto specialistico.
409
410 In questa sezione daremo una descrizione sommaria dei vari protocolli del
411 TCP/IP, concentrandoci, per le ragioni appena esposte, sul livello di
412 trasporto.  All'interno di quest'ultimo privilegeremo poi il protocollo TCP,
413 per il ruolo centrale che svolge nella maggior parte delle applicazioni.
414
415
416 \subsection{Il quadro generale}
417 \label{sec:net_tcpip_general}
418
419 Benché si parli di TCP/IP questa famiglia di protocolli è composta anche da
420 molti membri. In fig.~\ref{fig:net_tcpip_overview} si è riportato uno schema
421 che mostra un panorama sui principali protocolli della famiglia, e delle loro
422 relazioni reciproche e con alcune dalle principali applicazioni che li usano.
423
424 \begin{figure}[!htbp]
425   \centering
426   \includegraphics[width=13cm]{img/tcpip_overview}  
427   \caption{Panoramica sui vari protocolli che compongono la suite TCP/IP.}
428   \label{fig:net_tcpip_overview}
429 \end{figure}
430
431 I vari protocolli riportati in fig.~\ref{fig:net_tcpip_overview} sono i
432 seguenti:
433 \begin{basedescript}{\desclabelwidth{1.7cm}\desclabelstyle{\nextlinelabel}}
434 \item[\textsl{IPv4}] \textit{Internet Protocol version 4}. È quello che
435   comunemente si chiama IP. Ha origine negli anni '80 e da allora è la base su
436   cui è costruita Internet. Usa indirizzi a 32 bit, e mantiene tutte le
437   informazioni di instradamento e controllo per la trasmissione dei pacchetti
438   sulla rete; tutti gli altri protocolli della suite (eccetto ARP e RARP, e
439   quelli specifici di IPv6) vengono trasmessi attraverso di esso.
440 \item[\textsl{IPv6}] \textit{Internet Protocol version 6}. È stato progettato
441   a metà degli anni '90 per rimpiazzare IPv4. Ha uno spazio di indirizzi
442   ampliato 128 bit che consente più gerarchie di indirizzi,
443   l'auto-configurazione, ed un nuovo tipo di indirizzi, gli \textit{anycast},
444   che consentono di inviare un pacchetto ad una stazione su un certo gruppo.
445   Effettua lo stesso servizio di trasmissione dei pacchetti di IPv4 di cui
446   vuole essere un sostituto.
447 \item[\textsl{TCP}] \textit{Trasmission Control Protocol}. È un protocollo
448   orientato alla connessione che provvede un trasporto affidabile per un
449   flusso di dati bidirezionale fra due stazioni remote. Il protocollo ha cura
450   di tutti gli aspetti del trasporto, come l'\textit{acknoweledgment} (il
451   ricevuto), i timeout, la ritrasmissione, ecc. È usato dalla maggior parte
452   delle applicazioni.
453 \item[\textsl{UDP}] \textit{User Datagram Protocol}. È un protocollo senza
454   connessione, per l'invio di dati a pacchetti. Contrariamente al TCP il
455   protocollo non è affidabile e non c'è garanzia che i pacchetti raggiungano
456   la loro destinazione, si perdano, vengano duplicati, o abbiano un
457   particolare ordine di arrivo.
458 \item[\textsl{ICMP}] \textit{Internet Control Message Protocol}. È il
459   protocollo usato a livello 2 per gestire gli errori e trasportare le
460   informazioni di controllo fra stazioni remote e instradatori (cioè fra
461   \textit{host} e \textit{router}). I messaggi sono normalmente generati dal
462   software del kernel che gestisce la comunicazione TCP/IP, anche se ICMP può
463   venire usato direttamente da alcuni programmi come \cmd{ping}. A volte ci
464   si riferisce ad esso come ICPMv4 per distinguerlo da ICMPv6.
465 \item[\textsl{IGMP}] \textit{Internet Group Management Protocol}. É un
466   protocollo di livello 2 usato per il \textit{multicast} (vedi
467   sez.~\ref{sec:xxx_multicast}).  Permette alle stazioni remote di notificare
468   ai router che supportano questa comunicazione a quale gruppo esse
469   appartengono.  Come ICMP viene implementato direttamente sopra IP.
470 \item[\textsl{ARP}] \textit{Address Resolution Protocol}. È il protocollo che
471   mappa un indirizzo IP in un indirizzo hardware sulla rete locale. È usato in
472   reti di tipo \itindex{broadcast} \textit{broadcast} come Ethernet, Token
473   Ring o FDDI che hanno associato un indirizzo fisico (il \textit{MAC
474     address}) alla interfaccia, ma non serve in connessioni punto-punto.
475 \item[\textsl{RARP}] \textit{Reverse Address Resolution Protocol}. È il
476   protocollo che esegue l'operazione inversa rispetto ad ARP (da cui il nome)
477   mappando un indirizzo hardware in un indirizzo IP. Viene usato a volte per
478   durante l'avvio per assegnare un indirizzo IP ad una macchina.
479 \item[\textsl{ICMPv6}] \textit{Internet Control Message Protocol, version 6}.
480   Combina per IPv6 le funzionalità di ICMPv4, IGMP e ARP.
481 \item[\textsl{EGP}] \textit{Exterior Gateway Protocol}. È un protocollo di
482   routing usato per comunicare lo stato fra gateway vicini a livello di
483   \textsl{sistemi autonomi}\footnote{vengono chiamati \textit{autonomous
484       systems} i raggruppamenti al livello più alto della rete.}, con
485   meccanismi che permettono di identificare i vicini, controllarne la
486   raggiungibilità e scambiare informazioni sullo stato della rete. Viene
487   implementato direttamente sopra IP. 
488 \item[\textsl{OSPF}] \textit{Open Shortest Path First}. È in protocollo di
489   routing per router su reti interne, che permette a questi ultimi di
490   scambiarsi informazioni sullo stato delle connessioni e dei legami che
491   ciascuno ha con gli altri. Viene implementato direttamente sopra IP.
492 \item[\textsl{GRE}] \textit{Generic Routing Encapsulation}. È un protocollo
493   generico di incapsulamento che permette di incapsulare un qualunque altro
494   protocollo all'interno di IP. 
495 \item[\textsl{AH}] \textit{Authentication Header}. Provvede l'autenticazione
496   dell'integrità e dell'origine di un pacchetto. È una opzione nativa in IPv6
497   e viene implementato come protocollo a sé su IPv4. Fa parte della suite di
498   IPSEC che provvede la trasmissione cifrata ed autenticata a livello IP.
499 \item[\textsl{ESP}] \textit{Encapsulating Security Payload}. Provvede la
500   cifratura insieme all'autenticazione dell'integrità e dell'origine di un
501   pacchetto. Come per AH è opzione nativa in IPv6 e viene implementato come
502   protocollo a sé su IPv4.
503 \item[\textsl{PPP}] \textit{Point-to-Point Protocol}. È un protocollo a
504   livello 1 progettato per lo scambio di pacchetti su connessioni punto punto.
505   Viene usato per configurare i collegamenti, definire i protocolli di rete
506   usati ed incapsulare i pacchetti di dati. È un protocollo complesso con
507   varie componenti.
508 \item[\textsl{SLIP}] \textit{Serial Line over IP}. È un protocollo di livello
509   1 che permette di trasmettere un pacchetto IP attraverso una linea seriale.
510 \end{basedescript}
511
512 Gran parte delle applicazioni comunicano usando TCP o UDP, solo alcune, e per
513 scopi particolari si rifanno direttamente ad IP (ed i suoi correlati ICMP e
514 IGMP); benché sia TCP che UDP siano basati su IP e sia possibile intervenire a
515 questo livello con i \textit{raw socket} questa tecnica è molto meno diffusa e
516 a parte applicazioni particolari si preferisce sempre usare i servizi messi a
517 disposizione dai due protocolli precedenti.  Per questo, motivo a parte alcuni
518 brevi accenni su IP in questa sezione, ci concentreremo sul livello di
519 trasporto.
520
521 \subsection{Internet Protocol (IP)}
522 \label{sec:net_ip}
523
524 Quando si parla di IP ci si riferisce in genere alla versione attualmente in
525 uso che è la versione 4 (e viene pertanto chiamato IPv4). Questa versione
526 venne standardizzata nel 1981
527 dall'\href{http://www.ietf.org/rfc/rfc0719.txt}{RFC~719}.
528
529 Internet Protocol nasce per disaccoppiare le applicazioni della struttura
530 hardware delle reti di trasmissione, e creare una interfaccia di trasmissione
531 dei dati indipendente dal sottostante substrato di rete, che può essere
532 realizzato con le tecnologie più disparate (Ethernet, Token Ring, FDDI, ecc.).
533 Il compito di IP è pertanto quello di trasmettere i pacchetti da un computer
534 all'altro della rete; le caratteristiche essenziali con cui questo viene
535 realizzato in IPv4 sono due:
536
537 \begin{itemize}
538 \item \textit{Universal addressing} la comunicazione avviene fra due stazioni
539   remote identificate univocamente con un indirizzo a 32 bit che può
540   appartenere ad una sola interfaccia di rete.
541 \item \textit{Best effort} viene assicurato il massimo impegno nella
542   trasmissione, ma non c'è nessuna garanzia per i livelli superiori né sulla
543   percentuale di successo né sul tempo di consegna dei pacchetti di dati.
544 \end{itemize}
545
546 Negli anni '90 la crescita vertiginosa del numero di macchine connesse a
547 Internet ha iniziato a far emergere i vari limiti di IPv4, per risolverne i
548 problemi si è perciò definita una nuova versione del protocollo, che (saltando
549 un numero) è diventata la versione 6. IPv6 nasce quindi come evoluzione di
550 IPv4, mantenendone inalterate le funzioni che si sono dimostrate valide,
551 eliminando quelle inutili e aggiungendone poche altre per mantenere il
552 protocollo il più snello e veloce possibile.
553
554 I cambiamenti apportati sono comunque notevoli e si possono essere riassunti a
555 grandi linee nei seguenti punti:
556 \begin{itemize}
557 \item l'espansione delle capacità di indirizzamento e instradamento, per
558   supportare una gerarchia con più livelli di indirizzamento, un numero di
559   nodi indirizzabili molto maggiore e una auto-configurazione degli indirizzi.
560 \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che
561   si aggiunge agli usuali \textit{unicast} e \textit{multicast}.
562 \item la semplificazione del formato dell'intestazione (\textit{header}) dei
563   pacchetti, eliminando o rendendo opzionali alcuni dei campi di IPv4, per
564   eliminare la necessità di rielaborazione della stessa da parte dei router e
565   contenere l'aumento di dimensione dovuto all'ampliamento degli indirizzi.
566 \item un supporto per le opzioni migliorato, per garantire una trasmissione
567   più efficiente del traffico normale, limiti meno stringenti sulle dimensioni
568   delle opzioni, e la flessibilità necessaria per introdurne di nuove in
569   futuro.
570 \item il supporto per delle capacità di \textsl{qualità di servizio} (QoS) che
571   permettano di identificare gruppi di dati per i quali si può provvedere un
572   trattamento speciale (in vista dell'uso di Internet per applicazioni
573   multimediali e/o ``real-time'').
574 \end{itemize}
575
576 Maggiori dettagli riguardo a caratteristiche, notazioni e funzionamento del
577 protocollo IP sono forniti nell'appendice sez.~\ref{sec:ip_protocol}.
578
579  
580 \subsection{User Datagram Protocol (UDP)}
581 \label{sec:net_udp}
582
583 UDP è un protocollo di trasporto molto semplice; la sua descrizione completa è
584 contenuta dell'\href{http://www.ietf.org/rfc/rfc0768.txt}{RFC~768}, ma in
585 sostanza esso è una semplice interfaccia al protocollo IP dal livello di
586 trasporto. Quando un'applicazione usa UDP essa scrive un pacchetto di dati (il
587 cosiddetto \textit{datagram} che da il nome al protocollo) su un socket, al
588 pacchetto viene aggiunto un header molto semplice (per una descrizione più
589 accurata vedi sez.~\ref{sec:udp_protocol}), e poi viene passato al livello
590 superiore (IPv4 o IPv6 che sia) che lo spedisce verso la destinazione.  Dato
591 che né IPv4 né IPv6 garantiscono l'affidabilità niente assicura che il
592 pacchetto arrivi a destinazione, né che più pacchetti arrivino nello stesso
593 ordine in cui sono stati spediti.
594
595 Pertanto il problema principale che si affronta quando si usa UDP è la
596 mancanza di affidabilità, se si vuole essere sicuri che i pacchetti arrivino a
597 destinazione occorrerà provvedere con l'applicazione, all'interno della quale
598 si dovrà inserire tutto quanto necessario a gestire la notifica di
599 ricevimento, la ritrasmissione, il timeout. 
600
601 Si tenga conto poi che in UDP niente garantisce che i pacchetti arrivino nello
602 stesso ordine in cui sono stati trasmessi, e può anche accadere che i
603 pacchetti vengano duplicati nella trasmissione, e non solo perduti. Di tutto
604 questo di nuovo deve tenere conto l'applicazione.
605
606 Un altro aspetto di UDP è che se un pacchetto raggiunge correttamente la
607 destinazione esso viene passato all'applicazione ricevente in tutta la sua
608 lunghezza, la trasmissione avviene perciò per \textit{record} la cui lunghezza
609 viene anche essa trasmessa all'applicazione all'atto del ricevimento.
610
611 Infine UDP è un protocollo che opera senza connessione
612 (\textit{connectionless}) in quanto non è necessario stabilire nessun tipo di
613 relazione tra origine e destinazione dei pacchetti. Si hanno così situazioni
614 in cui un client può scrivere su uno stesso socket pacchetti destinati a
615 server diversi, o un server ricevere su un socket pacchetti provenienti da
616 client diversi.  Il modo più semplice di immaginarsi il funzionamento di UDP è
617 quello della radio, in cui si può \textsl{trasmettere} e \textsl{ricevere} da
618 più stazioni usando la stessa frequenza.
619
620 Nonostante gli evidenti svantaggi comportati dall'inaffidabilità UDP ha il
621 grande pregio della velocità, che in certi casi è essenziale; inoltre si
622 presta bene per le applicazioni in cui la connessione non è necessaria, e
623 costituirebbe solo un peso in termini di prestazioni, mentre una perdita di
624 pacchetti può essere tollerata: ad esempio le applicazioni di streaming e
625 quelle che usano il \textit{multicast}.
626
627 \subsection{Transport Control Protocol (TCP)}
628 \label{sec:net_tcp}
629
630 Il TCP è un protocollo molto complesso, definito
631 nell'\href{http://www.ietf.org/rfc/rfc0739.txt}{RFC~739} e completamente
632 diverso da UDP; alla base della sua progettazione infatti non stanno
633 semplicità e velocità, ma la ricerca della massima affidabilità possibile
634 nella trasmissione dei dati.
635
636 La prima differenza con UDP è che TCP provvede sempre una connessione diretta
637 fra un client e un server, attraverso la quale essi possono comunicare; per
638 questo il paragone più appropriato per questo protocollo è quello del
639 collegamento telefonico, in quanto prima viene stabilita una connessione fra
640 due i due capi della comunicazione su cui poi effettuare quest'ultima.
641
642 Caratteristica fondamentale di TCP è l'affidabilità; quando i dati vengono
643 inviati attraverso una connessione ne viene richiesto un ``\textsl{ricevuto}''
644 (il cosiddetto \textit{acknowlegment}), se questo non arriva essi verranno
645 ritrasmessi per un determinato numero di tentativi, intervallati da un periodo
646 di tempo crescente, fino a che sarà considerata fallita o caduta la
647 connessione (e sarà generato un errore di \textit{timeout}); il periodo di
648 tempo dipende dall'implementazione e può variare far i quattro e i dieci
649 minuti.
650
651 Inoltre, per tenere conto delle diverse condizioni in cui può trovarsi la
652 linea di comunicazione, TCP comprende anche un algoritmo di calcolo dinamico
653 del tempo di andata e ritorno dei pacchetti fra un client e un server (il
654 cosiddetto RTT, \itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time}), che
655 lo rende in grado di adattarsi alle condizioni della rete per non generare
656 inutili ritrasmissioni o cadere facilmente in timeout.
657
658 Inoltre TCP è in grado di preservare l'ordine dei dati assegnando un numero di
659 sequenza ad ogni byte che trasmette. Ad esempio se un'applicazione scrive 3000
660 byte su un socket TCP, questi potranno essere spezzati dal protocollo in due
661 segmenti (le unità di dati passate da TCP a IP vengono chiamate
662 \textit{segment}) di 1500 byte, di cui il primo conterrà il numero di sequenza
663 $1-1500$ e il secondo il numero $1501-3000$. In questo modo anche se i
664 segmenti arrivano a destinazione in un ordine diverso, o se alcuni arrivano
665 più volte a causa di ritrasmissioni dovute alla perdita degli
666 \textit{acknowlegment}, all'arrivo sarà comunque possibile riordinare i dati e
667 scartare i duplicati.
668
669 \itindbeg{advertised~window}
670
671 Il protocollo provvede anche un controllo di flusso (\textit{flow control}),
672 cioè specifica sempre all'altro capo della trasmissione quanti dati può
673 ricevere tramite una \textit{advertised window} (letteralmente
674 ``\textsl{finestra annunciata}''), che indica lo spazio disponibile nel buffer
675 di ricezione, cosicché nella trasmissione non vengano inviati più dati di
676 quelli che possono essere ricevuti.
677
678 Questa finestra cambia dinamicamente diminuendo con la ricezione dei dati dal
679 socket ed aumentando con la lettura di quest'ultimo da parte
680 dell'applicazione, se diventa nulla il buffer di ricezione è pieno e non
681 verranno accettati altri dati.  Si noti che UDP non provvede niente di tutto
682 ciò per cui nulla impedisce che vengano trasmessi pacchetti ad un ritmo che il
683 ricevente non può sostenere.
684
685 \itindend{advertised~window}
686
687 Infine attraverso TCP la trasmissione è sempre bidirezionale (in inglese si
688 dice che è \textit{full-duplex}). È cioè possibile sia trasmettere che
689 ricevere allo stesso tempo, il che comporta che quanto dicevamo a proposito
690 del controllo di flusso e della gestione della sequenzialità dei dati viene
691 effettuato per entrambe le direzioni di comunicazione.
692
693 % TODO mettere riferimento alla appendice su TCP quando ci sarà
694 %% Una descrizione più accurata del protocollo è fornita in appendice
695 %% sez.~\ref{sec:tcp_protocol}.
696
697 \subsection{Limiti e dimensioni riguardanti la trasmissione dei dati}
698 \label{sec:net_lim_dim}
699
700 Un aspetto di cui bisogna tenere conto nella programmazione di rete, e che
701 ritornerà in seguito, quando tratteremo gli aspetti più avanzati, è che ci sono
702 una serie di limiti a cui la trasmissione dei dati attraverso i vari livelli
703 del protocollo deve sottostare; limiti che è opportuno tenere presente perché
704 in certi casi si possono avere delle conseguenze sul comportamento delle
705 applicazioni.
706
707 Un elenco di questi limiti, insieme ad un breve accenno alle loro origini ed
708 alle eventuali implicazioni che possono avere, è il seguente:
709 \begin{itemize}
710 \item La dimensione massima di un pacchetto IP è di 65535 byte, compresa
711   l'intestazione. Questo è dovuto al fatto che la dimensione è indicata da un
712   campo apposito nell'header di IP che è lungo 16 bit (vedi
713   fig.~\ref{fig:IP_ipv4_head}).
714 \item La dimensione massima di un pacchetto normale di IPv6 è di 65575 byte;
715   il campo apposito nell'header infatti è sempre a 16 bit, ma la dimensione
716   dell'header è fissa e di 40 byte e non è compresa nel valore indicato dal
717   suddetto campo. Inoltre IPv6 ha la possibilità di estendere la dimensione di
718   un pacchetto usando la \textit{jumbo payload option}.
719 \itindbeg{Maximum~Transfer~Unit~(MTU)}
720 \item Molte reti fisiche hanno una MTU (\textit{Maximum Transfer Unit}) che
721   dipende dal protocollo specifico usato al livello di connessione fisica. Il
722   più comune è quello di ethernet che è pari a 1500 byte, una serie di altri
723   valori possibili sono riportati in tab.~\ref{tab:net_mtu_values}.
724 \end{itemize}
725
726 Quando un pacchetto IP viene inviato su una interfaccia di rete e le sue
727 dimensioni eccedono la MTU viene eseguita la cosiddetta
728 \textit{frammentazione}, i pacchetti cioè vengono suddivisi\footnote{questo
729   accade sia per IPv4 che per IPv6, anche se i pacchetti frammentati sono
730   gestiti con modalità diverse, IPv4 usa un flag nell'header, IPv6 una
731   opportuna opzione, si veda sez.~\ref{sec:ipv6_protocol}.}) in blocchi più
732 piccoli che possono essere trasmessi attraverso l'interfaccia.
733
734 \begin{table}[!htb]
735   \centering
736   \begin{tabular}[c]{|l|c|}
737     \hline
738     \textbf{Rete} & \textbf{MTU} \\
739     \hline
740     \hline
741     Hyperlink & 65535 \\
742     Token Ring IBM (16 Mbit/sec) & 17914 \\
743     Token Ring IEEE 802.5 (4 Mbit/sec) & 4464 \\
744     FDDI & 4532 \\
745     Ethernet & 1500 \\
746     X.25 & 576 \\
747     \hline
748   \end{tabular}
749   \caption{Valori della MTU (\textit{Maximum Transfer Unit}) per una serie di
750     diverse tecnologie di rete.} 
751   \label{tab:net_mtu_values}
752 \end{table}
753
754 \itindbeg{Path~MTU}
755
756 La MTU più piccola fra due stazioni viene in genere chiamata \textit{path
757   MTU}, che dice qual è la lunghezza massima oltre la quale un pacchetto
758 inviato da una stazione ad un'altra verrebbe senz'altro frammentato. Si tenga
759 conto che non è affatto detto che la \textit{path MTU} sia la stessa in
760 entrambe le direzioni, perché l'instradamento può essere diverso nei due
761 sensi, con diverse tipologie di rete coinvolte.
762
763 Una delle differenze fra IPv4 e IPv6 é che per IPv6 la frammentazione può
764 essere eseguita solo alla sorgente, questo vuol dire che i router IPv6 non
765 frammentano i pacchetti che ritrasmettono (anche se possono frammentare i
766 pacchetti che generano loro stessi), al contrario di quanto fanno i router
767 IPv4. In ogni caso una volta frammentati i pacchetti possono essere
768 riassemblati solo alla destinazione.
769
770 Nell'header di IPv4 è previsto il flag \texttt{DF} che specifica che il
771 pacchetto non deve essere frammentato; un router che riceva un pacchetto le
772 cui dimensioni eccedano quelle dell'MTU della rete di destinazione genererà un
773 messaggio di errore ICMPv4 di tipo \textit{destination unreachable,
774   fragmentation needed but DF bit set}.  Dato che i router IPv6 non possono
775 effettuare la frammentazione la ricezione di un pacchetto di dimensione
776 eccessiva per la ritrasmissione genererà sempre un messaggio di errore ICMPv6
777 di tipo \textit{packet too big}.
778
779 Dato che il meccanismo di frammentazione e riassemblaggio dei pacchetti
780 comporta inefficienza, normalmente viene utilizzato un procedimento, detto
781 \textit{path MTU discovery} che permette di determinare il \textit{path MTU}
782 fra due stazioni; per la realizzazione del procedimento si usa il flag
783 \texttt{DF} di IPv4 e il comportamento normale di IPv6 inviando delle
784 opportune serie di pacchetti (per i dettagli vedere
785 l'\href{http://www.ietf.org/rfc/rfc1191.txt}{RFC~1191} per IPv4 e
786 l'\href{http://www.ietf.org/rfc/rfc1981.txt}{RFC~1981} per IPv6) fintanto che
787 non si hanno più errori.
788
789 Il TCP usa sempre questo meccanismo, che per le implementazioni di IPv4 è
790 opzionale, mentre diventa obbligatorio per IPv6.  Per IPv6 infatti, non
791 potendo i router frammentare i pacchetti, è necessario, per poter comunicare,
792 conoscere da subito il \textit{path MTU}.
793
794 \itindend{Path~MTU}
795
796 Infine il TCP definisce una \itindex{Maximum~Segment~Size~(MSS)}
797 \textit{Maximum Segment Size} (da qui in avanti abbreviata in MSS) che
798 annuncia all'altro capo della connessione la dimensione massima dimensione del
799 segmento di dati che può essere ricevuto, così da evitare la
800 frammentazione. Di norma viene impostato alla dimensione della MTU
801 dell'interfaccia meno la lunghezza delle intestazioni di IP e TCP, in Linux il
802 default, mantenuto nella costante \const{TCP\_MSS} è 512.
803
804 \itindend{Maximum~Transfer~Unit~(MTU)}
805
806
807 %%% Local Variables: 
808 %%% mode: latex
809 %%% TeX-master: "gapil"
810 %%% End: 
811
812 % LocalWords:  TCP multitasking client ftp telnet ssh cap thread peer to three
813 % LocalWords:  Napster routing tier two middle International Standards Systems
814 % LocalWords:  Organization Interconnection tab Application Presentation All of
815 % LocalWords:  Session Transport DataLink Physical people seem need processing
816 % LocalWords:  fig upper layer lower kernel DoD Department Defense Connection
817 % LocalWords:  sez UDP ICMP IGMP device Trasmission Control Protocol l'IP l'UDP
818 % LocalWords:  IPv ethernet SMTP RFC Request For Comment socket stack PPP ARP
819 % LocalWords:  router instradatori version RARP anycast Di
820 % LocalWords:  l'acknoweledgment Datagram Message host ping ICPMv ICMPv Group
821 % LocalWords:  multicast Address Resolution broadcast Token FDDI MAC address DF
822 % LocalWords:  Reverse EGP Exterior Gateway gateway autonomous systems OSPF GRE
823 % LocalWords:  Shortest Path First Generic Encapsulation Authentication Header
824 % LocalWords:  IPSEC ESP Encapsulating Security Payload Point Line over raw QoS
825 % LocalWords:  dall' Universal addressing Best effort unicast header dell' RTT
826 % LocalWords:  datagram connectionless streaming nell' acknowlegment trip flow
827 % LocalWords:  segment control advertised window nell'header dell'header option
828 % LocalWords:  payload MTU Transfer Unit Hyperlink IBM Mbit sec IEEE path but
829 % LocalWords:  dell'MTU destination unreachable fragmentation needed packet too
830 % LocalWords:  big discovery MSS Size