From 5c58ac0a6f0d4c69bf437bf57dc950a86891e914 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 25 Apr 2006 15:00:07 +0000 Subject: [PATCH] Altro materiale su sysctl e ioctl dei socket. --- sockctrl.tex | 132 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 97 insertions(+), 35 deletions(-) diff --git a/sockctrl.tex b/sockctrl.tex index c21547d..40a0474 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -3064,18 +3064,41 @@ processo che riceve i segnali) che si effettuano chiamando \func{ioctl} con \const{SIOCGPGRP} e \const{SIOCSPGRP}. -\subsection{L'uso di \func{ioctl} per i socket IP} +\subsection{L'uso di \func{ioctl} per i socket TCP e UDP} \label{sec:sock_ioctl_IP} -Oltre alle caratteristiche che si possono impostare per i socket generici, ci -sono operazioni specifiche valide per i socket IP, e per gli altri -protocolli. - - -\subsection{L'uso di \func{ioctl} per i socket TCP e UDP} -\label{sec:sock_ioctl_TCP_UDP} +Oltre alle caratteristiche che si possono impostare per i socket generici, la +funzione \func{ioctl} consente di effettuare alcune operazioni specifiche per +i socket UDP e TCP. Non esistono operazioni specifiche per i socket IP +generici, mentre per i pacchetti di altri protocolli trasportati su IP, +qualora li si gestisca attraverso dei socket, si dovrà fare riferimento +direttamente all'eventuale supporto presente per il tipo di socket usato (ad +esempio si possono ricevere pacchetti ICMP con socket di tipo \texttt{raw}, +nel qual caso si dovrà fare riferimento alle operazioni di quest'ultimo). + +Le operazioni di controllo disponibili per i socket TCP, come illustrate dalla +relativa pagina di manuale, accessibile con \texttt{man 7 tcp}, prevedono come +possibile valore per il secondo argomento della funzione le costanti +illustrate nell'elenco seguente; il terzo argomento della funzione, gestito +come \itindex{value~result~argument} \textit{value result argument}, deve +essere sempre il puntatore ad una variabile di tipo \ctyp{int}: +\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\item[\const{SIOCINQ}] +\item[\const{SIOCATMARK}] +\item[\const{SIOCOUTQ}] +\end{basedescript} +Le operazioni di controllo disponibili per i socket UDP, come illustrate dalla +relativa pagina di manuale, accessibile con \texttt{man 7 udp}, sono quelle +indicate nelle costanti del seguente elenco; come per i socket TCP il terzo +argomento viene gestito come \itindex{value~result~argument} \textit{value + result argument} e deve essere un puntatore ad una variabile di tipo +\ctyp{int}: +\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\item[\const{FIONREAD}] +\item[\const{TIOCOUTQ}] +\end{basedescript} @@ -3090,7 +3113,6 @@ funzionalit \texttt{/proc}, le tratteremo attraverso i file presenti in quest'ultimo. - \subsection{L'uso di \func{sysctl} e \texttt{/proc} per le proprietà della rete} \label{sec:sock_sysctl} @@ -3143,7 +3165,7 @@ corrispondenti ai parametri generici validi per tutti i socket. Quelli descritti anche nella pagina di manuale, accessibile con \texttt{man 7 socket} sono i seguenti: -\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} \item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di lettura (cioè per i dati in ingresso) dei socket. \item[\texttt{rmem\_max}] imposta la dimensione massima che si può assegnare al @@ -3154,14 +3176,39 @@ sono i seguenti: \item[\texttt{wmem\_max}] imposta la dimensione massima che si può assegnare al buffer di uscita dei socket attraverso l'uso dell'opzione \const{SO\_SNDBUF}. -\item[\texttt{message\_cost}, \texttt{message\_burst}] impostano i valori - delle impostazioni del \itindex{bucket~filter} \textit{bucket filter} - (rispettivamente flusso a regime e dimensione di picchi di emissione) che - limita l'ammontare dei messaggi di avvertimento inviati dal kernel a causa - di eventi esterni sulla rete. -% TODO: spiegare il bucket filter e questa opzione +\item[\texttt{message\_cost}, \texttt{message\_burst}] contengono le + impostazioni del \itindex{bucket~filter} \textit{bucket filter} che + controlla l'emissione di messaggi di avviso da parte kernel per eventi + relativi a problemi sulla rete, imponendo un limite che consente di + prevenire eventuali attacchi di \itindex{Denial~of~Service~(DoS)} + \textit{Denial of Service} usando i log.\footnote{senza questo limite un + attaccante potrebbe inviare ad arte un traffico che generi + intenzionalmente messaggi di errore, per saturare il sistema dei log.} + + Il \itindex{bucket~filter} \textit{bucket filter} è un algoritmo generico + che permette di impostare dei limiti di flusso su una quantità\footnote{uno + analogo viene usato nel \index{netfilter} \textit{netfilter} per imporre + dei limiti sul flusso dei pacchetti.} senza dovere eseguire medie + temporali, che verrebbero a dipendere in misura non controllabile dalla + dimensione dell'intervallo su cui si media e dalla distribuzione degli + eventi;\footnote{in caso di un picco di flusso (il cosiddetto + \textit{burst}) il flusso medio verrebbe a dipendere in maniera esclusiva + dalla dimensione dell'intervallo di tempo su cui calcola la media.} in + questo caso si definisce la dimensione di un ``\textsl{bidone}'' (il + \textit{bucket}) e del flusso che da esso può uscire, la presenza di una + dimensione iniziale consente di assorbire eventuali picchi di emissione, + l'aver fissato un flusso di uscita garantisce che a regime questo sarà il + valore medio del flusso ottenibile dal \textit{bucket}. + + I due valori indicano rispettivamente il flusso a regime (non sarà inviato + più di un messaggio per il numero di secondi specificato da + \texttt{message\_cost}) e la dimensione iniziale per in caso di picco di + emissione (verranno accettati inizialmente fino ad un massimo di + \texttt{message\_cost/message\_burst} messaggi). + \item[\texttt{netdev\_max\_backlog}] numero massimo di pacchetti che possono essere contenuti nella coda di ingresso generale. + \item[\texttt{optmem\_max}] lunghezza massima dei dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}). \end{basedescript} @@ -3170,16 +3217,24 @@ Oltre a questi nella directory \texttt{/proc/sys/net/core} si trovano altri file, la cui documentazione dovrebbe essere mantenuta nei sorgenti del kernel, nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di questi però non è documentato: -\begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}} -\item[\texttt{dev\_weight}] non documentato. +\begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}} +\item[\texttt{dev\_weight}] blocco di lavoro (\textit{work quantum}) dello + scheduler di processo dei pacchetti. % TODO da documentare meglio -\item[\texttt{lo\_cong}] non documentato. +\item[\texttt{lo\_cong}] valore per l'occupazione della coda di ricezione + sotto la quale si considera di avere una bassa congestione. -\item[\texttt{mod\_cong}] non documentato. +\item[\texttt{mod\_cong}] valore per l'occupazione della coda di ricezione + sotto la quale si considera di avere una congestione moderata. -\item[\texttt{no\_cong}] non documentato. +\item[\texttt{no\_cong}] valore per l'occupazione della coda di ricezione + sotto la quale si si considera di non avere congestione. -\item[\texttt{no\_cong\_thresh}] non documentato. +\item[\texttt{no\_cong\_thresh}] valore minimo (\textit{low water mark}) per + il riavvio dei dispositivi congestionati. + +%\item[\texttt{netdev\_fastroute}] è presente soltanto quando si è compilato il +% kernel con l'apposita opzione di ottimizzazione per l'uso come router (. \item[\texttt{somaxconn}] imposta la dimensione massima del \textit{backlog} della funzione \func{listen} (vedi sez.~\ref{sec:TCP_func_listen}), e @@ -3195,9 +3250,8 @@ questi per Nella directory \texttt{/proc/sys/net/ipv4} sono presenti i file che corrispondono ai parametri dei socket che usano il protocollo IPv4, relativi quindi sia alle caratteristiche di IP, che a quelle degli altri protocolli che -vengono usati all'interno di quest'ultimo (come ICMP, TCP e UDP). Nella -stessa directory sono presenti altri file che consentono anche di gestire le -altre funzionalità generiche dei vari protocolli. +vengono usati all'interno di quest'ultimo (come ICMP, TCP e UDP) o a fianco +dello stesso (come ARP). I file che consentono di controllare le caratteristiche specifiche del protocollo IP in quanto tale, descritti anche nella pagina di manuale @@ -3206,12 +3260,12 @@ accessibile con \texttt{man 7 ip}, sono i seguenti: \item[\texttt{ip\_default\_ttl}] imposta il valore di default per il campo TTL (vedi sez.~\ref{sec:IP_header}) di tutti i pacchetti uscenti. Il valore può - essere modificato per il singolo socket con l'opzione - \const{IP\_TTL}. Prende un valore intero. + essere modificato per il singolo socket con l'opzione \const{IP\_TTL}. + Prende un valore intero. \item[\texttt{ip\_forward}] abilita l'inoltro dei pacchetti da una interfaccia - ad un altra, e può essere impostato anche per la singola - interfaccia. Prende un valore logico (0 disabilita, diverso da zero abilita). + ad un altra, e può essere impostato anche per la singola interfaccia. Prende + un valore logico (0 disabilita, diverso da zero abilita). \item[\texttt{ip\_dynaddr}] Abilita la riscrittura automatica degli indirizzi associati ad un socket quando una interfaccia cambia indirizzo. Viene usato @@ -3220,7 +3274,8 @@ accessibile con \texttt{man 7 ip}, sono i seguenti: valore nullo disabilita la funzionalità, con 1 la si abilita, con 2 la si abilità in modalità \textsl{prolissa}. -\item[\texttt{ip\_autoconfig}] non documentato +\item[\texttt{ip\_autoconfig}] Specifica se l'indirizzo IP è stato configurato + automaticamente via DHCP, BOOTP o RARP. \item[\texttt{ip\_local\_port\_range}] imposta l'intervallo dei valori usati per l'assegnazione delle porte effimere, permette cioè di modificare i @@ -3252,15 +3307,21 @@ accessibile con \texttt{man 7 ip}, sono i seguenti: di compilazione del kernel con l'opzione \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} -\item[\texttt{neigh/*}] La directory contiene i valori +\item[\texttt{ip\_nonlocal\_bind}] se abilitato (prende un intero come valore + logico) è possibile che una applicazione possa collegarsi (con \func{bind} + su un indirizzo non locale. Questo può risultare utile per applicazioni + particolari (come gli \textit{sniffer}) che hanno la necessità di ricevere + pacchetti anche non diretti agli indirizzi presenti sulla macchina, ad + esempio per intercettare il traffico per uno specifico indirizzo che si + vuole tenere sotto controllo. +% \item[\texttt{neigh/*}] La directory contiene i valori +% TODO trattare neigh/* nella parte su arp, da capire dove sarà. \end{basedescript} -I parametri specifici - % LocalWords: socket sez dotted decimal resolver Domain Name Service cap DNS % LocalWords: client fig LDAP Lightweight Access Protocol NIS Information Sun @@ -3321,5 +3382,6 @@ I parametri specifici %%% mode: latex %%% TeX-master: "gapil" %%% End: -% LocalWords: quest'ultime neigh dev weight cong mod somaxconn Di -% LocalWords: Documentation +% LocalWords: quest'ultime neigh dev weight cong mod somaxconn Di SIOCINQ DoS +% LocalWords: Documentation SIOCATMARK SIOCOUTQ FIONREAD TIOCOUTQ Denial work +% LocalWords: netfilter scheduler mark ARP DHCP BOOTP RARP nonlocal sniffer -- 2.30.2