Nuovo overview dei protocolli. Scritto qualcosa su peer-to-peer e three-tier
[gapil.git] / socket.tex
index 5a2a8ea15a29165e53655f5f6aa8a8272a7c04b2..2dc56748093a9512a8094634c3f235faca61585c 100644 (file)
@@ -278,33 +278,35 @@ elencati.
 \begin{table}[htb]
   \footnotesize
   \centering
 \begin{table}[htb]
   \footnotesize
   \centering
-  \begin{tabular}{l|c|c|c|c|c|}
-   \multicolumn{1}{c}{} &\multicolumn{1}{c}{\const{SOCK\_STREAM}}& 
-     \multicolumn{1}{c}{\const{SOCK\_DGRAM}} & 
-     \multicolumn{1}{c}{\const{SOCK\_RAW}} & 
-     \multicolumn{1}{c}{\const{SOCK\_PACKET}}& 
-     \multicolumn{1}{c}{\const{SOCK\_SEQPACKET}} \\
-     \cline{2-6}
+  \begin{tabular}{|l|c|c|c|c|c|}
+    \hline
+    \multicolumn{1}{|c|}{\textbf{Famiglia}}&
+    \multicolumn{5}{|c|}{\textbf{Tipo}}\\
+    \hline
+    \hline
+    &\const{SOCK\_STREAM} &\const{SOCK\_DGRAM}     &\const{SOCK\_RAW}& 
+      \const{SOCK\_PACKET}&\const{SOCK\_SEQPACKET} \\
+     \hline
     \const{PF\_UNIX}      &  si & si  &      &     &     \\
     \const{PF\_UNIX}      &  si & si  &      &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_INET}      & TCP & UDP & IPv4 &     &     \\
     \const{PF\_INET}      & TCP & UDP & IPv4 &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_INET6}     & TCP & UDP & IPv6 &     &     \\
     \const{PF\_INET6}     & TCP & UDP & IPv6 &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_IPX}       &     &     &      &     &     \\
     \const{PF\_IPX}       &     &     &      &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_NETLINK}   &     &  si &  si  &     &     \\
     \const{PF\_NETLINK}   &     &  si &  si  &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_X25}       &     &     &      &     &  si \\
     \const{PF\_X25}       &     &     &      &     &  si \\
-     \cline{2-6}
+     \hline
     \const{PF\_AX25}      &     &     &      &     &     \\
     \const{PF\_AX25}      &     &     &      &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_ATMPVC}    &     &     &      &     &     \\
     \const{PF\_ATMPVC}    &     &     &      &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_APPLETALK} &     & si  &  si  &     &     \\
     \const{PF\_APPLETALK} &     & si  &  si  &     &     \\
-     \cline{2-6}
+     \hline
     \const{PF\_PACKET}    &     & si  & si   &     &     \\    
     \const{PF\_PACKET}    &     & si  & si   &     &     \\    
-     \cline{2-6}
+     \hline
   \end{tabular}
   \caption{Combinazioni valide di dominio e tipo di protocollo per la 
     funzione \func{socket}.}
   \end{tabular}
   \caption{Combinazioni valide di dominio e tipo di protocollo per la 
     funzione \func{socket}.}
@@ -437,12 +439,12 @@ si usa IPv4) 
     \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct sockaddr_in {
     sa_family_t     sin_family; /* address family: AF_INET */
     \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct sockaddr_in {
     sa_family_t     sin_family; /* address family: AF_INET */
-    u_int16_t       sin_port;   /* port in network byte order */
+    in_port_t       sin_port;   /* port in network byte order */
     struct in_addr  sin_addr;   /* internet address */
 };
 /* Internet address. */
 struct in_addr {
     struct in_addr  sin_addr;   /* internet address */
 };
 /* Internet address. */
 struct in_addr {
-    u_int32_t       s_addr;     /* address in network byte order */
+    in_addr_t       s_addr;     /* address in network byte order */
 };
     \end{lstlisting}
   \end{minipage} 
 };
     \end{lstlisting}
   \end{minipage} 
