Sistemi e Reti - Anno 4 - Modulo 3 - Lezione 02 - Porte, Socket e Indirizzamento Transport
Sistemi e Reti · Anno 4 · Modulo 3 · Lezione 02

Porte, Socket e Indirizzamento al Livello Transport

Dal pacchetto IP al processo giusto: come il numero di porta identifica i servizi, come nasce un socket e perché un server gestisce migliaia di connessioni sulla stessa porta.

✍ Autore: profgiagnotti · Materia: Sistemi e Reti
// Obiettivi di apprendimento
✓Descrivere il numero di porta come intero a 16 bit e spiegare le tre categorie IANA (well-known, registered, dynamic/ephemeral)
✓Definire il concetto di socket come 5-tupla e spiegare perché un server può gestire N connessioni TCP simultanee sulla stessa porta
✓Riconoscere le porte notevoli dei principali protocolli applicativi (HTTP, HTTPS, SSH, DNS, SMTP, FTP, POP3, IMAP, DHCP)
✓Usare i comandi netstat e ss per visualizzare porte in ascolto e connessioni attive su un sistema Linux
✓Analizzare il flusso completo di una richiesta HTTPS dal browser alla rete e applicare il principio di minimizzazione della superficie d'attacco

1. Il numero di porta — 16 bit che fanno tutto il lavoro

Una volta che il pacchetto IP raggiunge l'host corretto, chi decide a quale processo consegnarlo? Il numero di porta: un intero a 16 bit (range 0–65535) che identifica in modo univoco un processo o servizio all'interno di un host. È il meccanismo più semplice e più potente del livello Transport.

📌 Definizione da ricordare

Il numero di porta è un intero non negativo a 16 bit (0–65535) che, abbinato all'indirizzo IP e al protocollo Transport, identifica univocamente un endpoint di comunicazione. È assegnato dall'IANA nella fascia 0–49151 e dal sistema operativo in modo dinamico nella fascia 49152–65535.

IP DST 93.184.216.34 PROTOCOLLO TCP / UDP PORTA DST 443 HTTPS SOCKET = PROCESSO demultiplexing verso l'app corretta { IP, Proto, Porta } → applicativo
🎯 Esempio in classe

Apri due schede del browser: una su un sito HTTP (porta 80) e una su uno HTTPS (443) verso lo stesso IP. IP uguale, protocollo uguale, ma porte diverse → il kernel consegna i dati a socket diversi. È il demultiplexing Transport.

2. Le tre categorie IANA

L'IANA divide l'intero spazio delle porte in tre fasce con regole di assegnazione diverse. Ricordarle è fondamentale per l'esame e per la configurazione dei firewall.

01 · 0 - 1023

Well-Known Ports

Assegnate a servizi standard. Richiedono privilegi di root per il binding. Es. 80 HTTP, 443 HTTPS, 22 SSH. Definite da RFC.

02 · 1024 - 49151

Registered Ports

Assegnate su richiesta a applicazioni specifiche (es. 3306 MySQL, 5432 PostgreSQL, 27017 MongoDB). Non servono privilegi root.

03 · 49152 - 65535

Dynamic / Ephemeral

Usate dal SO come porte sorgente effimere per i client. Scelte casualmente, breve durata. Es. browser apre 52341 → server 443.

💬 Tip del docente

Per ricordare i range fai: 0-1k = famosi, 1k-49k = registrati (aziende), 49k-65k = effimere (client). All'interrogazione disegna subito la linea 0 | 1023 | 49151 | 65535.

FasciaRangeChi assegnaPrivilegi
Well-Known0–1023IANA standardroot / admin
Registered1024–49151IANA su richiestautente normale
Dynamic/Ephemeral49152–65535SO dinamiconessun binding fisso

3. Porte notevoli dei protocolli applicativi

Alcune porte vanno sapute a memoria: sono le domande più frequenti nei test e nelle configurazioni firewall.

PortaProtocolloTransportUso
20/21FTPTCPTrasferimento file (20 data, 21 control)
22SSH / SCP / SFTPTCPAccesso remoto sicuro
25SMTPTCPInvio email
53DNSTCP/UDPRisoluzione nomi
67/68DHCPUDPAssegnazione IP automatica
80HTTPTCPWeb non cifrato
110POP3TCPRicezione email
143IMAPTCPRicezione email evoluto
443HTTPSTCPWeb cifrato TLS
⚠️ Errore comune

Confondere 67/68 DHCP con 53 DNS o pensare che DNS usi solo UDP: DNS usa UDP per le query normali ma TCP per risposte >512 byte e zone transfer. All'esame specifica sempre TCP/UDP per DNS.

4. Socket — la 5-tupla che identifica una comunicazione

📌 Definizione da ricordare

Il socket è l'endpoint di comunicazione definito dalla 5-tupla {protocollo, IP sorgente, porta sorgente, IP destinazione, porta destinazione}. Per UDP, senza connessione, il socket è identificato solo da (IP_dst, porta_dst).

Per TCP, ogni connessione è unica per la combinazione di questi 5 valori. Per questo un server può gestire migliaia di client contemporaneamente sulla stessa porta 443: cambiano IP sorgente e porta effimera del client, quindi la 5-tupla è diversa.

