PROGRAMMIAMO
Internet - Le porte di comunicazione
Porte e socket

Nella scorsa lezione abbiamo lasciato aperto il problema di come, all'interno dello stesso host, si possa identificare un singolo processo in esecuzione. Infatti l'IP da solo non è sufficiente per identificare chi è il mittente o il destinatario di una determinata richiesta.

Si consideri per esempio un browser su cui siano aperte due finestre (o due schede) contemporaneamente, entrambe collegate col server di Google. Come fa il sistema operativo a recapitare la risposta alla finestra giusta, dato che entrambe sono in esecuzione sullo stesso PC e dunque condividono il medesimo indirizzo IP?

In modo simmetrico, sull'host di Google ci sono diversi tipi di server attivi e in ascolto. Per esempio ci sarà probabilmente un server web e un server di posta elettronica. Si faccia attenzione al fatto che i due server sono due processi in esecuzione sullo stesso host (non due host diversi). Di nuovo sorge il problema di sapere a quale processo recapitare il messaggio.

Il problema viene risolto attraverso le porte di comunicazione (numerate da 0 a 65335), che permettono di distinguere univocamente una particolare applicazione all’interno di un host. Il termine tecnico porta (in inglese port) è estremamente fuorviante e provoca confusione. Infatti generalmente ci si immagina le porte di un computer come oggetti fisici, tipo la porta USB a cui connettiamo le nostre chiavette.

In realtà una porta di comunicazione è soltanto un numero, un'etichetta assegnata a un processo che voglia inviare o ricevere un messaggio (più precisamente un pacchetto) in rete. Attraverso questo numero (detto porta) il sistema operativo è in grado di stabilire a chi debba essere recapitato il messaggio stesso.

In pratica quando un programma (es. un browser) in esecuzione su una macchina desidera comunicare in rete, il sistema operativo genera un numero di porta (casuale, ma diversa da quelle eventualmente già usate sulla stessa macchina) e invia al router la richiesta, indicando l'indirizzo IP del destinatario. La coppia indirizzo IP del mittente + porta costituisce quello che si chiama socket e identifica in modo univoco la macchina e il processo all'interno della rete locale.

 

Le porte standard

Abbiamo detto prima che al momento di inviare un messaggio in Internet il computer host può scegliere (più o meno casualmente) un qualsiasi numero di porta compreso fra 0 e 65335. Questo in realtà non è del tutto corretto, in quanto alcuni numeri di porta (quelli da 0 a 1023) sono riservati, in quanto costituiscono le cosiddette porte standard o porte ben note (well known ports).

Queste ultime sono assegnate dall'Internet Assigned Numbers Authority (IANA) e sono generalmente utilizzate a livello di sistema operativo o di processi di sistema. In genere rimangono in ascolto su queste porte applicazioni con funzioni di server. Alcuni esempi possono essere le applicazioni che utilizzino protocolli FTP (21), SSH (22), TELNET (23), SMTP (25) e HTTP (80).

In pratica, quando per esempio dal nostro computer inviamo una richiesta al server di google, dobbiamo anche in qualche modo specificare di che tipo di richiesta si tratta o, più precisamente, quale processo in esecuzione sul server di google dovrà rispondere alla nostra richiesta. Per essere ancora più concreti, potremmo contattare google per visitare la pagina web del motore di ricerca. In questo caso vogliamo utilizzare il protocollo HTTP e dunque la richiesta dovrà indicare la porta standard 80. Viceversa potremmo voler inviare una richiesta a google per usare il servizio mail e in questo caso dovremmo indicare la porta standard per SMTP (25) oppure per IMAP4 (993).

Si osservi a questo proposito la seguente figura:

Come si può notare la macchina sorgente (Source Machine) è identificata da un socket formato dall'indirizzo IP (locale) e dal numero di porta (1200) del processo che ha richiesto il servizio. Dall'altra parte abbiamo la macchina destinazione (Destination Machine) a cui viene inviata la richiesta tramite il socket di IP pubblico (di google) e porta "ben nota" (porta 80, in questo caso).

 

Port Forwarding

Il meccanismo implementato dal NAT consente di gestire le richieste provenienti dalla rete interna verso Intenet e viceversa, applicando la traslazione di indirizzi, cioè in parole povere la modifica dell'indirizzo IP privato in IP pubblico (e viceversa). Allo stesso tempo, come abbiamo detto, il NAT in qualche modo protegge la rete interna da eventuali tentativi di accesso dall'esterno, in quanto ne nasconde la struttura: dall'esterno l'intera rete viene vista come un unico indirizzo IP.

Questo però comporta anche dei problemi, per il fatto che nessun host (computer) della LAN può agire come server verso la rete Internet esterna. In altre parole, il NAT impedisce un indirizzamento diretto dall'esterno verso le nostre macchine che dunque non possono fornire servizi all'esterno.

Supponiamo per esempio di voler installare a casa nostra una telecamera di sorveglianza e di volerla controllare in remoto attraverso Internet da un PC o da uno smartphone. La telecamera viene collegata alla nostra rete locale e il modem/router le attribuisce un IP privato. Il problema è che tale IP non è visibile dall'esterno e dunque dall'esterno non è possibile accedere alla videocamera stessa.

Per risolvere questo tipo di problemi è stata ideata una tecnica nota come Port Forwarding (letteralmente spedizione, invio della porta) che consiste nel configurare il gateway per trasmettere ad un terminale specifico della rete interna, tutti i pacchetti ricevuti su una particolare porta. Così, se si vuole per esempio accedere dall'esterno ad un server web (porta standard 80) funzionante su un host interno con IP privato 192.168.1.69, sarà necessario definire una regola di forwarding della porta sul gateway, ridirigendo tutti i pacchetti ricevuti sulla sua porta 80 verso il terminale 192.168.1.69.

Tornando all'esempio della nostra videocamera, nella maggior parte dei casi le videocamere di sorveglianza utilizzano la porta 80 (come un server web) per l'accesso dall'esterno. Dunque basterà programmare il router in modo che effettui il port forwarding di tutte le richieste sulla porta 80 all'indirizzo IP privato della webcam.

Port Forwarding e webcam

Un altro semplice esempio di utilizzo del Port Forwarding è quello dei programmi di scaricamento peer-to-peer tipo eMule e simili. In questi casi è necessario che la macchina su cui viene eseguito eMule sia accessibile dall'esterno (per la condivisione dei file) e per fare questo è necessario istruire il modem/router perché effettui il Port Forwarding verso eMule delle richieste sulle apposite porte.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it