Newsgroup: it.comp.os.linux.development
Titolo: Socket tcp: utilizzo porte

Ciao a tutti,
ho un problema che vi sottopongo.
In generale quando istanzio una comunicazione tra 2 applicazioni (una client
e una server)
dal client comunico l' IP e la porta del server, il sistema mi assegna
automaticamente una porta
locale per il client su cui comunicare. Il problema è :
1) La porta utilizzata dal client (che viene assegnata automaticamente e in
base alla disponibilità)
    può essere utilizzata dalla macchina su cui risiede il client per una
comunicazione tra altre 2 applicazioni ?
2) C'è un meccanismo per riservare una determinata porta in modo tale che
non la utilizzi nessun altro processo ?
Ovviamente sto parlando delle porte assegnabili dinamicamente dall'utente
 tra 49152 e 65535)
Grazie a tutti.

 Grazie a tutti.
-- 
Gaetano Sferra


ok ma se faccio partire il servizio (che chiamo S1 e utilizza la porta XXX)
dopo aver fatto partire
un programma (che chiamo P1) che utilizza lo stesso porto di S1
il servizio non dovrebbe partire ! io vorrei che a P1 non venisse assegnata
la porta XXX
perchè di uso di S1.
Spero di essere stato chiaro. Ti ringrazio.

 Spero di essere stato chiaro. Ti ringrazio.
Se ho capito bene tu vuoi riservare un porto per un determinato servizio e
fare in modo che qualunque applicazione che faccia richiesta di un porto
non si veda assegnata proprio quello anche quando il servizio in questione
non č attivo. A questa domanda non so rispondere anche se la mia esperienza
mi suggerisce che non sia possibile. Non esiste, in effetti un database che
assegni un porto ad un servizio, i WKP (Well Know Ports) si chiamano cosě
solo per convenzione, il discorso č che tutti i server FTP, ad esempio, si
avviano richiedendo i porti 20 e 21 per default. Spero che qualcun'altro
possa esserti piu' utile, se, magari, mi fornisci piů dettagli su cosa hai
intenzione di fare potrei suggerirti un "work around".
-- 
Gaetano Sferra

 Spero di essere stato chiaro. Ti ringrazio.
...
Vediamo se ricordo bene e se si può fare un po' di ordine.
Prima di tutto "the ports" chiamiamole "le porte" e non "i porti", perchè
"ports" significa si "porti" ma anche "portelli", "aperture" e "accessi" e
quet'ultima semantica è stata adottata dalla comunità informatica anche se
italianizzando in "porte".
Ci sono due categorie di porte, le "well-known ports" (0..1024) e le
"ephemeral ports" (1025..65535) ; non vorrei sbagliare ma mi sembra di
ricordare che queste ultime si dividono in "registered ports" e "dynamic
and/or private ports".
A questo indirizzo maggiori informazioni:
http://www.iana.org/assignments/port-numbers
Per quello che riguarda il tuo problema di solito la soluzione sta
nell'assegnare ai programmi server una porta nel range delle well-known
ports (0..1024) stando attenti ad usare la porta assegnata al tipo di
servizio che vuoi erogare; cioè se il servizio è un web server deve essere
"binded" alla porta 80/tcp, se è un pop3 alla 110/tcp o alla 110/udp e
così via.
Il TCP/IP ti assicura che quando assegnerà una porta random ad un client
essa sarà scelta dalle ephemeral ports (se non addirittura da un più
piccolo sub-range di queste che però dipende dalla specifica
implementazione).
Quindi usando lo standard le possibilità di collisione sono zero.
Il problema nasce se il tuo server non può essere catalogato in nessuno dei
servizi standard delle well-known ports. Qui si possono fare almeno due
cose:
1) Utilizzare una delle diverse porte nel range 0..1024 che ancora non sono
state ufficialmente assegnate dallo IANA ( vedi link ).
2) Controllare sul tuo sistema operativo se esso riconosce porte di tipo
"registered" e in quale range, in modo da trovare un numero di porta che
rappresenta il tuo servizio oppure un numero non utilizzato all'interno.
Anche in questo caso, intendo come nel caso delle "well-known ports, se il
sistema riconosce il range delle "registered ports" non dovrebbe mai
assegnare nessuna di queste ad un programma client.
Spero di avere ricordato tutto bene e di esserti stato utile.
Buon lavoro,
FabioMDF
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Inviato via 
http://arianna.libero.it/usenet/
-- 
Gaetano Sferra
G[a]
e...@jabber.org

 Ricordi bene...
Beh veramente leggendo la tua risposta mi sono accorto di non aver ricordato
così bene come stanno le cose: le well-known ports stanno nell'intervallo
1..1023 e non nell'intervallo 0..1024 come erroneamente ho riportato...
Saluti,
Fabiomdf


 riportato...
Capita :)
-- 
Gaetano Sferra