SERVER LISTENING 0.0.0.0:443 TCP Client A 192.168.1.10:52341 Client B 192.168.1.11:61234 Client C 10.0.0.5:49876 5-tupla A: {TCP, 192.168.1.10:52341, 93.184.216.34:443} → socket diverso 5-tupla B: {TCP, 192.168.1.11:61234, 93.184.216.34:443} → socket diverso Stessa IP:porta server, ma IP/porta client diversi = multiplexing TCP possibile
TCP · oriented

Connessione = 5-tupla completa

Socket identificato da tutti e 5 i campi. Ogni accept() crea un nuovo socket connesso, il listening resta libero.

UDP · connectionless

Datagrammi sullo stesso socket

Tutti i datagrammi che arrivano su (dst_ip, dst_port) vanno allo stesso socket applicativo. No handshake.

5. Multiplexing lato server, comandi ss/netstat, flusso completo e sicurezza

Vediamo strumenti reali e il percorso completo di una richiesta.

LINUX · TERMINALE
# porte in ascolto (moderno, veloce) ss -tulnp # solo TCP listening numerico con processi ss -tlnp # equivalente legacy netstat netstat -tulnp # connessioni attive verso 443 ss -tunap dst :443 # verifica superficie d'attacco: cosa è esposto? ss -tlnp | grep LISTEN

Output tipico di ss -tlnp:

OUTPUT · SS
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=720,fd=3)) LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=901,fd=6)) LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=901,fd=7))
🛡️ Sicurezza — porta aperta = superficie d'attacco

Ogni porta in LISTEN è un potenziale punto d'ingresso. Principio di minimizzazione: chiudi tutto con iptables / nftables e lascia aperto solo ciò che serve. ss -tlnp è il primo check post-installazione su qualsiasi server. Se vedi una porta che non hai aperto tu, indaga.

Il flusso completo: da applicazione a rete

Cosa succede quando il browser apre https://example.com?

FLUSSO · BROWSER → RETE
// FLUSSO — browser apre https://example.com 1. Browser richiede connessione a 93.184.216.34:443 (HTTPS) 2. SO assegna porta effimera: es. 52341 3. Socket creato: { TCP, 192.168.1.5:52341, 93.184.216.34:443 } 4. TCP aggiunge header con src=52341, dst=443 5. IP aggiunge header con src=192.168.1.5, dst=93.184.216.34 6. Ethernet incapsula e invia al gateway // Risposta: percorso inverso, kernel usa 5-tupla per consegnare al socket corretto
🎯 Lab rapido

Su una VM Linux lancia python3 -m http.server 8080 poi da un altro terminale ss -tlnp | grep 8080. Vedi LISTEN. Da un altro host curl http://<ip-vm>:8080 e poi ss -tunap per vedere la connessione ESTABLISHED con 5-tupla completa.

6. Verifica / Esercizio

🔬 Attività pratica

Analizza un server web locale.

  1. Quale comando mostra le porte in ascolto? Cosa indicano le colonne Local Address:Port e Process?
  2. Un server su 0.0.0.0:443 riceve due client: 10.0.0.2:50000 e 10.0.0.3:50000. Quanti socket di connessione esistono? Scrivi le 5-tuple.
  3. Perché DNS può usare sia UDP che TCP? Quando usa TCP?
  4. Classifica le porte 22, 3306, 53421 nelle tre categorie IANA e spiega chi le assegna.
  5. Spiega il rischio di lasciare aperta la porta 22 su Internet e una contromisura con firewall.
✅ Soluzione ragionata

1) ss -tulnp (-t TCP, -u UDP, -l listening, -n numerico, -p process). Local = IP:porta locale, Process = daemon che ha fatto bind.
2) 2 socket connessi + 1 listening. T1={TCP,10.0.0.2:50000,server:443}, T2={TCP,10.0.0.3:50000,server:443} → IP sorgenti diversi, quindi 5-tuple diverse.
3) UDP per query veloci <512B; TCP per risposte grandi, AXFR/IXFR e quando truncated. RFC obbligatorio prevedere TCP.
4) 22 well-known (IANA standard, root), 3306 registered (MySQL, richiesta IANA), 53421 dynamic (effimera, SO).
5) 22 = SSH, superficie d'attacco brute-force. Contromisure: limita a IP noti con nftables/iptables, usa fail2ban, cambia porta o usa key-based auth, disabilita root login.

✓Le porte sono interi a 16 bit (0–65535): 0–1023 well-known (root), 1024–49151 registered, 49152–65535 dynamic/ephemeral.
✓Il socket è la 5-tupla {protocollo, IP_src, porta_src, IP_dst, porta_dst}: identifica univocamente un endpoint di comunicazione.
✓Un server TCP può gestire N connessioni simultanee sulla stessa porta: le 5-tuple differiscono per IP/porta sorgente dei client.
✓UDP non mantiene connessioni: il socket è identificato solo da (dst_ip, dst_port); tutti i datagrammi arrivano allo stesso socket.
✓Porte notevoli da ricordare: 22 SSH, 25 SMTP, 53 DNS (TCP/UDP), 80 HTTP, 110 POP3, 143 IMAP, 443 HTTPS, 67/68 DHCP.
✓ss -tulnp è il comando moderno per visualizzare porte in ascolto e connessioni; ogni porta LISTEN è superficie d'attacco da minimizzare.

📚 Prossimo passo - TCP: caratteristiche principali e struttura del segmento

Nella prossima lezione entriamo nel cuore del TCP: bit di controllo, numeri di sequenza, finestra e struttura dell'header. Sapere cos'è una porta e un socket è il prerequisito per capire come TCP rende affidabile il flusso.