d7bc4c0e520f533aa96d408f139a64e35651097f
[gapil.git] / othersock.tex
1 %% othersock.tex
2 %%
3 %% Copyright (C) 2004 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 "Prefazione",
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 \chapter{Gli altri socket più comuni}
12 \label{cha:other_socket}
13
14 Dopo aver trattato in \capref{cha:TCP_socket} i socket TCP, che costituiscono
15 l'esempio più comune dell'interfaccia dei socket, esamineremo in questo
16 capitolo gli altri tipi di socket, 
17
18
19 \section{I socket UDP}
20 \label{sec:UDP_socket}
21
22 Dopo i socket TCP i socket più utilizzati nella programmazione di rete sono i
23 socket UDP; protocolli diffusi come NFS o il DNS usano principalmente questo
24 tipo di socket. Tratteremo in questa sezione le loro caratteristiche
25 principali e le modalità per il loro utilizzo.
26
27
28 \subsection{Le caratteristiche di un socket UDP}
29 \label{sec:UDP_characteristics}
30
31 Come illustrato in \secref{sec:net_udp} UDP è un protocollo molto semplice che
32 non supporta le connessioni e non è affidabile: i dati vengono inviati in
33 forma di pacchetti, e non ne è assicurata né la effettiva ricezione né
34 l'odinamento.
35
36 Questo significa che a differenza dei socket TCP i socket UDP non supportano
37 una comunicazione di tipo \textit{stream} in cui si ha a disposizione un
38 flusso continuo di dati che può essere letto un po' alla volta, ma di tipo
39 \textit{datagram}, in cui i dati arrivano in singoli blocchi che devono essere
40 letti integralmente.
41
42 Questo diverso comportamento significa anche che i socket UDP, pur restando
43 nella famiglia \const{PF\_INET}\footnote{o \const{PF\_INET6} qualora si usasse
44   invece il protocollo IPv6.} devono essere aperti quando si usa la funzione
45 \func{socket} (si riveda quanto illustrato a suo tempo in
46 \tabref{tab:sock_sock_valid_combinations}) utilizzando come valore per il tipo
47 di socket \const{SOCK\_DGRAM}.
48
49 Questa differenza comporta ovviamente il fatto che anche le modalità con cui
50 si usano i socket UDP sono completamente diverse rispetto ai socket TCP, ed in
51 particolare non esistendo il concetto di connessione non esiste il meccanismo
52 del \textit{three way handshake} nè quello di stati del protocollo, in realtà
53 tutto quello che avviene nella comunicazione attraverso dei socket UDP è la
54 trasmissione di un pacchetto da un client ad un server o viceversa, secondo lo
55 schema illustrato in \figref{fig:UDP_packet-exchange}.
56
57 \begin{figure}[htb]
58   \centering
59   \includegraphics[width=10cm]{img/udp_connection}  
60   \caption{Lo schema di interscambio dei pacchetti per una comunicazione via
61      UDP.}
62   \label{fig:UDP_packet-exchange}
63 \end{figure}
64
65 Anche se UDP è completamente diverso rispetto a TCP resta identica 
66
67
68
69 \subsection{Le funzioni \func{sendto} e \func{recvfrom}}
70 \label{sec:UDP_sendto_recvfrom}
71
72 Come accennato le due funzioni principali usate per la trasmissione di dati
73 attraverso i socket UDP, ma in generale attraverso qualunque socket che
74 preveda una comunicazione a pacchetti, sono \func{sendto} e \func{recvfrom}.
75
76
77 \section{I socket \textit{Unix domain}}
78 \label{sec:UDP_socket}
79
80 Benché i socket Unix domain non siano strattamente attinenti alla rete, in
81 quanto definiscono una interfaccia di comunicazione locale alla singola
82 macchina, li tratteremo comunque in questa sezione in quanto la loro
83 interfaccia è comunque basata sulla più generale interfaccia dei socket.
84
85
86
87
88 %%% Local Variables: 
89 %%% mode: latex
90 %%% TeX-master: "gapil"
91 %%% End: