← Home
Sistemi e Reti
SAGGIN s.r.l.
Capitolo
Mezzi Trasmissivi
Introduzione ai mezzi trasmissivi

Un mezzo trasmissivo è il supporto fisico attraverso cui viaggiano i segnali tra due o più nodi di rete. La scelta del mezzo determina la banda disponibile, la distanza massima coperta, l'attenuazione del segnale, la latenza, l'immunità ai disturbi elettromagnetici e il costo di installazione. I mezzi si dividono in guidati (il segnale è confinato in un supporto fisico: doppino, cavo coassiale, fibra ottica) e non guidati (onde radio, infrarossi, microonde).

Ethernet — Cablaggio in rame
IEEE 802.3 — Standard Ethernet
Doppino Intrecciato (Twisted Pair)

È il mezzo più diffuso nelle LAN. Ogni cavo contiene coppie di conduttori in rame intrecciati tra loro per ridurre le interferenze elettromagnetiche (crosstalk e EMI). L'intreccio crea campi magnetici opposti che si cancellano reciprocamente. Esistono due varianti principali:

  • UTP (Unshielded Twisted Pair): senza schermatura, economico, facile da installare. Usato nella maggior parte delle installazioni LAN.
  • STP/FTP (Shielded/Foiled): con schermatura metallica per ambienti ad alta interferenza industriale.

Le categorie definiscono la banda massima: Cat 5e → fino a 1 Gbps su 100 m; Cat 6 → fino a 10 Gbps su 55 m; Cat 6A → 10 Gbps su 100 m; Cat 8 → 40 Gbps su 30 m. Il connettore standard è l'RJ-45. La distanza massima per un segmento Ethernet su Cat 5e/6 è 100 metri prima che l'attenuazione richieda un repeater o uno switch.

Ethernet — Cenni tecnici sul protocollo MAC

Ethernet opera al livello 2 (Data Link) del modello OSI. Utilizza il meccanismo CSMA/CD (Carrier Sense Multiple Access with Collision Detection) sulle reti half-duplex: prima di trasmettere, il nodo ascolta il canale (Carrier Sense); se rileva una collisione durante la trasmissione, interrompe, attende un tempo casuale (backoff esponenziale) e ritrasmette. Nelle reti full-duplex (switch moderni) il CSMA/CD non è necessario perché ogni porta ha un dominio di collisione separato.

Un frame Ethernet (IEEE 802.3) ha la struttura: Preambolo (7B) | SFD (1B) | MAC dst (6B) | MAC src (6B) | Ethertype/Length (2B) | Payload (46–1500B) | FCS (4B). Il campo Ethertype identifica il protocollo di rete incapsulato (0x0800 = IPv4, 0x86DD = IPv6, 0x0806 = ARP). La dimensione massima del payload è 1500 byte (MTU standard Ethernet).

Fibra Ottica — Il mezzo ad alte prestazioni
Principio fisico — Riflessione Totale Interna
Come funziona la fibra ottica

La fibra ottica trasmette dati sotto forma di impulsi luminosi (fotoni) attraverso un sottile filamento di vetro o silice. Il funzionamento si basa sul principio fisico della riflessione totale interna: quando un raggio di luce viaggia da un mezzo più denso (core) a uno meno denso (cladding), e l'angolo di incidenza supera il angolo critico θc, la luce viene completamente riflessa verso l'interno e non fuoriesce.

La legge di Snell governa il fenomeno: n₁ · sin(θ₁) = n₂ · sin(θ₂). Quando θ₁ ≥ θ_c = arcsin(n₂/n₁) si ha riflessione totale. Il core ha un indice di rifrazione n₁ leggermente superiore al cladding (n₂), tipicamente n₁ ≈ 1.48 e n₂ ≈ 1.46. Intorno al cladding è presente una jacket protettiva in polimero. La luce rimane intrappolata nel core e si propaga per rimbalzo lungo tutta la lunghezza della fibra senza dispersione laterale, con attenuazione estremamente bassa (0.2 dB/km nella finestra a 1550 nm).

SMF — Single-Mode Fiber
Fibra Monomodale
  • Diametro del core: 8–10 µm
  • Un solo modo di propagazione della luce
  • Sorgente luminosa: laser (LED non sufficiente)
  • Lunghezze d'onda operative: 1310 nm, 1550 nm
  • Distanza massima: decine–centinaia di km
  • Banda: praticamente illimitata (Tbps con WDM)
  • Dispersion cromatica trascurabile
  • Usata in backbone, WAN, reti metropolitane, intercontinentale
MMF — Multi-Mode Fiber
Fibra Multimodale
  • Diametro del core: 50–62.5 µm
  • Più modi di propagazione simultanei
  • Sorgente luminosa: LED o VCSEL
  • Lunghezze d'onda operative: 850 nm, 1300 nm
  • Distanza massima: 300–550 m (a 10 Gbps)
  • Problema: dispersione modale → i modi arrivano in tempi diversi
  • Profilo indice step-index o graded-index (riduce la dispersione)
  • Usata in LAN, data center, campus
Vantaggi della fibra rispetto al rame
  • Banda: ordini di grandezza superiori al rame. Con il WDM (Wavelength Division Multiplexing) si trasmettono contemporaneamente decine/centinaia di lunghezze d'onda sullo stesso core, moltiplicando la capacità.
  • Attenuazione bassissima: 0.2 dB/km vs ~10 dB/km del rame → distanze enormi senza amplificazione.
  • Immunità EMI: il segnale è luminoso, non elettrico → nessun disturbo da campi elettromagnetici, nessun crosstalk.
  • Sicurezza: non irradia segnale, difficilissimo da intercettare senza interrompere la comunicazione.
  • Leggerezza e dimensioni: un singolo cavo può contenere centinaia di fibre.
Cosa si intende per architettura di rete

Un'architettura di rete definisce la struttura organizzativa dei nodi di comunicazione, i ruoli che essi assumono e le modalità con cui interagiscono. Le due architetture fondamentali sono il modello client-server e il modello peer-to-peer (P2P). In client-server un nodo (server) eroga servizi e un altro (client) li consuma, con ruoli asimmetrici e fissi; in P2P ogni nodo può assumere entrambi i ruoli indifferentemente. Parallelamente, il concetto di protocollo definisce l'insieme formale di regole sintattiche e semantiche che governano lo scambio di messaggi tra entità comunicanti.

Connection-Oriented vs Connectionless
Connection-Oriented
Orientato alla connessione

Prima di trasferire dati viene stabilita una connessione logica tra mittente e destinatario mediante una procedura di handshake. Questa fase negozia i parametri della sessione (numeri di sequenza, dimensione delle finestre, ecc.) e alloca le risorse necessarie. I dati vengono trasmessi lungo il canale stabilito e la connessione viene esplicitamente chiusa al termine.

  • Garantisce ordinamento, affidabilità, controllo di flusso
  • Overhead maggiore per l'instaurazione e il teardown
  • Stato mantenuto nei nodi per tutta la durata della sessione
  • Esempio paradigmatico: TCP (three-way handshake SYN/SYN-ACK/ACK)
  • Usato per trasferimento file, navigazione web, SSH, SMTP
Connectionless
Senza connessione

Non esiste fase di instaurazione della connessione. Ogni unità dati (datagramma) è trasmessa in modo indipendente, contiene tutte le informazioni di indirizzamento necessarie e può percorrere percorsi diversi nella rete. Non c'è garanzia di consegna, di ordinamento, né di assenza di duplicati.

  • Overhead minimo: nessuna negoziazione, nessuna teardown
  • Latenza bassa, adatto a traffico burst
  • Nessuno stato mantenuto per la sessione
  • Esempio paradigmatico: UDP, IP, ICMP
  • Usato per DNS, streaming real-time, gaming, SNMP, VoIP
Stateful vs Stateless
Stateful
Con mantenimento di stato

Un protocollo (o servizio) è stateful quando il server mantiene informazioni sullo stato della sessione tra una richiesta e la successiva. Il server ricorda il contesto della comunicazione: dati già scambiati, autenticazione avvenuta, parametri negoziati.

  • Il server tiene in memoria il session state per ogni client attivo
  • Consente operazioni dipendenti dal contesto precedente
  • Scalabilità più complessa (stato distribuito)
  • Esempi: TCP (mantiene stato di connessione), FTP (mantiene il canale di controllo), firewall stateful (traccia connessioni aperte)
Stateless
Senza mantenimento di stato

Un protocollo è stateless quando ogni richiesta è completamente autonoma e indipendente: il server non mantiene alcuna informazione sulle richieste precedenti dello stesso client. Ogni messaggio deve contenere tutte le informazioni necessarie all'elaborazione.

  • Scalabilità orizzontale semplice: qualsiasi server può gestire qualsiasi richiesta
  • Fault tolerance maggiore: nessuno stato da ripristinare dopo un crash
  • Ogni richiesta è autocontenuta
  • Esempi: HTTP/1.x (nativamente stateless; i cookie simulano lo stato), UDP, IP, DNS (ogni query è indipendente)
La distinzione connection-oriented/connectionless opera a livello di trasporto e riguarda la gestione della sessione di comunicazione. La distinzione stateful/stateless opera a livello applicativo e riguarda il mantenimento del contesto tra richieste successive. I due assi sono ortogonali: si può avere un protocollo connection-oriented stateless (HTTP su TCP) o connectionless stateful (alcuni firewall che tracciano sessioni UDP).
Capitolo
Modelli OSI e TCP/IP
Il modello di riferimento: perché stratificare?

La stratificazione (layering) è il principio architetturale fondamentale delle reti moderne. Decompone il problema complesso della comunicazione in strati indipendenti, ciascuno con responsabilità ben definite. Ogni strato offre servizi allo strato superiore tramite un'interfaccia e utilizza i servizi dello strato inferiore. Due entità sullo stesso strato in host diversi comunicano tramite un protocollo orizzontale. I vantaggi sono: modularità, interoperabilità, possibilità di sostituire l'implementazione di un layer senza toccare gli altri.

Modello OSI — ISO/IEC 7498
I 7 livelli del modello OSI
Layer 7
Application

Interfaccia con le applicazioni utente. Fornisce servizi di rete direttamente alle applicazioni (HTTP, FTP, SMTP, DNS, SNMP). Gestisce la semantica dei dati scambiati.

Layer 6
Presentation

Traduzione, codifica, compressione e cifratura dei dati. Garantisce che i dati prodotti da un'applicazione siano leggibili da un'altra (es. conversione ASCII↔EBCDIC, TLS/SSL).

Layer 5
Session

