X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=othersock.tex;h=d7bc4c0e520f533aa96d408f139a64e35651097f;hp=1f1023553f71a92485f197a8838a2df6272aed9f;hb=400a3e7bbb00a6aa4a146e5d55f3b98c0152146f;hpb=5af25bf51719d4f435f57a8d7df64f286ad64996 diff --git a/othersock.tex b/othersock.tex index 1f10235..d7bc4c0 100644 --- a/othersock.tex +++ b/othersock.tex @@ -19,7 +19,59 @@ capitolo gli altri tipi di socket, \section{I socket UDP} \label{sec:UDP_socket} -Dopo i socket TCP i socket più utilizzati sono i socket UDP. +Dopo i socket TCP i socket più utilizzati nella programmazione di rete sono i +socket UDP; protocolli diffusi come NFS o il DNS usano principalmente questo +tipo di socket. Tratteremo in questa sezione le loro caratteristiche +principali e le modalità per il loro utilizzo. + + +\subsection{Le caratteristiche di un socket UDP} +\label{sec:UDP_characteristics} + +Come illustrato in \secref{sec:net_udp} UDP è un protocollo molto semplice che +non supporta le connessioni e non è affidabile: i dati vengono inviati in +forma di pacchetti, e non ne è assicurata né la effettiva ricezione né +l'odinamento. + +Questo significa che a differenza dei socket TCP i socket UDP non supportano +una comunicazione di tipo \textit{stream} in cui si ha a disposizione un +flusso continuo di dati che può essere letto un po' alla volta, ma di tipo +\textit{datagram}, in cui i dati arrivano in singoli blocchi che devono essere +letti integralmente. + +Questo diverso comportamento significa anche che i socket UDP, pur restando +nella famiglia \const{PF\_INET}\footnote{o \const{PF\_INET6} qualora si usasse + invece il protocollo IPv6.} devono essere aperti quando si usa la funzione +\func{socket} (si riveda quanto illustrato a suo tempo in +\tabref{tab:sock_sock_valid_combinations}) utilizzando come valore per il tipo +di socket \const{SOCK\_DGRAM}. + +Questa differenza comporta ovviamente il fatto che anche le modalità con cui +si usano i socket UDP sono completamente diverse rispetto ai socket TCP, ed in +particolare non esistendo il concetto di connessione non esiste il meccanismo +del \textit{three way handshake} nè quello di stati del protocollo, in realtà +tutto quello che avviene nella comunicazione attraverso dei socket UDP è la +trasmissione di un pacchetto da un client ad un server o viceversa, secondo lo +schema illustrato in \figref{fig:UDP_packet-exchange}. + +\begin{figure}[htb] + \centering + \includegraphics[width=10cm]{img/udp_connection} + \caption{Lo schema di interscambio dei pacchetti per una comunicazione via + UDP.} + \label{fig:UDP_packet-exchange} +\end{figure} + +Anche se UDP è completamente diverso rispetto a TCP resta identica + + + +\subsection{Le funzioni \func{sendto} e \func{recvfrom}} +\label{sec:UDP_sendto_recvfrom} + +Come accennato le due funzioni principali usate per la trasmissione di dati +attraverso i socket UDP, ma in generale attraverso qualunque socket che +preveda una comunicazione a pacchetti, sono \func{sendto} e \func{recvfrom}. \section{I socket \textit{Unix domain}}