prof. Nunzio Brugaletta



EnneBi - Computer Science
Avanti - Indietro - Inizio

TCP: socket, porte e port mapper

Il protocollo IP si occupa della trasmissione di pacchetti di dati fra un nodo e l'altro di una rete. Tuttavia quando due stazioni vogliono instaurare una connessione, si richiede che questa avvenga, per esempio, fra un processo che richiede un determinato servizio (un client) e un processo che è in grado di fornirlo (un server) e quindi la trasmissione deve poter specificare a quale processo è rivolta la connessione: in uno stesso host possono essere attivi più servizi. Di questo si occupa il protocollo TCP, che si pone al livello di Trasporto (4) di ISO/OSI, e il cui scopo è quello di fornire una connessione affidabile fra due nodi. TCP si pone quindi ad un livello superiore rispetto a IP: il pacchetto TCP viene passato al livello inferiore dove viene inbustato in un pacchetto IP e inviato sulla rete.

Il concetto fondamentale su cui si basa TCP è quello del socket (presa). Un socket è l'insieme formato da un indirizzo IP e un numero di porta: il punto in cui un processo è in ascolto per una determinata connessione. Un socket può gestire più connessioni contemporaneamente. Un processo apre un socket in ascolto di connessioni ad esso, un secondo processo che vuole comunicare col primo, apre anch'esso un socket e poi chiama il primo processo; chiaramente per poter comunicare con il primo processo deve conoscere la porta su cui questo è in ascolto.

I numeri di porta inferiori a 1024, sono chiamati well-known number ports (numeri di porta ben noti) e identificano i servizi standard elencati nel sito www.iana,org (Internet Assigned Numbers Authority). La lista è riportata nel file /etc/services:

$ less /etc/services
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, officially ports have two entries
# even if the protocol doesn't support UDP operations.
...
smtp            25/tcp          mail
...
www             80/tcp          http            # WorldWideWeb HTTP
www             80/udp                          # HyperText Transfer Protocol
...
pop3            110/tcp         pop-3           # POP version 3
pop3            110/udp         pop-3
...

nelle righe riportate sono evidenziate le porte su cui sono in ascolto i servizi per la gestione di pagine web e della posta elettronica in entrata (pop3) e in uscita (smtp).

Le porte di numero superiore (fino a quella di numero massimo 65535) sono riservate ai socket della comunicazione dopo l'avvenuta connessione.

Stabilita la connessione, il mittente, invia un pacchetto al destinatario e, nel frattempo, avvia un timer. Il destinatario, all'arrivo del pacchetto, invia al mittente un pacchetto di acknowledgement (riconoscimento) per il pacchetto successivo. Se il pacchetto non dovesse arrivare al mittente prima della scadenza del timer, il mittente invia nuovamente il pacchetto.

Il pacchetto formato dal TCP, oltre che dai dati, è costituito anche da una intestazione di 20 byte che contiene:

Un modo di controllare i servizi disponibili in un host, e le porte in cui sono in ascolto, è quello di usare un port mapper, per esempio Nmap (Network Mapper) uno dei tools fondamentali utilizzati da amministratori di reti e da chi si occupa di sicurezza:

# nmap -sV 127.0.0.1

Starting nmap 3.48 ( http://www.insecure.org/nmap/ ) at 2006-03-08 12:42 CET
Interesting ports on mepis1 (127.0.0.1):
(The 1654 ports scanned but not shown below are in state: closed)
PORT    STATE SERVICE VERSION
80/tcp  open  http    Apache httpd 1.3.27 ((Unix) Debian GNU/Linux PHP/4.1.2)
515/tcp open  printer
631/tcp open  ipp     CUPS 1.1

Nmap run completed -- 1 IP address (1 host up) scanned in 6.213 seconds

nell'esempio proposto si effettua una scansione della macchina locale specificando, con l'opzione -sV, la volontà di avere anche informazioni sulla versione del software che fornisce il servizio. Il risultato dell'esempio mostra che c'è, fra gli altri, il web server Apache in ascolto sulla porta 80.

Nmap può essere utilizzato anche per effettuare una scansione di una rete, effettuando ping multipli alla ricerca di host attivi (nmap -sP 192.168.1.*) o per tentare di rilevare il sistema operativo che gira in un host (nmap -O 192.168.1.2).



Avanti - Indietro - Inizio



ennebi@solira.org