Gestione delle sessioni di comunicazione: instaurazione, mantenimento, sincronizzazione e terminazione. Gestisce i checkpoint per recovery dei dati (es. RPC, NetBIOS).

Layer 4
Transport TCP / UDP

Comunicazione end-to-end tra processi. Multiplexing tramite porte. Affidabilità (TCP), controllo di flusso, controllo di congestione, o servizio best-effort (UDP). La PDU è il segmento (TCP) o datagramma (UDP).

Layer 3
Network IP / Router

Instradamento (routing) dei pacchetti attraverso reti eterogenee. Indirizzamento logico (IPv4, IPv6). Frammentazione/reassembling. La PDU è il pacchetto. Dispositivo chiave: il router.

Layer 2
Data Link MAC / Switch

Trasmissione affidabile su singolo link fisico. Indirizzamento fisico (MAC address 48 bit). Framing, rilevazione errori (CRC/FCS), controllo di accesso al mezzo (CSMA/CD). La PDU è il frame. Dispositivo: switch.

Layer 1
Physical

Trasmissione di bit grezzi sul mezzo fisico. Definisce tensioni, frequenze, codifiche del segnale (NRZ, Manchester), connettori, cablaggi. La PDU è il bit.

Modello TCP/IP — Stack Internet (DoD)
Il modello a 4 layer del TCP/IP

Il modello TCP/IP (detto anche DoD o Internet Model) è il riferimento pratico su cui è costruita Internet. Ha 4 layer che collassano i 7 livelli OSI in un'architettura più pragmatica:

Layer 4 — Application

Incorpora i layer OSI 5, 6, 7. I protocolli applicativi gestiscono direttamente sessione, presentazione e applicazione senza distinzione formale. Esempi: HTTP/HTTPS, DNS, DHCP, FTP, SMTP, SSH, SNMP, Telnet.

Layer 3 — Transport

Corrisponde al layer 4 OSI. I due protocolli fondamentali sono TCP (connection-oriented, affidabile) e UDP (connectionless, best-effort). Fornisce multiplexing via numeri di porta.

Layer 2 — Internet

Corrisponde al layer 3 OSI. Protocollo principale: IP (IPv4/IPv6). Responsabile dell'indirizzamento logico e del routing inter-rete. Protocolli ausiliari: ICMP (controllo ed errori), ARP (risoluzione IP→MAC), OSPF, BGP (routing dinamico).

Layer 1 — Network Access (Link)

Incorpora i layer OSI 1 e 2. Gestisce la trasmissione fisica e il framing sul singolo link. Dipende dalla tecnologia: Ethernet, Wi-Fi (IEEE 802.11), PPP, DSL, ecc.

Il modello OSI è un modello di riferimento teorico-normativo; il TCP/IP è il modello implementato realmente. OSI è utile per la didattica e per descrivere le responsabilità; TCP/IP è ciò che gira su ogni dispositivo connesso a Internet.
Incapsulamento (Encapsulation) — il processo fondamentale

Quando un'applicazione invia dati, ogni layer aggiunge la propria intestazione (header) al payload ricevuto dal layer superiore. Questo processo è detto incapsulamento. In ricezione avviene il processo inverso (decapsulamento). La PDU (Protocol Data Unit) cambia nome a ogni livello:

  • Livello Applicazione → Message/Data
  • Livello Trasporto (TCP) → Segmento (aggiunge header TCP)
  • Livello Internet (IP) → Pacchetto/Datagramma IP (aggiunge header IP)
  • Livello Data Link → Frame (aggiunge header MAC + FCS)
  • Livello Fisico → Bit

Due host sullo stesso link fisico comunicano scambiando frame; due host su reti diverse comunicano scambiando pacchetti IP, ognuno dei quali viene incapsulato in frame diversi a ogni hop intermedio.

Capitolo
IP
IP — Internet Protocol

Il protocollo IP opera al livello 3 (Network/Internet) ed è il protocollo di instradamento universale di Internet. È un protocollo connectionless e best-effort: non offre garanzie di consegna, di ordinamento, né di assenza di duplicati. Ogni pacchetto è instradato indipendentemente dagli altri. L'affidabilità è delegata ai livelli superiori (TCP). IP fornisce due servizi fondamentali: indirizzamento logico (indirizzi IP) e instradamento (routing) dei datagrammi attraverso reti eterogenee.

Header IPv4 — Struttura completa (senza opzionali)
bit 0–7 bit 8–15 bit 16–23 bit 24–31
Byte 0 Version (4 bit) IHL (4 bit) DSCP / ToS (8 bit) Total Length (16 bit)
Byte 4 Identification (16 bit) Flags (3 bit) Fragment Offset (13 bit)
Byte 8 TTL (8 bit) Protocol (8 bit) Header Checksum (16 bit)
Byte 12 Source IP Address (32 bit)
Byte 16 Destination IP Address (32 bit)
Descrizione dettagliata di ogni campo dell'header IPv4
Version — 4 bit
Versione del protocollo IP

Indica la versione del protocollo IP. Per IPv4 il valore è 0100 (decimale 4); per IPv6 è 0110 (decimale 6). Il router usa questo campo per determinare come interpretare il resto dell'header.

IHL (Internet Header Length) — 4 bit
Lunghezza dell'intestazione

Specifica la lunghezza dell'header IP in word da 32 bit. Il valore minimo è 5 (5 × 32 bit = 20 byte, header senza opzioni). Il valore massimo è 15 (15 × 32 bit = 60 byte). È necessario perché il campo Options ha lunghezza variabile. Sapere dove finisce l'header è indispensabile per trovare l'inizio del payload (segmento TCP/UDP).

DSCP / Type of Service — 8 bit
Differentiated Services / Qualità del servizio

Originariamente definito come ToS (Type of Service), ridefinito come DSCP (Differentiated Services Code Point). I 6 bit DSCP più significativi definiscono la classe di traffico per la QoS (Quality of Service): priorità del pacchetto, gestione in caso di congestione (Expedited Forwarding, Assured Forwarding). I 2 bit ECN (Explicit Congestion Notification) segnalano la congestione in rete senza dover scartare pacchetti.

Total Length — 16 bit
Lunghezza totale del datagramma IP

Indica la dimensione totale del datagramma IP in byte, inclusi header e payload. Valore minimo: 20 byte (solo header). Valore massimo teorico: 65.535 byte. Nella pratica il limite è imposto dalla MTU del link (1500 byte per Ethernet). Quando un datagramma supera la MTU, il router effettua la frammentazione.

Identification — 16 bit
Identificatore del datagramma (per frammentazione)

Numero identificativo assegnato dal mittente al datagramma. Tutti i frammenti prodotti dalla frammentazione di un singolo datagramma originale condividono lo stesso valore di Identification. Il destinatario usa questo campo per raggruppare i frammenti appartenenti allo stesso datagramma originale durante il reassembling.

