X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=sockctrl.tex;h=18cada6e51c6bb9b0a4e9faffa384ac59eba370c;hb=e35bdc25982790962f06f395b8329634d67448e9;hp=8bc4d038ee9e228a5076463d2193a225a1c1b3cc;hpb=d7db23a35bbd9c7465780719188709ca06e99eaf;p=gapil.git diff --git a/sockctrl.tex b/sockctrl.tex index 8bc4d03..18cada6 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2688,42 +2688,42 @@ sono definite in \file{netinet/ip.h}, ed accessibili includendo detto file. \hline \hline \const{IP\_OPTIONS} &$\bullet$&$\bullet$&&\texttt{void *}& %??? - Imposta o riceve le opzioni di IP.\\ + imposta o riceve le opzioni di IP.\\ \const{IP\_PKTINFO} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Passa un messaggio di informazione.\\ + passa un messaggio di informazione.\\ \const{IP\_RECVTOS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Passa un messaggio col campo TOS.\\ + passa un messaggio col campo TOS.\\ \const{IP\_RECVTTL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Passa un messaggio col campo TTL.\\ + passa un messaggio col campo TTL.\\ \const{IP\_RECVOPTS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Passa un messaggio con le opzioni IP.\\ + passa un messaggio con le opzioni IP.\\ \const{IP\_RETOPTS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Passa un messaggio con le opzioni IP non trattate.\\ + passa un messaggio con le opzioni IP non trattate.\\ \const{IP\_TOS} &$\bullet$&$\bullet$& &\texttt{int}& - Imposta il valore del campo TOS.\\ + imposta il valore del campo TOS.\\ \const{IP\_TTL} &$\bullet$&$\bullet$& &\texttt{int}& - Imposta il valore del campo TTL.\\ + imposta il valore del campo TTL.\\ \const{IP\_HDRINCL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Passa l'intestazione di IP nei dati.\\ + passa l'intestazione di IP nei dati.\\ \const{IP\_RECVERR} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Abilita la gestione degli errori.\\ + abilita la gestione degli errori.\\ \const{IP\_MTU\_DISCOVER} &$\bullet$&$\bullet$& &\texttt{int}& - Imposta il Path MTU Discovery.\\ + imposta il Path MTU Discovery.\\ \const{IP\_MTU} &$\bullet$& & &\texttt{int}& - Legge il valore attuale della MTU.\\ + legge il valore attuale della MTU.\\ \const{IP\_ROUTER\_ALERT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Imposta l'opzione \textit{IP router alert} sui pacchetti.\\ + imposta l'opzione \textit{IP router alert} sui pacchetti.\\ \const{IP\_MULTICAST\_TTL} &$\bullet$&$\bullet$& &\texttt{int}& - Imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\ + imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\ \const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Controlla il reinvio a se stessi dei dati di \itindex{multicast} + controlla il reinvio a se stessi dei dati di \itindex{multicast} \textit{multicast}.\\ \const{IP\_ADD\_MEMBERSHIP} & &$\bullet$& &\struct{ip\_mreqn}& - Si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\ + si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\ \const{IP\_DROP\_MEMBERSHIP}& &$\bullet$& &\struct{ip\_mreqn}& - Si sgancia da un gruppo di \textit{multicast}.\\ + si sgancia da un gruppo di \textit{multicast}.\\ \const{IP\_MULTICAST\_IF} & &$\bullet$& &\struct{ip\_mreqn}& - Imposta l'interfaccia locale di un socket \itindex{multicast} + imposta l'interfaccia locale di un socket \itindex{multicast} \textit{multicast}.\\ \hline \end{tabular} @@ -3000,60 +3000,64 @@ UDP e TCP.\footnote{come per le precedenti, una descrizione di queste opzioni è disponibile nella settima sezione delle pagine di manuale, che si può consultare rispettivamente con \texttt{man 7 tcp} e \texttt{man 7 udp}; le pagine di manuale però, alla stesura di questa sezione (Agosto 2006) sono - alquanto incomplete.} Dato che questi protocolli sono entrambi trasportati -su IP, oltre alle opzioni generiche di sez.~\ref{sec:sock_generic_options} -saranno comunque disponibili anche le precedenti opzioni di -sez.~\ref{sec:sock_ipv4_options}.\footnote{in realtà in - sez.~\ref{sec:sock_ipv4_options} si sono riportate le opzioni per IPv4, ma - quelle per TCP e UDP sono le stesse anche quando si usa IPv6.} + alquanto incomplete.} Dato che questi due protocolli sono entrambi +trasportati su IP,\footnote{qui si sottintende IPv4, ma le opzioni per TCP e + UDP sono le stesse anche quando si usa IPv6.} oltre alle opzioni generiche +di sez.~\ref{sec:sock_generic_options} saranno comunque disponibili anche le +precedenti opzioni di sez.~\ref{sec:sock_ipv4_options}.\footnote{in realtà in + sez.~\ref{sec:sock_ipv4_options} si sono riportate le opzioni per IPv4, al + solito qualora si stesse utilizzando IPv6 si potrebbero utilizzare le + opzioni di quest'ultimo.} Il protocollo che supporta il maggior numero di opzioni è TCP; per poterle utilizzare occorre specificare \const{SOL\_TCP} (o l'equivalente -\const{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si è -riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_tcp}. Le -costanti indicanti le opzioni del protocollo TCP e tutte le altre costanti ad -esse collegate sono definite in \file{netinet/tcp.h}, ed accessibili -includendo detto file.\footnote{in realtà questo è il file usato dalle - librerie; la definizione delle opzioni effettivamente supportate da Linux si - trova nel file \texttt{linux/tcp.h}, dal quale si sono estratte le costanti - di tab.~\ref{tab:sock_opt_tcplevel}.} +\const{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si sono +riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcp} dove +sono elencate le rispettive costanti da utilizzare come valore per l'argomento +\param{optname}. Dette costanti e tutte le altre costanti e strutture +collegate all'uso delle opzioni TCP sono definite in \file{netinet/tcp.h}, ed +accessibili includendo detto file.\footnote{in realtà questo è il file usato + dalle librerie; la definizione delle opzioni effettivamente supportate da + Linux si trova nel file \texttt{linux/tcp.h}, dal quale si sono estratte le + costanti di tab.~\ref{tab:sock_opt_tcplevel}.} \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{|l|c|c|c|l|l|} + \begin{tabular}[c]{|l|c|c|c|l|p{7cm}|} \hline \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}& \textbf{Descrizione}\\ \hline \hline - \const{TCP\_NODELAY} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_MAXSEG} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_CORK} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_KEEPIDLE} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_KEEPINTVL} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_KEEPCNT} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_SYNCNT} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_LINGER2} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_INFO} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_QUICKACK} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{TCP\_CONGESTION} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ + \const{TCP\_NODELAY} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + spedisce tutti i pacchetti il prima possibile.\\ + \const{TCP\_MAXSEG} &$\bullet$&$\bullet$& &\texttt{int}& + valore della \itindex{Maximum~Segment~Size} MSS per i pacchetti in + uscita.\\ + \const{TCP\_CORK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + non invia frame parziali.\\ + \const{TCP\_KEEPIDLE} &$\bullet$&$\bullet$& &\texttt{int}& + tempo in secondi prima di inviare un \textit{keepalive}.\\ + \const{TCP\_KEEPINTVL} &$\bullet$&$\bullet$& &\texttt{int}& + tempo in secondi prima fra \textit{keepalive} successivi.\\ + \const{TCP\_KEEPCNT} &$\bullet$&$\bullet$& &\texttt{int}& + numero massimo di \textit{keepalive} inviati.\\ + \const{TCP\_SYNCNT} &$\bullet$&$\bullet$& &\texttt{int}& + numero massimo di ritrasmissioni del pacchetto SYN.\\ + \const{TCP\_LINGER2} &$\bullet$&$\bullet$& &\texttt{int}& + tempo di vita in stato \texttt{FIN\_WAIT2}.\\ + \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + ritorna da \func{accept} solo in presenza di dati.\\ + \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$& &\texttt{int}& + valore della \textit{advertised window}.\\ + \const{TCP\_INFO} &$\bullet$&? & &\struct{tcp\_info}& + raccoglie informazioni sul socket.\\ + \const{TCP\_QUICKACK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + abilita la modalità \textit{quickack}.\\ + \const{TCP\_CONGESTION} &$\bullet$&$\bullet$&? &\texttt{?}& %??? + non ancora documentata.\\ \hline \end{tabular} \caption{Le opzioni per i socket TCP disponibili al livello @@ -3061,16 +3065,46 @@ includendo detto file.\footnote{in realt \label{tab:sock_opt_tcplevel} \end{table} -Le descrizioni di tab.~\ref{tab:sock_opt_tcplevel} sono estremamente -sintetiche, una maggiore quantità di dettagli su queste opzioni è fornita nel -seguente elenco: +Le descrizioni riportata in tab.~\ref{tab:sock_opt_tcplevel} sono estremamente +sintetiche, una maggiore quantità di dettagli e la spiegazione delle singole +opzioni è fornita nel seguente elenco: \begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}} -\item[\const{TCP\_NODELAY}] - -\item[\const{TCP\_MAXSEG}] - -\item[\const{TCP\_CORK}] +\item[\const{TCP\_NODELAY}] il protocollo TCP prevede, per evitare la + trasmissione di tanti pacchetti piccoli, che comporta un utilizzo non + ottimale della banda disponibile, un meccanismo di bufferizzazione dei + pacchetti uscenti controllato da un apposito algoritmo (detto + \textsl{algoritmo di Nagle}, vedi sez.\ref{sez:tcp_protocol_xxx}). Il + comportamento normale prevede invece che i pacchetti siano accumulati + fintanto che non si raggiunge una quantità di dati considerata adeguata per + eseguire la trasmissione. + + Impostando questa opzione si disabilita questo meccanismo ed i pacchetti + vengono inviati immediatamente qualunque sia la loro dimensione; l'opzione + viene sovrascritta dall'eventuale impostazione \const{TCP\_CORK} (che blocca + l'invio immediato), tuttavia quando la si abilita viene sempre forzato lo + scaricamento della coda di invio (con conseguente trasmissione di tutti i + pacchetti pendenti), anche qualora si fosse già abilitata + \const{TCP\_CORK}.\footnote{si tenga presente però che \const{TCP\_CORK} può + essere specificata insieme a \const{TCP\_NODELAY} soltanto a partire dal + kernel 2.5.71.} + +\item[\const{TCP\_MAXSEG}] permette di leggere e modificare il valore della + \itindex{Maximum~Segment~Size} MSS dei pacchetti uscenti, e se l'opzione è + impostata prima di stabilire la connessione, cambia anche il valore della + MSS annunciata all'altro capo della connessione. Se si specificano valori + maggiori della MTU questi verranno ignorati, inoltre TCP imporrà anche i + suoi limiti massimo e minimo per questo valore. + +\item[\const{TCP\_CORK}] quando questa opzione viene abilitata non vengono + inviati pacchetti di dati fintanto che essa non venga disabilitata; a quel + punto tutti i dati rimasti in coda saranno inviati in un solo pacchetto. + Questa opzione viene usata per gestire direttamente il flusso dei dati + mettendo un ``\textsl{tappo}'' al flusso di uscita, in modo ottimizzare a + mano il throughput. + + Questa opzione non è disponibile su tutti i kernel unix-like e deve essere + evitata se si vuole avere codice portabile. \item[\const{TCP\_KEEPINTVL}] @@ -3112,10 +3146,10 @@ file.\footnote{come per TCP, la definizione delle opzioni effettivamente \textbf{Descrizione}\\ \hline \hline - \const{UDP\_CORK} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ - \const{UDP\_ENCAP} &$\bullet$&$\bullet$&&\texttt{}& %??? - .\\ + \const{UDP\_CORK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? + accumula tutti i dati su un unico pacchetto.\\ + \const{UDP\_ENCAP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? + non documentata.\\ \hline \end{tabular} \caption{Le opzioni per i socket UDP disponibili al livello @@ -3220,7 +3254,7 @@ processo che riceve i segnali) che si effettuano chiamando \func{ioctl} con Benché non strettamente attinenti alla gestione dei socket, vale la pena di trattare qui l'interfaccia di accesso a basso livello ai dispositivi di rete che viene appunto fornita attraverso la funzione \texttt{ioctl}. Questa non è -attinente a carattestiche specifiche di un qualche protocollo, ma si applica a +attinente a caratteristiche specifiche di un qualche protocollo, ma si applica a tutti i socket, indipendentemente dal tipo o famiglia dello stesso, e permette di impostare e rilevare le funzionalità delle interfacce di rete. @@ -3240,13 +3274,13 @@ Tutte le operazioni di questo tipo utilizzano come terzo argomento di il primo campo della struttura, \var{ifr\_name} per specificare il nome dell'interfaccia su cui si vuole operare (ad esempio \texttt{eth0}, \texttt{ppp0}, ecc.), e si inseriscono (o ricevono) i valori relativi alle -diversa carateristiche e funzionalità nel secondo campo, che come si può +diversa caratteristiche e funzionalità nel secondo campo, che come si può notare è definito come una \ctyp{union} proprio in quanto il suo significato varia a secondo dell'operazione scelta. Si tenga inoltre presente che alcune di queste operazioni (in particolare quelle che modificano le caratteristiche dell'interfaccia) sono privilegiate e -richiedono i privilegi di amministatore o la \itindex{capabilities} +richiedono i privilegi di amministratore o la \itindex{capabilities} \textit{capability} \const{CAP\_NET\_ADMIN}, altrimenti si otterrà un errore di \errval{EPERM}. Le costanti che identificano le operazioni disponibili sono le seguenti: @@ -3701,4 +3735,12 @@ accessibile con \texttt{man 7 ip}, sono i seguenti: % LocalWords: Documentation SIOCATMARK SIOCOUTQ FIONREAD TIOCOUTQ Denial work % LocalWords: netfilter scheduler mark ARP DHCP BOOTP RARP nonlocal sniffer % LocalWords: linux NODELAY MAXSEG CORK KEEPIDLE KEEPINTVL KEEPCNT SYNCNT INFO -% LocalWords: DEFER ACCEPT WINDOW CLAMP QUICKACK CONGESTION ENCAP urgent +% LocalWords: DEFER ACCEPT WINDOW CLAMP QUICKACK CONGESTION ENCAP urgent MSS +% LocalWords: Segment SYN accept advertised window info quickack Nagle ifreq +% LocalWords: ifr ppp union EPERM SIOCGIFNAME dell' interface index IFF NOARP +% LocalWords: SIOCGIFINDEX SIOCGIFFLAGS POINTOPOINT RUNNING PROMISC NOTRAILERS +% LocalWords: ALLMULTI bundle PORTSEL ifmap AUTOMEDIA DYNAMIC SIOCSIFFLAGS +% LocalWords: SIOCGIFMETRIC SIOCSIFMETRIC SIOCGIFMTU SIOCSIFMTU SIOCGIFHWADDR +% LocalWords: SIOCSIFHWADDR SIOCSIFHWBROADCAST SIOCGIFMAP SIOCSIFMAP +% LocalWords: SIOCADDMULTI SIOCDELMULTI SIOCGIFTXQLEN SIOCSIFTXQLEN +% LocalWords: SIOCSIFNAME SIOCGIFCONF