From bf30b22885daaa31ef38bec56eccfb7bf33f5bd1 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sat, 7 Oct 2006 16:10:44 +0000 Subject: [PATCH] Altre note sulle ''sysctl'', ed alcune correzioni alla appendice sul livello di rete che giace in uno stato penoso. --- netlayer.tex | 206 +++++++++++++++++++++++++++++---------------------- sockctrl.tex | 26 +++++-- tcpsock.tex | 2 +- 3 files changed, 137 insertions(+), 97 deletions(-) diff --git a/netlayer.tex b/netlayer.tex index 39eafed..9911d78 100644 --- a/netlayer.tex +++ b/netlayer.tex @@ -46,7 +46,6 @@ pi Il compito principale di IP è quello di trasmettere i pacchetti da un computer all'altro della rete; le caratteristiche essenziali con cui questo viene realizzato in IPv4 sono due: - \begin{itemize} \item \textit{Universal addressing} la comunicazione avviene fra due host identificati univocamente con un indirizzo a 32 bit che può appartenere ad @@ -54,7 +53,7 @@ realizzato in IPv4 sono due: \item \textit{Best effort} viene assicurato il massimo impegno nella trasmissione, ma non c'è nessuna garanzia per i livelli superiori né sulla percentuale di successo né sul tempo di consegna dei pacchetti di - dati. + dati, né sull'ordine in cui vengono consegnati. \end{itemize} Per effettuare la comunicazione e l'instradamento dei pacchetti fra le varie @@ -65,16 +64,16 @@ ai router per stabilire a quale rete il pacchetto deve essere inviato, il numero di host indica la macchina di destinazione finale all'interno di detta rete. -Per garantire l'unicità dell'indirizzo Internet esiste un'autorità -centrale (la IANA, \textit{Internet Assigned Number Authority}) che assegna i -numeri di rete alle organizzazioni che ne fanno richiesta; è poi compito di -quest'ultime assegnare i numeri dei singoli host. - -Per venire incontro alle diverse esigenze gli indirizzi di rete erano stati -originariamente organizzati all'interno delle cosiddette \textit{classi}, -(rappresentate in tab.~\ref{tab:IP_ipv4class}), per consentire dispiegamenti -di reti di dimensioni diverse. +Per garantire l'unicità dell'indirizzo Internet esiste un'autorità centrale +(la IANA, \textit{Internet Assigned Number Authority}) che assegna i numeri di +rete alle organizzazioni che ne fanno richiesta; è poi compito di quest'ultime +assegnare i numeri dei singoli host all'interno della propria rete. +Per venire incontro alle richieste dei vari enti e organizzazioni che volevano +utilizzare questo protocollo di comunicazione, originariamente gli indirizzi +di rete erano stati suddivisi all'interno delle cosiddette \textit{classi}, +(rappresentate in tab.~\ref{tab:IP_ipv4class}), in modo da consentire +dispiegamenti di reti di varie dimensioni a seconda delle diverse esigenze. \begin{table}[htb] \centering @@ -148,15 +147,20 @@ di reti di dimensioni diverse. \label{tab:IP_ipv4class} \end{table} -Le classi usate per il dispiegamento delle reti su quella che comunemente -viene chiamata \textit{Internet} sono le prime tre; la classe D è destinata al -(non molto usato) \itindex{multicast} \textit{multicast} mentre la classe E è +Le classi di indirizzi usate per il dispiegamento delle reti su quella che +comunemente viene chiamata \textit{Internet} sono le prime tre; la classe D è +destinata al \itindex{multicast} \textit{multicast} mentre la classe E è riservata per usi sperimentali e non viene impiegata. Come si può notare però la suddivisione riportata in tab.~\ref{tab:IP_ipv4class} è largamente inefficiente in quanto se ad un utente necessita anche solo un indirizzo in più dei 256 disponibili con una -classe A occorre passare a una classe B, con un conseguente spreco di numeri. +classe A occorre passare a una classe B, che ne prevede 65536,\footnote{in + realtà i valori esatti sarebbero 254 e 65536, una rete con a disposizione + $N$ bit dell'indirizzo IP, ha disponibili per le singole macchine soltanto + $@^N-2$ numeri, dato che uno deve essere utilizzato come indirizzo di rete e + uno per l'indirizzo di \itindex{broadcast}\textit{broadcast}.} con un +conseguente spreco di numeri. Inoltre, in particolare per le reti di classe C, la presenza di tanti indirizzi di rete diversi comporta una crescita enorme delle tabelle di @@ -201,11 +205,85 @@ rete o suddividere una classe B e diminuendo al contempo il numero di indirizzi di rete da inserire nelle tabelle di instradamento dei router. - - \subsection{L'intestazione di IP} \label{sec:IP_header} +Come illustrato in fig.~\ref{fig:net_tcpip_data_flux} (si ricordi quanto detto +in sez.~\ref{sec:net_tcpip_overview} riguardo al funzionamento generale del +TCP/IP), per eseguire il suo compito il protocollo IP inserisce (come +praticamente ogni protocollo di rete) una opportuna intestazione in cima ai +dati che deve trasmettere, la cui schematizzazione è riportata in +fig.~\ref{fig:IP_ipv4_head}. + +\begin{figure}[htb] + \centering + \includegraphics[width=10cm]{img/ipv4_head} + \caption{L'intestazione o \textit{header} di IPv4.} + \label{fig:IP_ipv4_head} +\end{figure} + +Ciascuno dei campi illustrati in fig.~\ref{fig:IP_ipv4_head} ha un suo preciso +scopo e significato, che si è riportato brevemente in +tab.~\ref{tab:IP_ipv4field}; si noti come l'intestazione riporti sempre due +indirizzi IP, quello \textsl{sorgente}, che indica l'IP da cui è partito il +pacchetto (cioè l'indirizzo assegnato alla macchina che lo spedisce) e quello +\textsl{destinazione} che indica l'indirizzo a cui deve essere inviato il +pacchetto (cioè l'indirizzo assegnato alla macchina che lo riceverà). + +\begin{table}[!hbt] + \footnotesize + \begin{center} + \begin{tabular}{|l|c|p{10cm}|} + \hline + \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\ + \hline + \hline + \textit{version} & 4& numero di \textsl{versione}, nel caso + specifico vale sempre 4.\\ + \textit{head length} & 4& lunghezza dell'intestazione, + in multipli di 32 bit.\\ + \textit{type of service}&8& \textsl{tipo di servizio}, è suddiviso in: + 3 bit di precedenza, che nelle attuali + implementazioni del protocollo non vengono + comunque utilizzati; un bit riservato che + deve essere mantenuto a 0; 4 bit che + identificano il tipo di servizio + richiesto, uno solo dei quali può essere + attivo.\\ + \textit{total length} &16& \textsl{lunghezza totale}, indica + la dimensione del carico di dati del + pacchetto IP in byte.\\ + \textit{identification}&16& \textsl{identificazione}, assegnato alla + creazione, è aumentato di uno all'origine + della trasmissione di ciascun pacchetto, ma + resta lo stesso per i pacchetti + frammentati, consentendo così di + identificare quelli che derivano dallo + stesso pacchetto originario.\\ + \textit{flag} & 3& \textsl{flag}, sono nell'ordine: il primo è + riservato e sempre nullo, il secondo indica + se il pacchetto non può essere frammentato, + il terzo se ci sono ulteriori frammenti.\\ + \textit{fragmentation offset}&13& \textsl{offset di frammento}, indica + la posizione del frammento rispetto al + pacchetto originale.\\ + \textit{time to live} &16& \textsl{tempo di vita}, è decrementato di + uno ogni volta che un router ritrasmette il + pacchetto, se arriva a zero il pacchetto + viene scartato.\\ + \textit{protocol} & 8& \textsl{protocollo}, identifica il tipo di + pacchetto che segue l'intestazione di IPv4.\\ + \textit{header checksum}&16&\textsl{checksum di intestazione}, somma di + controllo per l'intestazione.\\ + \textit{source IP} &32& \textsl{indirizzo di origine}.\\ + \textit{destination IP}&32& \textsl{indirizzo di destinazione}.\\ + \hline + \end{tabular} + \caption{Legenda per il significato dei campi dell'intestazione di IPv4} + \label{tab:IP_ipv4field} + \end{center} +\end{table} + Il campo TOS definisce il cosiddetto \textit{Type of Service}; questo permette di definire il tipo di traffico contenuto nei pacchetti, e può essere @@ -400,27 +478,28 @@ numero dei campi da 12 a 8. \footnotesize \begin{tabular}{|l|c|p{8cm}|} \hline - \textbf{Nome} & \textbf{Lunghezza} & \textbf{Significato} \\ + \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\ \hline \hline - \textit{version} & 4 bit & - \textsl{versione}, nel caso specifico vale sempre 6\\ - \textit{priority} & 4 bit & - \textsl{priorità}, vedi sez.~\ref{sec:prio} \\ - \textit{flow label} & 24 bit & - \textsl{etichetta di flusso}, vedi sez.~\ref{sec:IP_ipv6_flow}\\ - \textit{payload length} & 16 bit & - \textsl{lunghezza del carico}, cioè del corpo dei dati che segue - l'intestazione, in byte. \\ - \textit{next header} & 8 bit & \textsl{intestazione successiva}, - identifica il tipo di pacchetto che segue l'intestazione di IPv6, usa - gli stessi valori del campo protocollo nell'intestazione di IPv4\\ - \textit{hop limit} & 8 bit & \textsl{limite di salti}, - stesso significato del \textit{time to live} nell'intestazione di IPv4, - è decrementato di uno ogni volta che un nodo ritrasmette il - pacchetto, se arriva a zero il pacchetto viene scartato \\ - \textit{source IP} & 128 bit & \textsl{indirizzo di origine} \\ - \textit{destination IP}& 128 bit & \textsl{indirizzo di destinazione}\\ + \textit{version} & 4& \textsl{versione}, nel caso specifico vale + sempre 6.\\ + \textit{priority} & 4& \textsl{priorità}, vedi + sez.~\ref{sec:IPv6_prio}.\\ + \textit{flow label} &24& \textsl{etichetta di flusso}, vedi + sez.~\ref{sec:IP_ipv6_flow}.\\ + \textit{payload length}&16& \textsl{lunghezza del carico}, cioè del + corpo dei dati che segue l'intestazione, in + byte. \\ + \textit{next header} & 8& \textsl{intestazione successiva}, identifica + il tipo di pacchetto che segue + l'intestazione di IPv6, usa gli stessi + valori del campo protocollo + nell'intestazione di IPv4.\\ + \textit{hop limit} & 8& \textsl{limite di salti}, stesso significato + del \textit{time to live} nell'intestazione + di IPv4.\\ + \textit{source IP} &128&\textsl{indirizzo di origine}.\\ + \textit{destination IP}&128&\textsl{indirizzo di destinazione}.\\ \hline \end{tabular} \caption{Legenda per il significato dei campi dell'intestazione di IPv6} @@ -468,59 +547,6 @@ differenze: di dati per i quali si può provvedere un trattamento speciale. \end{itemize} - -\begin{figure}[htb] - \centering - \includegraphics[width=10cm]{img/ipv4_head} - \caption{L'intestazione o \textit{header} di IPv4.} - \label{fig:IP_ipv4_head} -\end{figure} - -\begin{table}[htb] - \footnotesize - \begin{center} - \begin{tabular}{|l|c|p{9cm}|} - \hline - \textbf{Nome} & \textbf{Bit} & \textbf{Significato} \\ - \hline - \hline - \textit{version} & 4 & \textsl{versione}, nel caso - specifico vale sempre 4\\ - \textit{head length} & 4 &\textsl{lunghezza dell'intestazione}, - in multipli di 32 bit\\ - \textit{type of service} & 8 & \textsl{tipo di servizio}, - consiste in: 3 bit di precedenza, - correntemente ignorati; un bit non usato a 0; 4 bit che identificano - il tipo di servizio richiesto, uno solo dei quali può essere 1\\ - \textit{total length} & 16 & \textsl{lunghezza totale}, indica - la dimensione del pacchetto IP in byte\\ - \textit{identification} & 16 & \textsl{identificazione}, - assegnato alla creazione, è aumentato di uno all'origine della - trasmissione di ciascun pacchetto, ma resta lo stesso per i - pacchetti frammentati\\ - \textit{flag} & 3 & - \textsl{flag} bit di frammentazione, uno indica se un - pacchetto è frammentato, un altro se ci sono ulteriori frammenti, e - un altro se il pacchetto non può essere frammentato. \\ - \textit{fragmentation offset} & 13 & \textsl{offset di frammento}, - indica la posizione del frammento rispetto al pacchetto originale\\ - \textit{time to live} & 16 & \textsl{tempo di vita}, - ha lo stesso significato di - \textit{hop limit}, vedi tab.~\ref{tab:IP_ipv6field}\\ - \textit{protocol} & 8 & \textsl{protocollo} - identifica il tipo di pacchetto che segue - l'intestazione di IPv4\\ - \textit{header checksum} & 16 & \textsl{checksum di intestazione}, - somma di controllo per l'intestazione\\ - \textit{source IP} & 32 & \textsl{indirizzo di origine}\\ - \textit{destination IP} & 32 & \textsl{indirizzo di destinazione}\\ - \hline - \end{tabular} - \caption{Legenda per il significato dei campi dell'intestazione di IPv4} - \label{tab:IP_ipv4field} - \end{center} -\end{table} - Oltre alle differenze precedenti, relative ai singoli campi nell'intestazione, ulteriori caratteristiche che diversificano il comportamento di IPv4 da quello di IPv6 sono le seguenti: @@ -1239,7 +1265,7 @@ rendere utilizzabile un qualunque sottoinsieme dei bit come chiavi di hash per i router. \subsection{Priorità} -\label{sec:prio} +\label{sec:IPv6_prio} Il campo di priorità consente di indicare il livello di priorità dei pacchetti relativamente agli altri pacchetti provenienti dalla stessa diff --git a/sockctrl.tex b/sockctrl.tex index f2eb820..f69597f 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -4021,7 +4021,9 @@ nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di questi però 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 + scheduler di processo dei pacchetti. + +% TODO da documentare meglio \item[\texttt{lo\_cong}] valore per l'occupazione della coda di ricezione sotto la quale si considera di avere una bassa congestione. @@ -4061,9 +4063,17 @@ accessibile con \texttt{man 7 ip}, sono i seguenti: \begin{basedescript}{\desclabelwidth{3.5cm}\desclabelstyle{\nextlinelabel}} \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. + (vedi sez.~\ref{sec:IP_header}) di tutti i pacchetti uscenti, stabilendo + così il numero massimo di router che i pacchetti possono attraversare. Il + valore può essere modificato anche per il singolo socket con l'opzione + \const{IP\_TTL}. Prende un valore intero, ma dato che il campo citato è di + 8 bit hanno senso solo valori fra 0 e 255. Il valore di default è 64, e non + ci normalmente non c'è nessuna necessità di modificarlo,\footnote{l'unico + motivo sarebbe per raggiungere macchine estremamente ``lontane'' in + termini di \textit{hop}, ma è praticamente } aumentare il valore è una + pratica poco gentile, in quanto in caso di problemi di routing si allunga + inutilmente il numero di ritrasmissioni. + \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 @@ -4136,7 +4146,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: connessioni più rapidamente. \item[\texttt{tcp\_adv\_win\_scale}] questo valore indica al kernel quanto - spazio all'interno del buffer associato a un socket deve essere utilizzato + spazio all'interno del buffer associato a un socket (quello impostato con + \texttt{tcp\_rmem}) deve essere utilizzato per la \item[\texttt{tcp\_app\_win}] @@ -4219,7 +4230,10 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \item[\texttt{tcp\_rfc1337}] -\item[\texttt{tcp\_rmem}] + +\item[\texttt{tcp\_rmem}] + + \item[\texttt{tcp\_sack}] \item[\texttt{tcp\_stdurg}] \item[\texttt{tcp\_synack\_retries}] diff --git a/tcpsock.tex b/tcpsock.tex index 2719eaf..e55e06f 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -140,7 +140,7 @@ connessione. Normalmente vengono usate le seguenti opzioni: connessione annuncia all'altro il massimo ammontare di dati che vorrebbe accettare per ciascun segmento nella connessione corrente. È possibile leggere e scrivere questo valore attraverso l'opzione del socket - \const{TCP\_MAXSEG} (vedi sez.~\ref{sec:sock_tcp_udp_options}}). + \const{TCP\_MAXSEG} (vedi sez.~\ref{sec:sock_tcp_udp_options}). \item \textit{window scale option}, il protocollo TCP implementa il controllo di flusso attraverso una \itindex{advertised~window} \textit{advertised -- 2.30.2