@@ -497,15 +499,15 @@ in \figref{fig:sock_sa_ipv6_struct}.
   \begin{minipage}[c]{15cm}
     \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct sockaddr_in6 {
   \begin{minipage}[c]{15cm}
     \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct sockaddr_in6 {
-    u_int16_t       sin6_family;   /* AF_INET6 */
-    u_int16_t       sin6_port;     /* port number */
-    u_int32_t       sin6_flowinfo; /* IPv6 flow information */
+    uint16_t        sin6_family;   /* AF_INET6 */
+    in_port_t       sin6_port;     /* port number */
+    uint32_t        sin6_flowinfo; /* IPv6 flow information */
     struct in6_addr sin6_addr;     /* IPv6 address */
     struct in6_addr sin6_addr;     /* IPv6 address */
-    u_int32_t       sin6_scope_id; /* Scope id (new in 2.4) */
+    uint32_t        sin6_scope_id; /* Scope id (new in 2.4) */
 };
 
 struct in6_addr {
 };
 
 struct in6_addr {
-    unsigned char   s6_addr[16];   /* IPv6 address */
+    uint8_t       s6_addr[16];   /* IPv6 address */
 };
     \end{lstlisting}
   \end{minipage} 
 };
     \end{lstlisting}
   \end{minipage} 
@@ -540,8 +542,9 @@ comunicazione fra processi che stanno sulla stessa macchina (per vengono
 chiamati \textit{local domain} o anche \textit{Unix domain}); essi rispetto ai
 precedenti possono essere anche creati in maniera anonima attraverso la
 funzione \func{socketpair} (vedi \secref{sec:ipc_socketpair}). Quando però si
 chiamati \textit{local domain} o anche \textit{Unix domain}); essi rispetto ai
 precedenti possono essere anche creati in maniera anonima attraverso la
 funzione \func{socketpair} (vedi \secref{sec:ipc_socketpair}). Quando però si
-vuole fare riferimento esplicito ad uno di questi socket si deve usare la
-seguente struttura di indirizzi definita nel file di header \file{sys/un.h}.
+vuole fare riferimento esplicito ad uno di questi socket si deve usare una
+struttura degli indirizzi di tipo \struct{sockaddr\_un}, la cui definizione si
+è riportata in \secref{fig:sock_sa_local_struct}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -554,18 +557,18 @@ struct sockaddr_un {
 };
     \end{lstlisting}
   \end{minipage} 
 };
     \end{lstlisting}
   \end{minipage} 
-  \caption{La struttura degli indirizzi dei socket locali 
-    \structd{sockaddr\_un}.}
+  \caption{La struttura degli indirizzi dei socket locali (detti anche
+    \textit{unix domain}) \structd{sockaddr\_un} definita in \file{sys/un.h}.}
   \label{fig:sock_sa_local_struct}
 \end{figure}
 
 In questo caso il campo \var{sun\_family} deve essere \const{AF\_UNIX}, mentre
   \label{fig:sock_sa_local_struct}
 \end{figure}
 
 In questo caso il campo \var{sun\_family} deve essere \const{AF\_UNIX}, mentre
-il campo \var{sun\_path} deve specificare un indirizzo; questo ha due forme:
+il campo \var{sun\_path} deve specificare un indirizzo. Questo ha due forme:
 un file (di tipo socket) nel filesystem o una stringa univoca (mantenuta in
 uno spazio di nomi astratto). Nel primo caso l'indirizzo viene specificato
 come una stringa (terminata da uno zero) corrispondente al pathname del file;
 un file (di tipo socket) nel filesystem o una stringa univoca (mantenuta in
 uno spazio di nomi astratto). Nel primo caso l'indirizzo viene specificato
 come una stringa (terminata da uno zero) corrispondente al pathname del file;
-nel secondo invece \var{sun\_path} inizia con uno zero vengono usati i
-restanti byte come stringa (senza terminazione).
+nel secondo invece \var{sun\_path} inizia con uno zero vengono usati i
+restanti byte come stringa, senza terminazione.
 
 
 \subsection{La struttura degli indirizzi AppleTalk}
 
 
 \subsection{La struttura degli indirizzi AppleTalk}
@@ -576,8 +579,9 @@ I socket di tipo \const{PF\_APPLETALK} sono usati dalla libreria
 AppleTalk, uno dei primi protocolli di rete usato nel mondo dei personal
 computer, usato dalla Apple per connettere fra loro computer e stampanti. Il
 kernel supporta solo due strati del protocollo, DDP e AARP, e di norma è
 AppleTalk, uno dei primi protocolli di rete usato nel mondo dei personal
 computer, usato dalla Apple per connettere fra loro computer e stampanti. Il
 kernel supporta solo due strati del protocollo, DDP e AARP, e di norma è
-opportuno usare le funzioni di libreria, si tratta qui questo argomento
-principalmente per mostrare l'uso di un protocollo alternativo.
+opportuno usare le funzioni della libreria \texttt{netatalk}, tratteremo qui
+questo argomento principalmente per mostrare l'uso di un protocollo
+alternativo.
 
 I socket AppleTalk permettono di usare il protocollo DDP, che è un protocollo
 a pacchetto, di tipo \const{SOCK\_DGRAM}; l'argomento \param{protocol} di
 
 I socket AppleTalk permettono di usare il protocollo DDP, che è un protocollo
 a pacchetto, di tipo \const{SOCK\_DGRAM}; l'argomento \param{protocol} di
