From: Simone Piccardi Date: Sun, 29 Feb 2004 01:48:13 +0000 (+0000) Subject: Iniziato a scrivere qualcosa sui socket UDP, e fatta una figura. X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=400a3e7bbb00a6aa4a146e5d55f3b98c0152146f Iniziato a scrivere qualcosa sui socket UDP, e fatta una figura. --- diff --git a/html/gapil.html b/html/gapil.html index 98f16e5..de524ac 100644 --- a/html/gapil.html +++ b/html/gapil.html @@ -60,6 +60,13 @@ + + + + Stato + + + @@ -135,127 +142,6 @@

- - - - - Disponibilità - - - - - - GaPiL nasce come libro e come tale la versione di - riferimento è quella in PDF, accessibile nella sezione
Download - . Grazie all'opera di Mirko Maischberger abbiamo - anche una bellissima versione HTML, accessibile nella sezione online, finalmente - all'altezza della versione stampabile. - - - - - - - Stato - - - - GaPiL è in continua evoluzione ma - alcune parti hanno raggiunto una "stabilità" sufficiente (nel - senso che le ho riviste, le ritengo abbastanza complete, e non - sono stato capace di accorgermi degli errori che ci ho lasciato) - altre sono da rivedere, altre sono solo parzialmente accennate. La - situazione attuale è la seguente: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cap. 1 Introduzione quasi completo e parzialmente revisionato -
Cap. 2-3 Gestione dei processi quasi completi e parzialmente revisionati -
Cap. 4-7 Gestione base dei file quasi completi e parzialmente revisionati -
Cap. 8 Sistema, parametri, errori quasi completo, da revisionare
Cap. 9 Segnali quasi completo, da revisionare
Cap. 10 Sessioni e terminali sessioni complete, da revisionare, - terminali quasi completi.
Cap. 11 Gestione avanzata dei file - I/O non bloccante, asincrono, memory - mapped completo, da revisionare, file locking - completo, da revisionare. -
Cap. 12 IPC pipe, fifo e code, semafori, - memoria condivisa, tecniche alternative completi, da - revisionare, IPC POSIX quasi completo. -
Cap. 13 Introduzione alla rete completo, da revisionare
Cap. 14 I socket completo, da revisionare. Manca la - trattazione di eventuali ulteriori famiglie.
Cap. 15-16 I socket TCP socket TCP elementari completo, da - revisionare. Socket TCP avanzati appena iniziato, - in fase di stesura. - -
Appendici I protocolli, gli errori, ecc. Materiale messo insieme alla - rinfusa, e da rivedere da zero. -
-

- Versione corrente: 499 pagine. -

