Cosa sono socket e porte nel networking? L'idraulica della comunicazione Internet
Socket e porte sono il livello di indirizzamento che permette a più app di condividere una stessa connessione di rete. Ecco il modello mentale.
Socket = Maniglia di endpoint
Un socket è un oggetto gestito dal SO che rappresenta un'estremità di un canale di comunicazione bidirezionale. Pensa: una presa telefonica a muro — è l'interfaccia, non la conversazione.
- Creato dall'app tramite syscall (
socket()). - Vincolato a IP + porta (locale) e connesso a IP remoto + porta.
- Identificato da file descriptor (intero) all'interno del processo.
- Supporta stream (TCP) o datagrammi (UDP).
Porta = Numero di canale virtuale
Una porta (0–65535) è un indirizzo logico secondario su un IP. Distingue i servizi sullo stesso host.
- Ben note (0–1023): HTTP 80, HTTPS 443, SSH 22, DNS 53, SMTP 25.
- Registrate (1024–49151): MySQL 3306, PostgreSQL 5432, RDP 3389.
- Effimere (49152–65535): lato client assegnate automaticamente per connessioni in uscita.
Come funzionano insieme
Tupla = (IP sorgente, porta sorgente, IP destinazione, porta destinazione, protocollo) identifica univocamente una connessione.
- Server:
bind(0.0.0.0, 443)→listen()→accept()crea un nuovo socket per ogni client. - Client:
connect(dst_ip, 443)→ il SO sceglie una porta sorgente effimera. - Molti client → stessa porta server, diverse porte sorgente = multiplexing.
Port Forwarding (NAT)
Il router mappa IP_WAN:porta_esterna → IP_LAN:porta_interna. Consente il traffico in entrata verso un server interno.
Analogia
- IP = indirizzo dell'edificio
- Porta = numero dell'appartamento
- Socket = la porta effettiva + citofono (uno per conversazione)
- Protocollo = lingua parlata (TCP = registrato, affidabile; UDP = grida-e-spera)
I socket sono l'API; le porte sono lo spazio dei nomi. Entrambi essenziali.