l'elenco delle porte assegnate dalla IANA (la \textit{Internet Assigned Number
Authority}) ma l'elenco viene costantemente aggiornato e pubblicato su
internet (una versione aggiornata si può trovare all'indirizzo
-\texttt{ftp://ftp.isi.edu/in-notes/iana/assignements/port-numbers}); inoltre
+\href{ftp://ftp.isi.edu/in-notes/iana/assignements/port-number}
+{\texttt{ftp://ftp.isi.edu/in-notes/iana/assignements/port-numbers}}); inoltre
in un sistema unix-like un analogo elenco viene mantenuto nel file
\file{/etc/services}, con la corrispondenza fra i vari numeri di porta ed il
nome simbolico del servizio. I numeri sono divisi in tre intervalli:
-\begin{enumerate}
-\item \textsl{le porte conosciute}. I numeri da 0 a 1023. Queste sono
- controllate e assegnate dalla IANA. Se è possibile la stessa porta è
- assegnata allo stesso servizio sia su UDP che su TCP (ad esempio la porta 22
- è assegnata a SSH su entrambi i protocolli, anche se viene usata solo dal
- TCP).
+\begin{enumerate*}
+\item \textsl{le porte note}. I numeri da 0 a 1023. Queste sono controllate e
+ assegnate dalla IANA. Se è possibile la stessa porta è assegnata allo stesso
+ servizio sia su UDP che su TCP (ad esempio la porta 22 è assegnata a SSH su
+ entrambi i protocolli, anche se viene usata solo dal TCP).
\item \textsl{le porte registrate}. I numeri da 1024 a 49151. Queste porte non
sono controllate dalla IANA, che però registra ed elenca chi usa queste
\item \textsl{le porte private} o \textsl{dinamiche}. I numeri da 49152 a
65535. La IANA non dice nulla riguardo a queste porte che pertanto
sono i candidati naturali ad essere usate come porte effimere.
-\end{enumerate}
+\end{enumerate*}
In realtà rispetto a quanto indicato
nell'\href{http://www.ietf.org/rfc/rfc1700.txt}{RFC~1700} i vari sistemi hanno
fatto scelte diverse per le porte effimere, in particolare in
-fig.~\ref{fig:TCP_port_alloc} sono riportate quelle di BSD e Linux. Nel caso
-di Linux poi la scelta fra i due intervalli possibili viene fatta
-dinamicamente a seconda della memoria a disposizione del kernel per gestire le
-relative tabelle.
+fig.~\ref{fig:TCP_port_alloc} sono riportate quelle di BSD e Linux.
\begin{figure}[!htb]
\centering
- \includegraphics[width=15cm]{img/port_alloc}
+ \includegraphics[width=13cm]{img/port_alloc}
\caption{Allocazione dei numeri di porta.}
\label{fig:TCP_port_alloc}
\end{figure}
I sistemi Unix hanno inoltre il concetto di \textsl{porte riservate} (che
corrispondono alle porte con numero minore di 1024 e coincidono quindi con le
-porte conosciute). La loro caratteristica è che possono essere assegnate a un
-socket solo da un processo con i privilegi di amministratore, per far si che
-solo l'amministratore possa allocare queste porte per far partire i relativi
-servizi.
+\textsl{porte note}). La loro caratteristica è che possono essere assegnate a
+un socket solo da un processo con i privilegi di amministratore, per far sì
+che solo l'amministratore possa allocare queste porte per far partire i
+relativi servizi.
+
+Le \textsl{glibc} definiscono (in \texttt{netinet/in.h})
+\const{IPPORT\_RESERVED} e \const{IPPORT\_USERRESERVED}, in cui la prima (che
+vale 1024) indica il limite superiore delle porte riservate, e la seconda (che
+vale 5000) il limite inferiore delle porte a disposizione degli utenti. La
+convenzione vorrebbe che le porte \textsl{effimere} siano allocate fra questi
+due valori. Nel caso di Linux questo è vero solo in uno dei due casi di
+fig.~\ref{fig:TCP_port_alloc}, e la scelta fra i due possibili intervalli
+viene fatta dinamicamente dal kernel a seconda della memoria disponibile per
+la gestione delle relative tabelle.
Si tenga conto poi che ci sono alcuni client, in particolare \cmd{rsh} e
\cmd{rlogin}, che richiedono una connessione su una porta riservata anche dal
connessioni o di dati in arrivo, e processarli immediatamente. Per
implementare lo schema mostrato in fig.~\ref{fig:TCP_echo_multiplex}, il
programma usa una tabella dei socket connessi mantenuta nel vettore
-\var{fd\_open} dimensionato al valore di \macro{FD\_SETSIZE}, ed una variabile
+\var{fd\_open} dimensionato al valore di \const{FD\_SETSIZE}, ed una variabile
\var{max\_fd} per registrare il valore più alto dei file descriptor aperti.
Prima di entrare nel ciclo principale (\texttt{\small 6--56}) la nostra