X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=network.tex;h=20c49142339b965ba9283990c561ff3a0fa574eb;hp=9206c50451d0c0653c9907516c8cf30c602c0c20;hb=c382d3dcf68ded39a7c8dc7bdbe5ca61bf6de4d4;hpb=3d44c36183fe67ed64bff95a36596ad87f620683 diff --git a/network.tex b/network.tex index 9206c50..20c4914 100644 --- a/network.tex +++ b/network.tex @@ -1,32 +1,37 @@ \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} -\label{sec:layer} +\label{sec:net_protocols} 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 -del funzionamento di internet, é il cosiddetto TCP/IP. +del funzionamento di internet, è il cosiddetto TCP/IP. \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 -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 @@ -43,7 +48,7 @@ tabella in \ntab. \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 @@ -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; -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 è -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 @@ -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.} -\label{tab:layers} +\label{tab:net_layers} \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 - \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 @@ -150,7 +142,7 @@ ethernet per una scheda di rete). \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 @@ -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. +\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} -\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