X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=socket.tex;h=7e79d39439dc2ce7ed6f15f002b05ab72484e2cb;hp=d3bbecc6a4f764f3da529aa3595c1517a3eb0501;hb=7208522fd60468969d96dba5d8dd2cbd24b75b89;hpb=7b43a7843d483c826a6ed13224208c615a23c4d6 diff --git a/socket.tex b/socket.tex index d3bbecc..7e79d39 100644 --- a/socket.tex +++ b/socket.tex @@ -9,7 +9,7 @@ %% License". %% -\chapter{Introduzione ai socket} +\chapter{I socket} \label{cha:socket_intro} In questo capitolo inizieremo a spiegare le caratteristiche salienti della @@ -22,16 +22,18 @@ come creare un socket e come collegarlo allo specifico protocollo di rete che si utilizzerà per la comunicazione. Per evitare un'introduzione puramente teorica concluderemo il capitolo con un primo esempio di applicazione. -\section{Una panoramica} +\section{Introduzione ai socket} \label{sec:sock_overview} -Iniziamo con una descrizione essenziale di cosa sono i \textit{socket} e di -quali sono i concetti fondamentali da tenere presente quando si ha a che fare -con essi. +In questa sezione daremo descrizione essenziale di cosa sono i \textit{socket} +e di quali sono i concetti fondamentali da tenere presente quando si ha a che +fare con essi; ne illustreremo poi le caratteristiche e le differenti +tipologie presenti ed infine tratteremo le modalità con cui possono essere +creati. \index{socket!definizione|(} -\subsection{I \textit{socket}} +\subsection{Cosa sono \textit{socket}} \label{sec:sock_socket_def} I \textit{socket} (una traduzione letterale potrebbe essere \textsl{presa}, ma @@ -62,24 +64,20 @@ utilizzare i socket con i più disparati meccanismi di comunicazione, e non solo con l'insieme dei protocolli TCP/IP, anche se questa sarà comunque quella di cui tratteremo in maniera più estesa. - -\subsection{Concetti base} -\label{sec:sock_gen} - Per capire il funzionamento dei socket occorre avere presente il funzionamento -dei protocolli di rete che su utilizzeranno (vedi cap.~\ref{cha:network}), ma -l'interfaccia è del tutto generale e benché le problematiche, e quindi le -modalità di risolvere i problemi, siano diverse a seconda del tipo di -protocollo di comunicazione usato, le funzioni da usare nella gestione dei -socket restano le stesse. +dei protocolli di rete che su utilizzeranno (ed in particolare quelli del +TCP/IP già illustrati in sez.~\ref{sec:net_tpcip}), ma l'interfaccia è del +tutto generale e benché le problematiche, e quindi le modalità di risolvere i +problemi, siano diverse a seconda del tipo di protocollo di comunicazione +usato, le funzioni da usare nella gestione dei socket restano le stesse. Per questo motivo una semplice descrizione dell'interfaccia è assolutamente inutile, in quanto il comportamento di quest'ultima e le problematiche da affrontare cambiano radicalmente a seconda del tipo di comunicazione usato. -La scelta di questo tipo (sovente anche detto \textsl{stile}) va infatti ad -incidere sulla semantica che verrà utilizzata a livello utente per gestire la -comunicazione cioè su come inviare e ricevere i dati e sul comportamento -effettivo delle funzioni utilizzate. +La scelta di questo tipo di comunicazione (sovente anche detto \textsl{stile}) +va infatti ad incidere sulla semantica che verrà utilizzata a livello utente +per gestire la comunicazione cioè su come inviare e ricevere i dati e sul +comportamento effettivo delle funzioni utilizzate. La scelta di uno \textsl{stile} dipende sia dai meccanismi disponibili, sia dal tipo di comunicazione che si vuole effettuare. Ad esempio alcuni tipi di @@ -100,18 +98,21 @@ cui essa avviene nei confronti dei corrispondenti, in certi casi essa può essere condotta con una connessione diretta con un solo corrispondente, come per una telefonata; altri casi possono prevedere una comunicazione come per lettera, in cui si scrive l'indirizzo su ogni pacchetto, altri ancora una -comunicazione \itindex{broadcast} \textit{broadcast} come per la radio, in cui -i pacchetti vengono emessi su appositi ``\textsl{canali}'' dove chiunque si -collega possa riceverli. +comunicazione uno a molti come il \textit{broadcast} ed il \textit{multicast}, +in cui i pacchetti possono venire emessi su appositi ``\textsl{canali}'' dove +chiunque si collega possa riceverli. -É chiaro che ciascuno di questi diversi aspetti associato ad un tipo di -comunicazione comporta una modalità diversa di gestire la stessa, ad esempio -se è inaffidabile occorrerà essere in grado di gestire la perdita o il -rimescolamento dei dati, se è a pacchetti questi dovranno essere -opportunamente trattati, ecc. +É chiaro che ciascuno di questi diversi aspetti è associato ad un tipo di +comunicazione che comporta una modalità diversa di gestire la stessa, ad +esempio se la comunicazione è inaffidabile occorrerà essere in grado di +gestire la perdita o il rimescolamento dei dati, se è a pacchetti questi +dovranno essere opportunamente trattati, se è uno a molti occorrerà tener +conto della eventuale unidirezionalità della stessa, ecc. + +\index{socket!definizione|)} -\section{La creazione di un socket} +\subsection{La creazione di un socket} \label{sec:sock_creation} Come accennato l'interfaccia dei socket è estremamente flessibile e permette @@ -119,9 +120,6 @@ di interagire con protocolli di comunicazione anche molto diversi fra di loro; in questa sezione vedremo come è possibile creare un socket e come specificare il tipo di comunicazione che esso deve utilizzare. -\subsection{La funzione \func{socket}} -\label{sec:sock_socket} - La creazione di un socket avviene attraverso l'uso della funzione di sistema \funcd{socket}; essa restituisce un \textit{file descriptor} (del tutto analogo a quelli che si ottengono per i file di dati e le \textit{pipe}, @@ -560,7 +558,7 @@ il loro uso è sperimentale. Il campo \var{sin6\_addr} contiene l'indirizzo a 128 bit usato da IPv6, espresso da un vettore di 16 byte. Infine il campo \var{sin6\_scope\_id} è un campo introdotto in Linux con il kernel 2.4, per gestire alcune operazioni -riguardanti il \itindex{multicast} \textit{multicasting}. Si noti infine che +riguardanti il \textit{multicasting}. Si noti infine che \struct{sockaddr\_in6} ha una dimensione maggiore della struttura \struct{sockaddr} generica di fig.~\ref{fig:sock_sa_gen_struct}, quindi occorre stare attenti a non avere fatto assunzioni riguardo alla possibilità @@ -744,12 +742,11 @@ pacchetto; entrambi vengono impostati alla ricezione di un pacchetto ed han senso solo in questo caso. In particolare \var{sll\_pkttype} può assumere i seguenti valori: \const{PACKET\_HOST} per un pacchetto indirizzato alla macchina ricevente, \const{PACKET\_BROADCAST} per un pacchetto di -\itindex{broadcast} \textit{broadcast}, \const{PACKET\_MULTICAST} per un -pacchetto inviato ad un indirizzo fisico di \itindex{multicast} -\textit{multicast}, \const{PACKET\_OTHERHOST} per un pacchetto inviato ad -un'altra stazione (e ricevuto su un'interfaccia in \index{modo~promiscuo} modo -promiscuo), \const{PACKET\_OUTGOING} per un pacchetto originato dalla propria -macchina che torna indietro sul socket. +\textit{broadcast}, \const{PACKET\_MULTICAST} per un pacchetto inviato ad un +indirizzo fisico di \textit{multicast}, \const{PACKET\_OTHERHOST} per un +pacchetto inviato ad un'altra stazione (e ricevuto su un'interfaccia in +\index{modo~promiscuo} modo promiscuo), \const{PACKET\_OUTGOING} per un +pacchetto originato dalla propria macchina che torna indietro sul socket. Si tenga presente infine che in fase di ricezione, anche se si richiede il @@ -953,8 +950,6 @@ Il formato usato per gli indirizzi in formato di presentazione è la notazione \textit{dotted decimal} per IPv4 e quello descritto in sez.~\ref{sec:IP_ipv6_notation} per IPv6. -\index{socket!definizione|)} -