- - diff --git a/html/stampa.html b/html/stampa.html index a1b9a4f..02f6e82 100644 --- a/html/stampa.html +++ b/html/stampa.html @@ -60,6 +60,13 @@
+ + + + Stato + + + diff --git a/html/stato.html b/html/stato.html new file mode 100644 index 0000000..af8c623 --- /dev/null +++ b/html/stato.html @@ -0,0 +1,248 @@ + + + + + + + + GaPiL -- Guida alla Programmazione in Linux + + + + + + + + + + + + + + + +
+ + + + + + +
+ + Guida alla Programmazione in Linux +
+ + Simone Piccardi + +
+
+
+ + + + + + + + + + + + +
+ + + + Home + + + + + + Stato + + + + + + Download + + + + + + Versione online + + + + + + CVS + + +
+ + + + + + + + + + + + + + +
+ + + Disponibilità + + + + + GaPiL nasce come libro e come tale la versione di + riferimento è quella in PDF, accessibile nella sezione Download + . Grazie all'opera di Mirko Maischberger abbiamo + anche una bellissima versione HTML, accessibile nella sezione online, finalmente + all'altezza della versione stampabile. +
+ + + Stato + + + GaPiL è in continua evoluzione ma + alcune parti hanno raggiunto una "stabilità" sufficiente (nel + senso che le ho riviste, le ritengo abbastanza complete, e non + sono stato capace di accorgermi degli errori che ci ho lasciato) + altre sono da rivedere, altre sono solo parzialmente accennate. La + situazione attuale è la seguente: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cap. 1 Introduzione quasi completo e parzialmente revisionato +
Cap. 2-3 Gestione dei processi quasi completi e parzialmente revisionati +
Cap. 4-7 Gestione base dei file quasi completi e parzialmente revisionati +
Cap. 8 Sistema, parametri, errori quasi completo, da revisionare
Cap. 9 Segnali quasi completo, da revisionare
Cap. 10 Sessioni e terminali sessioni complete, da revisionare, + terminali quasi completi.
Cap. 11 Gestione avanzata dei file + I/O multiplexing e I/O non bloccante parzialmente rivisti, + I/O asincrono da aggiornare, memory + mapped completo, da revisionare, file locking + completo, da revisionare. +
Cap. 12 IPC pipe, fifo e code, semafori, + memoria condivisa, tecniche alternative completi, da + revisionare, code di messaggi e memoria condivisa POSIX + quasi completi, semafori POSIX da fare. +
Cap. 13 Introduzione alla rete completo, da revisionare
Cap. 14 I socket completo, da revisionare. Manca la + trattazione di eventuali ulteriori famiglie di socket. +
Cap. 15 I socket TCP Completo, da + revisionare. +
Cap. 16 Altri socket Due placeholder per socket UDP ed unix + domain, completamente da fare. +
Cap. 17 Gestione dei socket Due placeholder per la gestione degli + indirizzi e le opzioni dei socket, completamente da fare. +
Cap. 18 Socket avanzati Due placeholder per socket TCP e UDP + avanzati, completamente da fare. +
Appendici I protocolli, gli errori, ecc. Materiale messo insieme alla + rinfusa, e da rivedere totalmente. +
+

+ Versione corrente: 507 pagine. +

+
+ + + diff --git a/img/udp_connection.dia b/img/udp_connection.dia new file mode 100644 index 0000000..c681fab Binary files /dev/null and b/img/udp_connection.dia differ 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}} diff --git a/socket.tex b/socket.tex index 23d9206..5426a0d 100644 --- a/socket.tex +++ b/socket.tex @@ -261,9 +261,9 @@ seguenti costanti: altro socket. I dati vengono ricevuti e trasmessi come un flusso continuo di byte (da cui il nome \textit{stream}). \item[\const{SOCK\_DGRAM}] Viene usato per trasmettere pacchetti di dati - (\textit{datagram}) di lunghezza massima fissata indirizzati singolarmente, - Non esiste una connessione e la trasmissione è effettuata in maniera non - affidabile. + (\textit{datagram}) di lunghezza massima prefissata, indirizzati + singolarmente. Non esiste una connessione e la trasmissione è effettuata in + maniera non affidabile. \item[\const{SOCK\_SEQPACKET}] Provvede un canale di trasmissione di dati bidirezionale, sequenziale e affidabile. Opera su una connessione con un altro socket. I dati possono vengono trasmessi per pacchetti di dimensione diff --git a/tcpsock.tex b/tcpsock.tex index 71c3b65..5ddcd16 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -11,13 +11,11 @@ \chapter{I socket TCP} \label{cha:TCP_socket} -In questo capitolo iniziamo ad approfondire la conoscenza dei socket TCP, -iniziando con una descrizione delle principali caratteristiche del -funzionamento di una connessione TCP. Tratteremo poi le varie funzioni che -servono alla creazione di una connessione fra un server elementare ed il suo -client, fornendo poi alcuni esempi di applicazione elementare, e finiremo -prendendo in esame l'uso dell'I/O multiplexing. - +In questo capitolo tratteremo le basi dei socket TCP, iniziando con una +descrizione delle principali caratteristiche del funzionamento di una +connessione TCP; vedremo poi le varie funzioni che servono alla creazione di +una connessione fra client e server, fornendo alcuni esempi elementari, e +finiremo prendendo in esame l'uso dell'I/O multiplexing. \section{Il funzionamento di una connessione TCP}