Flags — 3 bit
Controllo della frammentazione
  • Bit 0 (Reserved): sempre 0.
  • Bit 1 — DF (Don't Fragment): se impostato a 1, il router non deve frammentare il pacchetto. Se il pacchetto supera la MTU del link successivo, viene scartato e il mittente riceve un messaggio ICMP "Fragmentation Needed". Usato dal meccanismo Path MTU Discovery.
  • Bit 2 — MF (More Fragments): se impostato a 1, indica che esistono altri frammenti successivi. L'ultimo frammento ha MF = 0. Il destinatario sa che il datagramma è completo quando riceve un frammento con MF = 0.
Fragment Offset — 13 bit
Posizione del frammento nel datagramma originale

Indica la posizione dei dati del frammento rispetto all'inizio del payload del datagramma originale, espressa in unità di 8 byte. Il primo frammento ha offset = 0. Il destinatario usa Identification + Fragment Offset per riassemblare correttamente tutti i frammenti nell'ordine giusto, indipendentemente dall'ordine di arrivo.

TTL (Time to Live) — 8 bit
Limite di hop per prevenire loop di routing

Il TTL è decrementato di 1 da ogni router che elabora il pacchetto. Quando raggiunge 0, il router scarta il pacchetto e invia un messaggio ICMP Time Exceeded al mittente. Funzione: prevenire che pacchetti con destinazione irraggiungibile circolino indefinitamente nella rete a causa di loop di routing. Valori tipici: 64 (Linux), 128 (Windows), 255 (router Cisco). Lo strumento traceroute sfrutta il TTL inviando datagrammi con TTL incrementale per mappare il percorso.

Protocol — 8 bit
Protocollo del livello superiore (demultiplexing)

Identifica il protocollo di livello 4 incapsulato nel payload IP, permettendo al livello IP in ricezione di passare il datagramma al processo corretto (demultiplexing). Valori standardizzati da IANA: 6 = TCP, 17 = UDP, 1 = ICMP, 89 = OSPF, 41 = IPv6 encapsulato, 50 = ESP (IPsec).

Header Checksum — 16 bit
Integrità dell'header IP

Checksum calcolato solo sull'header IP (non sul payload). Viene ricalcolato da ogni router perché il TTL cambia a ogni hop. Algoritmo: complemento a 1 della somma dei complementi a 1 delle word da 16 bit dell'header. Se il checksum non corrisponde, il datagramma viene scartato silenziosamente. In IPv6 questo campo è stato eliminato per efficienza (la verifica dell'integrità è delegata ai livelli superiori).

Source / Destination IP Address — 32 bit ciascuno
Indirizzi IP sorgente e destinazione

Indirizzi IPv4 a 32 bit in notazione puntata (dotted-decimal). L'indirizzo sorgente identifica il mittente del datagramma; l'indirizzo destinazione identifica il ricevente. Sono i campi su cui si basa tutto il processo di routing. Attenzione: in presenza di NAT (Network Address Translation) l'indirizzo sorgente viene modificato dai router di bordo.

Indirizzamento IP — Architettura e struttura
Perché l'indirizzamento IP?

In una rete eterogenea composta da tecnologie diverse (Ethernet, Wi-Fi, ATM, PPP...) gli indirizzi fisici (MAC) sono specifici per ogni tecnologia e non sono gerarchici: non è possibile fare routing su di essi. L'indirizzamento IP introduce un piano di indirizzamento logico, gerarchico e uniforme, indipendente dalla tecnologia del link fisico sottostante. La gerarchia (rete + host) permette ai router di aggregare le rotte e costruire tabelle di routing scalabili.

Struttura di un indirizzo IPv4

Un indirizzo IPv4 è composto da 32 bit divisi in due parti logiche: il network prefix (identifica la rete) e il host portion (identifica l'host all'interno di quella rete). La suddivisione è determinata dalla subnet mask. In notazione CIDR si scrive 192.168.1.0/24 dove /24 indica che i primi 24 bit sono il network prefix.

  • Network Address: tutti i bit host a 0. Es. 192.168.1.0/24. Identifica la rete, non è assegnabile a un host.
  • Broadcast Address: tutti i bit host a 1. Es. 192.168.1.255/24. Un pacchetto inviato all'indirizzo broadcast è consegnato a tutti gli host della sottorete.
  • Indirizzi host: tutti gli indirizzi tra network e broadcast. In una /24: 256 - 2 = 254 host utilizzabili.
CIDR — Classless Inter-Domain Routing

Prima del CIDR esisteva il classful addressing: Classe A (/8), Classe B (/16), Classe C (/24). Questo schema era estremamente rigido e causava un enorme spreco di indirizzi (es. un'organizzazione con 300 host doveva ottenere una Classe B con 65.534 indirizzi). Il CIDR ha abolito le classi fisse permettendo prefix di qualsiasi lunghezza (Variable Length Subnet Masking, VLSM). Oggi si assegnano blocchi della dimensione strettamente necessaria.

La subnet mask in CIDR: /24 = 255.255.255.0; /25 = 255.255.255.128; /30 = 255.255.255.252 (solo 2 host: usata per link punto-punto tra router).

Indirizzi privati e NAT

Lo spazio di indirizzamento IPv4 a 32 bit teoricamente permette circa 4,3 miliardi di indirizzi. L'esaurimento degli indirizzi pubblici ha portato a riservare blocchi di indirizzi privati (non instradabili su Internet):

  • 10.0.0.0/8 — Classe A privata (16.777.214 host)
  • 172.16.0.0/12 — Classe B privata (1.048.574 host)
  • 192.168.0.0/16 — Classe C privata (65.534 host)

Il meccanismo NAT (Network Address Translation) permette a host con indirizzi privati di accedere a Internet traducendo gli indirizzi privati in uno o pochi indirizzi pubblici. Il router NAT mantiene una NAT table che mappa coppie (IP privato : porta sorgente) ↔ (IP pubblico : porta NAT).

Indirizzi speciali
  • 0.0.0.0/0 — Default route
  • 127.0.0.0/8 — Loopback
  • 169.254.0.0/16 — APIPA (link-local)
  • 224.0.0.0/4 — Multicast
  • 255.255.255.255 — Broadcast limitato
Calcolo rete da CIDR
  • IP: 192.168.10.130/26
  • Mask: 255.255.255.192
  • Network: AND bit a bit IP&Mask
  • 192.168.10.128/26
  • Broadcast: 192.168.10.191
  • Host range: .129 – .190 (62 host)
Subnetting logica
  • Ogni bit sottratto all'host raddoppia il numero di reti
  • n bit host → 2n - 2 host
  • /30 → 4 indirizzi, 2 host
  • /29 → 8 indirizzi, 6 host
  • /28 → 16 indirizzi, 14 host
  • /27 → 32 indirizzi, 30 host
Cos'è un Router

Un router è un dispositivo di livello 3 (Network) che interconnette reti diverse e instrada i pacchetti IP tra di esse. A differenza degli switch (che operano a L2 e instradano frame in base agli indirizzi MAC all'interno di una stessa rete), il router prende decisioni di forwarding basate sugli indirizzi IP di destinazione dei pacchetti, permettendo la comunicazione tra reti logicamente distinte. Ogni interfaccia del router appartiene a una rete IP diversa e ha un proprio indirizzo IP.

Il router svolge tre funzioni principali: Addressing (assegna e gestisce gli indirizzi IP sulle proprie interfacce), Routing (decide il percorso migliore per ogni pacchetto consultando la routing table) e Fragmentation (se un pacchetto è troppo grande per il link di uscita, lo suddivide in frammenti più piccoli compatibili con la MTU di quel link).

Componenti hardware interni di un router
CPU (Central Processing Unit)
Processore principale

È il "cervello" del router. Esegue il sistema operativo del router (es. Cisco IOS, JunOS) e i protocolli di routing dinamico (OSPF, BGP, RIP, EIGRP). La CPU gestisce anche la configurazione del dispositivo, le sessioni di management (SSH, SNMP), il calcolo delle tabelle di routing e la risposta ai messaggi di controllo come ICMP. Nei router moderni, la CPU non si occupa del forwarding normale dei pacchetti (che avviene in hardware dedicato) ma solo dei pacchetti speciali o delle eccezioni.

RAM (Random Access Memory)
Memoria di lavoro

È la memoria volatile principale del router. Contiene tutto ciò che il router usa durante il funzionamento: la routing table (tabella delle rotte attive, detta anche RIB — Routing Information Base), la ARP table (mappatura IP↔MAC), i buffer dei pacchetti in transito (code di ingresso e uscita), la configurazione in esecuzione (running-config) e lo stato dei protocolli di routing attivi. Se il router viene spento, tutto il contenuto della RAM viene perso. Più RAM significa routing table più grande e buffer più profondi.

NVRAM / Flash (Memoria non volatile)
Archiviazione persistente

Il router usa due tipi di memoria permanente. La NVRAM (Non-Volatile RAM) contiene la configurazione di avvio (startup-config): le impostazioni salvate che il router carica all'accensione. La memoria Flash (simile a una chiavetta USB interna) contiene l'immagine del sistema operativo del router (il firmware). Queste memorie non perdono i dati in assenza di alimentazione. Quando si salva la configurazione con il comando write memory, la running-config dalla RAM viene copiata nella NVRAM.

Cache / FIB (Forwarding Information Base)
Tabella di forwarding veloce

Per evitare che la CPU debba consultare la routing table completa per ogni singolo pacchetto (operazione lenta), i router moderni mantengono una FIB (Forwarding Information Base): una versione ottimizzata e precompilata della routing table, caricata direttamente nelle ASIC (chip hardware dedicati al forwarding). Questa cache hardware consente il forwarding a velocità di linea — cioè alla massima velocità del link — senza coinvolgere la CPU. La FIB viene aggiornata ogni volta che la routing table cambia.

Porte e matrice di commutazione
Input Ports
Porte di ingresso

Terminano il link fisico in ingresso. Eseguono le funzioni del livello fisico (ricezione segnale), del livello data-link (decapsulamento del frame) e del livello network (lookup nella FIB per determinare la porta di uscita). Le implementazioni moderne eseguono il lookup a velocità di linea per evitare colli di bottiglia.

Switching Fabric
Matrice di commutazione

Il "cuore" del router: trasferisce i pacchetti dalla porta di ingresso a quella di uscita. Tre architetture principali: via memoria (tradizionale, collo di bottiglia sul bus), via bus condiviso (veloce ma un pacchetto alla volta sul bus), via rete di interconnessione (crossbar switch, parallela, alta performance; usata nei router enterprise).

Output Ports
Porte di uscita

Accodano i pacchetti da trasmettere (output queue/buffer), eseguono lo scheduling (quale pacchetto trasmettere per primo in caso di congestione: FIFO, WFQ, Priority Queuing) e il framing per il layer data-link del link di uscita. Il buffer è necessario perché i pacchetti possono arrivare più velocemente di quanto possano essere trasmessi.

Routing Processor
Processore di routing

Esegue i protocolli di routing (OSPF, BGP, RIP, EIGRP), mantiene e aggiorna la Routing Information Base (RIB), e calcola la Forwarding Information Base (FIB) installata sulle porte di input per il forwarding a velocità di linea. Gestisce anche SNMP, SSH di management, e le configurazioni.

Funzioni del router: addressing, routing e fragmentation
Funzione 1
Addressing — Gestione degli indirizzi IP

Ogni interfaccia fisica del router deve avere un indirizzo IP appartenente alla rete a cui è connessa. Questo indirizzo funge da default gateway per gli host di quella rete: quando un host deve inviare un pacchetto a una rete diversa dalla propria, lo indirizza al router come primo hop. Il router gestisce anche la propria ARP table, associando gli indirizzi IP dei vicini diretti ai loro indirizzi MAC, necessari per costruire i frame di livello 2 sui singoli link.

Funzione 2
Routing — Instradamento diretto e indiretto

Instradamento Diretto: mittente e destinatario si trovano nella stessa rete IP (stesso network prefix). Il mittente esegue un AND bit a bit tra l'IP di destinazione e la propria subnet mask: se il risultato coincide con il proprio network address, la destinazione è nella stessa rete. Il pacchetto viene consegnato direttamente tramite ARP, senza coinvolgere il router.

Instradamento Indiretto: mittente e destinatario si trovano in reti IP diverse. Il mittente invia il pacchetto al default gateway. Il router riceve il pacchetto, esamina l'IP di destinazione, consulta la propria routing table / FIB e applica il principio del Longest Prefix Match (LPM): tra tutte le voci che matchano l'IP di destinazione, viene selezionata quella con il prefix più lungo (più specifico). Ad ogni hop il router decrementa il TTL di 1, ricalcola il checksum IP e sostituisce l'indirizzo MAC di destinazione del frame con quello del prossimo hop.

Le rotte possono essere statiche (configurate manualmente, nessun overhead di protocollo, usate per reti piccole) oppure dinamiche (apprese tramite protocolli come OSPF, BGP, RIP, EIGRP — si adattano automaticamente ai guasti di rete).

Funzione 3
Fragmentation — Frammentazione dei pacchetti

Ogni link di rete ha una MTU (Maximum Transmission Unit): la dimensione massima di un frame che può essere trasmesso su quel link (Ethernet standard: 1500 byte). Quando un pacchetto IP che deve attraversare un link ha una dimensione superiore alla MTU di quel link, il router esegue la frammentazione: suddivide il datagramma originale in più frammenti più piccoli, ciascuno con il proprio header IP.

Ogni frammento porta lo stesso valore di Identification del datagramma originale (così il destinatario sa che appartengono allo stesso messaggio), un Fragment Offset che indica la posizione dei suoi dati nel flusso originale, e il flag MF (More Fragments) impostato a 1 (tranne l'ultimo frammento). Il riassemblaggio avviene esclusivamente alla destinazione finale, non nei router intermedi. Se il bit DF (Don't Fragment) è impostato nell'header e il pacchetto supera la MTU, il router scarta il pacchetto e invia un messaggio ICMP al mittente.

DNS — Domain Name System

Il DNS è il sistema distribuito e gerarchico che risolve i nomi di dominio (es. www.example.com) nei corrispondenti indirizzi IP e viceversa. È un'infrastruttura critica di Internet: senza DNS ogni utente dovrebbe memorizzare gli indirizzi IP numerici. Il DNS è progettato come un database distribuito con gerarchia ad albero, non esiste un singolo server centrale. Opera prevalentemente su UDP porta 53 (per query standard) e su TCP porta 53 per trasferimenti di zona e query con risposta superiore a 512 byte.

Domain Name Space — struttura gerarchica
Root Domain

La radice dell'albero DNS è il root domain, rappresentato da un punto finale implicito (.). Esistono 13 indirizzi IP logici di root server (lettere da A a M: es. a.root-servers.net), gestiti da diverse organizzazioni mondiali (ICANN, VeriSign, ecc.), replicati tramite anycast in centinaia di nodi fisici distribuiti globalmente. Conoscono soltanto i name server autoritativi dei TLD.

TLD — Top Level Domain

Il primo livello sotto la radice. Si distinguono:

  • gTLD (generic): .com, .org, .net, .edu, .gov, .int, e i nuovi gTLD (.tech, .io, .ai, ecc.)
  • ccTLD (country-code): .it, .uk, .de, .fr, .us — assegnati per ISO 3166.
  • Infrastructure TLD: .arpa (usato per DNS inverso, reverse DNS).

I TLD server conoscono i name server autoritativi per i second-level domain registrati sotto di essi.

Domini, sottodomini e zone DNS

La gerarchia si estende verso il basso: il second-level domain è la parte controllata dall'organizzazione (example in example.com). I sottodomini sono ulteriori suddivisioni (mail.example.com, api.example.com). Il nome completo da sinistra alla radice è il FQDN (Fully Qualified Domain Name).

Una zona DNS è una porzione contigua dell'albero dei nomi gestita in modo unitario da un insieme di name server. Una zona può corrispondere a un dominio o essere suddivisa in zone più piccole tramite delega (creando una zona figlia con propri name server). La zona è descritta in un file di testo strutturato: il zone file.

Name Server — tipologie
Authoritative Name Server

Detiene i record DNS ufficiali per una zona. Risponde con autorità alle query su nomi di quella zona (flag AA=1 nella risposta). Ha due ruoli: Primary (legge i record dal zone file locale, unica fonte di verità) e Secondary (copia periodicamente i record dal primary via Zone Transfer — AXFR/IXFR — per ridondanza e bilanciamento).

Recursive Resolver (Caching NS)

Riceve le query dei client, esegue la risoluzione ricorsiva per conto loro e memorizza le risposte nella cache. È il server DNS configurato nei client (spesso fornito dall'ISP o servizi pubblici come 8.8.8.8 Google, 1.1.1.1 Cloudflare). Non ha autorità sui dati che restituisce: è un intermediario.

Processo di risoluzione DNS
Risoluzione Ricorsiva (Recursive Resolution)
Il resolver fa tutto il lavoro

Il client invia una query al proprio resolver ricorsivo (configurato nel sistema operativo). Il resolver si occupa di tutta la catena di interrogazioni e restituisce al client solo la risposta finale. Il client delega completamente la risoluzione al resolver. Questo è il comportamento standard per i client finali (browser, sistema operativo).

  • Vantaggio: il client è semplice, non conosce l'architettura DNS.
  • Svantaggio: il resolver è sotto pressione — deve gestire migliaia di richieste concorrenti.
Risoluzione Iterativa (Iterative Resolution)
Il resolver fa i salti, ogni server indica il prossimo

Nella risoluzione iterativa, il resolver ricorsivo interroga i server uno per volta. Ogni server risponde con il migliore riferimento disponibile (referral) verso il server successivo, invece di risolvere completamente. Il resolver deve interrogare autonomamente ogni livello:

  1. Resolver interroga un root server → risposta: "non so, ma ecco i NS per .com"
  2. Resolver interroga il TLD server per .com → risposta: "non so, ma ecco i NS per example.com"
  3. Resolver interroga l'authoritative NS per example.com → risposta: "l'IP di www.example.com è 93.184.216.34"
  4. Resolver restituisce la risposta al client e la mette in cache.

Questo è il meccanismo con cui lavorano effettivamente i resolver ricorsivi verso i server autoritativi.

DNS Cache e TTL

Ogni risposta DNS include un valore TTL (Time To Live) specificato dall'amministratore della zona nel record. Il resolver e i sistemi operativi memorizzano nella cache le risposte per la durata del TTL. Durante questo intervallo, le query successive per lo stesso nome vengono risolte localmente senza interrogare i server autoritativi. Benefici: riduzione drastica del traffico DNS globale e diminuzione della latenza percepita dall'utente.

Tipi di record DNS
A / AAAA

A: mappa un hostname a un indirizzo IPv4 (32 bit). AAAA: mappa un hostname a un indirizzo IPv6 (128 bit). Sono i record più fondamentali del DNS.

NS (Name Server)

Indica quali sono i name server autoritativi per la zona. Ogni zona deve avere almeno 2 record NS (primario + secondario) per ridondanza.

MX (Mail Exchanger)

Indica il server di posta elettronica responsabile per un dominio. Ha un campo di priorità: il server con valore più basso ha la precedenza. Consente di avere più server di posta con priorità diverse.

CNAME (Canonical Name)

Alias: mappa un nome a un altro nome (nome canonico). Es. www.example.com → example.com. Il resolver segue la catena fino a trovare un record A. Un CNAME non può coesistere con altri record sullo stesso nodo.

PTR (Pointer)

Usato per il DNS inverso (reverse DNS): mappa un indirizzo IP a un hostname. I record PTR sono nella zona speciale in-addr.arpa (IPv4) o ip6.arpa (IPv6). Usati da sistemi anti-spam e logging.

SOA (Start of Authority)

Record obbligatorio per ogni zona. Contiene: nome del primary NS, email dell'amministratore, serial number (versione del zone file), refresh/retry/expire per i secondari, e TTL minimo.

TXT

Testo arbitrario. Usato per SPF (Sender Policy Framework), DKIM, DMARC (autenticazione email), verifica del dominio per certificati SSL, e altro.

SRV

Specifica la posizione di servizi specifici. Formato: _service._proto.name TTL class SRV priority weight port target. Usato da SIP, XMPP, Microsoft AD, ecc.

Struttura del messaggio DNS e trasporto
Formato del messaggio DNS

Query e response DNS condividono lo stesso formato di messaggio a 5 sezioni:

  • Header (12 byte fissi): Transaction ID (16 bit, correlazione query/response), Flags (QR, Opcode, AA, TC, RD, RA, Z, RCODE), contatori delle sezioni (QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNT).
  • Question Section: QNAME (nome richiesto in formato label), QTYPE (tipo di record: A=1, NS=2, CNAME=5, MX=15, AAAA=28...), QCLASS (IN=1 per Internet).
  • Answer Section: RR (Resource Record) che rispondono alla query.
  • Authority Section: RR NS che indicano i name server autoritativi.
  • Additional Section: RR ausiliari, spesso gli A record dei name server citati nella Authority Section (glue records).

Il campo TC (Truncation) nell'header è impostato a 1 se la risposta è stata troncata perché supera i 512 byte consentiti su UDP. In quel caso il client deve ripetere la query su TCP porta 53. Con EDNS0 (Extension Mechanisms for DNS) è possibile negoziare payload UDP fino a 4096 byte, riducendo il ricorso a TCP.

DHCP — Dynamic Host Configuration Protocol

Il DHCP è un protocollo applicativo che automatizza la configurazione IP dei dispositivi su una rete. Senza DHCP, ogni host richiederebbe configurazione manuale di tutti i parametri di rete, con rischio di conflitti e errori. DHCP è un'estensione di BOOTP (Bootstrap Protocol), opera sul modello client-server e si basa su messaggi broadcast: il client, non avendo ancora un indirizzo IP, non può effettuare comunicazioni unicast verso il server.

Parametri forniti dal server DHCP
  • Indirizzo IP dell'host (dal pool configurato)
  • Subnet mask della rete
  • Default gateway (indirizzo del router di accesso)
  • DNS server (indirizzi dei resolver DNS da usare)
  • Lease time (durata del prestito dell'indirizzo IP)
  • Opzionalmente: WINS server, NTP server, domain name, proxy, ecc.
Livello operativo e porte

DHCP opera al livello applicativo (L7) utilizzando il protocollo di trasporto UDP perché è un protocollo broadcast e non richiede la garanzia di consegna di TCP. Le porte standard sono:

  • UDP porta 67: utilizzata dal server DHCP per ricevere le richieste dai client.
  • UDP porta 68: utilizzata dal client DHCP per ricevere le risposte dal server.

Poiché DHCP è basato su broadcast, i messaggi non attraversano i router per default. In reti con più sottoreti, si configura un DHCP Relay Agent (solitamente il router di accesso) che intercetta le richieste DHCP broadcast locali e le inoltra in unicast al server DHCP centralizzato, reinserendo nell'opzione giaddr l'indirizzo dell'interfaccia del relay.

Processo DORA — Le 4 fasi di configurazione
Fase 1 — DISCOVER
DHCPDISCOVER — Il client si annuncia

Il client, privo di indirizzo IP, invia un messaggio DHCPDISCOVER come broadcast a livello IP (255.255.255.255) e MAC (FF:FF:FF:FF:FF:FF), con indirizzo sorgente IP 0.0.0.0. Il messaggio contiene il MAC address del client come identificatore e la porta sorgente UDP 68. Tutti i server DHCP sulla rete ricevono questo messaggio. L'obiettivo è scoprire quali server DHCP sono disponibili.

Fase 2 — OFFER
DHCPOFFER — Il server propone un indirizzo

Ogni server DHCP che riceve il DISCOVER risponde con un messaggio DHCPOFFER in broadcast (o unicast se il client lo supporta), contenente: l'indirizzo IP offerto (scelto dal pool disponibile e temporaneamente riservato), la subnet mask, il gateway predefinito, i DNS server, la durata del lease proposta, e l'indirizzo IP del server DHCP offerente (campo Server Identifier). Il campo MAC del client consente al client di riconoscere la propria offer.

Fase 3 — REQUEST
DHCPREQUEST — Il client sceglie un'offerta

Il client può ricevere più DHCPOFFER da più server. Seleziona la prima offerta ricevuta (tipicamente) e invia un messaggio DHCPREQUEST in broadcast (ancora, perché non ha ancora un IP confermato) che contiene il Server Identifier del server scelto. Questo messaggio ha due funzioni: conferma al server scelto che accetta la sua offerta, e informa tutti gli altri server che le loro offerte sono rifiutate (permettendo loro di liberare gli indirizzi temporaneamente riservati e riportarli nel pool). Il DHCPREQUEST viene anche usato per il rinnovo del lease.

Fase 4 — ACKNOWLEDGE
DHCPACK — Il server conferma la configurazione

Il server selezionato invia un messaggio DHCPACK al client contenente la configurazione definitiva: indirizzo IP assegnato, subnet mask, gateway, DNS, e la durata del lease. Con la ricezione dell'ACK il client esegue un controllo ARP (Gratuitous ARP) per verificare che nessun altro host nella rete stia già usando quell'indirizzo IP (conflitto). Se nessuno risponde, il client applica la configurazione e l'interfaccia di rete diventa operativa.

Gestione del Lease — Rinnovo e scadenza
Lease Time e meccanismo di rinnovo
Primo tentativo — al 50% del Lease Time (T₁ = 0.5T)

Quando è trascorso il 50% del lease time, il client invia un messaggio DHCPREQUEST in unicast direttamente al server DHCP originale (di cui conosce l'IP). Se il server risponde con DHCPACK, il lease viene rinnovato (T riparte da zero).

Secondo tentativo — finestra 50%–87.5%

Se il primo tentativo è fallito e il client si riavvia nel periodo tra il 50% e l'87.5% del lease time, all'avvio tenta nuovamente di rinnovare inviando un DHCPREQUEST unicast allo stesso server.

Terzo tentativo — all'87.5% del Lease Time (T₂ = 0.875T)

All'87.5% del lease time, il client invia un DHCPREQUEST broadcast a qualsiasi server DHCP disponibile sulla rete. Se almeno un server risponde con DHCPACK, il lease viene rinnovato.

Scadenza del Lease

Allo scadere del lease time senza rinnovo riuscito, il client rilascia l'indirizzo IP (opzionalmente invia un DHCPRELEASE al server) e l'interfaccia di rete torna non configurata. Il client riavvia il processo DORA completo inviando un nuovo DHCPDISCOVER in broadcast.

Capitolo
Livello Trasporto
Il livello di trasporto: comunicazione end-to-end

Il livello di trasporto si occupa della comunicazione diretta tra i processi applicativi in esecuzione sugli host di una rete. Mentre il livello IP garantisce solo il trasporto del pacchetto da un host all'altro (senza garanzie), il livello di trasporto offre servizi aggiuntivi ai processi: multiplexing tramite porte, controllo degli errori, ordinamento dei dati. I due protocolli fondamentali sono TCP (affidabile, orientato alla connessione) e UDP (veloce, senza connessione).

TCP — Transmission Control Protocol

TCP è il protocollo di trasporto connection-oriented, full-duplex, affidabile e orientato al flusso di byte. Offre: garanzia di consegna di tutti i byte, ordinamento (i byte arrivano nell'ordine in cui sono stati inviati), controllo di flusso (non sovraccaricare il ricevitore), controllo di congestione (non sovraccaricare la rete), rilevazione e correzione degli errori. Opera tra coppie di socket (IP:porta) e mantiene stato per tutta la durata della connessione (stateful). TCP segmenta il flusso di byte in segmenti TCP che vengono incapsulati in datagrammi IP.

Three-Way Handshake — Apertura della connessione
Instaurazione della connessione TCP

Prima di qualsiasi scambio di dati, TCP deve instaurare la connessione tramite una procedura a tre passi (3-way handshake) che sincronizza i numeri di sequenza iniziali (ISN) di entrambi i lati:

  • Step 1 — SYN: il client invia un segmento con il flag SYN=1 e un numero di sequenza casuale ISN_C. Il client entra nello stato SYN_SENT.
  • Step 2 — SYN-ACK: il server riceve il SYN, entra nello stato SYN_RECEIVED, e risponde con i flag SYN=1 e ACK=1. Il campo Acknowledgment Number è ISN_C + 1. Il server include il proprio ISN_S.
  • Step 3 — ACK: il client risponde con ACK=1. Il campo Acknowledgment Number è ISN_S + 1. La connessione è ora ESTABLISHED su entrambi i lati.

La randomizzazione degli ISN è fondamentale per la sicurezza: previene attacchi TCP Session Hijacking e IP Spoofing. La chiusura della connessione avviene con uno scambio FIN/ACK a 4 passi (four-way teardown), o con un RST per chiusura immediata abortiva.

TCP Header — Struttura completa
bit 0–7 bit 8–15 bit 16–23 bit 24–31
Byte 0 Source Port (16 bit) Destination Port (16 bit)
Byte 4 Sequence Number (32 bit)
Byte 8 Acknowledgment Number (32 bit)
Byte 12 Data Offset (4) Res (3) Flags: NS CWR ECE URG ACK PSH RST SYN FIN (9) Window Size (16 bit)
Byte 16 Checksum (16 bit) Urgent Pointer (16 bit)
Byte 20+ Options (variabile, padding a multiplo di 32 bit)
Descrizione dettagliata dei campi TCP
Source Port / Destination Port — 16 bit ciascuno

Identificano il processo mittente e destinatario tramite il numero di porta (0–65535). La coppia (IP sorgente, porta sorgente, IP destinazione, porta destinazione) forma una connessione TCP univoca (socket pair). Le porte 0–1023 sono well-known (HTTP=80, HTTPS=443, SSH=22, FTP=21). Le porte 1024–49151 sono registered. Le porte 49152–65535 sono porte effimere assegnate dinamicamente ai client.

Sequence Number — 32 bit

Numero che identifica la posizione nel flusso di byte del primo byte di payload contenuto in questo segmento. Permette al ricevitore di riordinare i segmenti arrivati fuori sequenza e di rilevare i duplicati. Nel segmento SYN, il Sequence Number contiene l'ISN (Initial Sequence Number) scelto casualmente. Con 32 bit il numero wrappa a 0 dopo 4 GB di dati trasmessi.

Acknowledgment Number — 32 bit

Valido solo se il flag ACK è impostato. Contiene il numero di sequenza del prossimo byte che il ricevitore si aspetta di ricevere. Implementa un ACK cumulativo: un valore ACK=N conferma la ricezione di tutti i byte fino a N-1. Questo campo è il meccanismo base della conferma di ricezione e del controllo degli errori in TCP.

Data Offset — 4 bit

Indica la lunghezza dell'header TCP in word da 32 bit (analogamente all'IHL in IP). Valore minimo: 5 (20 byte, senza opzioni). Valore massimo: 15 (60 byte). Necessario per determinare dove inizia il payload dato che il campo Options ha lunghezza variabile.

Flags di controllo — 9 bit (URG, ACK, PSH, RST, SYN, FIN + NS, CWR, ECE)
I flag TCP — significato operativo
  • SYN: sincronizzazione — usato nell'apertura della connessione (handshake).
  • ACK: acknowledgment — il campo Acknowledgment Number è valido.
  • FIN: fine — il mittente ha terminato l'invio di dati (chiusura ordinata).
  • RST: reset — chiusura immediata e abortiva della connessione.
  • PSH: push — il ricevitore deve consegnare immediatamente i dati all'applicazione senza attendere il riempimento del buffer.
  • URG: urgent — il campo Urgent Pointer è valido; i dati urgenti devono essere processati con priorità.
  • ECE / CWR: usati con ECN (Explicit Congestion Notification) per segnalare la congestione senza perdita di pacchetti.
  • NS: nonce sum — sperimentale, protezione contro alterazioni accidentali dei bit ECN.
Window Size — 16 bit
Dimensione della finestra di ricezione — controllo di flusso

Indica il numero di byte che il ricevitore è in grado di accettare nel proprio buffer di ricezione. Il mittente non deve trasmettere più byte non ancora confermati di quanti indicato dalla Window Size del ricevitore. Valore massimo nominale: 65.535 byte. Con l'opzione Window Scale la finestra può essere moltiplicata per un fattore fino a 214, raggiungendo fino a ~1 GB di finestra. Se Window Size = 0, il mittente deve fermarsi (zero-window probing).

Checksum — 16 bit

Verifica l'integrità dell'header TCP e del payload applicativo. A differenza del checksum IP (solo header), il checksum TCP copre anche i dati. Il calcolo include uno pseudo-header contenente IP sorgente, IP destinazione, protocollo (6) e lunghezza TCP. In TCP il checksum è obbligatorio.

Urgent Pointer — 16 bit

Valido solo se il flag URG è impostato. Indica un offset positivo dal numero di sequenza corrente che punta all'ultimo byte urgente nel segmento. I dati urgenti (out-of-band) vengono consegnati all'applicazione con priorità rispetto al flusso normale. Poco usato nella pratica moderna.

UDP — User Datagram Protocol

UDP è il protocollo di trasporto connectionless, senza stato (stateless), inaffidabile e best-effort. Non offre garanzie di consegna, né di ordinamento, né di rilevazione di duplicati. Non prevede handshake, controllo di flusso, né controllo di congestione. Ogni datagramma UDP è completamente indipendente dagli altri e può percorrere percorsi diversi nella rete. L'header UDP è fisso a 8 byte, contro i 20+ byte di TCP.

Struttura dell'header UDP
bit 0–7 bit 8–15 bit 16–23 bit 24–31
Byte 0 Source Port (16 bit) Destination Port (16 bit)
Byte 4 Length (16 bit) Checksum (16 bit)
Byte 8+ Data (payload — variabile)
Descrizione dei campi dell'header UDP
Source Port — 16 bit

Numero di porta del processo mittente. Consente al destinatario di inviare risposte. In alcuni protocolli (es. DNS query da client) può essere una porta effimera casuale assegnata dal SO.

Destination Port — 16 bit

Numero di porta del processo destinatario. Porte well-known rilevanti per UDP: DNS (53), DHCP server (67), DHCP client (68), TFTP (69), SNMP (161), NTP (123), RIP (520), QUIC (443).

Length — 16 bit

Lunghezza totale del datagramma UDP in byte, inclusi header (8 byte fissi) e payload. Valore minimo: 8 (datagramma senza payload). Dimensione massima del payload: 65.535 - 8 = 65.527 byte.

Checksum — 16 bit

Verifica dell'integrità di header e payload. In IPv4 il checksum UDP è opzionale (un valore di 0 indica che non è stato calcolato); in IPv6 è obbligatorio. Come in TCP, il calcolo include uno pseudo-header con IP sorgente, IP destinazione, protocollo (17=UDP) e lunghezza.

Quando si usa UDP
Casi d'uso di UDP rispetto a TCP
  • Latenza ultra-bassa: il round-trip dell'handshake TCP è inaccettabile. UDP trasmette immediatamente. Usato in: DNS, DHCP, NTP, giochi online, VoIP, videoconferenze (WebRTC).
  • Perdita tollerabile: in streaming audio/video real-time, un pacchetto perso causa al massimo un breve glitch; la ritrasmissione arriverebbe troppo tardi per essere utile.
  • Multicast/Broadcast: TCP è point-to-point. UDP supporta nativamente multicast e broadcast. Usato da: DHCP, RIP, mDNS, SSDP.
  • Applicazioni con affidabilità personalizzata: QUIC (HTTP/3) usa UDP ma implementa multiplexing di stream, controllo di congestione e crittografia a livello applicativo.
  • Transazioni semplici richiesta-risposta: DNS, SNMP, TFTP — un singolo scambio di messaggi dove l'overhead del TCP non vale la pena.
Sliding Window — Finestra scorrevole
Il problema: stop-and-wait

Senza la sliding window, TCP userebbe un approccio detto stop-and-wait: il mittente invia un segmento, poi si ferma e aspetta che il destinatario risponda con un ACK prima di poter inviare il segmento successivo. Su una connessione con latenza alta (es. un link intercontinentale con RTT di 150 ms) si potrebbero inviare solo pochi segmenti al secondo, sprecando la quasi totalità della banda disponibile.

La soluzione: più segmenti contemporaneamente in volo

La sliding window risolve il problema permettendo al mittente di inviare più segmenti consecutivi senza aspettare l'ACK di ognuno. Questi segmenti si trovano "in volo" sulla rete contemporaneamente. La finestra definisce il numero massimo di byte che possono essere in volo in ogni momento. Finché la finestra non è piena, il mittente può continuare a inviare.

Come è organizzato il buffer del mittente
  • Zona 1 — Inviati e confermati: il destinatario ha già ricevuto e confermato questi dati con un ACK. Possono essere eliminati dal buffer.
  • Zona 2 — Inviati ma non ancora confermati (in-flight): il mittente li mantiene in memoria perché, se scade il timer di ritrasmissione, dovrà rispedirli. Occupano spazio nella finestra corrente.
  • Zona 3 — Non inviati ma dentro la finestra (usable window): dati pronti per essere trasmessi immediatamente, senza aspettare ulteriori ACK.
  • Zona 4 — Oltre la finestra: dati che il mittente non può ancora inviare perché la finestra è piena o perché il ricevitore non ha ancora dichiarato di avere abbastanza spazio nel buffer.
Due finestre che lavorano insieme: rwnd e cwnd
  • rwnd (Receive Window): è comunicata dal ricevitore al mittente tramite il campo Window Size dell'header TCP. Indica quanti byte il ricevitore riesce ad accettare nel suo buffer in quel momento. Questo meccanismo si chiama controllo di flusso.
  • cwnd (Congestion Window): è gestita dal mittente in modo autonomo e stima quanti dati la rete riesce a gestire senza andare in congestione. Questo meccanismo si chiama controllo di congestione.

La finestra effettiva è sempre il minimo tra rwnd e cwnd.

Come cresce e si riduce la finestra di congestione (cwnd)
  • Slow Start: all'inizio ogni connessione TCP parte con una cwnd piccola e la aumenta in modo esponenziale ad ogni RTT finché tutto va bene.
  • Congestion Avoidance: quando cwnd supera la soglia ssthresh, la crescita diventa lineare: la finestra cresce di un segmento per ogni RTT completo.
  • Rilevamento della congestione: se un ACK non arriva entro il timeout, TCP riduce drasticamente cwnd e riparte con Slow Start. Con 3 ACK duplicati la reazione è meno drastica: cwnd viene ridotta a metà (Fast Retransmit e Fast Recovery).
Ritrasmissione e gestione degli errori

Quando un segmento si perde, il mittente lo scopre o per scadenza del timer RTO o per ricezione di tre ACK duplicati. Il meccanismo SACK (Selective Acknowledgment) permette al ricevitore di segnalare esattamente quali blocchi di byte ha ricevuto fuori ordine: il mittente può ritrasmettere solo i segmenti effettivamente mancanti, senza rispedire tutto ciò che viene dopo il punto di perdita.

TCP
Connessione

Connection-oriented (3-way handshake)

Affidabilità

Garantita (ACK, ritrasmissione, ordinamento)

Controllo flusso

Sì (sliding window, rwnd)

Controllo congestione

Sì (AIMD, Slow Start, cwnd)

Overhead header

20–60 byte

Latenza

Più alta (handshake + controllo)

Multicast

Non supportato

Casi d'uso

HTTP/S, SSH, FTP, SMTP, database

UDP
Connessione

Connectionless (nessun handshake)

Affidabilità

Best-effort (nessuna garanzia)

Controllo flusso

No

Controllo congestione

No (l'app deve gestirlo)

Overhead header

8 byte (fisso)

Latenza

Minima (trasmissione immediata)

Multicast

Supportato nativamente

Casi d'uso

DNS, DHCP, streaming, VoIP, QUIC

Capitolo
Posta Elettronica — Architettura e Protocolli
Panoramica del sistema di posta elettronica

Il sistema di posta elettronica di Internet è composto da un insieme di agenti software e protocolli standardizzati che collaborano per trasportare un messaggio dal mittente al destinatario attraverso reti eterogenee. L'architettura è di tipo store-and-forward: ogni messaggio viene ricevuto, memorizzato e poi inoltrato al nodo successivo, garantendo la consegna anche in presenza di temporanee indisponibilità del destinatario. I tre protocolli fondamentali sono:

  • SMTP (Simple Mail Transfer Protocol): protocollo di trasmissione — invia i messaggi dal client al server e tra server.
  • POP3 (Post Office Protocol v3): protocollo di accesso — scarica i messaggi dal server al client (modello offline).
  • IMAP (Internet Mail Access Protocol): protocollo di accesso — accede ai messaggi sul server mantenendoli centralizzati (modello online).
Componenti architetturali del sistema email
MUA — Mail User Agent
Client di posta dell'utente

Il programma con cui l'utente compone, invia, riceve e legge le email. Esempi: Outlook, Thunderbird, Apple Mail, Gmail (WebUI). Il MUA comunica con il proprio mail server usando SMTP per l'invio e POP3/IMAP per la ricezione. È l'interfaccia tra l'utente umano e il sistema di posta.

MTA — Mail Transfer Agent
Server di trasferimento

Riceve i messaggi dal MUA (o da un altro MTA) e li instrada verso la destinazione. Usa il DNS per risolvere il record MX del dominio destinatario, trovare l'IP del server di posta destinatario e stabilire una connessione SMTP. Esempi: Postfix, Sendmail, Microsoft Exchange, Exim. Ogni hop SMTP è un MTA.

MSA — Mail Submission Agent
Agente di sottomissione

Riceve il messaggio dal MUA per conto del server. Si occupa di autenticare il mittente, verificare la conformità del messaggio e aggiungere l'header Received: iniziale. Accetta il messaggio sulla porta 587 (submission) o 465 (SMTPS).

MDA — Mail Delivery Agent
Agente di consegna finale

Riceve il messaggio dall'MTA del dominio destinatario e lo consegna nella mailbox dell'utente sul server. Esempi: Procmail, Dovecot LDA, Maildrop. La mailbox può essere in formato mbox (un singolo file) o Maildir (una cartella con un file per messaggio). Il MDA non contatta altri server: è l'ultimo hop della catena SMTP.

Il record MX — Come il DNS instrada le email

Quando un MTA deve consegnare un messaggio a utente@example.com, consulta il DNS per trovare il record MX (Mail Exchanger) del dominio. Il record MX associa un dominio a uno o più mail server, ognuno con un valore di priorità numerico. Il server con il valore più basso ha la precedenza. Solo se non è raggiungibile si prova il successivo.

example.com. IN MX 10 mail1.example.com. ; priorità primaria example.com. IN MX 20 mail2.example.com. ; backup mail1.example.com. IN A 93.184.216.10

Il processo: MTA mittente → query DNS MX per example.com → riceve i record MX, ordina per priorità → tenta connessione SMTP sulla porta 25 a mail1.example.com.

RFC 5321 — aggiorna RFC 2821 e RFC 821
SMTP — Simple Mail Transfer Protocol

SMTP è il protocollo standard per la trasmissione delle email. Opera al livello applicativo e usa TCP come trasporto. È un protocollo testuale, stateful e connection-oriented: la sessione mantiene uno stato e i comandi sono stringhe ASCII leggibili. SMTP è un protocollo push: il mittente stabilisce attivamente la connessione verso il server destinatario per consegnare il messaggio.

Porte SMTP
Porta 25 — SMTP Relay
MTA-to-MTA (server to server)

Porta storica per il trasferimento tra server MTA su Internet. I client non la usano direttamente: gli ISP la bloccano in uscita per prevenire lo spam.

Porta 587 — Submission
MUA-to-MSA (client to server)

Porta standard per la sottomissione dei messaggi dai client. Richiede autenticazione AUTH obbligatoria. Supporta STARTTLS. Definita in RFC 6409.

Porta 465 — SMTPS
SMTP con TLS implicito

La connessione è cifrata dall'inizio senza negoziazione STARTTLS. Ancora ampiamente usata nonostante tecnicamente deprecata a favore della 587.

Comandi SMTP
Comandi fondamentali e descrizione
COMANDODESCRIZIONE
HELO dominioSaluto iniziale SMTP classico. Identifica il client con il proprio hostname/dominio.
EHLO dominioExtended HELO (ESMTP). Il server risponde elencando le estensioni supportate: AUTH, STARTTLS, SIZE, 8BITMIME, PIPELINING ecc.
STARTTLSAggiorna la connessione da plaintext a TLS cifrata (opportunistic TLS). Dopo il successo il client riemette EHLO sul canale cifrato.
AUTH meccanismoAutentica il client. Meccanismi: PLAIN, LOGIN, CRAM-MD5, SCRAM-SHA-256. Obbligatorio sulla porta 587. Usare solo su TLS.
MAIL FROM:<addr>Dichiara l'indirizzo envelope sender. Usato per i bounce. Può differire dall'header From: visibile nel messaggio.
RCPT TO:<addr>Dichiara un destinatario. Può essere ripetuto per più destinatari. Il server verifica se accetta email per quell'indirizzo.
DATAInizia il trasferimento del corpo del messaggio (header + body). Il messaggio termina con una riga contenente solo un punto: <CR><LF>.<CR><LF>
RSETResetta la transazione (annulla MAIL FROM e RCPT TO) senza chiudere la connessione. Utile per inviare più messaggi nella stessa sessione TCP.
VRFY utenteVerifica se un indirizzo è valido sul server. Spesso disabilitato per privacy (prevenire enumerazione degli utenti).
QUITTermina la sessione SMTP. Il server chiude la connessione TCP. Risponde 221.
Codici di risposta SMTP

Ogni risposta ha un codice numerico a 3 cifre: 2xx Successo, 3xx Azione intermedia (continua), 4xx Errore temporaneo (riprova), 5xx Errore permanente.

CODICESIGNIFICATO
220Service ready — banner iniziale del server
221Service closing — risposta al QUIT
235Authentication successful
250OK — azione completata con successo (MAIL FROM, RCPT TO, fine DATA)
354Start mail input — server pronto a ricevere il corpo del messaggio dopo DATA
421Service not available — server in manutenzione o sovraccarico; errore temporaneo
450Mailbox unavailable — temporaneamente occupata o bloccata; riprova
500Syntax error — comando non riconosciuto
550Mailbox not found / Policy rejection — destinatario inesistente o spam bloccato
553Mailbox name not allowed — indirizzo mittente non valido o relay negato
Sessione SMTP completa — Esempio annotato
Traccia SMTP — porta 587 con STARTTLS e AUTH
S: 220 smtp.example.com ESMTP Postfix C: EHLO client.myisp.com S: 250-smtp.example.com Hello client.myisp.com S: 250-SIZE 52428800 <-- max 50 MB S: 250-STARTTLS S: 250-AUTH PLAIN LOGIN S: 250 8BITMIME C: STARTTLS S: 220 2.0.0 Ready to start TLS [TLS handshake -- da qui tutto è cifrato] C: EHLO client.myisp.com <-- riemesso su canale cifrato S: 250 AUTH PLAIN LOGIN C: AUTH LOGIN S: 334 VXNlcm5hbWU6 <-- base64("Username:") C: bWFyaW9AZXhhbXBsZS5jb20= <-- base64(username) S: 334 UGFzc3dvcmQ6 <-- base64("Password:") C: cGFzc3dvcmQxMjM= <-- base64(password) S: 235 2.7.0 Authentication successful C: MAIL FROM:<mario@example.com> SIZE=1234 S: 250 2.1.0 Ok C: RCPT TO:<luigi@otherdomain.com> S: 250 2.1.5 Ok C: DATA S: 354 End data with <CR><LF>.<CR><LF> C: From: mario@example.com C: To: luigi@otherdomain.com C: Subject: Test SMTP C: Date: Sun, 27 Apr 2026 10:30:00 +0200 C: MIME-Version: 1.0 C: Content-Type: text/plain; charset=UTF-8 C: C: Corpo del messaggio. C: . <-- riga con solo punto: fine DATA S: 250 2.0.0 Ok: queued as 7A3F2B8C C: QUIT S: 221 2.0.0 Bye
Envelope vs Message Header — distinzione fondamentale

Esistono due livelli di indirizzamento distinti e indipendenti:

  • Envelope (busta SMTP): i comandi MAIL FROM: e RCPT TO: della sessione SMTP. Determinano il routing del messaggio e non sono visibili all'utente finale. MAIL FROM è l'indirizzo a cui vengono inviati i bounce.
  • Message Header: le righe From:, To:, Subject:, Date: dentro il DATA. Sono visibili all'utente. Possono differire dall'envelope (liste di distribuzione, alias, forwarding).

Ogni MTA aggiunge un header Received: in cima creando una traccia del percorso hop-by-hop. L'header più recente è il primo della lista. Analizzare i Received: permette di ricostruire il percorso completo di un'email.

RFC 1939 — Post Office Protocol Version 3
POP3 — Post Office Protocol v3

POP3 è il protocollo per il recupero dei messaggi dal server. Filosofia: modello offline — i messaggi vengono scaricati sul client e, per default, eliminati dal server. L'utente legge offline. Usa TCP porta 110 (plain) o TCP porta 995 (POP3S con SSL/TLS). Protocollo semplice con soli tre stati e un insieme limitato di comandi.

I tre stati della sessione POP3
AUTHORIZATION

Stato iniziale. Il client si autentica con USER + PASS (o APOP). Il server blocca la mailbox in modo esclusivo (lock). Se l'autenticazione fallisce, la connessione viene chiusa.

TRANSACTION

Autenticazione riuscita. Il client può elencare, scaricare e marcare messaggi per la cancellazione. I messaggi marcati con DELE non vengono eliminati immediatamente.

UPDATE

Raggiunto con QUIT. Il server elimina definitivamente i messaggi con DELE, rilascia il lock sulla mailbox e chiude la connessione TCP.

Comandi POP3 — AUTHORIZATION
COMANDORISPOSTADESCRIZIONE
USER username+OK / -ERRSpecifica il nome utente. Il server risponde +OK anche se l'utente non esiste per non rivelare informazioni sugli account.
PASS password+OK / -ERRSpecifica la password. Se la coppia USER/PASS è corretta, transizione a TRANSACTION e lock esclusivo sulla mailbox.
APOP name digest+OK / -ERRAutenticazione MD5 challenge-response. Il server fornisce un challenge nel banner iniziale; il client risponde con MD5(challenge+password). Evita la trasmissione della password in chiaro. Opzionale.
QUIT+OKChiude la connessione senza entrare in TRANSACTION. Nessun messaggio viene eliminato.
Comandi POP3 — TRANSACTION
COMANDORISPOSTADESCRIZIONE
STAT+OK n mStatistiche mailbox: n = numero messaggi, m = dimensione totale in byte (esclusi i marcati DELE).
LIST [n]+OK multilineElenca messaggi con numero sequenziale e dimensione in byte. Con argomento n restituisce solo il messaggio n-esimo. Termina con riga "."
RETR n+OK sizeScarica il messaggio n completo (header + body). Termina con "." su riga singola. Non elimina il messaggio dal server.
DELE n+OKMarca il messaggio n per la cancellazione. Effettiva solo al QUIT (stato UPDATE). Il messaggio marcato non compare in STAT/LIST.
NOOP+OKNessuna operazione. Keep-alive per evitare timeout della connessione.
RSET+OKAnnulla tutte le marcature DELE della sessione corrente. I messaggi tornano visibili. Utile se si cambia idea sulla cancellazione.
TOP n k+OK multilineScarica header del messaggio n più le prime k righe del body. Preview rapida senza scaricare l'intero messaggio. Comando opzionale ma universalmente implementato.
UIDL [n]+OK multilineUnique IDentifier Listing: ID univoco e persistente per ogni messaggio. Il client lo usa per ricordare quali messaggi ha già scaricato tra sessioni diverse senza duplicati. Opzionale ma essenziale nella pratica.
QUIT+OKTransizione UPDATE: elimina i messaggi DELE, rilascia il lock e chiude la connessione TCP.
Sessione POP3 — Esempio annotato
Traccia POP3 — porta 110
S: +OK POP3 server ready <challenge@mail.example.com> C: USER mario S: +OK password required C: PASS segreto123 S: +OK mario's maildrop has 3 messages (8640 octets) <-- TRANSACTION C: STAT S: +OK 3 8640 C: LIST S: +OK 3 messages: S: 1 2000 S: 2 3540 S: 3 3100 S: . C: UIDL S: +OK S: 1 whqtswO00WBw418f9t5JxYwZ S: 2 QhdPYR:00WBw1Ph7x7 S: 3 oaB3mEHzWC8lNqMbYRDa S: . C: RETR 1 S: +OK 2000 octets S: From: luigi@example.it ... S: [corpo del messaggio] S: . C: DELE 1 <-- marca per cancellazione S: +OK message 1 deleted C: QUIT <-- UPDATE: elimina msg 1, chiude connessione S: +OK POP3 server signing off (1 message deleted)
RFC 9051 (IMAP4rev2) — aggiorna RFC 3501 (IMAP4rev1)
IMAP — Internet Message Access Protocol

IMAP è progettato per il modello online e multi-dispositivo. I messaggi restano sul server; il client vi accede e li manipola direttamente. Lo stato (letto, risposto, contrassegnato), le cartelle e le ricerche sono tutte operazioni server-side, sincronizzate tra tutti i dispositivi. Usa TCP porta 143 (STARTTLS) o TCP porta 993 (IMAPS).

IMAP è stateful e a tag: ogni comando è preceduto da un tag univoco (es. A001) che permette di correlare le risposte. Il server può inviare risposte non sollecitate (unilaterali) per aggiornare il client su nuovi messaggi arrivati durante la sessione attiva.

Stati della sessione IMAP
Not Authenticated

Stato iniziale. Solo CAPABILITY, NOOP, LOGOUT, AUTHENTICATE e LOGIN disponibili. Il server invia greeting * OK o * PREAUTH.

Authenticated

Autenticazione riuscita. Accesso all'elenco cartelle (LIST, LSUB), creazione/rinomina/cancellazione cartelle. Non ancora accesso ai messaggi senza selezionare una cartella.

Selected

Una cartella è selezionata con SELECT o EXAMINE. Accesso completo ai messaggi: fetch, store flag, search, copy, move, expunge. Con EXAMINE la cartella è in sola lettura.

Logout

Sessione in chiusura dopo LOGOUT. Il server invia * BYE e chiude la connessione TCP. I messaggi con flag \Deleted vengono eliminati se è stato eseguito CLOSE/EXPUNGE prima del logout.

Comandi IMAP — tutti gli stati
COMANDOSTATODESCRIZIONE
CAPABILITYQualsiasiElenca le estensioni supportate: IMAP4rev2, STARTTLS, AUTH=PLAIN, IDLE, UIDPLUS, MOVE, NAMESPACE ecc.
NOOPQualsiasiNessuna operazione. Il server può inviare aggiornamenti spontanei (nuovi messaggi, flag cambiati). Usato per polling passivo.
LOGIN u pNot AuthAutenticazione plaintext. Solo su TLS. Transizione ad Authenticated.
AUTHENTICATENot AuthAutenticazione SASL (PLAIN, CRAM-MD5, SCRAM-SHA-1). Preferibile a LOGIN per sicurezza.
SELECT mailboxAuthSeleziona cartella in lettura/scrittura. Il server risponde con: EXISTS (n messaggi), RECENT, UNSEEN, UIDVALIDITY, UIDNEXT. Transizione a Selected.
EXAMINE mailboxAuthCome SELECT ma sola lettura. Nessuna modifica ai flag o cancellazioni permessa.
LIST ref patternAuthElenca cartelle che corrispondono al pattern (wildcard * e %). Es: LIST "" "*" elenca tutte le cartelle.
CREATE / DELETE / RENAMEAuthCrea, elimina, rinomina cartelle. Il separatore gerarchico permette sottocartelle: CREATE Lavoro/Clienti.
STATUS mailboxAuthStatistiche su una cartella senza selezionarla: messaggi totali, UNSEEN, RECENT, UIDNEXT, dimensione.
FETCH seq partsSelectedRecupera parti di messaggi: ENVELOPE, BODY[HEADER], BODY[TEXT], BODY[] (tutto), FLAGS, UID, RFC822.SIZE. Es: FETCH 1:3 (FLAGS BODY[HEADER])
STORE seq flagsSelectedModifica flag: \Seen (letto), \Answered, \Flagged, \Deleted, \Draft. Operazioni: FLAGS (imposta), +FLAGS (aggiunge), -FLAGS (rimuove).
SEARCH criteriaSelectedCerca messaggi per criteri: FROM, TO, SUBJECT, BODY, BEFORE/SINCE date, UNSEEN, FLAGGED, LARGER/SMALLER n. Operatori: NOT, OR.
COPY / MOVESelectedCopia o sposta messaggi in un'altra cartella sul server, senza trasferire dati al client. MOVE è atomico (RFC 6851).
EXPUNGESelectedElimina definitivamente i messaggi con flag \Deleted. Il server risponde * N EXPUNGE per ogni messaggio rimosso. I numeri di sequenza vengono rinumerati.
IDLESelected/AuthEstensione RFC 2177. Push server: invia notifiche al client senza polling (nuovi messaggi, flag cambiati). Il client esce con DONE.
APPEND mailboxAuthAggiunge un messaggio direttamente a una cartella sul server (es. salva la posta inviata nella cartella Sent).
LOGOUTQualsiasiIl server invia * BYE e chiude la connessione TCP.
Sessione IMAP — Esempio annotato
Traccia IMAP — login, lista cartelle, search, fetch, modifica flag, IDLE
S: * OK [CAPABILITY IMAP4rev2 STARTTLS AUTH=PLAIN IDLE] Dovecot ready C: A001 STARTTLS S: A001 OK Begin TLS [TLS handshake] C: A002 LOGIN mario password123 S: A002 OK Logged in C: A003 LIST "" "*" S: * LIST (\HasNoChildren) "/" INBOX S: * LIST (\HasNoChildren) "/" Sent S: * LIST (\HasNoChildren) "/" Trash S: A003 OK List completed C: A004 SELECT INBOX S: * 47 EXISTS <-- 47 messaggi S: * 3 RECENT S: * OK [UNSEEN 12] First unseen S: * OK [UIDVALIDITY 1714210800] S: A004 OK [READ-WRITE] Select completed C: A005 SEARCH UNSEEN FROM "luigi@example.it" S: * SEARCH 12 15 23 S: A005 OK Search completed C: A006 FETCH 12 (FLAGS BODY[HEADER.FIELDS (FROM TO SUBJECT DATE)]) S: * 12 FETCH (FLAGS (\Recent) BODY[HEADER.FIELDS ...] {128} S: A006 OK Fetch completed C: A007 FETCH 12 BODY[TEXT] S: * 12 FETCH (BODY[TEXT] {854} ...corpo...) S: A007 OK Fetch completed C: A008 STORE 12 +FLAGS (\Seen) <-- segna come letto S: * 12 FETCH (FLAGS (\Seen \Recent)) S: A008 OK Store completed C: A009 MOVE 12 Archivio/2026 S: A009 OK Move completed C: A010 IDLE <-- attendi notifiche push S: + idling S: * 48 EXISTS <-- arriva nuovo messaggio! C: DONE S: A010 OK Idle terminated C: A011 LOGOUT S: * BYE Logging out S: A011 OK Logout completed
RFC 2045–2049 — Multipurpose Internet Mail Extensions
MIME — Estensioni per la posta multimediale

SMTP originariamente supportava solo testo ASCII a 7 bit: impossibile trasmettere allegati, caratteri accentati, HTML o dati binari. MIME estende il formato dei messaggi senza modificare SMTP, aggiungendo nuovi header e meccanismi di codifica. Quasi tutte le email moderne usano MIME.

Header MIME fondamentali
  • MIME-Version: 1.0 — obbligatorio, segnala che il messaggio usa MIME.
  • Content-Type: tipo/sottotipo; parametri — tipo di contenuto. Il parametro boundary per messaggi multipart delimita le parti. Il parametro charset per testo specifica la codifica.
  • Content-Transfer-Encoding — come sono codificati i dati per il trasporto ASCII.
  • Content-Disposition — come il client presenta la parte: inline o attachment; filename="doc.pdf".
  • Content-ID — ID per parti referenziate da altri contenuti (immagini inline nell'HTML).
Tipi Content-Type fondamentali
TIPO/SOTTOTIPOUTILIZZO
text/plainTesto semplice. Parametro charset specifica la codifica (es. charset=UTF-8).
text/htmlCorpo HTML con formattazione, colori, link, immagini incorporate.
multipart/mixedMessaggi con allegati: una parte per il corpo, una per ogni file allegato. Il parametro boundary delimita le parti.
multipart/alternativeVersioni alternative dello stesso contenuto (text/plain + text/html). Il client mostra la versione più ricca che sa gestire.
multipart/relatedHTML con risorse incorporate (immagini inline referenziate con Content-ID cid:...).
application/octet-streamDati binari generici. Allegati di tipo sconosciuto o eseguibili.
message/rfc822Messaggio email incluso come allegato (forwarding di un'email).
Content-Transfer-Encoding — le codifiche
  • 7bit: testo ASCII puro. Nessuna codifica aggiuntiva. Solo caratteri ASCII 0–127.
  • 8bit: permette byte con bit alto (caratteri accentati). Richiede estensione SMTP 8BITMIME.
  • quoted-printable: per testo con pochi caratteri non-ASCII. I caratteri speciali codificati come =XX (valore esadecimale). Il testo resta leggibile senza decodifica. Overhead basso per testo europeo.
  • base64: converte dati binari in testo ASCII usando 64 caratteri stampabili. Ogni 3 byte diventano 4 caratteri ASCII. Overhead del 33%. Usato per allegati binari (immagini, PDF, ZIP). Il destinatario deve decodificare il base64.
  • binary: nessuna codifica. Richiede estensione SMTP BINARYMIME. Non universalmente supportato.
POP3
Filosofia

Scarica e rimuovi — modello offline

Porta

110 (plain) / 995 (SSL)

RFC

RFC 1939

Messaggi sul server

Cancellati dopo il download (default)

Cartelle multiple

No — solo INBOX

Multi-device sync

No — ogni device scarica copia diversa

Flag (letto, risposto)

No — nessun flag lato server

Ricerca lato server

No — il client cerca in locale

Complessità

Semplice — pochi comandi

Caso d'uso ideale

Un solo device, accesso offline, connessione lenta

IMAP
Filosofia

Accesso centralizzato — modello online

Porta

143 (STARTTLS) / 993 (SSL)

RFC

RFC 3501 / RFC 9051

Messaggi sul server

Rimangono fino all'EXPUNGE esplicito

Cartelle multiple

Sì — gerarchia completa di cartelle

Multi-device sync

Sì — stato identico su tutti i device

Flag (letto, risposto)

Sì — flag persistenti lato server

Ricerca lato server

Sì — comando SEARCH sul server

Complessità

Complesso — stateful, tag, molti comandi

Caso d'uso ideale

Multi-device, posta aziendale, web mail

SMTP, POP3 e IMAP svolgono funzioni complementari: SMTP gestisce l'invio (push), POP3/IMAP la ricezione (pull). Un client email usa sempre tutti e tre: SMTP per inviare, POP3 o IMAP per leggere.
Problemi di sicurezza della posta elettronica

Il sistema email è stato progettato senza autenticazione del mittente: chiunque può dichiarare qualsiasi indirizzo nel campo From: e nel comando MAIL FROM:. Questo espone a spoofing, spam, phishing e intercettazione. Le tecnologie moderne di autenticazione cercano di mitigare questi rischi.

SPF — Sender Policy Framework (RFC 7208)

Il proprietario del dominio pubblica nel DNS un record TXT con gli IP autorizzati a inviare email per quel dominio. Il server ricevente verifica se l'IP del server mittente è nell'elenco SPF. Protegge l'envelope sender (MAIL FROM), non il From: degli header visibili all'utente.

DKIM — DomainKeys Identified Mail (RFC 6376)

Il server mittente firma crittograficamente parti del messaggio con una chiave privata, aggiungendo l'header DKIM-Signature. La chiave pubblica è nel DNS del dominio. Il server destinatario verifica la firma: garantisce integrità del messaggio e autenticità del dominio mittente.

DMARC (RFC 7489)

Estende SPF e DKIM con una policy DNS: cosa fare con i messaggi che falliscono la verifica. Valori: none (solo monitoraggio), quarantine (metti in spam), reject (blocca). Prevede anche report aggregati sulle email inviate a nome del dominio.

S/MIME e PGP

Cifratura e firma digitale end-to-end del contenuto. Anche se il server è compromesso, il corpo resta cifrato. S/MIME usa PKI con certificati X.509; PGP usa web of trust. Richiedono gestione delle chiavi da parte degli utenti.

PEC — Posta Elettronica Certificata
Cos'è la PEC e il suo valore legale

La PEC (DPR 68/2005, Codice dell'Amministrazione Digitale) è un sistema italiano che fornisce a un messaggio email lo stesso valore legale di una raccomandata con ricevuta di ritorno. La PEC non cifra il contenuto ma garantisce con certezza e certificazione digitale: identità del mittente, consegna al destinatario, integrità del messaggio, data/ora di invio e ricezione.

Flusso di consegna PEC — step by step
  1. Il mittente invia al proprio Gestore PEC mittente (provider accreditato AGID).
  2. Il Gestore verifica l'autenticità del mittente, avvolge il messaggio in una busta di trasporto firmata digitalmente. Invia al mittente la ricevuta di accettazione (prova dell'invio con timestamp).
  3. La busta di trasporto viene trasmessa al Gestore PEC destinatario via SMTP cifrato.
  4. Il Gestore destinatario verifica la firma, consegna nella mailbox del destinatario e invia una ricevuta di presa in carico.
  5. Il Gestore mittente invia al mittente la ricevuta di consegna: certifica data/ora di consegna nella mailbox del destinatario.

La firma digitale del gestore su ogni ricevuta (certificati X.509 da CA accreditate) garantisce non repudiabilità. Nota: la comunicazione PEC verso indirizzi non-PEC perde il valore legale della ricevuta di consegna.

PEC vs S/MIME — differenza fondamentale
  • S/MIME garantisce integrità e identità del firmatario ma non la consegna.
  • PEC garantisce l'intero ciclo: invio + trasporto + consegna, con valore legale riconosciuto.
  • La PEC non cifra il contenuto: per confidenzialità occorre combinare PEC con S/MIME o PGP.