X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=9bc93366da772b7d8cf6cc2a75d41a04de3f4f72;hp=3a2afa7b8a466f9a04caa67db9c048eecde84974;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=b3593007c4edd76ecbf7386967c1b25d27eed828 diff --git a/sockctrl.tex b/sockctrl.tex index 3a2afa7..9bc9336 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -118,7 +118,7 @@ problema dell'ordine in cui questi vengono interrogati.\footnote{con le predefinito e non modificabile (a meno di una ricompilazione delle librerie stesse).} -\itindbeg{Name~Service~Switch} +\itindbeg{Name~Service~Switch~(NSS)} Per risolvere questa serie di problemi la risoluzione dei nomi a dominio eseguirà dal \textit{resolver} è stata inclusa all'interno di un meccanismo generico per la risoluzione di corrispondenze fra nomi ed informazioni ad essi @@ -200,7 +200,7 @@ quello che conta sono le funzioni classiche che il \textit{resolver} mette a disposizione,\footnote{è cura della implementazione fattane nelle \acr{glibc} tenere conto della presenza del \textit{Name Service Switch}.} e sono queste quelle che tratteremo nelle sezioni successive. -\itindend{Name~Service~Switch} +\itindend{Name~Service~Switch~(NSS)} \subsection{Le funzioni di interrogazione del \textit{resolver}} @@ -875,6 +875,7 @@ Disattiva l'uso di connessioni per le interrogazioni ad un server DNS. \noindent e come si può vedere la funzione è estremamente semplice, non richiedendo nessun argomento. +% TODO manca gethostent (e gethostent_r) e altro ? (vedi man page) Infine si può richiedere la risoluzione inversa di un indirizzo IP od IPv6, per ottenerne il nome a dominio ad esso associato, per fare questo si può @@ -1019,7 +1020,7 @@ servizi di risoluzione dei nomi illustrati in sez.~\ref{sec:sock_resolver}; in generale infatti ci sono una serie di funzioni nella forma \texttt{getXXXbyname} e \texttt{getXXXbyaddr} (dove \texttt{XXX} indica il servizio) per ciascuna delle informazioni di rete mantenute dal -\itindex{Name~Service~Switch} \textit{Name Service Switch} che permettono +\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che permettono rispettivamente di trovare una corrispondenza cercando per nome o per numero. L'elenco di queste funzioni è riportato nelle colonne finali di @@ -1027,8 +1028,8 @@ tab.~\ref{tab:name_resolution_functions}, dove le si sono suddivise rispetto al tipo di informazione che forniscono (riportato in prima colonna). Nella tabella si è anche riportato il file su cui vengono ordinariamente mantenute queste informazioni, che però può essere sostituito da un qualunque supporto -interno al \itindex{Name~Service~Switch} \textit{Name Service Switch} (anche -se usualmente questo avviene solo per la risoluzione degli indirizzi). +interno al \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} +(anche se usualmente questo avviene solo per la risoluzione degli indirizzi). Ciascuna funzione fa riferimento ad una sua apposita struttura che contiene i relativi dati, riportata in terza colonna. @@ -1044,15 +1045,15 @@ relativi dati, riportata in terza colonna. indirizzo &\conffile{/etc/hosts}&\struct{hostent}&\func{gethostbyname}& \func{gethostbyaddr}\\ servizio &\conffile{/etc/services}&\struct{servent}&\func{getservbyname}& - \func{getservbyaddr}\\ - rete &\conffile{/etc/networks}&\struct{netent}&\func{getnetbyname}& - \func{getnetbyaddr}\\ + \func{getservbyport}\\ + rete &\conffile{/etc/networks}&\struct{netent}&\funcm{getnetbyname}& + \funcm{getnetbyaddr}\\ protocollo&\conffile{/etc/protocols}&\struct{protoent}& - \func{getprotobyname}&\func{getprotobyaddr}\\ + \funcm{getprotobyname}&\funcm{getprotobyaddr}\\ \hline \end{tabular} \caption{Funzioni di risoluzione dei nomi per i vari servizi del - \itindex{Name~Service~Switch} \textit{Name Service Switch}.} + \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.} \label{tab:name_resolution_functions} \end{table} @@ -1060,13 +1061,13 @@ Delle funzioni di tab.~\ref{tab:name_resolution_functions} abbiamo trattato finora soltanto quelle relative alla risoluzione dei nomi, dato che sono le più usate, e prevedono praticamente da sempre la necessità di rivolgersi ad una entità esterna; per le altre invece, estensioni fornite dal -\itindex{Name~Service~Switch} NSS a parte, si fa sempre riferimento ai dati -mantenuti nei rispettivi file. +\itindex{Name~Service~Switch~(NSS)} NSS a parte, si fa sempre riferimento ai +dati mantenuti nei rispettivi file. Dopo la risoluzione dei nomi a dominio una delle ricerche più comuni è quella sui nomi dei servizi di rete più comuni (cioè \texttt{http}, \texttt{smtp}, ecc.) da associare alle rispettive porte. Le due funzioni da utilizzare per -questo sono \funcd{getservbyname} e \funcd{getservbyaddr}, che permettono +questo sono \funcd{getservbyname} e \funcd{getservbyport}, che permettono rispettivamente di ottenere il numero di porta associato ad un servizio dato il nome e viceversa; i loro prototipi sono: \begin{functions} @@ -1096,7 +1097,7 @@ Il primo argomento è il nome del servizio per \func{getservbyname}, specificato tramite la stringa \param{name}, mentre \func{getservbyport} richiede il numero di porta in \param{port}. Entrambe le funzioni eseguono una ricerca sul file \conffile{/etc/services}\footnote{il - \itindex{Name~Service~Switch} \textit{Name Service Switch} astrae il + \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} astrae il concetto a qualunque supporto su cui si possano mantenere i suddetti dati.} ed estraggono i dati dalla prima riga che corrisponde agli argomenti specificati; se la risoluzione ha successo viene restituito un puntatore ad @@ -1131,7 +1132,7 @@ trovati nelle rispettive pagine di manuale. Oltre alle funzioni di ricerca esistono delle ulteriori funzioni che prevedono una lettura sequenziale delle informazioni mantenute nel -\itindex{Name~Service~Switch} \textit{Name Service Switch} (in sostanza +\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} (in sostanza permettono di leggere i file contenenti le informazioni riga per riga), che sono analoghe a quelle elencate in tab.~\ref{tab:sys_passwd_func} per le informazioni relative ai dati degli utenti e dei gruppi. Nel caso specifico @@ -1163,7 +1164,7 @@ voce. La seconda funzione, \func{setservent}, permette di aprire il file aperto riporta la posizione di lettura alla prima voce del file, in questo modo si può far ricominciare da capo una lettura sequenziale. L'argomento \param{stayopen}, se diverso da zero, fa sì che il file resti aperto anche fra -diverse chiamate a \func{getservbyname} e \func{getservbyaddr}.\footnote{di +diverse chiamate a \func{getservbyname} e \func{getservbyport}.\footnote{di default dopo una chiamata a queste funzioni il file viene chiuso, cosicché una successiva chiamata a \func{getservent} riparte dall'inizio.} La terza funzione, \funcd{endservent}, provvede semplicemente a chiudere il file. @@ -1188,12 +1189,12 @@ rimandando alle rispettive pagine di manuale. \hline indirizzo &\func{sethostent} &\func{gethostent} &\func{endhostent} \\ servizio &\func{setservent} &\func{getservent} &\func{endservent}\\ - rete &\func{setnetent} &\func{getnetent} &\func{endnetent}\\ - protocollo&\func{setprotoent}&\func{getprotoent}&\func{endprotoent}\\ + rete &\funcm{setnetent} &\funcm{getnetent} &\funcm{endnetent}\\ + protocollo&\funcm{setprotoent}&\funcm{getprotoent}&\funcm{endprotoent}\\ \hline \end{tabular} \caption{Funzioni lettura sequenziale dei dati del - \itindex{Name~Service~Switch} \textit{Name Service Switch}.} + \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.} \label{tab:name_sequential_read} \end{table} @@ -1445,7 +1446,7 @@ corrispondente è riportato tramite \var{errno}. Come per i codici di errore di \func{gethostbyname} anche in questo caso è fornita una apposita funzione, analoga di \func{strerror}, che consente di utilizzarli direttamente per stampare a video un messaggio esplicativo; la -funzione è \func{gai\_strerror} ed il suo prototipo è: +funzione è \funcd{gai\_strerror} ed il suo prototipo è: \begin{functions} \headdecl{netdb.h} @@ -1603,7 +1604,7 @@ struttura \struct{addrinfo}, perché una volta disallocati i dati con Anche la nuova interfaccia definita da POSIX prevede una nuova funzione per eseguire la risoluzione inversa e determinare nomi di servizi e di dominio dati i rispettivi valori numerici. La funzione che sostituisce le varie -\func{gethostbyname}, \func{getipnodebyname} e \func{getservname} è +\func{gethostbyname}, \func{getipnodebyname} e \func{getservbyname} è \funcd{getnameinfo}, ed il suo prototipo è: \begin{functions} \headdecl{sys/socket.h} @@ -1687,8 +1688,8 @@ finora, quello in cui si specifica nel client un indirizzo remoto per la connessione al server, e quello in cui si specifica nel server un indirizzo locale su cui porsi in ascolto. -La prima funzione della nostra interfaccia semplificata è \func{sockconn} che -permette di ottenere un socket, connesso all'indirizzo ed al servizio +La prima funzione della nostra interfaccia semplificata è \texttt{sockconn} +che permette di ottenere un socket, connesso all'indirizzo ed al servizio specificati. Il corpo della funzione è riportato in fig.~\ref{fig:sockconn_code}, il codice completo è nel file \file{SockUtil.c} dei sorgenti allegati alla guida, che contiene varie funzioni di utilità per @@ -1700,7 +1701,7 @@ l'uso dei socket. \includecodesample{listati/sockconn.c} \end{minipage} \normalsize - \caption{Il codice della funzione \func{sockconn}.} + \caption{Il codice della funzione \texttt{sockconn}.} \label{fig:sockconn_code} \end{figure} @@ -1771,7 +1772,7 @@ codice usato finora per collegarsi (vedi fig.~\ref{fig:TCP_echo_client_1}) avremo una semplificazione per cui il corpo principale del nostro client diventerà quello illustrato in fig.~\ref{fig:TCP_echo_fifth}, in cui le chiamate a \func{socket}, \func{inet\_pton} e \func{connect} sono sostituite -da una singola chiamata a \func{sockconn}. Inoltre il nuovo client (il cui +da una singola chiamata a \texttt{sockconn}. Inoltre il nuovo client (il cui codice completo è nel file \file{TCP\_echo\_fifth.c} dei sorgenti allegati) consente di utilizzare come argomento del programma un nome a dominio al posto dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6. @@ -1782,14 +1783,14 @@ dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6. \includecodesample{listati/sockbind.c} \end{minipage} \normalsize - \caption{Il codice della funzione \func{sockbind}.} + \caption{Il codice della funzione \texttt{sockbind}.} \label{fig:sockbind_code} \end{figure} -La seconda funzione di ausilio è \func{sockbind}, il cui corpo principale è +La seconda funzione di ausilio è \texttt{sockbind}, il cui corpo principale è riportato in fig.~\ref{fig:sockbind_code} (al solito il sorgente completo è nel file \file{sockbind.c} dei sorgenti allegati alla guida). Come si può -notare la funzione è del tutto analoga alla precedente \func{sockconn}, e +notare la funzione è del tutto analoga alla precedente \texttt{sockconn}, e prende gli stessi argomenti, però invece di eseguire una connessione con \func{connect} si limita a chiamare \func{bind} per collegare il socket ad una porta. @@ -1806,16 +1807,16 @@ passare un valore \val{NULL} come valore per l'argomento \var{host}; l'uso del valore \const{AI\_PASSIVE} serve ad ottenere il valore generico nella rispettiva struttura degli indirizzi. -Come già detto la funzione è analoga a \func{sockconn} ed inizia azzerando ed -inizializzando (\texttt{\small 6-11}) opportunamente la struttura \var{hint} -con i valori ricevuti come argomenti, soltanto che in questo caso si è usata -(\texttt{\small 8}) una impostazione specifica dei flag di \var{hint} usando -\const{AI\_PASSIVE} per indicare che il socket sarà usato per una apertura -passiva. Per il resto la chiamata (\texttt{\small 12-18}) a \func{getaddrinfo} -e ed il ciclo principale (\texttt{\small 20--42}) sono identici, solo che si è -sostituita (\texttt{\small 31}) la chiamata a \func{connect} con una chiamata -a \func{bind}. Anche la conclusione (\texttt{\small 43--44}) della funzione è -identica. +Come già detto la funzione è analoga a \texttt{sockconn} ed inizia azzerando +ed inizializzando (\texttt{\small 6-11}) opportunamente la struttura +\var{hint} con i valori ricevuti come argomenti, soltanto che in questo caso +si è usata (\texttt{\small 8}) una impostazione specifica dei flag di +\var{hint} usando \const{AI\_PASSIVE} per indicare che il socket sarà usato +per una apertura passiva. Per il resto la chiamata (\texttt{\small 12-18}) a +\func{getaddrinfo} e ed il ciclo principale (\texttt{\small 20--42}) sono +identici, solo che si è sostituita (\texttt{\small 31}) la chiamata a +\func{connect} con una chiamata a \func{bind}. Anche la conclusione +(\texttt{\small 43--44}) della funzione è identica. Si noti come anche in questo caso si siano inserite le stampe degli errori sullo standard error, nonostante la funzione possa essere invocata da un @@ -1838,7 +1839,7 @@ Con l'uso di questa funzione si può modificare anche il codice del nostro server \textit{echo}, che rispetto a quanto illustrato nella versione iniziale di fig.~\ref{fig:TCP_echo_server_first_code} viene modificato nella forma riportata in fig.~\ref{fig:TCP_echod_third}. In questo caso il socket su cui -porsi in ascolto viene ottenuto (\texttt{\small 15--18}) da \func{sockbind} +porsi in ascolto viene ottenuto (\texttt{\small 15--18}) da \texttt{sockbind} che si cura anche della eventuale risoluzione di un indirizzo specifico sul quale si voglia far ascoltare il server. @@ -2505,9 +2506,9 @@ eventuali pacchetti rimasti intrappolati in una precedente connessione possano finire fra quelli di una nuova. Come esempio di uso di questa connessione abbiamo predisposto una nuova -versione della funzione \func{sockbind} (vedi fig.~\ref{fig:sockbind_code}) +versione della funzione \texttt{sockbind} (vedi fig.~\ref{fig:sockbind_code}) che consenta l'impostazione di questa opzione. La nuova funzione è -\func{sockbindopt}, e le principali differenze rispetto alla precedente sono +\texttt{sockbindopt}, e le principali differenze rispetto alla precedente sono illustrate in fig.~\ref{fig:sockbindopt_code}, dove si sono riportate le sezioni di codice modificate rispetto alla versione precedente. Il codice completo della funzione si trova, insieme alle altre funzioni di servizio dei @@ -2520,8 +2521,8 @@ guida. \includecodesample{listati/sockbindopt.c} \end{minipage} \normalsize - \caption{Le sezioni della funzione \func{sockbindopt} modificate rispetto al - codice della precedente \func{sockbind}.} + \caption{Le sezioni della funzione \texttt{sockbindopt} modificate rispetto al + codice della precedente \texttt{sockbind}.} \label{fig:sockbindopt_code} \end{figure} @@ -2555,7 +2556,7 @@ valore, per cui in tal caso la successiva chiamata (\texttt{\small 13-17}) a \end{minipage} \normalsize \caption{Il nuovo codice per l'apertura passiva del server \textit{echo} che - usa la nuova funzione \func{sockbindopt}.} + usa la nuova funzione \texttt{sockbindopt}.} \label{fig:TCP_echod_fifth} \end{figure} @@ -2772,9 +2773,9 @@ file. \const{IP\_RECVERR} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Abilita la gestione degli errori.\\ \const{IP\_MTU\_DISCOVER} &$\bullet$&$\bullet$& &\texttt{int}& - Imposta il Path MTU \itindex{Maximum~Transfer~Unit} Discovery.\\ + Imposta il Path MTU \itindex{Maximum~Transfer~Unit~(MTU)} Discovery.\\ \const{IP\_MTU} &$\bullet$& & &\texttt{int}& - Legge il valore attuale della \itindex{Maximum~Transfer~Unit} MTU.\\ + Legge il valore attuale della \itindex{Maximum~Transfer~Unit~(MTU)} MTU.\\ \const{IP\_ROUTER\_ALERT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Imposta l'opzione \textit{IP router alert} sui pacchetti.\\ \const{IP\_MULTICAST\_TTL} &$\bullet$&$\bullet$& &\texttt{int}& @@ -2946,7 +2947,7 @@ sez.~\ref{sec:net_sendmsg}). come valore logico e non è applicabile a socket di tipo \const{SOCK\_STREAM}. -\itindbeg{Maximum~Transfer~Unit} +\itindbeg{Maximum~Transfer~Unit~(MTU)} \item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel della serie 2.2.x, ed è specifica di Linux. L'opzione permette di scrivere o leggere le impostazioni della modalità usata per la determinazione della @@ -2984,12 +2985,11 @@ sez.~\ref{sec:net_sendmsg}). ricerca è disabilitata ed è responsabilità del programma creare pacchetti di dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se l'opzione viene abilitata, il kernel si incaricherà di tenere traccia - automaticamente della \itindex{Maximum~Transfer~Unit} \textit{Path MTU} - verso ciascuna destinazione, e rifiuterà immediatamente la trasmissione di - pacchetti di dimensioni maggiori della MTU con un errore di - \errval{EMSGSIZE}.\footnote{in caso contrario la trasmissione del pacchetto - sarebbe effettuata, ottenendo o un fallimento successivo della - trasmissione, o la frammentazione dello stesso.} + automaticamente della \textit{Path MTU} verso ciascuna destinazione, e + rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori + della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la + trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento + successivo della trasmissione, o la frammentazione dello stesso.} \item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU} di percorso del socket. L'opzione richiede per \param{optval} un intero che @@ -3003,15 +3003,15 @@ sez.~\ref{sec:net_sendmsg}). esplicitamente connesso con \func{connect}. Ad esempio con i socket UDP si potrà ottenere una stima iniziale della - \itindex{Maximum~Transfer~Unit} \textit{Path MTU} eseguendo prima una - \func{connect} verso la destinazione, e poi usando \func{getsockopt} con - questa opzione. Si può anche avviare esplicitamente il procedimento di - scoperta inviando un pacchetto di grosse dimensioni (che verrà scartato) e - ripetendo l'invio coi dati aggiornati. Si tenga infine conto che durante il - procedimento i pacchetti iniziali possono essere perduti, ed è compito - dell'applicazione gestirne una eventuale ritrasmissione. + \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione, + e poi usando \func{getsockopt} con questa opzione. Si può anche avviare + esplicitamente il procedimento di scoperta inviando un pacchetto di grosse + dimensioni (che verrà scartato) e ripetendo l'invio coi dati aggiornati. Si + tenga infine conto che durante il procedimento i pacchetti iniziali possono + essere perduti, ed è compito dell'applicazione gestirne una eventuale + ritrasmissione. -\itindend{Maximum~Transfer~Unit} +\itindend{Maximum~Transfer~Unit~(MTU)} \item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i kernel della serie 2.2.x, ed è specifica di Linux. Prende per @@ -3074,6 +3074,9 @@ sez.~\ref{sec:net_sendmsg}). del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni. +% TODO chiarire quale è la struttura \struct{ip\_mreq} + + \itindend{multicast} \end{basedescript} @@ -3122,7 +3125,7 @@ strutture collegate all'uso delle opzioni TCP sono definite in \const{TCP\_NODELAY} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Spedisce immediatamente i dati in segmenti singoli.\\ \const{TCP\_MAXSEG} &$\bullet$&$\bullet$& &\texttt{int}& - Valore della \itindex{Maximum~Segment~Size} MSS per i segmenti in + Valore della \itindex{Maximum~Segment~Size~(MSS)} MSS per i segmenti in uscita.\\ \const{TCP\_CORK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Accumula i dati in un unico segmento.\\ @@ -3198,13 +3201,14 @@ quantità di dettagli è fornita nel seguente elenco: kernel 2.5.71.} \item[\const{TCP\_MAXSEG}] con questa opzione si legge o si imposta il valore - della \itindex{Maximum~Segment~Size} MSS (\textit{Maximum~Segment~Size}, - vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:tcp_protocol_xxx}) dei - segmenti TCP uscenti. Se l'opzione è impostata prima di stabilire la - connessione, si cambia anche il valore della \itindex{Maximum~Segment~Size} - MSS annunciata all'altro capo della connessione. Se si specificano valori - maggiori della \itindex{Maximum~Transfer~Unit} MTU questi verranno ignorati, - inoltre TCP imporrà anche i suoi limiti massimo e minimo per questo valore. + della \itindex{Maximum~Segment~Size~(MSS)} MSS + (\textit{Maximum~Segment~Size}, vedi sez.~\ref{sec:net_lim_dim} e + sez.~\ref{sec:tcp_protocol_xxx}) dei segmenti TCP uscenti. Se l'opzione è + impostata prima di stabilire la connessione, si cambia anche il valore della + \itindex{Maximum~Segment~Size~(MSS)} MSS annunciata all'altro capo della + connessione. Se si specificano valori maggiori della + \itindex{Maximum~Transfer~Unit~(MTU)} MTU questi verranno ignorati, inoltre + TCP imporrà anche i suoi limiti massimo e minimo per questo valore. \item[\const{TCP\_CORK}] questa opzione è il complemento naturale di \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione @@ -3573,7 +3577,7 @@ identificano le operazioni sono le seguenti: \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul socket, questa operazione può essere utilizzata per effettuare delle misurazioni precise del tempo di andata e ritorno\footnote{il - \itindex{Round~Trip~Time} \textit{Round Trip Time} cui abbiamo già + \itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time} cui abbiamo già accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete. \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group} @@ -3739,11 +3743,11 @@ sono le seguenti: non ancora implementato, restituisce un errore di \errval{EOPNOTSUPP}. \item[\const{SIOCGIFMTU}] permette di leggere il valore della - \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del + \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Maximum Transfer Unit} del dispositivo nel campo \var{ifr\_mtu}. \item[\const{SIOCSIFMTU}] permette di impostare il valore della - \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del + \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Maximum Transfer Unit} del dispositivo al valore specificato campo \var{ifr\_mtu}. L'operazione è privilegiata, e si tenga presente che impostare un valore troppo basso può causare un blocco del kernel. @@ -4177,19 +4181,20 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: \item[\sysctlrelfile{net/ipv4}{ip\_no\_pmtu\_disc}] permette di disabilitare per i socket \const{SOCK\_STREAM} la ricerca automatica della - \itindex{Maximum~Transfer~Unit} \textit{Path MTU} (vedi + \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Path MTU} (vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}). Prende un valore logico, e di default è disabilitato (cioè la ricerca viene eseguita). In genere si abilita questo parametro quando per qualche motivo il - procedimento del \itindex{Maximum~Transfer~Unit} \textit{Path MTU discovery} - fallisce; dato che questo può avvenire a causa di router\footnote{ad - esempio se si scartano tutti i pacchetti ICMP, il problema è affrontato - anche in sez.~3.4.4 di \cite{SGL}.} o interfacce\footnote{ad esempio se i - due capi di un collegamento \textit{point-to-point} non si accordano sulla - stessa MTU.} mal configurati è opportuno correggere le configurazioni, - perché disabilitare globalmente il procedimento con questo parametro ha - pesanti ripercussioni in termini di prestazioni di rete. + procedimento del \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Path MTU + discovery} fallisce; dato che questo può avvenire a causa di + router\footnote{ad esempio se si scartano tutti i pacchetti ICMP, il + problema è affrontato anche in sez.~3.4.4 di \cite{SGL}.} o + interfacce\footnote{ad esempio se i due capi di un collegamento + \textit{point-to-point} non si accordano sulla stessa MTU.} mal + configurati è opportuno correggere le configurazioni, perché disabilitare + globalmente il procedimento con questo parametro ha pesanti ripercussioni in + termini di prestazioni di rete. \item[\sysctlrelfile{net/ipv4}{ip\_always\_defrag}] fa si che tutti i pacchetti IP frammentati siano riassemblati, anche in caso in successivo @@ -4255,12 +4260,13 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: negativo. Il default è 2 che significa che al buffer dell'applicazione viene riservato un quarto del totale. -\item[\sysctlrelfile{net/ipv4}{tcp\_app\_win}] indica la frazione - della finestra TCP che viene riservata per gestire l'overhaed dovuto alla +\item[\sysctlrelfile{net/ipv4}{tcp\_app\_win}] indica la frazione della + finestra TCP che viene riservata per gestire l'overhaed dovuto alla bufferizzazione. Prende un valore valore intero che consente di calcolare la - dimensione in byte come il massimo fra la \itindex{Maximum~Segment~Size} - MSS e $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa - che non viene riservato nessuno spazio; il valore di default è 31. + dimensione in byte come il massimo fra la + \itindex{Maximum~Segment~Size~(MSS)} MSS e + $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa che + non viene riservato nessuno spazio; il valore di default è 31. % vecchi, presumibilmente usati quando gli algoritmi di congestione non erano % modularizzabili @@ -4633,7 +4639,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % LocalWords: ERANGE sethostent stayopen endhostent gethostbyaddr order pton % LocalWords: getipnodebyname getipnodebyaddr flags num MAPPED ALL ADDRCONFIG % LocalWords: freehostent ip getXXXbyname getXXXbyaddr servent getservbyname -% LocalWords: getservbyaddr netent getnetbyname getnetbyaddr protoent smtp udp +% LocalWords: netent getnetbyname getnetbyaddr protoent smtp udp % LocalWords: getprotobyname getprotobyaddr getservbyport port tcp setservent % LocalWords: getservent endservent setXXXent getXXXent endXXXent gethostent % LocalWords: setnetent getnetent endnetent setprotoent getprotoent POSIX RFC