From 400a3e7bbb00a6aa4a146e5d55f3b98c0152146f Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 29 Feb 2004 01:48:13 +0000 Subject: [PATCH 1/1] Iniziato a scrivere qualcosa sui socket UDP, e fatta una figura. --- html/gapil.html | 128 ++------------------- html/stampa.html | 7 ++ html/stato.html | 248 +++++++++++++++++++++++++++++++++++++++++ img/udp_connection.dia | Bin 0 -> 1380 bytes othersock.tex | 54 ++++++++- socket.tex | 6 +- tcpsock.tex | 12 +- 7 files changed, 323 insertions(+), 132 deletions(-) create mode 100644 html/stato.html create mode 100644 img/udp_connection.dia 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 0000000000000000000000000000000000000000..c681fab8b6210ff6076a7828610cd616890d87e3 GIT binary patch literal 1380 zcmV-q1)KUGiwFP!000001MOT{Z{s!)e$THElvhU>3;zl!OceeJoMt~w)For9FXQoMv(e&h3K^kV9Idq!jsJyl498q( ztUlc-%0~qOWH7r{UWJU&XtriZ!7xD+bq41zAth@ZsD)H1HzzTn$}5Z~>ir^rspC@3 z_(0DQ-76TP8Ab4=UA4|%zTZXl3el?CWJS`5i?HpgCeorOd;cI)N~K%~hfnvvSog(} z$_sm4O$%)`!V*Zs2-ofKy@`vBFf`9FjNLw5Zek|hL@eF}6>lO+rz=7kg%PWpnGq5r zhzm=Mu2FY8=^Vy9WRAH4x@%uVjFA)TU%)s$$ARMVJ9;ifVo0OlI1mpcTC{AUfGwwQ z$F@t?dK`P9e=AJ?Ym`Q_7&UniVb=S+cj~vpsIQ(-&dB?Z_l$@_TPx)U9mG1q; zAPyi6ln3QIc~ke51g|5aV50t^A8t?8A+C(GUu}O@WFJJDF#=VG>y*)^d^W4gk<$lzC=;DWbN8@ z&FQ9nMreTOsm1G>-f{2KCD}|HipSHLv>EZ^eXw_qelSS%Yo74<2b#N&f8GUL0RUaS z`tcC(Kjvi#fgJ>%(Hm>PfYBEN{4ja6SVA%2>!xjFS-|56cr-L0=!ThP0uGCAhFP{7 zC#sx^OxvmEt=@rLr7N7r5yGscGdxmywbk+jvnF%db!7pQDBki_AsQ`IC1u;JNZ^NE zeD*m?Q2OvENg)1M&0M~S8VDPaV)rw07|w2S3Z0nK|q8Q$$MUFX+k?F(+#pWz7ZJ z)QRHP;+NMT2~#vl)PnA3APM8sl7ux3NjO&^2}3ijj3mG)8x!6DO&}aFB56V(O*oP! z2BwMT-rMfodxNa@6WMkE&3vCd0h1HNHHJ?;ypq$Wo0>j3!yrKH_^H4^F@M@&K>Prz zmt%4Qbz2iCw>J)W))qa2GBn+E!TSh`Ljkysb2B5T6j8qKas(xyY^+D0oI#1C3vYn5 z>5MGVX)`lnTaP?CY?miZo9E2WPZQjY*99es>@dYpMJ@7v2CC41JXQQ2Vbnkse*a07 zBX|;JYPJU~pIgblKW3$`!9fOW#i~z68 z{H`tbMTyX>JkQ%Wl7bs4FxP8k&`jd)=&a&2Ni(vTc=ZYc1~N zjZvXQG00O^-c_Em;uZ2cQ&{o=3ds|me9r1>JYfwo3Ae>h!tHVrZkoU!IX6*KNTLuu z2e;)M{Ax^L55g4Po8R-P!p{nd-AyxY(30(kWQ$ttNxBe97tSDbVTfl7P_ji{SQxj_ mfylq~5KI+@WQxm~qWC%gZv#(v2mg-X>Fz(`MWnfgNB{s+?~+6S literal 0 HcmV?d00001 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} -- 2.30.2