X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=tcpsock.tex;h=03fb502bbaa8817ace2e0bee04347867a6f97de3;hb=3ad06e8129067dccfa3fad74e7cf6c051231d150;hp=7fa55073608f878586e2ee15a8addfe46975a0ba;hpb=388493a5b44babce8434148b87562aea0f046db7;p=gapil.git diff --git a/tcpsock.tex b/tcpsock.tex index 7fa5507..03fb502 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -461,17 +461,17 @@ dall'\href{http://www.ietf.org/rfc/rfc1700.txt}{RFC~1700} che contiene 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 @@ -483,29 +483,36 @@ nome simbolico del servizio. I numeri sono divisi in tre intervalli: \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 @@ -3250,7 +3257,7 @@ che ci servir 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