@@ -585,19 +589,24 @@ a pacchetto, di tipo \const{SOCK\_DGRAM}; l'argomento \param{protocol} di
 specificando un tipo \const{SOCK\_RAW}, nel qual caso l'unico valore valido
 per \param{protocol} è \func{ATPROTO\_DDP}.
 
 specificando un tipo \const{SOCK\_RAW}, nel qual caso l'unico valore valido
 per \param{protocol} è \func{ATPROTO\_DDP}.
 
+Gli indirizzi AppleTalk devono essere specificati tramite una struttura
+\struct{sockaddr\_atalk}, la cui definizione è riportata in
+\figref{fig:sock_sa_atalk_struct}; la struttura viene dichiarata includendo il
+file \file{netatalk/at.h}.
+
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
     \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct sockaddr_atalk {
     sa_family_t     sat_family; /* address family */
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
     \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct sockaddr_atalk {
     sa_family_t     sat_family; /* address family */
-    u_char          sat_port;   /* port */
+    uint8_t         sat_port;   /* port */
     struct at_addr  sat_addr;   /* net/node */
 };
 
 struct at_addr {
     struct at_addr  sat_addr;   /* net/node */
 };
 
 struct at_addr {
-    unsigned short  s_net;
-    unsigned char   s_node;
+    uint16_t        s_net;
+    uint8_t         s_node;
 };
     \end{lstlisting}
   \end{minipage} 
 };
     \end{lstlisting}
   \end{minipage} 
@@ -606,12 +615,12 @@ struct at_addr {
   \label{fig:sock_sa_atalk_struct}
 \end{figure}
 
   \label{fig:sock_sa_atalk_struct}
 \end{figure}
 
-Il campo \var{sut\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
-campo \var{sun\_port} specifica la porta che identifica i vari servizi. Valori
+Il campo \var{sat\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
+campo \var{sat\_port} specifica la porta che identifica i vari servizi. Valori
 inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
 usati solo da processi con i privilegi di amministratore o con la capability
 \const{CAP\_NET\_BIND\_SERVICE}. L'indirizzo remoto è specificato nella
 inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
 usati solo da processi con i privilegi di amministratore o con la capability
 \const{CAP\_NET\_BIND\_SERVICE}. L'indirizzo remoto è specificato nella
-struttura \var{sun\_addr}, e deve essere in \textit{network order}; esso è
+struttura \var{sat\_addr}, e deve essere in \textit{network order}; esso è
 composto da un parte di rete data dal campo \var{s\_net}, che può assumere il
 valore \const{AT\_ANYNET}, che indica una rete genrica e vale anche per
 indicare la rete su cui si è, il singolo nodo è indicato da \var{s\_node}, e
 composto da un parte di rete data dal campo \var{s\_net}, che può assumere il
 valore \const{AT\_ANYNET}, che indica una rete genrica e vale anche per
 indicare la rete su cui si è, il singolo nodo è indicato da \var{s\_node}, e
@@ -619,18 +628,14 @@ pu
 corrente, ed il valore \const{ATADDR\_BCAST} che indica tutti i nodi della
 rete.
 
 corrente, ed il valore \const{ATADDR\_BCAST} che indica tutti i nodi della
 rete.
 
-
-
-
-
-\subsection{La struttura degli indirizzi DECnet}
-\label{sec:sock_sa_decnet}
-
-I socket di tipo \const{PF\_DECnet} usano il protocollo DECnet, usato dai VAX
-Digital sotto VMS quando ancora il TCP/IP non era diventato lo standard di
-fatto. Il protocollo è un protocollo chiuso, ed il suo uso attuale è di
-compatibilità con macchine che stanno comunque scomparendo. Lo si riporta solo
-come esempio 
+%% \subsection{La struttura degli indirizzi DECnet}
+%% \label{sec:sock_sa_decnet}
+%% I socket di tipo \const{PF\_DECnet} usano il protocollo DECnet, usato dai VAX
+%% Digital sotto VMS quando ancora il TCP/IP non era diventato lo standard di
+%% fatto. Il protocollo è un protocollo chiuso, ed il suo uso attuale è limitato
+%% alla comunicazione con macchine che stanno comunque scomparendo. Lo si riporta
+%% solo come esempio